西门子PLC协议-S7COMM-扩展 2020-11-23 程序之旅,记录 暂无评论 1474 次阅读 ## 西门子PLC协议-S7COMM-扩展 [TOC] 之前详细写S7中PDU,但S7 Communication被封装在TPKT和SO-COTP协议中,那么S7 Communication 至少还需要以下构成: - COTP:ISO 8073 COTP面向连接的传输协议。 - TPKT:应用层数据传输协议,介于TCP和COTP协议之间。传输层协议,主要用来在COTP和TCP之间建立桥梁。 - TCP:协议数据单元,tcp的payload发送内容。 ### S7 Communication结构 ![img](https://mufeng-blog.oss-cn-beijing.aliyuncs.com/worker/20201123132934.jpeg) ### TPKT 协议 #### 结构 ![img](https://mufeng-blog.oss-cn-beijing.aliyuncs.com/worker/20201123133030.jpeg) - Version:1byte,版本号 - Reserved:1byte,保留字 - Length:2byte,长度,TPKT、COTP、S7的PDU的总长度,也可以说是TCP的payload的长度 #### 举例 ![image-20201123114824988](https://mufeng-blog.oss-cn-beijing.aliyuncs.com/worker/20201123114826.png) 版本位3,长度位25(0x0019)的TPKT协议 ### COTP 协议 ![image-20201123114840501](https://mufeng-blog.oss-cn-beijing.aliyuncs.com/worker/20201123114841.png) #### 简介 COTP(ISO 8073/X.224 COTP Connection-Oriented Transport Protocol)是OSI 7层协议定义的位于TCP之上的协议。COTP以“Packet”为基本单位来传输数据,这样接收方会得到与发送方具有相同边界的数据。**(摘取网上定义)** 结构 COTP协议有两种形态 - COTP Connection Packet:COTP连接包 - COTP Function Packet:COTP功能包 #### COTP连接包 - Length:(1byte)长度,COTP协议长度,不包括COTP后续数据长度,也不包括Length长度,一般来说是17 bytes。 - Type:(1byte)类型 | code | description | 描述 | | ---- | --------------------------------- | ------------ | | 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 | 断开请求 | | 0xC0 | DC Disconnect Confirm | 断开确认 | | 0xD0 | CC Connect Confirm | 连接确认 | | 0xE0 | CR Connect Request | 连接请求 | | 0xF0 | DT Data | 数据传输 | - DST Ref:(2bytes)目标关联值 - SRC Ref:(2bytes)源关联值 - Opt:(1byte) - Parameters:参数值 - code:编号 - length:长度 - Data:数据内容 ##### 举例 ``` 11 E0 00 00 00 01 00 C1 02 01 00 C2 02 01 02 C0 01 09 ``` > opt 和parameters具体是什么这里就不继续深究 #### COTP功能包 功能包就比较简单,就只有长度类型和 ##### 举例 ``` 02 F0 80 ``` ### 最后 不管是TPKT除了数据长度改变外,其他的内容都是不变的,COTP协议基本上都是不变的,在写代码的时候大可写死就行。 所以解决了之前为什么使用Netty不能直接直接发起S7协议的问题,只需要封装上TPKT协议和COTP协议即可。 打赏: 微信, 支付宝 标签: none 本作品采用 知识共享署名-相同方式共享 4.0 国际许可协议 进行许可。