西门子S7协议及报文格式详解

一、简介

S7Comm(S7 Communication)是西门子专有的协议,是西门子S7通讯协议簇里的一种。

S7通信协议是西门子S7系列PLC内部集成的一种通信协议,是S7系列PLC的精髓所在。 它是一种运行在传输层之上的(会话层/表示层/应用层)、经过特殊优化的通信协议,其信息传输可以基于MPI网络、PROFIBUS网络或者以太网

S7在TCP连接上后还需要进行两次握手

S7协议的TCP/IP实现依赖于面向块的ISO传输服务。S7协议被封装在TPKT和ISO-COTP协议中,这使得PDU(协议数据单元)能够通过TCP传送。

可以下载Wireshark抓包工具进行抓包看详细的发送报文格式

二、第一次握手

当PDU类型为0x0E(CR Connect Request连接请求)的时候报文格式为

TPKT协议结构

COTP连接包的结构

第一次握手发送返回字节格式

支持的PUD类型

参数代码TPDU-Size

三、第二次握手

当PDU类型为0xF0(DT Data,数据传输)的时候报文格式为

COTP功能包的格式

S7Comm协议结构

第二次握手发送返回字节格式

ROSCTR类型

四、数据读取/写入报文格式

数据读取/写入报文发送返回字节格式

S7协议的地址(偏移量)是按照位来运算的,因此需要地址值乘以8。 地址的三个字节范围为0x000000~0x08FFFF

比如M30000,实际地址就是30000*8=240000,然后转化为3个字节。 240000=0x03A980,对应三个字节【03 A9

80】 比如DB21234.40000 其中DB号21234为0x52F2,DB编号对应两个字节【52 F2】

偏移量(地址)40000乘以8就是320000,也就是0x04E200,对应三个字节【04 E2 00】

功能码

区域类型

SyntaxID类型

PLC区域类型块

复制代码
Merker: [M]任意标记变量或标志寄存器驻留在这里。

Data Block: [DB] DB区域是存储设备不同功能所需数据的最常见位置,这些数据块编号为地址的一部分。

Input: [I]数字和模拟输入模块值,映射到存储器。

Output: [Q]类似的存储器映射输出。

Counter: PLC程序使用的不同计数器的[C]值。

Timer: PLC程序使用的不同定时器的[T]值。

西门子不通区域地址类型以及范围

参考博客
西门子通讯协议解析博客1
西门子通讯协议解析博客2
西门子通讯协议解析博客3

相关推荐
Linux运维技术栈3 分钟前
域名网页加载慢怎么解决:从测速到优化的全链路性能优化实战
运维·网络·nginx·性能优化·cloudflare
北极光SD-WAN组网12 分钟前
基于智能组网设备的港口网络安全闭环管控方案设计与实践
网络·安全·web安全
妳人話32 分钟前
TCP的三次握手和四次挥手
网络·网络协议·tcp/ip
纳祥科技1 小时前
分享:一种为蓝牙、WIFI、U段音频发射设备提供ARC回传数字音频桥接功能的方案
网络·单片机·音视频
2501_916013741 小时前
HTTPS 抓包难点分析,从端口到工具的实战应对
网络协议·http·ios·小程序·https·uni-app·iphone
萧鼎2 小时前
深入解析 Python 的 pytun 库:虚拟网络接口与隧道技术实战指南
服务器·网络·python
工控小楠2 小时前
稳联技术EthernetIP转ModbusTCP网关连接发那科机器人与三菱PLC的集成方案
机器人·ethernet·modbus
疯狂的维修2 小时前
C#中一段程序类比博图
c#
Yuki’3 小时前
网络编程---UDP
c语言·网络·网络协议·udp
鲸屿1953 小时前
python之socket网络编程
开发语言·网络·python