工控安全-S7协议

news2025/2/1 15:50:48

文章目录

    • 一、西门子PLC系统构成
    • 二、S7协议结构
    • 三、TPKT协议
    • 四、COTP协议
      • 4.1 COTP连接包
      • 4.2 COTP功能包
    • 五、S7Comm协议
      • 5.1 头(Header)
      • 5.2 作业请求(Job)和确认数据响应(Ack_Data)
        • 5.2.1 建立通信(Setup communication [0xF0])
        • 5.2.2 读取值(Read Var [0x04])
          • 5.2.2.1 当PDU为JOB时
          • 5.2.2.2 当PDU为Ack_Data时
        • 5.2.3 写入值(Write Var [0x05])
    • 六、简单总结-S7协议工作流程

一、西门子PLC系统构成

如下图就是一个组态完毕的西门子S7- 300的模型:
在这里插入图片描述
根据标号,各个模块分别是:

1.电源模块(PS),供电专用
2.CPU模块(CPU),负责处理信息
3.通信模块(IM)
4.数字量输入模块(DI)
5.数字量输出模块(DO)
6.模拟量输入模块(AI)
7.模拟量输出模块(AO)

二、S7协议结构

S7Comm(S7 Communication)是西门子专有的协议,是西门子S7通讯协议簇里的一种。
S7协议的TCP/IP实现依赖于面向块的ISO传输服务。S7协议被封装在TPKT和ISO-COTP协议中,这使得PDU(协议数据单元)能够通过TCP传送。它用于PLC编程,在PLC之间交换数据,从SCADA(监控和数据采集)系统访问PLC数据以及诊断目的。

S7Comm以太网协议基于OSI模型:
在这里插入图片描述

  1. 第1-4层会由计算机自己完成(底层驱动程序);
  2. 第5层TPKT,应用层数据传输协议,介于TCP和COTP协议之间。这是一个传输服务协议,主要用来在COTP和TCP之间建立桥梁;
  3. 第6层COTP,COTP 是 OSI 7层协议定义的位于TCP之上的协议。COTP 以“Packet”为基本单位来传输数据,这样接收方会得到与发送方具有相同边界的数据;
  4. 第7层,S7 communication,这一层和用户数据相关,对PLC数据的读取报文在这里完成。

在具体的报文中,TPKT的作用是包含用户协议(5~7层)的数据长度(字节数);COTP的作用是定义了数据传输的基本单位(在S7Comm中 PDU TYPE:DT data)。

S7Comm协议OSI模型:
在这里插入图片描述

在这里插入图片描述

三、TPKT协议

通过TCP的传输服务。介于TCP和COTP之间。属于传输服务类的协议,功能为在COTP和TCP之间建立桥梁,其内容包含了上层协议数据包的长度。一般与COTP一起发送,当作Header段。
在这里插入图片描述

其中,TPKT的结构为:

Version:[1 byte] 版本信息。

Reserved:[1 byte]保留 (值为0x00)。

Length:[ 2 bytes] TPKT、COTP、S7三层协议的总长度,也就是TCP的payload的长度。
在这里插入图片描述

从图中可知,其version=3,length=25(0x0019)。

四、COTP协议

COTP是OSI 7层协议定义的位于TCP之上的协议。COTP以Packet为基本单位来传输数据,这样接收方会得到与发送方具有相同边界的数据

COTP协议分为两种形态,分别是COTP连接包(COTP Connection Packet)和COTP功能包(COTP Fuction Packet)。

4.1 COTP连接包

COTP连接包(COTP Connection Packet)也就是S7Comm的握手包,如下图所示:
在这里插入图片描述

其中, COTP连接包的头结构为:

0 (Unsigned integer, 1 byte): Length,COTP后续数据的长度(注意:长度不包含length的长度),一般为17 bytes。

1 (Unsigned integer, 1 byte): PDU typ,协议数据单元类型有:

