工控安全-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完成

  • 4
    点赞
  • 40
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
S7协议是西门子公司的一种通讯协议,用于连接和控制西门子PLC设备。S7-200系列是西门子公司推出的一款紧凑型PLC,适用于小型自动化系统。通过S7协议连接S7-200,可以实现对其进行配置、编程和监控。 要用S7协议连接S7-200,首先需要确保计算机上安装了相应的通讯软件,例如西门子提供的STEP 7 MicroWIN。这个软件可以用于编程和配置S7-200,并提供了与PLC通讯的功能。 在连接S7-200之前,必须确认PLC设备的硬件连接正确无误。首先,使用串行线缆将计算机的RS232串行接口与PLC的PPI串行接口连接起来。然后,通过STEP 7 MicroWIN软件进行串行端口的配置,确保串行端口的通信参数(如波特率、校验位等)与PLC的设置相匹配。 连接建立后,可以使用STEP 7 MicroWIN软件对S7-200进行编程和监控。通过该软件,可以编写PLC的控制逻辑,设置输入输出模块的参数,上传和下载程序等。 连接S7-200的优势是其紧凑型设计和可靠性。S7-200系列具有较小的体积,适合在空间有限的场所使用。同时,它的响应速度和稳定性高,可满足一般工控系统的需求。 总而言之,通过S7协议连接S7-200,可以实现计算机与PLC之间的数据交换和控制。这样的连接可以用于各种自动化系统,如工业生产线、机械控制等。通过编程和监控,可以实现对PLC的灵活控制和可靠运行。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值