协议简介
S7协议TCP/IP实现依赖于面向块的ISO传输服务,S7协议包含在TPKT和ISO-COTP协议中,允许PDU(协议数据单元)通过TCP承载。ISO overTCP通信定义在RFC1006中,ISO-COTP定义在RFC2126其是基于ISO 8073协议(RFC905)。该结构如下图。
S7协议是面向功能/命令的,这意味着传输由S7请求和适当的应答组成(极少数例外)。在连接建立期间协商并行传输的数量和PDU的最大长度。
S7 PDU由三个主要部分组成:
头(Header):包含长度信息,PDU参考和消息类型常量
参数(Parameters):内容和结构根据PDU的消息和功能类型而有很大差异
数据(Data):该数据是一个可选字段来携带数据,例如存储器值,块代码,固件数据等。
下载S7模拟器
S7服务器代码示例---链接
克隆存储库
git clone https://github.com/gijzelaerr/python-snap7
运行服务器
## 进去server所在目录 cd python-snap7/snap7/bin ## 查看目录 ls __init__.py snap7-server.py ## pip3 install . ## 运行server python3 snap7-server.py
可以看到该server已经成功运行,且监听端口为1102
查看点位地址,在该代码中可以找到设置的点位地址以及对应的数据类型,这里我以采集int和double int点位的数据为例,感兴趣可以去查看该代码
安装Neuron(以docker运行为例)
## 获取 Docker 镜像 docker pull neugates/neuron:2.1.2 ## 启动 Docker 容器 docker run -d --name neuron -p 7000:7000 -p 7001:7001 -p 9081:9081 --privileged=true --restart=always neugates/neuron:2.1.2
Neuron南向配置
创建南向设备
新增设备,选择协议类型
确认创建,点击设备配置
填写相应配置信息,点击提交按钮
单击该设备面板,进入Group列表,点击创建填写group名称及采集频率为多少ms,完成创建
点击上图箭头所指图标,进入tag列表创建tag,添加tag填写tag相应信息,完成创建
点位创建成功后,开启刚创建好的南向设备,可以看到该设备工作状态以及连接状态都处于正常运行中
切换到数据监控页面,选择刚创建的南向设备和group名称,便可以看到点位对应的值
通过数据监控看到采集的点位地址和代码中设置的点位相同且采集到的值也是相同的
注:该代码中点位对应值是一个静态值,所以不会发生改变
Neuron北向配置
创建北向应用
点击添加应用,填写名称,选择协议类型,完成创建
点击北向emqx面板上应用配置
填写北向配置信息,点击提交,开启该北向应用,可以看到工作状态及连接状态都处于正常运行中
单击emqx面板进入Group列表,选择添加订阅,选择需要订阅的南向设备及group,点击提交按钮
验证
验证北向应用是否连接到EMQX
可以看到北向设置的clientid为neuron的客户端已经连接到EMQX
验证北向所订阅南向设备点位数据是否接收成功
这里通过MQTTX去连接一个客户端到EMQX并且订阅南向设备上报数据topic为neuron/neuron/upload,可以看到成功接收到南向设备上报的点位数据信息,如图:
至此,Siemens S7 ISOTCP协议模拟测试完成。