三菱PLC有串口(RS-232C、RS-485)通信协议。功能很强,但较复杂。其内容可参阅它的说明书(如FX通信用户手册)。三菱还有编程口通信协议,也可用于RS-232C口。这个协议三菱没有公开,但有人把它破译,并在互联网上公布。以下按所公布的材料,对其作简要介绍:
(1)命令帧格式
图D-1所示为命令帧格式。
在此帧格式中:
图D-1 命令帧格式
ETX:结束字符,其ASCII码16进制值为03H。
CMD:命令码,命令码有读或写等,占1个字节。读为ASCII码30H,写为ASCII码31H。读、写的对象可以是FX的数据区。
此外,还有强制(实是置位、ASCII码37H)、复位(ASCII码38H)。其对象为位数据区。
ADDR:地址,十六进制表示,占4个字符,不足4个字符高位补0。
NUM:读或写的字节数,十六进制表示,占两个字符,不足两个字符高位补0。最多可以读、写64个字节的数据。读可以为奇数字节,而写必须为偶数字节。
DATA:如写数据,在此要填入要写的数据,每个字节两个字符。如字数据,则低字节在前,高字节在后。用十六进制表示,所填的数据量应与NUM指定的数相符。
SUM:累加和,从命令码开始到结束字符(包含结束字符)的各个字符的ASCII码,进行十六进制累加。超过两位数时,取它的低两位,不足两位时高位补0。也是用十六进制表示。
其计算公式为
SUM=CMD+…+ETX;
如:30h+31h+30h+46h+36h+30h+34h+03h=74h;
(2)响应帧格式
响应帧格式与所发的命令相关。
对写命令:如写成功,则应答ACK,1个字符,其ASCII码的值是06H;如写失败,则应答NAK,1个字符,其ASCII码的值为15H。
对读命令:如读失败,也是应答NAK。如成功,其响应帧格式如图D-2所示。
图D-2 FX协议2读命令响应格式
提示:读数据或写数据总是低字节在前,高字节在后。如按字处理此数据,必须作相应处理。
(3)地址计算
这协议2的地址计算比较复杂,各个数据区算法都不同,分别说明如下:
对于D区:
如地址(即下式NUM)小于8000,则:
ADDR=1000H+ADDR0∗2(ADDR0从200~1023)
这里:ADDR上述命令中用地址,下同:ADDR0实际地址值,下同。
如ADDR0大或等于8000,则:
ADDR0=0E00H+(ADDR0-8000)∗2
对于C区(字或双字):
如地址(即下式ADDR)小于200,则:
ADDR=0A00H+ADDR0∗2
如ADDR0大或等于200(为可双字逆计数器),则:
ADDR0=0C00H+(ADDR0-200)∗4(ADDR0从200~255)
对于T区(字):
ADDR=0800H+ADDR∗2(ADDR0从0~255)
对于T区(位):
ADDR=00C0H+ADDR∗2(ADDR0从0~255)
对于C区(字或双字):
如地址(即下式ADDR)小于200,则:
ADDR=0A00H+ADDR0∗2
如ADDR0大或等于200(为可双字逆计数器),则:
ADDR0=0C00H+(ADDR0-200)∗4(ADDR0从200~255)
对于C区(位):
如地址(即下式ADDR)小于200,则:(www.xing528.com)
ADDR=01C0H+ADDR0∗2
对于M区:
如地址(即下式ADDR)小于8000,则:
ADDR=0100H+ADDR0/8(ADDR0从0~3071)
如ADDR0大或等于8000,则
ADDR=01E0H+(ADDR0-8000)/8
对于Y区:
要先把地址转换十进制数,再按下式计算。
ADDR=00A0H+ADDR0/8(ADDR0从0~最大输出点数)
对于X区:
要先把地址转换十进制数,再按下式计算。
ADDR=0080H+ADDR/08(ADDR0从0~最大输入点数)
对于S区:
ADDR=ADDR0/8(ADDR0从0~255)(ADDR0从0~899)
帧格式实例
【例1】 向PLC的D0、D1写4个字节数。要求写给D0数为1234,D1的数为5678。
地址计算:
ADDR=1000H+0∗2=1000H
STX:02H
CMD:1(31H)
NUM:04H(30H、34H)
DATA:3(33H)4(34H)1(31H)2(32H)7(37H)8(38H)5(35H)6(36H)
EXT:03H
SUM:31H+30H+34H+33H+34H+31H+32H+37H+38H+35H+36H+03H=FDH
其ASCII码值为46H、44H。对应的帧格式如图D-3所示。
图D-3 对应帧格式
PLC接收到此命令,如正确执行,则返回ACK码(06H),否则返回NAK码(15H)。
【例2】 读取PLC的D10、D11数据。D10实际值为ABCD,D11实际值为EF89。
地址计算:
ADDR=1000H+A∗2=1014H
其ASCII码值为:31H、30H、30H、30H
STX:02H
CMD:0(30H)
NUM:04H(30H、34H)
EXT:03H
SUM:30H+31H+30H+30H+30H30H+34H+03H=5DH
其ASCII码值为35H、44H。对应的帧格式如图D-4所示。
图D-4 对应帧格式
PLC接收到此命令,如未正确执行,则返回NAK码(15H)。否则返回应答帧如图D-5所示。
图D-5 返回应答帧
表D-1所示为用于强制(其实是置位、复位)时的位地址。
表D-1 强制(其实是置位、复位)时的位地址
只是地址具体表达时是后两位先送,其次为先两位。按照这个表与规则,如实际地址Y000,其计算地址为0500,而表达此地址为0005。再如实际地址Y011,其计算地址为0509,而表达此地址为0905。这种地址表达与字读写是不同的。具体可参阅第5章第3节实例程序3。
提示:以上介绍的不是三菱发布的正式通信协议,还有其它内容。但也带有一些猜测的成分。建议用第5章第3节的VB例子程序或用其它通信监听程序,再继续进行些测试。这样,将弄清更多的通信协议细节。但有了上述协议,对建立PLC监控系统基本也够用了。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。