西门子的S7 协议,没有仍何关于S7协议的官方文档,是一个不透明的协议。关于S7的协议介绍,大都是非官方的一些七零八落的文档。
1. S7的通信模型
西蒙子S7 通讯遵从着基于TCP 的 Master(client) & Slave(Server)的通信模型。Master发送请求,用于从设备查询或向设备发送数据,或发出某些命令。
S7 协议的报文格式组成如下:
TPKT 是基于 ISO over TCP其被定义在RFC1006。ISO-COTP是在基于ISO8073协议(RFC905)的RFC2126中定义的。
S7协议是面向功能的或面向命令的。这意味着S7的传输由 请求(request) 和 回应(response) 组成(只有极少数例外)。
并行传输的数量和PDU的最大长度是在连接建立期间协商的。
S7 PDU 由以下内容构成:
项目 | 描述 |
---|---|
Header | 包含长度信息、PDU引用和消息类型常量 |
Parameters | 参数 |
Parameters Data | 参数数据 |
Data | 数据 |
例如, 将该数据从偏移量4开始写入DB10, Write DB 10 4和数据是命令的组成部分,并根据协议规范在消息中进行格式化。
在S400系列中,实现了所谓的循环数据I/O功能,这类似于传统的发布者-订户模型。PC可以订阅某些事件,而PLC会定期将请求的数据推送到网络。
S7 的命令主要分为以下几种:
- Data Read/Write
- Cyclic Data Read/Write
- Directory info
- System Info
- Blocks move
- PLC Control
- Security
- Programming
1.1 S7 通信的三种角色
- Client
发起请求 - Server
回应请求 - Partner
即是client 又是server。
作为Partner 的例子如下:
2. S7 的数据编址模型
S7 的数据读/写操作,是通过指定变量的内存区域,地址(offset),和Size或者类型来实现的。
PLC的内存区域类型如下:
内存区域 | 标号 | 描述 |
---|---|---|
Merker | [M] | 标记变量&寄存器标志 |
Data Block | [DB] | 数据块,DB区域是存储设备不同功能所需数据的最常见位置,这些数据块被编号为地址的一部分 |
Input | [I] | 数字和模拟输入模块值,被映射到存储器中 |
Output | [Q] | 类似内存映射的输出 |
Counter | [C] | PLC程序使用的不同计数器的值 |
Timer | [T] | PLC程序使用的不同计时器的值 |