S7通信协议的挑高点

2023-09-21 15:31:13

目录

1. S7协议之布尔操作

2. S7协议之PDU读取

3 S7协议之多组读取


在电气学习的路上,西门子PLC应该是每个人的启蒙PLC,从早期的S7-300/400PLC搭建Profibus-DP网络开始接触,到后来的S7-200Smart PLC,再到现在的S7-1200/1500 PLC博途软件。西门子S7协议是非常强大的一个协议。

1. S7协议之布尔操作

对于布尔操作,很多协议都有,但是这里的布尔操作是指寄存器布尔,比如写入DB100.DBB0.0,很多时候,我们都是通过先读取DB100.DBB0的值,再通过位运算结果,写入到DB100.DBB0中,实现DB100.DBX0.0的写入操作,但是这种方式有弊端,第一:每次操作一个布尔值都需要与PLC进行两次数据交互,第二:安全性和稳定性无法保障,你不知道在你读取和写入之间,这个字节的值是否已经发生了改变。

这样的问题也存在于Modbus协议的寄存器位操作,如40001.05,三菱、欧姆龙的寄存器位操作,如D100.06、W12.04,给上位机开发者带来很多苦恼。

但是S7协议支持直接位操作,有专门的报文指令实现这样的功能。

2. S7协议之PDU读取

大部分人都知道S7协议一次性读取有限制,但是具体是多少?怎么计算出来的?

S7协议的一次性读取长度是根据PDU计算出来的,这个PDU的值是来自于PLC本身,不同型号的CPU,它的PDU是不一样的。

https://pic1.zhimg.com/80/v2-3950ba84cd17bd7ae12c9667cc8291b8_720w.webp

图表 1 S7-1200的PDU

https://pic1.zhimg.com/80/v2-062c48b3fec925e40806df6de3066a20_720w.webp

图表 2 S7-1500的PDU

经过研究发现,西门子PLC的PDU大小是和CPU息息相关的,一般会有240、480、960三个档次,知道PDU之后,那么一次性读取的字节长度,就是在PDU的基础上减去18,这个18是指包头包尾会有18个字节,这样我们就知道了一般的PLC,一次性能读取222个字节(240-18=222),但是对于S7-1516这样的PLC,我们一次性是可以读取942个字节的(960-18=942),这个一次性能读取的字节越长,越能提高上位机的通信效率。

但是刚刚的方式是通过KepServer测试的,实际开发过程中,该怎么获取CPU的PDU呢,实际上在建立连接的第二次握手时,返回的报文中就包含PDU的值

https://pic4.zhimg.com/80/v2-82c2ccb3003b768b56f16f558848b183_720w.webp

图表 3 S7-1200 PDU报文

第二次握手返回的报文长度是27个字节,最后两个字节就是PDU的值,上图展示的是S7-1200PLC返回的报文,0和240的组合即为240。

对于S7-1500,我这里也做了一下测试,结果如下,返回结果为3和192,3和192的组合恰好是960(960=3*256+192)。

https://pic1.zhimg.com/80/v2-37d84ba110fda3413d7e2f62a6da3c1c_720w.webp

图表 4 S7-1500 PDU报文

虽然PDU是由硬件做了限制,但是我们可以通过软件的方式,实现大量数据的读取,只需要在底层做一些封装即可。做了一下测试,针对S7-1200和S7-1500同时读取M区的8000个字节的耗时比较,S7-1200耗时800多ms,S7-1500耗时仅需200ms,由此可见,硬件对通信的重要性。

https://pic2.zhimg.com/80/v2-1e589953c1ec983f22eb6e32bdfef419_720w.webp

图表 5 S7-1200通信耗时测试

https://pic3.zhimg.com/80/v2-c6ecd17a17cff79d9a2bee529807722a_720w.webp

图表 6 S7-1500通信耗时测试

3 S7协议之多组读取

西门子S7协议其中的一个重要体现就在于可以同时读取很多个不同的存储区,最大支持19,总共读取长度仍然受PDU的限制。

对于很多其他的通信协议,当我们遇到数据变量比较零散,同时读取多个存储区或者一个存储区多个不同部分的时候,我们只能针对每个存储区或者每块区域做一个数据请求,但是西门子S7协议可以解决这样的问题。

这里我们仍然以实验测试为例,体验多组读取带来的美妙体验。

假设我们的通信组配置如下:

通信组01:读取I区从0开始的1个字节

通信组02:读取Q区从0开始的1个字节

通信组03:读取M区从0开始的200个字节

通信组04:读取M区从500开始的50个字节

通信组05:读取M区从1000开始的60个字节

通信组06:读取DB100从0开始的20个字节

通信组07:读取DB100从20开始的20个字节

通信组08:读取DB100从40开始的20个字节

通信组09:读取DB100从60开始的20个字节

我们采用常用S7-1200PLC,基于CMS配置软件实现配置之后,开始通信测试,首先我们选择的是单组读取的方式,就是针对每个组,依次进行读取,结果如下,耗时大约200ms,这个时间应该相对来说还是比较正常的。

https://pic3.zhimg.com/80/v2-07e8f269bd16b614799a08316cd8ed82_720w.webp

