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端接收报文格式):STXCMDASCII,ASCII,ASCII,ASCIIASCII,ASCIIETXASCII,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)

发送报文:02H30H30H、30H、41H、30H30H、32H03H36H、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

接收报文:02H33H、35H、38H、34H03H44H、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)

发送报文:02H30H31H、30H、46H、36H30H、34H03H37H、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

接收报文:02H33H、34H、31H、32H、43H、44H、41H、42H03H44H、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端接收报文格式):STXCMDASCII,ASCII,ASCII,ASCIIASCII,ASCIIASCII,ASCII,ASCII,ASCII……ETXASCII,ASCII

 3、将2个字节数据写入Y0起始的地址中

假设要写入的值为:Y7-Y0 ==>0011 0101,Y17-Y10为:1000 0100

发送报文:02H31H30H、30H、41H、30H30H、32H33H、35H、38H、34H03H33H、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

发送报文:02H31H31H、30H、46H、36H30H、34H33H、34H、31H、32H、43H、44H、41H、42H03H34H、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串高低电平

原文地址:https://www.cnblogs.com/hryan/p/8042053.html