FX3U编程口通讯
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串高低电平