python实现MC协议(SLMP 3E帧)的TCP服务端(篇一)

python实现MC协议(SLMP 3E帧)的TCP服务端是一件稍微麻烦点的事情。它不像modbusTCP那样,可以使用现成的pymodbus模块去实现。但是,我们可以根据协议帧进行组包,自己去实现帧的格式,而这一切可以基于socket模块。本文为第一篇。

一、了解MC协议

参考文档:三菱PLC之SLMP协议报文说明 - 知乎 (zhihu.com)

1、MC协议与SLMP协议

查阅三菱PLC官方文档,发现SLMP协议的3E帧,其实就是MC协议的3E帧,因此可通用。

2、3E/4E帧报文

查阅三菱PLC官方文档,发现3E/4E帧报文格式如下图所示

3、SLMP的3E帧与4E帧格式的区别

4E帧的格式相对灵活,可以用于更复杂的通信场景,支持更多的命令和参数。

4、3E帧指令

详见三菱PLC官方文档。

5、3E帧请求报文

SLMP 3E帧:50 00 00 FF FF 03 00 0C 00 10 00 01 04 00 00 00 00 00 A8 05 00

(1)帧头(Header)不显示,因为是TCP/IP及UDP/IP用的帧头。帧头在外部设备侧进行添加及发送。此外,通常根据外部设备自动被添加。

(2)副帧头(Sub-Header)50 00固定值,占用4字节,没什么好说的。

(3)请求目标网络编号00,占用2字节,表示请求的目标网络编号。

(4)请求目标站号FF,占用2字节,表示请求的目标站号。

(5)请求目标模块T/0编号:FF 03,占用4字节,表示请求的目标模块T/0编号。

(6)请求目标多点站号00,占用2字节,表示请求的目标多点站号。

(7)请求数据长0C 00,占用4字节,表示请求数据的长度(16字节,即后续的数据部分的长度)。

(8)监视定时器10 00,占用4字节,表示监视定时器的值。

(9)请求数据:01 04 00 00 00 00 00 A8 05 00,这20个字节表示具体的请求数据,但没有数据本身。

01 04:命令码,占用4字节,表示读取请求。

00 00:子命令码,占用4字节(通常为0)。

00 :固定值,占用2字节

00 00 A8 05 00:系统区域,占用10字节

(10)帧脚不显示,因为是TCP/IP及UDP/IP用的页脚。页脚在外部设备侧进行添加及发送。此外,通常根据外部设备自动被添加。

 

 

6、3E帧响应报文

SLMP 3E帧:D0 00 00 FF FF 03 00 0C 00 00 00 73 00 00 00 00 00 00 00 00 00

(1)帧头:不显示。

(2)副帧头:D0 00。

(3)请求目标网络编号:00。

(4)请求目标站号:FF。

(5)请求目标模块T/0编号:FF 03。

(6)请求目标多点站号:00。

(7)响应数据长:0C 00。

(8)结束代码:00 00 存储指令处理结果,正常结束时存储0。异常结束时存储访问目标的出错代码。

(9)响应数据:73 00 00 00 00 00 00 00 00 00,正常结束时,存储对于指令的读取数据等。 常结束时,存储出错响应站的信息、与请求报文相同的指令及子指令、异常结束时的响应数据(通过指令定义的情况下)

(10)帧脚:不显示。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Lion King

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值