Siemens S7
读取 Siemens S7 PLC 的 I、Q、M 或 DB 区。先向 PLC 工程人员确认 IP、CPU 型号、机架与槽号,以及一个允许读取的地址和类型。
先读一个 DB 变量
以下以 DB1 字节偏移 0 的 Int16 变量为例。DB 块与变量必须已经存在,不能照抄地址后期待 PLC 自动创建它。
- 打开“开发配置 → 采集配置”,新建 TCP 客户端通道,远程地址填
PLC的IP:102并保存。 - 在通道下新增设备,采集插件选择“Siemens S7”。
- “PLC类型”选择实际型号,不要把默认的
S200留给 S1200 或 S1500 使用。 - 填写项目要求的
Rack、Slot;LocalTSAP没有特殊连接要求时先保持默认。执行间隔先用1000毫秒,保存并启用设备。 - 新增变量,名称填
TestValue,寄存器地址填DB1.0,数据类型选Int16,保存并启用。 - 在变量列表查看在线状态和当前值,与 PLC 在线监视值对比。读到正确值后再添加其余地址。
S7-1200/1500 的 PLC 侧还需要允许相应的远程访问,按绝对地址读取的 DB 不能使用优化块访问。请 PLC 工程人员按实际 CPU 和 TIA 版本检查,不要为联调直接关闭所有保护。参见 Siemens 远程访问设置和 DB 访问限制。
常见地址怎么填
| PLC 点位 | 网关地址 | 数据类型 |
|---|---|---|
| DB1 第 0 字节起的有符号 16 位整数 | DB1.0 | Int16 |
| DB1 第 2 字节起的 32 位浮点数 | DB1.2 | Float |
| DB1 第 6 字节第 0 位 | DB1.6.0 | Boolean |
| M 区第 0 字节第 1 位 | M0.1 | Boolean |
地址指定起点,数据类型决定读多少字节。DB1.2 中的 2 是字节偏移,不是“第 2 个变量”。
支持的通道和数据类型
| 通道类型 | 配置前检查 |
|---|---|
| TCP 客户端 | 确认设备 IP、端口和网关到设备的网络可达性。 |
可选数据类型: Boolean、Byte、Int16、UInt16、Int32、UInt32、Int64、UInt64、Float、Double、String、Decimal
插件参数
Siemens S7 只使用 TCP 客户端通道,不填写串口参数。连接超时、重试和并发先保持默认,公共设置见采集配置。
协议参数
| 参数 | 说明 |
|---|---|
| PLC类型 | 选择实际 CPU 型号。默认 S200 不适用于所有 S7 PLC。 |
| Rack | CPU 所在的机架号,默认 0;按 PLC 项目填写。 |
| Slot | CPU 模块所在的槽位号,默认 0;按 PLC 项目填写,不是网口编号。 |
| LocalTSAP | 本地 TSAP 连接标识,默认 0。有专用连接要求时按 PLC 连接资源配置填写。 |
| 最大打包长度 | 默认 200。当前 S7 读取计划不会将此值直接作为每个请求的跨度上限;缩小该值后仍需观察实际请求。 |
| 读写超时 | 等待协议应答的时间,单位毫秒;与采集执行间隔分别设置。 |
| 帧前时间 | 发送请求前的等待时间,单位毫秒;增加后会延长一轮读取。 |
| 数据解析顺序 | 按 PLC 的实际字节布局选择。可用已知的 UInt32 源值逐项对照,不能只凭数值大小判断。 |
| 字符串反转字节字 | 当前 S7 采集连接不应用这个开关;固定 ASCII 源 41 42 31 32 仍按 AB12 读取。不要依赖此项修正文本布局。 |
| 失败重试次数 | 通信失败后的重试设置;不解决 DB 越界、权限或类型错误。 |
| 读写占空比、写优先 | 属于公共采集调度设置,说明见采集执行策略。 |
“PLC类型”选项为 S200、S200Smart、S300、S400、S1200 和 S1500。Rack、Slot 和 LocalTSAP 会参与重新建立 S7 会话,修改后需重新启用设备。
LocalTSAP=0 使用型号默认值。当前非零整数与线上两字节标识存在取值差异,例如填写十进制 258 不能保证发出 01 02,应在握手消息中核对 Calling TSAP。没有专用连接要求时使用默认值;不要照搬其他项目的特殊整数。
协商 PDU 决定本次会话可用的协议数据范围,与“最大打包长度”分别观察。主站表单没有独立的 PduLength 或 ConnectionType 输入项。型号切换和重新握手也不能代替真实 PLC 的访问权限、连接资源和点位布局检查。
地址规则
- S7协议寄存器地址格式
- Txxxxx Timer寄存器,例如T100/T100.1
- Cxxxxx,Counter寄存器,例如C100/C100.1
- AIxxxxx,AI寄存器,例如AI100/AI100.1
- AQxxxxx,AQ寄存器,例如AQ100/AQ100.1
- Ixxxxx,I寄存器,例如I100/I100.1
- Qxxxxx,Q寄存器,例如Q100/Q100.1
- Mxxxxx,M寄存器,例如M100/M100.1
- DBxxxxx,DB寄存器,例如DB100.1/DB100.1.1
- 宽字符串在地址前加
W=true;,例如W=true;DB1.0;不加时按普通字符串解析。
DB 地址中的第一个数字是 DB 块号,后面的数字是字节偏移;最后再写 .0~.7 才表示位号,例如 DB100.1 为 DB100 的第 1 字节,DB100.1.1 为该字节的第 1 位。V 区等价于 DB1。
数组与字符串长度
| 需要读取的内容 | 填写方式与检查方法 |
|---|---|
| 一个数值 | 采集变量的数组长度填 0,表示标量;调试面板读取数量填 1,表示读取一个元素。 |
| 三个连续 Int16 | 起点如 DB1.600,采集变量数组长度填 3。占用 6 字节,源中连续三个值应分别返回。 |
| 固定四字节 ASCII | 类型选 String,地址如 DB1.600;len=4;encoding=ascii,数组长度保持标量。源 41 42 31 32 应读到 AB12。 |
| UTF-8 文本 | len 按字节预留,例如“网关”占 6 个 UTF-8 字节;不能按两个汉字填 2。 |
| S7 STRING | 使用与 PLC 一致的容量和当前长度头,可在地址中指定 vsl=true;encoding=ascii。头部不是文本内容,S200Smart 的布局需单独核对。 |
| S7 WSTRING | 按实际大端 UTF-16 布局填写,例如 W=true;DB1.600;encoding=bigendianunicode,并核对四字节头及实际范围。W=true 选择宽字符串结构,不会自动纠正错误编码。采集与调试直接读的头部校验不同,小容量 WSTRING 在调试中可能被拒绝;先比较原始头与采集值。 |
类型决定每个元素的占用:Int16 为 2 字节、Float 为 4 字节、Double 为 8 字节、Decimal 为 16 字节。Decimal 采用网关转换器的十六字节表示,不能当成 PLC 的普通 REAL 或 LREAL。PLC 工程定义为 REAL/LREAL 时应分别使用 Float/Double。
特殊方法
| 方法 | 用途 | 参数 |
|---|---|---|
ReadWriteDateAsync | 读取或写入 S7 日期值。 | address,可选 value |
ReadWriteDateTimeAsync | 读取或写入 S7 日期时间值。 | address,可选 value |
读取时不填写值;写入时只使用现场允许的安全点位。
在变量编辑器选择日期特殊方法后,寄存器地址改为方法参数的 JSON 数组,例如读取 DATE 可填 ["DB1.700"]。DATE 是自 1990-01-01 起的天数;大端源字节 00 01 对应 1990-01-02。DATE_AND_TIME 使用八字节 BCD 日期时间布局,不能按普通整数或文本解释。切回普通点位时,应清除特殊方法并恢复普通地址、类型和数组长度。
设备调试
进入“开发配置 → 采集配置”,选择当前设备后点击“更多功能”并打开“调试”。
| 功能 | 作用 |
|---|---|
| 读写 | 按 S7 地址读取或写入测试值。写入前确认 DB/存储区和现场安全。 |
| 消息 | 查看 S7 会话、请求、响应和错误状态,用于核对机架、插槽、地址和数据长度。 |
读写