0x01: ED Expedited Data,加急数据
0x02: EA Expedited Data Acknowledgement,加急数据确认
0x04: UD,用户数据
0x05: RJ Reject,拒绝
0x06: AK Data Acknowledgement,数据确认
0x07: ER TPDU Error,TPDU错误
0x08: DR Disconnect Request,断开请求
0x0C: DC Disconnect Confirm,断开确认
0x0d: CC Connect Confirm,连接确认
0x0e: CR Connect Request,连接请求
0x0f: DT Data,数据传输

Destination reference:2 bytes,目标的引用,可以认为是用来唯一标识目标
Source reference:2 bytes,源的引用,同上

opt:[1 byte],其中包括Extended formats(是否使用拓展样式)、No explicit flow control(是否有明确的指定流控制),值都是Boolean类型。

Parameter:7~? (length-7 bytes, 一般为11 bytes) ,参数。一般参数包含Parameter code(1 byte)、Parameter length(1 byte)、Parameter data三部分。

i)Source TSAP:源设备的TSAP( KEPSERVER OPC)
ii)Destination TSAP:目的设备的TSAP(S7-200 SMART PLC)

TSAP这个概念还是不清楚,查到了:TSAP分为Local TASP(相当于采集程序的地址)和Remote TSAP(相当于PLC的地址)

连接请求包
在这里插入图片描述
连接确认包
在这里插入图片描述

4.2 COTP功能包

结构如下:
在这里插入图片描述
COTP功能包的头结构为:

0 (Unsigned integer, 1 byte): Length,COTP后续数据的长度(注意:长度不包含length的长度),一般为2 bytes。

1 (Unsigned integer, 1 byte): PDU type,类型有:

0x01: ED Expedited Data,加急数据
0x02: EA Expedited Data Acknowledgement,加急数据确认
0x04: UD,用户数据
0x05: RJ Reject,拒绝
0x06: AK Data Acknowledgement,数据确认
0x07: ER TPDU Error,TPDU错误
0x08: DR Disconnect Request,断开请求
0x0c: DC Disconnect Confirm,断开确认
0x0d: CC Connect Confirm,连接确认
0x0e: CR Connect Request,连接请求
0x0f: DT Data,数据传输

opt:[1 byte] ,其中包括Extended formats、No explicit flow control,值都是Boolean类型。

五、S7Comm协议

S7Comm数据作为COTP数据包的有效载荷,第一个字节总是0x32作为协议标识符。
S7Comm协议包含三部分:

  • Header
  • Parameter
  • Data

5.1 头(Header)

在这里插入图片描述

S7Comm Header的格式为:

Protocol ID: [1 byte]协议常量,始终设置为0x32
Message Type: [1 byte]消息的一般类型(有时称为ROSCTR类型),消息的其余部分在很大程度上取决于Message Type和功能代码。

0x01 - JOB(Request: job with acknowledgement):作业请求。主站发送的请求(例如,读/写存储器,读/写块,启动/停止设备,设置通信);

0x02 - ACK(acknowledgement without additional field):确认响应,没有数据的简单确认(未遇到过由S7 300/400设备发送得);

0x03 - ACK_DATA(Response: acknowledgement with additional
field):确认数据响应,这个一般都是响应JOB的请求;

0x07 USERDATA:原始协议的扩展,参数字段包含请求/响应ID(用于编程/调试,读取SZL,安全功能,时间设置,循环读取…)。

Redundancy Identification (Reserved):[2 bytes] 冗余数据,通常为0x0000;
Protocol Data Unit Reference:[2 bytes],协议数据单元参考,通过请求事件增加;
Parameter length:[2 bytes],参数的总长度
Data length:[2 bytes],数据长度。如果读取PLC内部数据,此处为0x0000;对于其他功能,则为Data部分的数据长度;

