S7-200 SMART Modbus TCP 通信实践

一个客户,需要从主控PLC(三菱iQ-R系列)读写设备值(PLC用的是S7-200 SMART),很不幸,三菱iQ-R系列的PLC的"简单CPU通信"不支持西门子(这点与FX5U不同,FX5U支持与S7系列做简单CPU通信,配置非常方便). 经与客户协商,决定走Modbus TCP协议。

S7-200 SMART内增加对Modbus TCP的支持

S7-200 SMART有现成的Modbus TCP库,分server(相当于slave)和client(相当于master), 官方有非常详细的使用说明:

https://www.ad.siemens.com.cn/download/materialaggregation_581.html

同时西门子也提供了视频和范例:

官方通信例程及视频

当前的场景是做server, 响应客户主控PLC的请求,特别简单,只需要在PLC主程序MAIN的第一段加上对应的指令即可。其它什么也不需要改。

其中需要注意MaxHold和HoldStart两个参数:

HoldStart指定从哪个地址开始读/写V存储区,它对应 位机的读写指令中的00 00 这个起始地址。

MaxHold:最多允许上位机从起始地址读多少个双字节 (16位,S7-200 SMART的Modbus 程序对V存储区的处理是以双字节为单位的)

用Modbus Poll做client端读写S7-200 SMART

参考文章:

Modbus通信协议-软件调试4个工具软件https://blog.csdn.net/shi_xiaobin/article/details/127443774

https://blog.csdn.net/kebi007/article/details/151977656https://blog.csdn.net/kebi007/article/details/151977656

下载地址:

https://www.modbustools.com/download.html

使用注意事项:

端口号与程序中设定保持一致

连接成功后,在"Functions"菜单中选择"Test Center"

测试命令及结果解析:
Modbus TCP通信协议参考文章:

https://blog.csdn.net/mmmjsjsk/article/details/142655263

https://zhuanlan.zhihu.com/p/696344025

Modbus TCP/IP Explained: Complete Beginner-to-Expert Guide

测试读取V存储区(功能码0x03)

PLC中设置HoldStart: &VB0, MaxHold: 6

可以看到,测试成功。PLC按指令要求正确返回了数据。

Modbus Poll中发出的命令 00 00 00 00 00 06 01 03 00 00 00 06 解析:

00 00: 事务处理标识符, 2个字节

00 00:协议标识符,2个字节

00 06:长度,指后续指令的字节数, 2个字节

01: 单元标识符, 1个字节, 通常为01

03: 功能码, 1个字节, 03是读V存储区的功能码

00 00:读取的起始地址,2个字节。 (对应PLC程序中设定的起始地址)

00 06: 读取的双字节(WORD)数, 2个字节。

功能码之后统称"数据区",不同的功能码,其数据区定义不同。

从上图中,也可以看出,S7-200 SMART对于错误,返回的值是 83 02

测试写入V存储区:
写单个输出线圈(功能码0x05):

|-------------|---------|------------|----------|---------|-----------|
| 事务/协议(各2字节) | 长度(2字节) | 单元标识符(1字节) | 功能码(1字节) | 线圈(2字节) | 断通标志(2字节) |
| 0x00000000 | 0x0006 | 0x01 | 0x05 | 0x00 00 | 0xFF 00 |

写单个寄存器(功能码0x06):

|-------------|---------|------------|----------|---------|---------|
| 事务/协议(各2字节) | 长度(2字节) | 单元标识符(1字节) | 功能码(1字节) | 地址(2字节) | 数据(2字节) |
| 0x00000000 | 0x0006 | 0x01 | 0x06 | 0x00 00 | 0x11 22 |

写多个寄存器(功能码0x10):

发送命令: 00 00 00 00 00 0B 01 10 00 04 00 02 04 11 11 22 22

00 00: 事务处理标识符, 2个字节

00 00:协议标识符,2个字节

00 0B6:长度,指后续指令的字节数, 2个字节

01: 单元标识符, 1个字节, 通常为01

10: 功能码, 1个字节, 10是写多个V存储区的功能码

00 04:写入的起始地址,2个字节。 (对应PLC程序中设定的起始地址)

00 02: 写入的双字节(WORD)数, 2个字节。

04: 写入的字节数(bytes)

11 11 22 22: 写入的数据

从测试中可以看出,写寄存器出错返回值是90 03

S7-200 SMART中DW和REAL数据的读取:

DW(双字)数据:

处理比较简单,只需要从开始地址设置读取数量为2即可:

浮点数

处理相对麻烦。S7-200 SMART中浮点数是32位的。共存储格式为:

最高位(第31位): 符号位

第30~23位: 共8位, 指数位。

第22~0位: 共23位,小数位

测试例子中, VD124是浮点数256.78, 返回的16进制数据为43 80 63 D7

理解43 80 63 D7与256.78的关系:

0x 43 80 63 D7 = 01000011 10000000 01100011 11010111

按上述结构拆解:

符号位: 0

指数位:10000111

小数位: 0000000 01100011 11010111

计算还原:

相关推荐
Likeadust1 小时前
说开就开:临时发起的私有化音视频实时通信EasyDSS视频会议,让跨城协作不再“等排期”
网络·音视频·easydss
我爱学习_zwj1 小时前
IP 地址与子网划分
网络协议·网络安全
愤怒火龙果1 小时前
AI攻防 AIRT补充篇|侦察指纹 · 多模态越狱 · Agent 与 MCP 安全
网络·人工智能·ai安全
北邮刘老师2 小时前
智能体手机的成败关键——智能体互联生态
网络·人工智能·智能手机·智能体·智能体互联网
手可摘星陳×2 小时前
10-运维排障篇-无线排障框架与常见故障-诊断矩阵速查
运维·网络
半壶清水2 小时前
[软考网规考点笔记]-局域网之冗余网关技术
网络·笔记·智能路由器
fengci.2 小时前
CTF2困难部分
开发语言·网络·python·安全·php
广东融科数据服务有限公司2 小时前
网络监控经常卡顿、掉线、画面模糊?一线排查问答实录
开发语言·网络·php