- 打开“读写”,填入已确认存在的地址,例如
DB1.0。 - 选择与 PLC 一致的数据类型,本例为
Int16,读取数量填1。 - 点击“读取”,核对返回值;失败时查看错误消息和“消息”页签。
不要点击“写入”来验证读取配置。写入会修改 PLC 数据,必须另行确认地址和现场安全。
消息

查看设备收发消息和协议日志,定位报文格式、连接和解析问题。
核对会话、布局和写入
- 连接建立后先查看“消息”中的握手结果;PLC 型号、Rack、Slot、LocalTSAP 修改后,应确认已重新建立会话。
- 从一个已知的
Int16开始,再分别加入位、32 位数、数组和字符串。新增地址前按实际字节数预留范围,避免浮点数和相邻变量重叠。 - 连续点位使用相同的已知源数据,对比当前值与原始响应,确认字节序。改变数据类型会改变解释方式,不会改变 PLC 存储内容。
- 批量读取失败时先拆成单点,区分某个地址越界与整条连接失败;组包和 PDU 受协商上限约束。
- 安全测试点写入后,先看逐点写入结果,再通过独立 S7 客户端或 PLC 在线监视回读。网关采集显示的结果也应在后续周期更新。
写请求返回、写后检查和周期采集分别有时间窗口。读写超时是等待应答的上限,执行周期是采集调度间隔,两者调整方法见采集执行策略。
没读到正确值时
| 现象 | 先检查 |
|---|---|
| 无法连接 | IP、102 端口、PLC 型号、Rack/Slot 及 PLC 连接资源 |
| 能连接但 DB 读取失败 | DB 是否存在、偏移是否越界、访问权限及优化块设置 |
| 值不正确 | 字节偏移、数据类型和字节序,不要按变量序号填写地址 |
| 宽字符串乱码 | 地址是否带 W=true;,类型、数组长度与 PLC 字符串布局是否一致 |
| 特殊方法失败 | 参数、用户权限及 PLC 是否允许当前操作;不要反复尝试写入或控制 |