在这里插入图片描述
其中最重要的字段就是ROSCTR,它决定了后续参数的结构.
在响应数据包中,还有可能存在错误信息。
在这里插入图片描述
其错误信息结构为:

10 (unsigned integer, 1 bytes): Error class,错误类型:可能错误的常量

11 (unsigned integer, 1 bytes): Error code,错误代码:可能错误的常量

5.2 作业请求(Job)和确认数据响应(Ack_Data)

S7Comm中Job和Ack_Data中的Parameter项的第一个字段是function(功能码),其类型为Unsigned integer,大小为1 byte,决定了其余字段的结构、消息的目的。
在这里插入图片描述

所以接下来,将进一步介绍各功能码对应的结构和作用。

5.2.1 建立通信(Setup communication [0xF0])

建立通信在每个会话开始时被发送,然后可以交换任何其他消息。它用于协商ACK队列的大小和最大PDU长度,双方声明它们的支持值。ACK队列的长度决定了可以同时启动而不需要确认的并行作业的数量。PDU和队列长度字段都是大端。
字段:

Function Code:功能代码,通信设置为0xf0
Reserverd:保留字段,默认为0x00
Max AmQ Caller:Ack队列的大小(主叫)
Max AmQ Callee:Ack队列的大小(被叫)
PDU length: PDU长度。

JOB
在这里插入图片描述
Ack_Data
在这里插入图片描述
其协商结果为:ACK队列的大小为1;最大PDU长度为240。

5.2.2 读取值(Read Var [0x04])

数据读写操作通过指定变量的存储区域,地址(偏移量)及其大小或类型来执行。

5.2.2.1 当PDU为JOB时

S7 comm结构如下:
在这里插入图片描述

Parameter字段是Item count:

1、Variable specification:确定项目结构的主要类型,通常为0x12,代表变量规范;
2、Length of following address specification:本Item其余部分的长度
3、Syntax Ids of variable specification:确定寻址模式和其余项目结构的格式;
4、Transport sizes in item data:确定变量的类型和长度;
5、Request data length:请求的数据长度
6、DB number,DB模块的编号,如果访问的不是DB区域,此处为0x0000;
7、 Area:区域类型。
8、Address:地址。

在这里插入图片描述
图中item1是读取DB1的0x000010(DB1.DBX 2.0 BIT 1)值,并且类型为BIT的请求。

5.2.2.2 当PDU为Ack_Data时

S7 comm结构如下:
在这里插入图片描述
其Parameter只有function、item count两个字段。
下面是Data

Return code:1 byte,返回代码;
Transport size:1 byte,数据的传输尺寸;
Length:2 bytes,数据的长度;
Data:数据;
Fill byte:填充字节。

上图的响应包如下:
在这里插入图片描述
item【1】是读取DB1的0x000010(DB1.DBX 2.0 BIT 1)值,并且类型为BIT的响应,其响应的数据为01

5.2.3 写入值(Write Var [0x05])

S7comm的结构(写入值的作业请求):
在这里插入图片描述
由此,Data的结构为:

Return code:返回代码,这里是未定义,所以为Reserved(0x00);
Transport size:确定变量的类型和长度:
Length:2 bytes,写入值的数据长度;
Data:1byte,写入的值;
Fill byte:填充字节,如果数据的长度不足Length的话,则填充;

向地址为0x000008的Flags(M)写入0x00的作业请求在这里插入图片描述

S7comm的结构(写入值的确认数据响应)
在这里插入图片描述
在这里插入图片描述图中的item【1】,说明向地址为0x000008的Flags(M)写入0x00成功!

六、简单总结-S7协议工作流程

