分享

三菱FX系列PLC编程口通讯协议实例

 昵称67414479 2021-11-17

三菱FX系列PLC编程口通讯协议实例

一、协议介绍
通过编程口通讯协议,计算机可以通过串口或USB接口向PLC读写数据,以及置位或复位软元件,但PLC不能主动向计算机发送信息。具体可操作的软元件有:X/Y/M/S/T/C/D。
由于只需要PLC主机和一根编程线缆即可简单通讯,无需另外购置如232-BD等通讯板,因此编程口通讯实际上非常实用。可惜的是,三菱的官方手册《FX通讯用户手册》却根本没有介绍这个通讯协议,网络上能找到的资料也很少。仅找到的一篇如下,其中也有很多语焉不详的地方,埋了不少坑。本文通过实际操作,简单总结一下该协议的使用方法和注意点。
链接: 三菱PLC编程口协议.
二、通讯设置
必须设置为:波特率9600,偶校验,7位数据位。否则无法通讯。
三、
读写操作时数据的基本格式:
读写基本格式
注意:
通讯协议中的所有字符是用它们的十六进制ASCII码表示。如果有十进制数据,要先转化为十六进制数,再把十六进制数的每个字符用它相应的十六进制ASCII码表示。以下有详解。
参数详解:
STX: ASCII码,含义为Start of Text,十六进制代码为02H;
CMD:读操作时为0,即十六进制代码30H;写操作时为1,即十六进制代码31H;
ADDR:要操作的软元件的起始地址,查表可得,如下。注意是起始地址,例如要查询D0、D11寄存器的数据,写入D0的地址即可。ADDR为4个十六进制ASCII码。如D0查表地址为1000,每个字符均用十六进制ASCII码表示,即为:31 30 30 30。
读写地址表
读写地址表
NUM:字节数,用两个十六进制ASCII码表示,取值范围为01H-40H。这个数据是比较tricky的地方,一定要注意。理论上它是指“要操作的所有软元件对应的字节数”,比如:
要读D0中的数据,因为D软元件是用2个字节表示的,则NUM为02,十六进制ASCII码为 30 32;
要读D0、D1两个D软元件中的数据,则NUM为04,十六进制ASCII码为 30 34;
如果是读Y0-Y7这8个位软元件的状态,因为8个位为一个字节,所以NUM为01,十六进制ASCII码为 30 31;
如果是写数据,比如写十六制数122F到D0中,则NUM一样为02,写数据到D0、D1中,则NUM为04。注意:
这里NUM和要写的数据大小或是几位数无关。 比如写十进制1(十六进制0001)或写十进制65535(十六进制FFFF)到D0,NUM都是02;
写的数据是十六进制ASCII码,不能直接写十进制数;
规定写数据时NUM必须为偶数(读的时候NUM为奇数或偶数均可),所以就有例外情况:如果是写数据到Y0-Y7中,NUM数不是01,而是02。
数据DATA:读操作时无此项。写操作时该值必须以4个字符为一组,且低位2个在前,高位2个在后。比如:要写十进制10到D0中,10的十六制表示为A,要4个字符表示所以前面补0为000A;又要求低位在前高位在后,则表示为0A00,把每个字符都用十六进制ASCII码表示,即为:30 41 30 30。
ETX:ASCII码,含义为End of Text,十六进制代码为03H;
累加和SUM: SUM = CMD + ADDR + NUM + DATA1+DATA2+…+ETX,注意不包括开始字符STX. 结果超过两位数取后两位,低于两位前面补0. 注意十六进制数的累加计算方法:逢16进1.比如:35+38+45,先个位相加:5+ 8+5=18>16,进1位剩2,2即是结果的个位数;十位相加:3+3+4+1(进位)=11,十六进制表示为B,所以相加结果就是B2。再把这两个字符用十六进制ASCII码表示即为:42 32 .

四、举例
1、计算机要读PLC的D0中的值:STX为02,CMD为30,ADDR为1000即31 30 30 30,NUM为02即 30 32,ETX为03,SUM为30+31+30+30+30+30+32+03=156,取后两位56即为35 36,所以计算机向PLC发送的数据为:02 30 31 30 30 30 30 32 03 35 36
2、计算机要写十进制4660 到PLC的D0,十进制22136到D1 :STX为02,CMD为31,ADDR为1000即31 30 30 30,NUM为04即 30 34,十进制4660转为十六进制为1234,换位后即:33 34 31 32,22136转为十六进制为5678,换位后即:37 38 35 36,ETX为03,SUM=31+31+30+30+30+30+34+33+34+31+32+37+38+35+36+03=2FD,取后两位FD即为 46 44,所以计算机向PLC发送的数据为:02 31 31 30 30 30 30 34 33 34 31 32 37 38 35 36 03 46 44
五、实测结果
编程口指令实测
另外还有置位和复位指令,格式相对简单些,下次再介绍。实际同样也可以通过上述读写指令实现。以上指令在FX2N下实测通过。第一次写文,如有错误,欢迎指正;如有疑问,欢迎留言。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多