1. 支持的区域 (Area)
S7 驱动支持以下内存区域。地址不区分大小写。
| 区域代码 | 名称 | 说明 | 地址格式示例 |
|---|---|---|---|
| DB | Data Block (数据块) | 全局数据块 | DB1.W10, DB10.INT20 |
| I | Input (输入映像区) | 数字量输入 | I0.0 (位), IB0 (字节), IW0 (字) |
| Q | Output (输出映像区) | 数字量输出 | Q0.0 (位), QB0 (字节), QW0 (字) |
| M | Memory (位存储区) | 内部标志位/中间变量 | M0.0 (位), MB0 (字节), MW0 (字) |
| V | V Memory | 映射到 DB1 (通常用于 S7-200 Smart) | V0.0 (位), VB0 (字节), VW0 (字) |
| T | Timer (定时器) | 定时器当前值 | T1, T10 |
| C | Counter (计数器) | 计数器当前值 | C1, C20 |
| DI | Instance DB (背景数据块) | 背景数据块 | DI1.W0 |
| L | Local (局部数据) | 临时局部数据 | LB0, LW0 |
| DP | Peripherals (外设 I/O) | 直接访问外设 | DPB0, DPW0 |
注意
- V 区映射:在 NG Gateway S7 驱动中,
V区默认映射到DB1。例如VB100等价于DB1.B100。 - DB 区格式:DB 地址必须包含块号,格式为
DB{块号}.{类型}{偏移}。
2. 数据类型与前缀 (Transport Size)
驱动通过地址中的类型前缀来确定数据读取长度和解码方式。支持长命名和短命名(如 INT 和 I)。
| 类型名称 | 长前缀 | 短前缀 | 长度 (Byte) | 对应的 Rust 类型 | 说明 |
|---|---|---|---|---|---|
| Bit | BIT | X | - | Boolean | 位访问 (需指定 .bit 索引) |
| Byte | BYTE | B | 1 | u8 / int8 | 单字节 |
| Char | CHAR | C | 1 | u8 (ASCII) | 字符 |
| Word | WORD | W | 2 | u16 | 无符号字 |
| Int | INT | I | 2 | i16 | 有符号整数 |
| DWord | DWORD, DW | - | 4 | u32 | 无符号双字 |
| DInt | DINT, DI | - | 4 | i32 | 有符号双整数 |
| Real | REAL | R | 4 | f32 | 浮点数 |
| Time | TIME | T | 4 | i32 (ms) | IEC 时间 (毫秒) |
| Date | DATE | - | 2 | u16 (days) | IEC 日期 (自 1990-1-1 起的天数) |
| TimeOfDay | TOD | - | 4 | u32 (ms) | 一天中的时间 (毫秒) |
| S5Time | S5TIME | ST | 2 | u16 (encoded) | S5 格式时间 |
| DateTime | DATETIME, DT | - | 8 | i64 (timestamp) | 日期时间 |
| DateTimeLong | DATETIMELONG, DTL | - | 12 | struct | 扩展日期时间 (S7-1200/1500) |
| String | STRING | S | n + 2 | String | S7 字符串 (首字节为最大长度) |
| WString | WSTRING | WS | 2n + 4 | String | S7 宽字符串 |
提示
- 如果不指定类型前缀(且没有小数点),默认按 Byte 解析(例如
M10等价于MB10)。 - 如果有小数点但没有类型前缀(如
M10.2),自动解析为 Bit。
3. 地址格式与示例
下表展示了各种常见的地址写法及其解析结果。
3.1 I/Q/M/V 区示例
I/Q/M 区的地址格式通常为 {区域}{类型}{字节偏移} 或 {区域}{字节偏移}.{位索引}。
| 地址 | 等效标准写法 | 数据类型 | 说明 |
|---|---|---|---|
| I0.0 | IX0.0 | Bit | I 区,第 0 字节,第 0 位 |
| Q1.7 | QX1.7 | Bit | Q 区,第 1 字节,第 7 位 |
| M10.5 | MX10.5 | Bit | M 区,第 10 字节,第 5 位 |
| V100.0 | DB1.X100.0 | Bit | V 区 (DB1),第 100 字节,第 0 位 |
| IB0 | IBYTE0 | Byte | I 区,第 0 字节 |
| QB10 | QBYTE10 | Byte | Q 区,第 10 字节 |
| MB20 | MBYTE20 | Byte | M 区,第 20 字节 |
| IW0 | IWORD0 | Word (u16) | I 区,第 0 字节开始的字 |
| QW4 | QWORD4 | Word (u16) | Q 区,第 4 字节开始的字 |
| MW10 | MWORD10 | Word (u16) | M 区,第 10 字节开始的字 |
| ID0 | IDWORD0 | DWord (u32) | I 区,第 0 字节开始的双字 (也可写 IDW0) |
| MD100 | MDWORD100 | DWord (u32) | M 区,第 100 字节开始的双字 (也可写 MDW100) |
| MD104 | MDINT104 | DInt (i32) | M 区,第 104 字节开始的双整数 (也可写 MDI104) |
| MD200 | MREAL200 | Real (f32) | M 区,第 200 字节开始的浮点数 (也可写 MR200) |
3.2 DB 区示例
DB 区地址必须以 DB 开头,后跟块号。格式:DB{块号}.{类型}{偏移}。注意:NG Gateway 驱动暂不支持西门子传统的 DBW/DBD/DBX 组合前缀,请使用标准类型前缀。
| 地址 | 解析含义 | 对应 Rust 类型 | 说明 |
|---|---|---|---|
| DB1.X0.0 | Bit | bool | DB1,第 0 字节第 0 位 (也可写 DB1.BIT0.0) |
| DB10.B0 | Byte | u8 | DB10,第 0 字节 (也可写 DB10.BYTE0) |
| DB10.W2 | Word | u16 | DB10,第 2 字节开始的字 (也可写 DB10.WORD2) |
| DB10.I4 | Int | i16 | DB10,第 4 字节开始的整数 (也可写 DB10.INT4) |
| DB1.DW0 | DWord | u32 | DB1,第 0 字节开始的双字 (也可写 DB1.DWORD0) |
| DB1.DI4 | DInt | i32 | DB1,第 4 字节开始的有符号双整数 (也可写 DB1.DINT4) |
| DB1.R8 | Real | f32 | DB1,第 8 字节开始的浮点数 (也可写 DB1.REAL8) |
| DB2.S0 | String | String | DB2,第 0 字节开始的字符串 (也可写 DB2.STRING0) |
| DB2.WS100 | WString | String | DB2,第 100 字节开始的宽字符串 (也可写 DB2.WSTRING100) |
| DB5.DT0 | DateTime | i64 | DB5,第 0 字节开始的日期时间 |
3.3 Timer / Counter 示例
| 地址 | 类型 | 说明 |
|---|---|---|
| T1 | Timer | 定时器 T1 |
| C10 | Counter | 计数器 C10 |
