【通訊】

RS232(PC) 對 RS422(PLC)

宣告RS232Port:
System.IO.Ports.SerialPort sp = new System.IO.Ports.SerialPort();

通訊設定:
1. Port Name (EX. COM1, COM2 ...)
2. 非同步雙向 Baud Rate = 9600
3. 資料7位元 Data Bits = 7
4. 停止位元1個 Stop Bits = System.IO.Ports.StopBits.One
5. 檢查位元為偶同位 Parity = System.IO.Ports.Parity.Even

傳送格式:
STX + Cmd + Address + Bytes + Data + ETX + CheckSum


查資料Y20的元件位址是0510
單一元件通訊命令(起始碼+控制碼+元件位址+結束碼+偵誤碼)
起始碼是ASCII碼02
控制碼強制ON是7,強制OFF是8
元件位址要上下位互換,所以在這裡要輸入1005
結束碼是ASCII碼03PL
偵誤碼是控制碼+元件位址的每個字元轉成ASCII碼數值全部相加,在轉成16進制數值取最後2位
其中ASCII碼02和03是不可見字元,就算輸入螢幕上也是看不到字的
Y20強制ON的字串→(ASCII碼02)71005(ASCII碼03)00→算出的偵誤碼是00
Y20強制OFF的字串→(ASCII碼02)81005(ASCII碼03)01→算出的偵誤碼是01

查資料D112的元件群組位址是10E0
D暫存器的字元寫入命令(起始碼+控制碼+元件群組位址+寫入組數+寫入資料+結束碼+偵誤碼)
起始碼是ASCII碼02
控制碼寫入是1
元件群組位址不用換位所以是10E0
三菱PLC每筆資料是8位元,D暫存器是16位元,所以寫入組數是02組(要輸入16進制數值)
寫入資料是1,換算成16進制字串是0001,寫入資料每8位元1組分成上下位元,上下位元要互換位置,所以在這裡要輸入0100
結束碼是ASCII碼03
偵誤碼是控制碼+元件群組位址+寫入組數+寫入資料的每個字元轉成ASCII碼數值全部相加,在轉成16進制數值取最後2位
D112寫入1的字串→(ASCII碼02)110E0020100(ASCII碼03)2D→算出的偵誤碼是2D


【指令】

[K4M100 的意思]

K1代表連續的4個位址,K4代表4×4個連續位址,也就是16個。

同理,K2是8個連續位址;K3是12個連續位址。

M100是一個位址,K4代表M100到M115這16個位址,不是M100代表16個位址。


[TO 指令]

TO 模組索引 記憶體位址(BFM) 值 傳幾個

※記憶體位址(BFM)編號從0開始,0~31,共32個,每個位址有16bit可用。

例. TO K0 K3 H0000 K1
將H0000傳送到PLC後面順位第1的模組的BFM#3。

如果改成 TO K0 K3 H0000 K2
將H0000傳送到PLC後面順位第1的模組的BFM#3、#4。

另有:
DTO 一次傳輸32bit


[FROM 指令]

FROM 模組索引 記憶體位址(BFM) 存放位址 傳幾個

另有:
DFROM 一次傳輸32bit


[FMOV 指令]

16位元連續執行多點傳送指令

例. FMOV K0 D300 K2
將K0(值0)傳送到D300~D301

另有:
FMOVP 16位元脈衝執行多點傳送指令
DFMOV 32位元連續執行多點傳送指令
DFMOVP 32位元脈衝執行多點傳送指令


[SET/RST 指令]

SET:置位指令,使操作保持ON的指令。
RST:复位指令,使操作保持OFF的指令。

SET指令可用于Y,M和S,RST指令可用于复位Y,M,S,T,C,或将字元件D,V和Z清零。


[ZRST 指令]

重置

例. ZRST M0 M499
將M0~M499的值全部復位


[PLS/PLF 指令]

PLS(Pulse):上升沿微分輸出指令。
PLF:下降沿微分輸出指令。
PLS和PLF指令只能用於輸出繼電器和輔助繼電器(不包括特殊輔助繼電器)。

PLC_PLS_PLF

圖中的M0僅在X0的常開觸點由斷開變為接通(即X0的上升沿)時的一個掃描週期內為ON,M1僅在X0的常開觸點由接通變為斷開(即X0的下降沿)時的_個掃描週期內為ON。
當PLC從RUN到STOP,然後又由STOP進入RUN狀態時,其輸入信號仍然為ON,PLS M0指令將輸出一個脈衝。然而,如果用電池後備(鎖存)的輔助繼電器代替M0,其PLS指令在這種情況下不會輸出脈衝。


[比較指令]
如CMP K100 C30 M0
简单说就是前两个数(100和计数器C30里的数)比较,将>、<、=三个状态输出到三个位!而M0为首地址、依次是M0、M1、M2
K100>C30 M0=1 M1=0 M2=0
K100=C30 M0=0 M1=1 M2=0
K100
[<= Z0 D20] 的意思是: 如果Z0 <= D20成立,则执行后面的程序


[ADD]

ADD D21 D201Z0 D21 意思是 D21 = D21 + D201Z0; Z0是变址寄存器,所以到底加那个D地址由Z0的偏移后得出


[INC/DEC]

逻辑运算指令 INC 加1指令 DEC 减1

比如说定时器设定值就要用INC 加1 指令或 DEC 减1指令来改变寄存器的常数。

INC,INCP,DEC,DECP:16位指令
DINC,DINCP,DDEC,DDECP:32位指令
P是脉冲执行指令

增加指令与减少指令编程方式如下:
INC D10
DEC D10
*D10的值加1,可以为寄存器,T,C或是位元件的组合如K4Y0

假设程序扫描周期为2ms,M0闭合时间为10ms,执行前D10的值为0。下面两段程序的执行结果为:
LD M0
INC D10
D10的值为5

LD M0
INCP D10
D10的值为1

INCP Z1
累加的就是Z1
如Z1第一次为1、执行一次就是2
如果用D0Z1,则Z1=0时,对应D0,执行一次对应D1,再后面依次D2、D3
Z1里面的数据+1,如果这个数据你用在地址上,那就是地址加一
Z是变址寄存器,所以最终改变的是地址


[SUBP 减法指令]

P表示该指令为脉冲指令,只在上升沿时执行1次。下次执行须重新触发
創作者介紹
創作者 伊 的頭像

伊のspace~芳香精油*美容保養*程式設計

伊 發表在 痞客邦 留言(2) 人氣()


留言列表 (2)

發表留言
  • 悄悄話
  • a0931900802
  • Hi
    你好我有個問題,D0~D1000讀取都沒問題(一次讀取200),
    但是D1200(位址: 1960)讀取就會有錯,
    我在PLC對D1200輸入55,
    他回傳的值不會是55,
    可是前面的都沒問題。