跳到主要内容

西门子 S7

采用西门子 (SIEMENS) SIMATIC S7 系列的标准通信规约(ISO-on-TCP / S7 协议)进行通信。

支持系列:S7-300 / S7-400 / S7-1200 / S7-1500 (+ S7-200 / S7-200 SMART / SINUMERIK 828D)


注册表单输入项

输入栏填写内容示例
IP 地址PLC 的 IP192.168.0.70
端口S7 通信端口102 (标准 / 不建议更改)
Controller Type (controller-type)PLC 系列S7_400 (默认) / S7_300 / S7_200 / S7_200_SMART / S7_1200 / S7_1500 / SINUMERIK_828D
Rack (local-rack)rack 编号通常为 0
Slot (local-slot)CPU slot 编号因系列而异 (见下表) — 未指定时为 3
多点读取 (multi-read)是否按块使用单次往返批量读取勾选时为 true (默认不使用 — 按标签逐个读取)
多点读取最大项数 (multi-read-max-items)每块的项数上限18 (默认,PDU 240 预算)

各系列的 rack / slot

系列rackslot
S7-30002
S7-40003 (可能因 CPU 插槽而异)
S7-120000 (或 1)
S7-150000 (或 1)

TIA Portal 侧的前置设置

出于安全考虑,要从外部读取西门子 PLC 的值,需要进行以下设置。

  1. 在 TIA Portal 中打开 PLC 属性 → Protection & Security → 启用 “Permit access with PUT/GET communication from remote partner”
  2. 数据块(DB) 属性 → Optimized block access 关闭 (改为绝对地址模式)

若未完成这两项设置,将出现 “Address out of range” 或 “Connection rejected”。


标签的 PLC 地址表示法

直接沿用西门子标准存储器表示法。以 % 开头。

表示法含义
%DB1.DBX0.0DB1 中 byte 0 的 bit 0 (布尔值)
%DB1.DBB0DB1 的 byte 0 (8-bit)
%DB1.DBW0DB1 的 word 0 (16-bit)
%DB1.DBD0DB1 的 double word 0 (32-bit / 实数)
%I0.0输入位 0.0
%Q0.0输出位 0.0
%M0.0存储位 0.0
%MW100存储器 word 100
%MD100存储器 double 100 (32-bit)

不写 % 也能正常工作,但为与手册及其他工具保持一致,建议加上 %


数据类型匹配

PLC 中的值数据类型类型辅助PLC 地址示例
布尔 (Bool)Boolean(留空)%DB1.DBX0.0, %I0.0, %M0.0
8-bitIntegerB%DB1.DBB0
16-bit 整数Integer(留空)%DB1.DBW0, %MW100
32-bit 整数IntegerDW%DB1.DBD0, %MD100
32-bit 实数 (最常见的实数类型)FloatREAL%DB1.DBD0
64-bit 实数DoubleLREAL%DB1.DBD8
字符串 (S7 STRING)StringSTR[N]%DB1.DBB100
确认 Bool 表示法

Bool 必须使用 %DB1.DBX{byte}.{bit} 格式。不要遗漏末尾的 .0 ~ .7


常见问题与解决办法

现象 / 消息可能原因解决办法
“Connection refused”端口 102 被阻断,PUT/GET 未启用在 TIA Portal 中启用 PUT/GET 通信许可
“Connection rejected by remote”rack/slot 不匹配参照上表修正 rack/slot
“Address out of range”DB 处于 Optimized 模式 (非绝对地址模式)在 TIA Portal 中打开 DB 属性 → 关闭 Optimized block access
所有值均为 0DB 编号 / 偏移量错误在 TIA Portal Watch table 中确认同一地址是否确实可用
只有 Bool 读不到缺少 .bit%DB1.DBX0.0 那样精确写到 .bit

常用示例

单台产线 PLC 上常见的标签组合

标签名称PLC 地址数据类型类型辅助
泵运行 (DB)%DB1.DBX0.0Boolean(留空)
输入信号%I0.0Boolean(留空)
压力 (kPa, 实数)%DB1.DBD8FloatREAL
累计计数%MD100IntegerDW
批次名称%DB1.DBB100StringSTR[16]

更详细的示例 / 自动化注册

请参考 高级 — REST API 中的 S7 示例。