1、client与server通过socket建立连接,过程是标准的TCP连接方式,这一步完成连接的建立
2、client发送COTP,请求连接PLC,报文中包含CR Connect Request和Destination TSAP,从而标识出CPU的机架号和槽号
3、PLC返回COTP,确认连接,报文中包含CC Connect Confirm,此时server已经明确client与哪个CPU进行通讯
4、client发送S7 Communication给server,报文中包含Setup communication,即通讯请求
5、server返回S7 Communication给client,报文的ROSCTR为ACK_DATA,有确认的意思,包含了对作业请求的回复
6、client与server发送交换数据的报文,仍以S7 Communication完成

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/104347.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

redis之分片集群

0. 前言 在海量的数据面前,单个 redis 实例的能力是有限的,无可能无限增大的内存,所以必须要构建分片集群,来横向拓展来支持保存更多的数据。 1. 分片集群是什么? 分片集群主要是将 redis 的数据划分成多份&#xf…

BHG Mall 聚焦消费者需求,“超级宠粉节”缔造营销新高度

“如何读懂消费者?”处在行业关键转型期的购物中心,面临着这一待解的难题。 有哪些业态、品牌、商品让消费者着迷又上瘾?购物中心需要培养和消费者之间的默契,购物中心不仅要引领消费趋势、满足消费需求,还要深度融入…

Java+SSM宠物销售网站(含源码+论文+答辩PPT等)

项目功能简介: 该项目采用的技术实现如下: 后台框架:Spring、SpringMVC、MyBatis UI界面:JSP、jQuery 数据库:MySQL 该系统主要分为前台和后台两大功能模块,共包含两个角色:用户、管理员。 具体的系统功能如…

高分子PEG:DBCO-PEG-OPSS,OPSS-PEG-DBCO,二苯并环辛烯PEG邻吡啶二硫

【产品描述】 DBCO-PEG-OPSS中DBCO试剂可以自动标记叠氮化物修饰的生物分子,而不需要使用有毒的铜催化剂。聚乙二醇化可以提高多肽和蛋白质的溶解性和稳定性,降低其免疫原性。它还可以抑制带电分子与修饰表面的非特定结合。西安凯新生物科技有限公司点击…

html5:notification(浏览器通知)

一、notification简介 Web Notifications是HTML5 的一个特性,目前我知道的有谷歌浏览器和windows edge对它进行了支持,用于向用户配置和显示桌面通知。 二、notification方法 2.1静态方法 这些方法仅在 Notification 对象中有效。 Notification.requ…

5 种有效的电子邮件营销技巧可增加您的转化率

关键词:电子邮件营销、转化率 电子邮件营销是一种非常常见的策略,可以将客户吸引到您的网站并增加转化率。 由于如此普遍,消费者平均每天会收到 78 封新电子邮件。您的电子邮件周围充满了噪音。 那么,您可以做些什么来让您的电子邮…

架构师必读 —— 逻辑模型(10)

以零基础思考摆脱障碍 我们已养成了惰性思考及在其延伸下不断堆叠的思考习惯。 因为以往的方式未出现过重大错误,所以总以为会万无一失。 但是,如果用堆叠式思考方式继续沿用上一年度的做法的话,不管过多少年也很难破旧立新。有时我们有必要重…

第3章 管理端(Vue)布局面的设计实现

1 导入“element-plus:Icon”组件 1.1“element-plus:Icon” 组件导入命令: npm install element-plus/icons-vue 1.2“element-plus:Icon” 组件配置: import { createApp } from vue//在vue-cli4(4.5.…

关于A2B与DSP/DAC传输音频的时钟问题

加我V hezkz17 进同行数字音频系统设计开发交流答疑群 1 AD2428----->某功放DSP 是通过IN3输入音频数据 为什么 BCLK 和LRCLK 没有连接TDM时钟 ? 2 新改的板子 用IN1作为音频数据输入 IN1和 OUTPUT3 都是使用 A2B的TDM时钟 因为OUTPUT3 是上行TDM8 用作回传音和录音的…

用好这个任务管理工具,轻松躲避职场明枪暗箭

