首页 理论教育 三菱PLC编程口通信协议详解

三菱PLC编程口通信协议详解

时间:2023-06-16 理论教育 版权反馈
【摘要】:三菱还有编程口通信协议,也可用于RS-232C口。这个协议三菱没有公开,但有人把它破译,并在互联网上公布。用十六进制表示,所填的数据量应与NUM指定的数相符。D10实际值为ABCD,D11实际值为EF89。图D-4 对应帧格式PLC接收到此命令,如未正确执行,则返回NAK码。这样,将弄清更多的通信协议细节。但有了上述协议,对建立PLC监控系统基本也够用了。

三菱PLC编程口通信协议详解

三菱PLC有串口(RS-232C、RS-485)通信协议。功能很强,但较复杂。其内容可参阅它的说明书(如FX通信用户手册)。三菱还有编程口通信协议,也可用于RS-232C口。这个协议三菱没有公开,但有人把它破译,并在互联网上公布。以下按所公布的材料,对其作简要介绍:

(1)命令帧格式

图D-1所示为命令帧格式。

在此帧格式中:

STX:开始字符,其ASCII码16进制值为02H。

图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监控系统基本也够用了。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