一、项目背景
公司接的一个第三方公司工业互联网数据化改造项目采用三菱mc-1e协议进行设备对接。驱动需要实现读取指定的一批地址值,并根据读取的值进行一定的数据转换和统计,最后上传scada平台。
二、协议解析
1、MC协议简介
MC协议的目的是开放PLC内部寄存器给外部设备,实现外部设备和PLC的数据交互。简单说就是允许外部设备通过MC协议来读/写PLC里面的寄存器。
通讯方式有485(串口)和TCP、UDP(网口),本文只介绍TCP/IP下的配置和通讯方法。采用一发一收模式,外部设备主动发起通讯,发送特定网络帧给PLC;PLC在接收后返回一帧,如果接收的帧格式错误,则返回帧中会提示错误类型,如果接收帧格式正确,则返回写入成功帧或返回对应数据帧。
通讯内容分为二进制和ASCII文本,两者传输内容一致,只是形式不同,因为二进制相对于ASCII码形式一帧的数据长度更短,且数据不需要转换,所以通讯效率更高,推荐使用二进制方式。
在串口通信中,共有以下几种帧:
4C帧,QnA系列串行通信模块专用协议(Qna扩展帧)
3C帧,QnA系列串行通信模块专用协议(Qna帧)
2C帧,QnA系列串行通信模块专用协议(Qna简易帧)
1C帧,A系列计算机链接模块专用协议
在以太网通信中,共有以下几种帧,每种帧支持二进制和ASCII格式。A-1E为较早的通信版本,对地址的操作范围有限(数据寄存器区的D0~D6143、D9000~D9255),Qna-3E可访问D0~D12287数据
4E帧,是3E帧上附加了“序列号”。
3E帧,QnA系列以太网接口模块的报文格式,兼容SLMP的报文格式
1E帧,A系列以太网接口模块的报文格式
2、MC-1E(MC协议帧,A-1E帧)
1)通信内容为二进制码时的格式(内容低位在前,高位在后)
A)读取
请求示例指令 :00 FF 0A 00 64 00 00 00 20 4D 08 00
<1>副标题: 00 -》 功能码
<2>PC号: FF -》 PC号固定为FF
<3>监视定时器: 0A 00 -》 等待时间
这是用于设置在以太网适配器向可编程控制器发出读出/写入要求后到返回结果之间等待时间的定时器。
i) 设置值可以如下指定。
0000H(0): 无限等待(一直等到可编程控制器返回响应。 )
0001~FFFFH(1~65535): 等待时间(单位250ms)
ii) 要进行正常的数据通信, 建议根据通信对象, 在1~40(0.25~10秒)的设置范围内使用。
<4>地址: 64 00 00 00
<5>软元件(类型): 20 4D
<6>软元件点数: 08 à 此示例为8个辅助继电器值
<7>结束代码: 00
00: 正常结束,00以外是异常结束。(50~60H) 异常结束时, 请根据下文对应的故障排除,确认内容并采取措施。当结束代码为5BH/线须“5B”时, 后面会紧跟着异常代码(10~18H)的数据和00H/“00”。
回复示例指令:
成功:80 00 10 10 01 10
- 副标题:80
- 结束代码:00
- 应答数据:10 10 01 10 需要根据读取数据类型解析
B)写入
请求示例指令 :02 FF 0A 00 32 00 00 00 20 4D 0C 00 01 11 01 00 00 01
<1>指令:02,即为批量写入
<2>蓝色部分:FF 0A 00 32 00 00 00 20 4D 0C (同读取一样)
<3>写入数据:01 11 01 00 00 01 (根据发送数据类型解析)
回复示例指令:
成功:8200
<1>副标题:82
<2>结束代码:00
2)通信内容为ASCII时的格式(内容高位在前,低位在后)
此处只以读取为例,进行说明。
A)读取