俗话说:“职场如战场”,而战场上,就不可避免地存在着形形色色的人,以及竞争与对立关系。升职、加薪、都是足以让人心动的诱惑,有利益存在的地方,就有勾心斗角,明坑暗亏。 正所谓,明…

简述 MySQL 的字符集和比较规则(简洁明了)

字符集和比较规则 字符集的概念: 人们抽象出一个字符集的概念来描述某个字符范围的编码规则。 比较规则的概念: 对于某一种字符集来说,可以制定用来比较字符大小的多种规则,也就是说同一种字符集可以有多种规则。 最常用的 U…

阿根廷夺冠!梅西圆梦!历届世界杯还有哪些数据看点?

从1930年到2022年,世界杯已走过92年的光辉岁月,从马拉多纳的“上帝之手”、贝利的“四两拨千斤”、罗纳尔迪尼奥的“诡异吊射”、范佩西的“鱼跃冲顶”再到姆巴佩上演“帽子戏法”刷新记录,世界杯为球迷朋友们带来了无数个惊心动魄的精彩瞬间…

链表(1)-------数据结构

链表(重点): 链表是物理存储结构上面非连续的存储结构,数据元素的逻辑顺序是通过链表中的引用链接次序实现的 1)在顺序表中,我们不光引入了一段连续的内存,还引入了一块连续的内存空间,叫做usedsize,来表示对应数组中…

Opencv(C++)笔记--Canny边缘检测算法

目录 1--算法原理 2--Opencv API 3--代码实例 1--算法原理 具体原理讲解可参考博客1 和 博客2,算法主要步骤如下: ① 使用高斯模糊(高斯滤波)去除噪声; ② 进行灰度转换,转换为灰度图; ③ 计…

数据结构---动态规划

动态规划爬楼梯问题解法1第一步第二步第三步JAVA实现解法2问题建模最优子结构边界状态转移公式求解问题递归JAVA实现备忘录算法JAVA实现解法三JAVA实现(斐波那契数列)国王和金矿一个错误的解法排列组合解法JAVA实现动态规划爬楼梯问题 有一座高度是10级…

rk3568 添加gc2053摄像头驱动

在设备树文件代码中添加 gc2053 设备节点 &i2c2 {status "okay";pinctrl-0 <&i2c2m1_xfer>;/* split mode: lane0/1 */gc2053: gc205337 {status "okay";compatible "galaxycore,gc2053";// 需要与驱动中的匹配字符串一致reg …

高级篇-rabbitmq的高级特性

1.消息可靠性 三种丢失的情形&#xff1a; 1.1 生产者确认机制 启动MQ 创建Queues&#xff1a; 两种Callback: 1.ReturnCallback:全局callback 2.ComfirmCallback: 发送信息时候设置 Testpublic void testSendMessage2SimpleQueue() throws InterruptedException {// 1.…

第八章练习题-3

目录 第十三题 题目 Student类 Teacher类 main类 老师的代码 Student类 Teacher类 main类 第七问&#xff1a;定义多态数组 main类 运行结果 问题 原因 解决办法 老师代码&#xff1a;main类 结果 第八问 运行结果 第十四题 第十五题 题目 方法的多态…

HFSS使用经验三

目录 一、如何量取HFSS某一点的空间位置 二、如何快速的切换视图 三、HFSS中绘制圆柱体 四、如何修改HFSS的仿真线程数量 五、HFSS中如何选取挖空的面 六、HFSS中如何实现参数扫描 一、如何量取HFSS某一点的空间位置 右击可以点击Measure按键 鼠标放到特殊点&#xff0c…

2023年申请发明专利的重要性和注意问题。

随着对知识产权意思的逐步提高&#xff0c;企业对知识产权越来越关心。知识产权包括专利权、商标权和著作权。专利包含发明专利专利、实用新型专利、外观设计专利。其中发明专利的申请难度最大&#xff0c;含金量最高。根据小编申请发明专利方面20年的经验&#xff0c;简单介绍…