FX3U編程口采用422通訊方式(232,422全雙工,可同時收發,485半雙工,不能同時收發)。
一、單個ASCII碼分解
三菱對編程口做了一些限制,只能使用:
波特率:9600bps,通信字碼ASCII碼
一個ASCII碼通信中占用10個bit,數據位占用7個bit,數據表示范圍0-127(00H-7FH),低位4個bit,高位3個bit
1位起始位、7位數據位、1位極性位(偶校驗)、1位停止位
0,b0,b1,b2,b3,b4,b5,b6,p,1
16進制低 16進制高
例如報文第一個字為STX(02H),分解成01字符串就是:
0,0,0,1,0,0,0,0,1,1
報文第二個字為讀命令0(30H),分解成01字符串就是:
0,0,0,0,0,0,1,1,0,1
二、多個ASCII碼組成報文
FX系列支持4種指令
讀出 0
寫入 1
強制ON 7
強制OFF 8
讀取時:
PC發送報文格式(FXPLC端接收報文格式):STX,CMD,元件地址(4個ASCII碼),字節數(2個ASCII碼),ETX,和校驗(2個ASCII碼)
PC發送報文格式(FXPLC端接收報文格式):STX,CMD,ASCII,ASCII,ASCII,ASCII,ASCII,ASCII,ETX,ASCII,ASCII
PC接收報文格式(FXPLC端發送報文格式):STX,第一個字節高位ASCII碼,第一個字節低位ASCII碼,第二個字節高位ASCII碼,第二個字節低位ASCII碼……,ETX,和校驗(2個ASCII碼)
PC接收報文格式(FXPLC端發送報文格式):STX,ASCII,ASCII,ASCII,ASCII……,ETX,ASCII,ASCII
1、從Y0開始讀出兩個字節數據(Y0-Y7,Y10-Y17),Y0地址轉換:0+160=160(16進制00A0)
發送報文:02H、30H、30H、30H、41H、30H、30H、32H、03H、36H、36H
(30H +30H + 30H +41H + 30H +30H + 32H +03H=166H取右邊2位66,分解成2個ASCII碼就是36H,36H)
假設Y7-Y0為:00110101,第一個字節高位3,ASCII碼33H,第一個字節低位5,ASCII碼35H
Y17-Y10為:10000100,第二個字節高位8,ASCII碼38H,第二個字節低位4,ASCII碼34H
接收報文:02H、33H、35H、38H、34H、03H、44H、37H
(33H + 35H +38H + 34H +03H=D7H取右邊2位D7,分解成2個ASCII碼就是44H、37H)
2、從D123讀出4個字節數據(D123、D124),D123地址轉換:123*2+4096=4342(16進制10F6)
發送報文:02H、30H、31H、30H、46H、36H、30H、34H、03H、37H、34H
(30H +31H + 30H +46H + 36H +30H + 34H +03H=174H取右邊2位74,分解成2個ASCII碼就是37H,34H)
假設D123,b15-b0為:0001 0010 0011 0100 即存儲16進制1234H,第一個字節高位是b7,b6,b5,b4,第一個字節低位是b3,b2,b1,b0,第二個字節高位是b15,b14,b13,b12,第二個字節低位是b11,b10,b9,b8
D124,b15-b0為:1010 1011 1100 1101 即存儲16進制ABCDH,第一個字節高位是b7,b6,b5,b4,第一個字節低位是b3,b2,b1,b0,第二個字節高位是b15,b14,b13,b12,第二個字節低位是b11,b10,b9,b8
接收報文:02H、33H、34H、31H、32H、43H、44H、41H、42H、03H、44H、37H
(33H +34H + 31H +32H + 43H +44H + 41H +42H+ 03H=1D7H取右邊2位D7,分解成2個ASCII碼就是44H,37H)
寫入時:
PC發送報文格式(FXPLC端接收報文格式):STX,CMD,元件地址(4個ASCII碼),字節數(2個ASCII碼),第一個字節高位ASCII碼,第一個字節低位ASCII碼,第二個字節高位ASCII碼,第二個字節低位ASCII碼……ETX,和校驗(2個ASCII碼)
PC發送報文格式(FXPLC端接收報文格式):STX,CMD,ASCII,ASCII,ASCII,ASCII,ASCII,ASCII,ASCII,ASCII,ASCII,ASCII……,ETX,ASCII,ASCII
3、將2個字節數據寫入Y0起始的地址中
假設要寫入的值為:Y7-Y0 ==>0011 0101,Y17-Y10為:1000 0100
發送報文:02H、31H、30H、30H、41H、30H、30H、32H、33H、35H、38H、34H、03H、33H、42H
(31H+ 30H+ 30H + 41H + 30H +30H + 32H + 33H+ 35H+ 38H + 34H +03H=23BH,取右邊2位3B,分解成2個ASCII碼就是33H、42H)
4、將4個字節數據寫入D123起始的4個字節中(寫入D123,D124)
假設要寫入的值為:
D123,b15-b0為:0001 0010 0011 0100 即存儲16進制1234H,第一個字節高位是b7,b6,b5,b4,第一個字節低位是b3,b2,b1,b0,第二個字節高位是b15,b14,b13,b12,第二個字節低位是b11,b10,b9,b8
D124,b15-b0為:1010 1011 1100 1101 即存儲16進制ABCDH,第一個字節高位是b7,b6,b5,b4,第一個字節低位是b3,b2,b1,b0,第二個字節高位是b15,b14,b13,b12,第二個字節低位是b11,b10,b9,b8
發送報文:02H、31H、31H、30H、46H、36H、30H、34H、33H、34H、31H、32H、43H、44H、41H、42H、03H、34H、39H
(31H+31H+30H+46H+36H+30H+34H+33H+34H+31H+32H+43H+44H+41H+42H+03H=349H,取右邊2位49,分解成2個ASCII碼就是34H,39H)
總結:串口通訊涉及ASCII碼,需要用到轉換。PLC數據2進制->16進制,字符->ASCII碼,ASCII碼->01串高低電平