• 西门子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协议结构
     TPKT协议结构
    COTP连接包的结构
    COTP连接包的结构

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

    第一次握手格式
    支持的PUD类型
    在这里插入图片描述
    参数代码TPDU-Size
    在这里插入图片描述

    三、第二次握手

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

    COTP功能包的格式
    COTP功能包的格式
    S7Comm协议结构
     S7Comm协议结构

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

    第二次握手
    ROSCTR类型
    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类型

    SyntaxID描述

    PLC区域类型块

    Merker: [M]任意标记变量或标志寄存器驻留在这里。
    
    Data Block: [DB] DB区域是存储设备不同功能所需数据的最常见位置,这些数据块编号为地址的一部分。
    
    Input: [I]数字和模拟输入模块值,映射到存储器。
    
    Output: [Q]类似的存储器映射输出。
    
    Counter: PLC程序使用的不同计数器的[C]值。
    
    Timer: PLC程序使用的不同定时器的[T]值。
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    西门子不通区域地址类型以及范围
    在这里插入图片描述

    在这里插入图片描述

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

  • 相关阅读:
    GIT解决冲突的方法
    一加疑违反GPL协议,迟迟不公布OxygenOS 12源码惹怒网友
    SpringAOP(2)
    设计模式_责任链
    Unity Bolt模块间通信
    远程服务器上,再次配笔记1、2、11、12相同的深度学习和gcc环境
    Linux 进程替换深剖
    IP协议与NAT/NAPT技术
    AppScan内部、外部手工扫描
    Win10 NVIDIA Incompatible
  • 原文地址:https://blog.csdn.net/qq_43254236/article/details/132856838