- 发布
- 浔之漫智控技术(上海)有限公司
- 品牌
- 西门子
- 型号
- 模块
- 产地
- 德国
- 电话
- 15821971992
- 手机
- 15821971992
- 发布时间
- 2023-07-19 17:06:40
前面我们对ModbusRTU协议、ModbusTCP协议、欧姆龙FinsTCP协议、三菱SLMP协议都做了说明:我们来分享一下关于西门子S7协议的通信分析。西门子作为一个老牌工控企业,在中国市场拥有很高的市场占有率。如果要说起西门子的通信协议,相信大家多多少少能说出一些,比如MPI、PPI、USS、Profibus、Profinet、S7等,但是西门子在协议的开放性方面还是相对要封闭一些,所以很多协议都是不开放的。在这里,我主要是结合Wireshark抓包工具,跟大家去分享一下,如何是一步一步抓取西门子S7通信协议底层通信报文的,希望通过我一步一步地分析,让大家都能够对西门子S7协议有所了解的同时,也学会基本的抓包操作与报文分析。
值得说明一下,西门子S7协议非开放协议,以下内容,仅供学习参考。
环境搭建
1、首先我们要准备要准备一个西门子的PLC,并保证PLC与PC之间的网络连接正常。PS:对于手头没有PLC的小伙伴,可以查看这篇文章:基于S7-PLCSIM Advanced搭建S7通信仿真环境
2、为了抓取到通信的报文,需要实现PC与PLC之间的通信,这里我采用的方式是通过KepServer V6.4来实现,【dotNet工控上位机】公众号后台发送关键词:OPC学习套装。
3、安装Wireshark抓包软件,【dotNet工控上位机】公众号后台回复关键词:Wireshark。
4、认识S7协议的网络模型。
1、项目简介
空调机组采用全空气空调系统。新风由室外新风管引入,经过初效过滤后在净化空调机组内与室内回风混合,混合后的空气处理到送风要求后送入办公区域。
监视初效空气过滤器状态,过滤器设置风压差开关,压差开关动作设定值在0~300Pa范围内可调整,当过滤器前后压差⊿P>设定值时,压差开关动作,系统产生报警信号,提醒管理人员进行更换或清洗;
送风机运行状态、故障监测显示,取送风机配电盘里触点作为风机运行状态信号,当触点闭合时风机运行,触点断开时风机停止;
监控新风温度、送风温度、送风湿度、室内温度和室内湿度。
监视送风机和排风机运行状态,故障报警,手自动状态。
2、控 制 内 容:
2.1、根据回风温度设定值,调节表冷器电动调节阀开度,以使室内温度保持设定要求值。
2.2、空调机组停机时让水阀有20%的开度,保证空调机组在使用前能对房间进行预冷(夏季)或预热(冬季);
2.3、新风阀与送风机连锁,风机停止时自动关闭新风阀。
2.4、电加热与风机连锁保护,如果风机未开启,不能开启电加热
2.5、电加热过热保护功能,设送风温度高温报警,例如:当送风温度高于40度时强制关闭电加热。
2.6、采用新风温度作为盘管防冻的参考温度,在冬季时,当盘管温度值低于设定值时,自动开启水空调阀门,停止新风机组,关闭新风阀,并中央主机报警;
2.7、频率控制:根据设定好的送风压力,自动调节变频器频率。
2.8、房间温湿度监测及压差控制:根据房间差压传感器控制房间回风阀达到预设值。(4个房间差压控制,温湿度监测)
3、控 制 方 式:
1)风机控制方式:
可分为程序自动控制、程序手动控制和手动控制三种。
手动控制:当风机启停柜上的“手动/自动”转换开关处于“手动”状态时,若要操作风机,必须在启停柜上通过“启动”或“停止”按钮控制风机启停(此时自动操作无效)风机启动同时,风阀和水阀自动投入运行。
程序手动控制:当风机启停柜上的“手动/自动” 转换开关处于“自动”状态时,风机自动控制有效,此时可根据需要在触摸屏上对送风机进行启停控制;
程序自动控制:通过时间程序控制机组自动启/停风机,该控制系统具有任意周期实时时间控制功能,系统通常运行在程序自动控制方式。
2)温湿度调节方式:
夏季控制方式:正常工况和露点除湿工况
当风机开启后先进入正常温度调节工况,开启15分钟后检测送风湿度高于设定湿度,自动进入露点除湿工况。当湿度达到设定值后维持15分钟自动进入再进入正常工况。
正常工况室内温度设定值在22度,露点除湿工况温度设定值在15度
(1)正常工况(冷冻水进行降温和除湿)
温度控制:室内温度测量值高于设定范围的上限时,开大冷冻水路上的调节阀;低于设定范围下限时,关小冷冻水路上的调节阀。在此情况下,湿度值满足设定值。
(2)露点除湿工况
温度控制:室内温度测量值高于设定范围的上限时,开大冷冻水路上的调节阀;低于设定范围下限时,关小冷冻水路上的调节阀。
除湿控制:室内湿度测量值高于设定范围的上限时,开启电加热;低于设定范围下限时,关闭电加热。
冬季控制方式:
(1)温度测量值高于设定范围的上限时,关小冷冻水路上的调节阀;低于设定范围下限时,开大冷冻水路上的调节阀。如果水阀开度达到维持20分钟,房间温度测量值低于设定值,开启电加热,直到温度低于设定值,关闭电加热。
(2)加湿控制:室内湿度测量值高于设定范围的上限时,关闭加湿器;低于设定范围下限时,开启加湿器。
电气的改造同时要结合工艺计算来进行,具体计算表如下:
3、方案确定
考虑到系统的稳定性及可靠性,选用西门子S7-200 SMART PLC,其较高的运算速度及丰富的通讯功能为以后设备的升级等提供了良好的保证。整个电气方案性价比较高,对于小型的自动化电气设备是个不错的选择。根据系统需求,产品的选型如下:
设备名称:标准型 CPU SR40
品牌:西门子
订货号:6ES72881SR400AA0
描述:S7-200 SMART,CPU SR40,标准型 CPU 模块,继电器输出,220 V AC 供电,24 输入/16输出
4、产品硬件配置
S7-200SMART的PLC与S7-200的PLC不一样,使用的时候需要对其进行硬件组态。打开硬件组态有两种方法:如图所示:
可以双击“1”的位置,打开系统块进行组态,也可以双击“2”这个CPU类型这个位置进行硬件组态。
硬件组态中CPU的参数设定:
(1)通信设定:
(2)数字量输入参数设定
数 值输入参数设定只要设定滤波时间,滤波时间主要作用可以用来滤掉一些干扰信号,如默认值6.4ms。比如说当I0.0的这个输入信号为ON的时候达 6.4ms,PLC才默认为这个信号时为1的信号,如果它为On的时间小于6.4ms,则说明这个信号为干扰信号,CPU不对这个信号进行采集,I0.0 的状态还是为0.当使用高速计数器的时候,一定需要对这个滤波时间进行设置 ,不然不会对这个信号进行相应。
PLC滤波时间及脉冲捕捉功能的设置如图所示:
(3)数字量输出组态后的参数设置
当 CPU 处于 STOP 模式时,可将数字量输出点设置为特定值,或者保持在切换到 STOP模式之前存在的输出状态。
STOP 模式下,有两种方法可用于设置数字量输出行为:
将输出冻结在后状态:单击此复选框,就可在进行RUN 到STOP 转换时将所有数字量输出冻结在其后的状态。
替换值:如果 “将输出冻结在后状态”复选框未选中,只要 CPU 处于 STOP 模式,此表就允许选择每个输出所需状态。 单击要设置为 ON (1) 的每个输出的复选框。 数字量输出的默认替换值为 OFF (0)。如图所示
(4)系统安全的设置
5、监控画面:
操作步骤
1、首先将KepServer与PLC之间的通信连接配置好;2、将Wireshark软件打开,并处于监控报文状态;3、将KepServer进行连接PLC,此时Wireshark软件中会出现报文的数据,将KepServer连接停止并关闭软件,同时将Wireshark的监控停止,以便进行后续的报文分析;
协议分析
1、我们发现西门子的S7通信并不是简简单单的TCP通信,在TCP执行三次握手之后,还需要发送两次连接验证,在两次连接验证之后,才进行真正的数据交互。
2、三次握手过程,如下图所示:
3、S7连接次验证,如下图所示:
4、S7连接第二次验证,如下图所示:
5、四次挥手过程,如下图所示:
6、S7次验证发送报文分析:
TPKT(第五层:会话层)
该层总共占4个字节:
版本号:0x03
预留:0x00
长度:0x0016
COTP(第六层:表示层)
该层总共占用18个字节:
长度:0x11
PDU类型(CR Connect Request 连接请求):0x0E
目标引用:0x0000
源引用:0x0001
扩展格式/流控制:0x00
参数代码 TPDU-Size:0xC0
参数长度:0x01
TPDU大小:0x0A
参数代码 SRC-TASP:0xC1
参数长度:0x02
源TSAP Source TSAP:0x0201
参数代码 DST-TASP:0xC2
目标TSAP Destination TSAP:0x0201
7、S7次验证返回报文
该层总共占18个字节:
PDU类型(CC Connect Confirm 连接确认):0x0D
目标引用:0x0001
源引用:0x0006
Source TSAP:0x0201
Destination TSAP:0x0201
8、S7第二次验证发送报文