最近在做一个小东西,涉及到了三菱fx3u通信协议,经过几天的资料查找,做个整理,方便以后查询。本文介绍的是电脑通过USB-SC09-FX与FX3U进行通信,用的软件是串口助手;
设置如下:
通信命令有两种,一种是DEVICE READ/WRITE,另一种是FORCE ON/OFF;
- DEVICE READ/WRITE 就是读写PLC里面的寄存器。比如D,M,Y,X等以字节为单位读写
- FORCE ON/OFF 这个是强制置位,强制让Y,M,X等变为开或者关
- 命令格式:
- DEVICE READ :STX CMD ADDR BYTE ETX SUM
- DEVICE WRITE:STX CMD ADDR BYTE DATA EXT SUM
- FOREC ON/OFF :STX CMD ADDR EXT SUM
- STX 02H,ETX 03H
- CMD:
- DEVICE READ 30H
- DEVICE WRITE 31H
- FORCE ON 37H
- FORCE OFF 38H
- ADDR:这里我就介绍几个D,M,Y的,其余的需要你们自己去查找了。
- DEVICE 和 FORCE的地址是不一样的
- DEVICE:
- Dn ADDR = n*2 + 1000H;也就是说D的起始地址是1000H,但D是2个字节的
- Mn ADDR = n/8 + 100H; 这是计算在那一个字节里面,因为一个地址里面有8位,而M只占1位,然后用n%8计算在那一位里面
- Yn ADDR = n/8 + A0H;与上面M一样,不同点就是FX3U的Y是以8进制来排序的,这里的n是8进制
- ADDR 是把每一位转化为ASCLL码,高位在前,低位在后的发送,比如我计算D100的地址,100 * 2 = 200 = C8H,ADDR = 10C8H,那么在命令里面发送数据为 31H 30H 43H 38H 这就代表地址
- FORCE:
- Mn ADDR = n + 800H;
- Yn ADDR = n + 500H;n是8进制
- ADDR 这里除了地址与上面不同,连排列顺序也变了,他先发送低两位,在发送高两位,比如Y10的地址,ADDR = 8H + 500H = 508H,发送数据是 30H 38H 30H 35H;
- 在写代码的时候,Y这种8进制数编码可以先转换为10进制,然后加上500H的10进制也就是1280,在转换成16进制,就是地址了。M,D这种都是10进制的,可以直接加首地址,在转换成16进制。但是发生时,十六进制的A,B,C,D,E,F是需要转换成ASCLL码发送的。
- DEVICE:
- BYTE:用来控制读写几个字节的数据,比如写4个字节,就发送 30 34,最多只能
- SUM:把除STX以外的数据都相加,取低两位,变成ASCLL码发送出去。
- 举例:把Y10强制制为ON,02H 37H 30H 38H 30H 35H 03H 30H 37H,SUM= 37H+30H+38H+30H+35H+03H = 107H,取07。
- DEVICE 和 FORCE的地址是不一样的
命令的响应:发送05H是测试通信是否连接,返回06H代表成功,15H代表失败。
发送读D寄存器的时候在02 和 03之间就是数据,以ASCLL码值返回每一位,并且先发送的是低两位,然后在是高两位。数据是16进制的。