The Siemens S7 Communication
我一直在与西门子PLC协同工作很长时间,我的日常工作通常涉及设计与它们通信或观测/模拟其通信的应用。我认为是时候分享我对于S7通信协议的积累知识,这对有深度理解协议或开发涉及这些设备的软件的人可能很有价值。我要强调此份记录非详尽文献,许多潜在细节有待描述。当前我只能访问S300和S400系列设备,并未发展过S200及后续系列的PLC,因此,本篇专业文章不会涉及这些特定功能。似乎没有广泛认可的官方S7协议文档,然而有少数项目对处理此协议很有帮助。
"Davide Nardella"所创立的开源通讯库Snap7以及"Thomas W."所开发的S7 Wireshark消解器就是例子,它们覆盖了协议的主要结构并含有详尽的协议常量清单。这些都是在多次使用西门子设备期间非常宝贵的技术资源。
值得注意的是,在这里并未应用西门子设备的官方术语,我尝试遵循Nardella和W. 提供的描述。在接下来的内容中,我将适当地遵照这两个项目中的术语定义。
编辑:在撰写此段文章后,我了解到新开发的开源项目"plc4x"。这个项目提供的多种工业协议实现中包括S7协议。
西门子通信场景:在我们深入技术细节之前,我想先简要介绍基本的西门子通信环境概述。当我说到“S7协议”时,我指的是以太网S7通信,主要用于连接PLC到PC站端(例如PG/PC与PLC通信)。须注意这一点与西门子的其他场总线协议(MPI、Profibus、IE和Profinet)相互区别,后者用于连接PLC到IO模块,但非设备的管理协议。在大部分情况下,西门子通信遵循传统的主站从站或客户端服务器模式,由PC(主站/客户端)向现场设备(从站/服务器)发送S7请求。这些请求用于查询或向设备传输数据,或执行特定命令。在某些例外中,PLC可能成为通信主站,通过FB14/FB15,设备能启用GET和PUT请求到其他设备。在S400系列中,实现了一种向性的数据I/O功能,类似传统发布者订阅模式。即,PC可以订阅特定事件,PLC随后定期更新网络中的请求数据。此外,存在伙伴以点对点模式,当活跃伙伴请求连接,并同时调用Block Send而被动伙伴调用Block Receive时,二者间的通信就会建立。
S7协议通过TCP/IP的实现基于面向块的ISO运输服务。封装在TPKT和ISOCOTP中,使得PDU可以在TCP上传输。其结构类似于ISO over TCP通信定义于RFC1006中,而ISOCOTP基于RFC2126和ISO 8073协议定义。S7协议是功能/命令导向的,这意味着传输由一个S7请求及其适当的回复组成(但有较少的例外)。同时,最大并行传输数量和PDU的最大长度在连接建立时进行协商。
具体而言:
S7 PDU标头:1012字节长度,确认消息包含额外的两个错误字节。标头格式对于所有PDU保持一致。该头包含以下字段:
协议ID:常用常量为0x32,指示协议类型(Machine Size:Motor Sizemarker word)
消息类型:整数型(通常称为ROSCTR),表示消息的通用类型(例如请求/作业、应答确认Datek /Acknowledgment)
预留:值为0x0000,被保留待用
PDU参考(却增计数):由主站发起,每个新传输加一,用于链接响应与请求
参数长度:参数字段长度,大端字节序
数据长度:数据字段长度,大端字节序
错误类:存在AckData消息中的一个字节,可能的错误常量列于constants.txt
错误代码:同样存在AckData消息中的一个字节,可能的错误常量列于constants.txt
在接下来的文章中,我将详细阐述每种消息类型。其中,第2部分将聚焦于作业请求与确认数据消息的详述。
任何有关协议常量的补充或更正,请联系我们或在评论区留言。
更新:自把这些内容写作至完成文章间有个关键调整,即了解更多积极推进的开源项目"plc4x"。此项目提供了多种工业协议的实现,其中包括S7协议。
在深入技术细节之前,我想简要介绍基本的西门子通信场景概述。在谈到 “S7协议”时,我指的主要是以太网S7通信方式,其主要功能是将PLC与PC(执行器/客户端)相连的通信接口站(PG/PC与PLC之间的通信)。这一点与西门子使用的不同现场总线协议截然不同,例如MPI、Profibus、IE和Profinet,它们主要用于将PLC与IO模块相连,而非管理系统设备的通信协议。
在大部分情况下,西门子通信遵循传统的主从站或客户端与服务器模式,其中PC(客户端)将S7请求发送至现场设备(从站)。此请求可用于查询信息、转发数据至设备或执行特定指令。虽然LAN、远程访问或与软件的连接并不涉及S7总线,但在包括RPC、光纤等协议在内的两者之间可适当简化交互层次。
S7协议架构依赖于面向块的ISO传输模式,其中包含TPKT(运输瞄准键交换)和ISOCOTP(ISO认证)协议。这种结构适合在TCP/IP网络上使用。ISEP(IS标准化编辑派生)的部分定义了ISO的通信模型,而这适用于所有版本的S7协议,包括分布式组件之间的对等通讯规定,譬如本地设备之间的通信进行串接或组态配置等。
按照我们的操作,在特定的源头测试小型节点或中间件情况等时也可见到这种通信场景。除了这点,基于硬件的桌面测站也普遍出现在足够大的网络数据中心中,它们通过相关网络或使用OSI runtime和总线接口进行应用解析执行,而设备或服务器间的对应规范需遵循相应标准。
回到S7协议受害者身份范围而言,人为参与较少操作,而是通过类似于SNMP命令的应用旁路方式控制网络中的节点。如果存在基于可靠性需求的任务、非按下事件、硬件故障或通讯丢失则常用保护机制(如降级行为等)。标准版本中部分内容可能涉及到自动化交换进程,实现自动化的重启或探测活动控制等功能,从而确保关键程序的运行稳定性。其他系统层则可能针对网络问题或发热状态的解决方案及隔离逻辑等进行监控和处理。
回到基本信息描述,西门子S7协议是面向功能与指令导向的。这意味着每一个模式代表一个命令或操作,其本身包含必要的信息去执行某个特定任务。我们将在后续的文章详细介绍S7的各原始结构模块。
接下,详细探讨特定部分如互连链接中的S7模块和设备,其?fucntional component会regard为两种类型。一种是推动结构(Communication Entity),提供通信接口并且能够发布命令或数据处理结果。再者,有数据对象(Data Object)的概念,它位于发送单元(source)能够管理的数据链条之一,被接收单元(sink)循环读取来测量设备状态、监视参数或实现控制流程实施。这些组件构成了一个集成通信框架,语义上可以理解为“结果处理管线”funcitonal framework,其中一个处理过程涵盖了众多从功能上更为高效的核准迭代与互惠交换。
此外,S7协议还包括了一组范围更为灵活的规则,这些规则能够基于条件、请求参数或事件序列进行动态响应调整以适应不同应用环境。平台上可能的包含算法、实验域和用户自定义参数使得提供自动化响应和决策支持成为可能。因此,具体设计方案需要确保满足系统性能技术法规的同时求得最大程度提升控制能力与支持环境下硬件设备的高效率运作。