西门子 PLC 的地址体系是按数据类型和存储区域划分 的,核心分为过程映像区、位存储区、数据块区、定时器 / 计数器区等,不同区域的地址格式和用途差异显著,直接决定了 C# 与 PLC 通信时的地址配置和数据解析逻辑。
一、 核心存储区域与地址格式
西门子 PLC 的地址由 区域标识符 + 字节地址 + 位地址(可选) 组成,不同区域的标识符和格式如下:
| 存储区域 | 区域标识符 | 地址格式示例 | 用途说明 |
|---|---|---|---|
| 输入过程映像区 | I (Input) | I0.0、I2.3、IB5、IW10、ID12 | 采集外部传感器 / 开关信号,只读;B = 字节,W = 字,D = 双字,位地址可选。 |
| 输出过程映像区 | Q (Output) | Q0.1、QB3、QW8、ID20 | 控制外部执行器(继电器 / 接触器),可读写;格式同输入区。 |
| 位存储区 | M (Memory) | M1.2、MB4、MW6、MD16 | 程序内部中间变量存储,相当于 "临时寄存器",可读写。 |
| 数据块区 | DB (Data Block) | DB1.DBX0.0、DB1.DBB2、DB1.DBW4、DB1.DBD8 | 用户自定义数据块,用于存储工艺参数 / 设备状态,可读写;是 C# 通信的核心区域。 |
| 定时器区 | T (Timer) | T3、T10 | 存储定时器的当前值和状态,T + 编号。 |
| 计数器区 | C (Counter) | C5、C20 | 存储计数器的当前值和状态,C + 编号。 |
关键格式说明
-
位地址 :仅用于单个布尔量,格式为
区域标识符+字节地址.位地址,例如I0.0代表输入区第 0 字节的第 0 位。 -
字节 / 字 / 双字地址 :用于连续数据,后缀为
B/W/D,例如DB1.DBW4代表数据块 1 中从字节 4 开始的 1 个字(2 字节)。 -
数据块地址前缀 :必须带
DBx.前缀,DBX是位访问,DBB/W/D是字节 / 字 / 双字访问。
二、 数据块(DB)地址的核心规则
数据块是 C# 与 PLC 通信最常用的区域,其地址与数据块的结构定义强相关,需重点注意:
-
数据块的类型
-
全局数据块 :可被所有程序块访问,地址直接用
DBx.xxx。 -
背景数据块:绑定特定 FB(功能块),地址需结合 FB 的接口变量定义。
-
-
地址偏移量计算
数据块内的变量地址是
相对于数据块起始地址的偏移量,例如:
数据块 DB1 变量定义 数据类型 偏移量(字节) PLC 地址 StartFlag BOOL 0.0 DB1.DBX0.0 Speed_Set INT 2 DB1.DBW2 Pressure_Value REAL 4 DB1.DBD4 注意:BOOL 类型占用 1 个位,但西门子 PLC 中变量默认按字节对齐,相邻 BOOL 可能会被压缩存储(需在数据块属性中设置 "优化的块访问")。
-
优化与非优化数据块
-
非优化数据块 :支持直接按字节偏移访问(如
DB1.DBB2),适合 C# 通信。 -
优化数据块 :默认隐藏字节偏移,需在 TIA Portal 中手动勾选 "显示偏移量" ,或通过符号名访问(如
DB1.StartFlag)。
-
三、 地址与数据类型的匹配规则
C# 与 PLC 通信时,地址长度必须和数据类型的字节数一致,否则会导致数据解析错误:
| PLC 数据类型 | 字节数 | 对应 C# 类型 | PLC 地址示例 |
|---|---|---|---|
| BOOL | 1 位 | bool | DB1.DBX0.0 |
| BYTE | 1 | byte | DB1.DBB1 |
| WORD | 2 | ushort | DB1.DBW2 |
| INT | 2 | short | DB1.DBW4 |
| DWORD | 4 | uint | DB1.DBD6 |
| DINT | 4 | int | DB1.DBD8 |
| REAL | 4 | float | DB1.DBD12 |
| STRING | 254 | string | DB1.DBB20(需指定长度) |
四、 通信中常见的地址错误
-
遗漏数据块前缀 :例如将
DB1.DBW4写成DBW4,PLC 无法识别。 -
地址长度不匹配 :用
DB1.DBW2访问 REAL 类型(4 字节),会导致数据截断。 -
优化数据块未显示偏移量:直接用偏移地址访问优化数据块,PLC 返回错误。
-
字节序混淆 :西门子 PLC 中字 / 双字类型默认是大端序,但 REAL 类型无需字节序转换,C# 解析时需针对性处理。
五、 符号地址与绝对地址的区别
| 地址类型 | 格式示例 | 优点 | 缺点 |
|---|---|---|---|
| 绝对地址 | DB1.DBW4 | 直接定位字节偏移,适合 C# 读写 | 数据块结构变化时需同步修改地址 |
| 符号地址 | DB1.Speed_Set | 与变量名绑定,结构变化无需改地址 | 部分通信库不支持,需 PLC 开启符号访 |