图表 7 S7-1200PLC单组读取

紧接着,我将读取方式改成了多组读取,再进行测试发现结果如下:

https://pic1.zhimg.com/80/v2-4fb01e6f530ddb19751e79006175f818_720w.webp

图表 8 S7-1200PLC多组读取

通过观察上图通讯速率结果发现,多组读取对于存储区较为零散的项目来说,有着非常重要的作用,可以大大提高通信效率

更多推荐

我的创作纪念日

机缘第一次写博客我记得是写了个原生ajax的文章,因为突然用这个确实写不出来我写博客纯属为了记录项目经验有的bug可能这个项目解决了下个项目又噶了哈哈,我觉得跟博友们好好交流一下还是可以的,互相进步收获获得了88粉丝的关注有些文章的阅读量还是很高的,嘿嘿,收获最大的就是在工作中遇到的bug解决的更快了哈哈认识十几个志同

算法分享三个方面学习方法(做题经验,代码编写经验,比赛经验)

目录0.前言:(遇到OI不要慌)(只要道路对了,就不怕遥远)1.做题经验谈1.1做题的目的1.2我对于算法比赛的题目的看法1.2.1类似题1.2.2套模型:1.3在训练过程中如何做题1.4一些建议:提高算法能力1.5一些建议:提高代码能力1.6选一个好的OJ1.7分析问题的方法:我的一些经验2.代码编写经验谈2.1你5

UML活动图

在UML中,活动图本质上就是流程图,它描述系统的活动、判定点和分支等,因此它对开发人员来说是一种重要工具。活动图活动是某件事情正在进行的状态,既可以是现实生活中正在进行的某一项工作,也可以是软件系统中某个类对象的一个操作。活动图和流程图的区别1、流程图着重描述处理过程,他的主要控制结构是顺序、分支和循环,各个处理过程之

java学习--day11(抽象类、接口)

文章目录day10作业今天的内容1.super关键字2.抽象类【重要】2.1abstract关键字3.final关键字4.接口【重要】4.1生活中的接口4.2Java中接口4.3案例4.4案例day10作业1.成员变量和局部变量的区别成员变量:定义在类体中,整个类可以使用局部变量:定义在方法中,只能在方法使用2.继承的

系统架构设计师(第二版)学习笔记----信息安全系统及信息安全技术

【原文链接】系统架构设计师(第二版)学习笔记----信息加解密技术文章目录一、信息安全系统的组成框架1.1信息安全系统组成框架1.2信息安全系统技术内容1.3常用的基础安全设备1.4网络安全技术内容1.5操作系统安全内容1.6操作系统安全机制1.7数据库安全技术1.8信息安全系统的组织体系1.9信息安全系统的管理体系二

SocketTool V4.0 使用说明

TCP/UDPSocket调试工具提供了TCPServer,TCPClient,UDPServer,UDPClient,UDPGroup五种Socket调试方案。下面是一份简要的使用流程:TCP通信测试:1)创建TCPServer选中左方的TCPServer,然后点击”创建”按钮,软件弹出监听端口输入框。输入监听端口后

playwright: 通过Route对象处理请求

Route对象可以通过page.route()或者browser_context.route()来设置路由Route对象的方法有:abort,continue_,fallback,fetch,fulfillabort终止路由请求,并且可以设置error_code,默认是failed,其他值有aborted,access

经管博士科研基础【25】概率论中的相关基础概念

1.Support在概率论中,"support"(支撑集)是指随机变量可能取值的集合。对于离散型随机变量,支撑集包含了所有可能的取值;而对于连续型随机变量,支撑集是指其密度函数或概率质量函数非零的区域。举个例子来说,对于一个离散型随机变量,比如抛硬币的结果(正面或反面),其支撑集就是{正面,反面},因为这两个是唯一可能

安装封箱机需要的条件

任何设备的安装都需要一定的场地条件,封箱机产品也不例外,对于初次使用封箱机的用户,我们会仔细提醒客户需要准备的条件,今天就把这些条件和大家分享一下,方便您今后更方便的使用封箱机产品。1、适当的场地。用户在购买封箱机之前,尤其是定制型封箱机,一定要先确定好场地尺寸以及周边无障碍物,这样封箱机的安装工作才能得以顺利进行。2

【Oracle】使用 SQL Developer 连接 Oracle 数据库

文章目录前言一、准备工作1、安装SQLDeveloper2、安装Oracle数据库二、连接Oracle数据库1、打开SQLDeveloper2、连接数据库3、访问数据库三、SQL开发功能1、SQLWorksheet2、对象浏览器3、数据库管理四、总结前言SQLDeveloper是Oracle官方推出的一款免费的数据库开

ARM64 SMP多核启动详解2(psci)

1.支持psci情况上面说了pin-table的多核启动方式,看似很繁琐,实际上并不复杂,无外乎主处理器唤醒从处理器到指定地址上去执行指令,说他简单是相对于功能来说的,因为他只是实现了从处理器的启动,仅此而已,所以,现在社区几乎很少使用spin-table这种方式,取而代之的是psci,他不仅可以启动从处理器,还可以关

热文推荐