以下将开始介绍三菱PLC的MC协议,本文只叙述3E帧格式中的ASCLL和BIN。当实时性要求较高的情况下采用BIN的模式。当进行调试或是想获取更明确的信息对通信速度无要求情况下,建议使用ASCLL的模式。
参考文章:MC协议详解:PLC通信的二进制与ASCII操作指南-CSDN博客
一、MC协议3E帧的组成格式
请求数据帧:头部+副头部+网络编号+可编程控制器编号+请求目标模块I/O编号+请求目标模块站号+请求数据长度+CPU监视定时器+指令+子指令+请求数据部分组成。
响应帧:头部+副头部+网络编号+可编程控制器编号+请求目标模块I/O编号+请求目标模块站号+响应数据长度+结束代码+响应数据部分
很长是吧,哈哈。没关系,大概有个印象就行。下面会具体分析
包头(头部+副头部):50 00
网络编码:00(一般代表本地网络)
可编程控制器编号:FF(代表广播本地网络的所有网段)
请求目标模块I/O编号:03FF(代表以太网模块)
请求目标模块站号:0代表广播,其他则保证主从点对点的通信,实现一对一
请求数据长度:后续数据的总长度是多少
CPU监视定时器:避免因其他任务阻塞导致复位延迟
指令:功能码
子指令:于进一步细化指令的 操作参数,例如数据单位(字/位)、操作模式等
结束代码:一般用 00 00表示结束
二、功能码
功能码 | 操作类型 | 适用帧格式 | 用途 |
---|---|---|---|
0401 | 读操作 | 3E帧、4E帧 | 批量读取软元件(位或字)数据,支持位元件(X/Y/M)和字元件(D/R/T/C)。 |
1401 | 写操作 | 3E帧、4E帧 | 批量写入软元件(位或字)数据,支持位元件和字元件的批量修改。 |
0403 | 随机读操作 | 3E帧、4E帧 | 随机读取多个非连续地址的软元件数据(字单位)。 |
1402 | 随机写操作(测试) | 3E帧、4E帧 | 随机写入多个非连续地址的软元件数据(字单位)。 |
0801 | 监视登录 | 3E帧、4E帧 | 登录需要监视的软元件地址,用于后续实时监控。 |
0802 | 监视执行 | 3E帧、4E帧 | 执行已登录的软元件监视,返回实时数据。 |
1613 | 缓冲存储器写入 | 3E帧、4E帧 | 向智能功能模块的缓冲存储器写入数据。 |
0613 | 缓冲存储器读取 | 3E帧、4E帧 | 从智能功能模块的缓冲存储器读取数据。 |
1001 | 远程RUN | 3E帧、4E帧 | 远程启动PLC运行。 |
1002 | 远程STOP | 3E帧、4E帧 | 远程停止PLC运行。 |
1003 | 远程PAUSE | 3E帧、4E帧 | 远程暂停PLC运行。 |
1006 | 远程RESET | 3E帧、4E帧 | 远程复位PLC状态。 |
常见子指令类型:
子指令码(十六进制) | 含义 | 说明 |
---|---|---|
0000 | 以字(Word)为单位 | 操作寄存器时按16位(2字节)处理。 |
0001 | 以位(Bit)为单位 | 操作位元件时按1位处理(如M、X、Y)。 |
0002 | 扩展模式 | 支持特殊操作(如字符串读写)。 |
常用寄存器区域代码
区域代码(十六进制) | 软元件类型 | 功能描述 | 示例地址编码规则 |
---|---|---|---|
A8 | D寄存器 | 数据寄存器,用于存储可读写数值(如参数、计数器值) | D7000 → 0x1B58 → 小端编码为 58 1B 00 |
9C | X寄存器(输入继电器) | PLC物理输入点,用于读取外部传感器/开关状态(如X102) | X102 → 十进制102 → 小端编码为 02 01 00 |
9D | Y寄存器(输出继电器) | PLC物理输出点,用于控制执行机构(如Y20) | Y20 → 十进制20 → 小端编码为 14 00 00 |
90 | M寄存器(内部继电器) | 内部中间变量,用于逻辑控制(如M1234) | M1234 → 0x04D2 → 小端编码为 D2 04 00 |
92 | L寄存器(锁存继电器) | 断电保持型内部变量,用于保存需持久化的状态(如L100) | L100 → 十进制100 → 小端编码为 64 00 00 |
B0 | C寄存器(计数器) | 存储计数器当前值(如C200) | C200 → 十进制200 → 小端编码为 C8 00 00 |
B1 | T寄存器(定时器) | 存储定时器当前值(如T50) | T50 → 十进制50 → 小端编码为 32 00 00 |
三、举例
举例说明:指令为向软元件D7000写入值H000C
发送帧内容为:50 00 00 FF FF 03 00 0E 00 10 00 01 14 00 00 58 1B 00 A8 01 00 0C 00
响应帧内容为:D0 00 00 FF FF 03 00 02 00 00 00
发送帧内容解析:
响应帧内容解析: