Skip to content

1. 支持的区域 (Area)

S7 驱动支持以下内存区域。地址不区分大小写。

区域代码名称说明地址格式示例
DBData Block (数据块)全局数据块DB1.W10, DB10.INT20
IInput (输入映像区)数字量输入I0.0 (位), IB0 (字节), IW0 (字)
QOutput (输出映像区)数字量输出Q0.0 (位), QB0 (字节), QW0 (字)
MMemory (位存储区)内部标志位/中间变量M0.0 (位), MB0 (字节), MW0 (字)
VV Memory映射到 DB1 (通常用于 S7-200 Smart)V0.0 (位), VB0 (字节), VW0 (字)
TTimer (定时器)定时器当前值T1, T10
CCounter (计数器)计数器当前值C1, C20
DIInstance DB (背景数据块)背景数据块DI1.W0
LLocal (局部数据)临时局部数据LB0, LW0
DPPeripherals (外设 I/O)直接访问外设DPB0, DPW0

注意

  • V 区映射:在 NG Gateway S7 驱动中,V 区默认映射到 DB1。例如 VB100 等价于 DB1.B100
  • DB 区格式:DB 地址必须包含块号,格式为 DB{块号}.{类型}{偏移}

2. 数据类型与前缀 (Transport Size)

驱动通过地址中的类型前缀来确定数据读取长度和解码方式。支持长命名和短命名(如 INTI)。

类型名称长前缀短前缀长度 (Byte)Rust 类型说明
BitBITX1/8bool位访问(必须指定 .bit 索引;在 wire 上按 1 字节承载)
ByteBYTEB1u8单字节(如需 i8 语义请在业务侧转换)
CharCHARC1char单字符(按 1 字节码值写入/读取)
WordWORDW2u16无符号字
IntINTI2i16有符号整数
DWordDWORDDW4u32无符号双字
DIntDINTDI4i32有符号双整数
RealREALR4f32浮点数
TimeTIMET4chrono::DurationIEC 时间(毫秒);注意与区域 T(Timer)不同
DateDATE-2chrono::NaiveDateIEC 日期(驱动会解码为日期)
TimeOfDay-TOD4chrono::NaiveTime一天中的时间(毫秒),解码为 NaiveTime
S5TimeS5TIMEST2chrono::DurationS5 格式时间,解码为 Duration
DateTimeDATETIMEDT8chrono::NaiveDateTimeDATE_AND_TIME(BCD,8 字节)
DateTimeLongDATETIMELONGDTL12chrono::NaiveDateTimeDTL(12 字节,S7-1200/1500)
StringSTRINGS256 (envelope)StringSTRING 结构整体读取(Latin-1):[max:u8][len:u8][payload...]
WStringWSTRINGWS512 (envelope)StringWSTRING 结构整体读取(UTF-16BE):[max:u16][len:u16][payload...]

提示

  • 如果不指定类型前缀(且没有小数点),默认按 Byte 解析(例如 M10 等价于 MB10)。
  • 如果有小数点但没有类型前缀(如 M10.2),自动解析为 Bit

3. 地址格式与示例

下表展示了各种常见的地址写法及其解析结果。

3.1 I/Q/M/V 区示例

I/Q/M/V 区支持三类写法:

  1. 传统地址:常见于 KepServer/Step7 的 ID0/MD200/VD100 等简写(注意:其中部分写法在 NG Gateway 不直接支持,需要迁移)。
  2. NG Gateway 完整地址:使用长类型前缀(如 WORD/REAL/DINT),可读性最好。
  3. NG Gateway short 地址:使用短类型前缀(如 W/R/DI)或按规则省略类型(推荐仍尽量显式声明类型)。
传统地址NG Gateway 完整地址NG Gateway short 地址S7 数据类型Rust 类型说明
I0.0IBIT0.0IX0.0BitboolI 区,第 0 字节,第 0 位(Bit 访问必须包含 .bit
Q1.7QBIT1.7QX1.7BitboolQ 区,第 1 字节,第 7 位
M10.5MBIT10.5MX10.5BitboolM 区,第 10 字节,第 5 位
V100.0DB1.BIT100.0VX100.0BitboolV 区在驱动内映射为 DB1.*(本行等价于 DB1.X100.0
IB0IBYTE0IB0Byteu8I 区,第 0 字节
QB10QBYTE10QB10Byteu8Q 区,第 10 字节
MB20MBYTE20MB20Byteu8M 区,第 20 字节
IW0IWORD0IW0Wordu16I 区,第 0 字节开始的无符号 16 位(大端)
QW4QWORD4QW4Wordu16Q 区,第 4 字节开始的无符号 16 位(大端)
MW10MWORD10MW10Wordu16M 区,第 10 字节开始的无符号 16 位(大端)
ID0IDWORD0IDW0DWordu32I 区,第 0 字节开始的无符号 32 位(大端);请用 IDW*/IDWORD* 迁移
MD200MDINT200MDI200DInti32M 区,第 200 字节开始的有符号 32 位(大端);传统 MD* 语义为“4 字节”,在本驱动需显式声明 DI/DINT
MD200MREAL200MR200Realf32M 区,第 200 字节开始的 IEEE-754 f32(大端);传统 MD* 若代表浮点,请用 R/REAL
VD100DB1.DWORD100VDW100DWordu32V 区(DB1)第 100 字节开始的无符号 32 位(大端);传统 VD* 请改为 VDW* 或直接用 DB1.DW*

3.2 DB 区示例

DB 区地址必须以 DB 开头,后跟块号。格式:DB{块号}.{类型}{偏移}

迁移提醒

NG Gateway 当前地址解析器(见 ng-gateway-southward/s7/src/protocol/frame/addr.rs不支持西门子传统 DBX/DBB/DBW/DBD 这类“组合前缀”(例如 DB1.DBD100)。请使用下表中的 NG Gateway 完整/short 地址

传统地址NG Gateway 完整地址NG Gateway short 地址S7 数据类型Rust 类型说明
DB1.DBX0.0DB1.BIT0.0DB1.X0.0BitboolDB1,第 0 字节第 0 位(Bit 必须写成 *.Xbyte.bit*.BITbyte.bit
DB10.DBB0DB10.BYTE0DB10.B0Byteu8DB10,第 0 字节
DB10.DBW2DB10.WORD2DB10.W2Wordu16DB10,第 2 字节开始的无符号 16 位(大端)
DB10.DBW4DB10.INT4DB10.I4Inti16DB10,第 4 字节开始的有符号 16 位(大端)
DB1.DBD0DB1.DWORD0DB1.DW0DWordu32DB1,第 0 字节开始的无符号 32 位(大端)
DB1.DBD4DB1.DINT4DB1.DI4DInti32DB1,第 4 字节开始的有符号 32 位(大端)
DB1.DBD8DB1.REAL8DB1.R8Realf32DB1,第 8 字节开始的 IEEE-754 f32(大端);传统 DBD* 仅表示“4 字节”,在本驱动必须显式声明 DW/DI/R
DB2.STRING0DB2.STRING0DB2.S0StringStringS7 STRING 结构([max:u8][len:u8][payload...],Latin-1),地址应指向结构起始偏移
DB2.WSTRING100DB2.WSTRING100DB2.WS100WStringStringS7 WSTRING 结构([max:u16][len:u16][payload...],UTF-16BE),地址应指向结构起始偏移
-DB5.DATETIME0DB5.DT0DateTimechrono::NaiveDateTime8 字节 DATE_AND_TIME(BCD)
-DB5.DATETIMELONG0DB5.DTL0DateTimeLongchrono::NaiveDateTime12 字节 DTL(S7-1200/1500);与 DT 不同,纳秒字段为 24-bit BE

最佳实践与常见坑

  • 尽量显式声明类型:生产环境建议用 short 且显式的类型前缀(如 DB1.R8MDI200),避免依赖隐式 Byte(例如 M10)带来的歧义。
  • Bit 地址必须包含 .bit:例如 QX1 在驱动中会被判为非法,必须写成 QX1.0(见解析器测试用例)。
  • 传统 DBD/MD/VD 仅代表“4 字节”:在 NG Gateway 语法中必须明确是 DW(u32)/DI(i32)/R(f32)中的哪一种。
  • V 区是 DB1 的语法糖VB100 等价于 DB1.B100,在跨团队协作/排查问题时,直接写 DB1.* 通常更直观。
  • STRING/WSTRING 偏移要指向结构起始:PLC 中 STRING/WSTRING 变量本身包含长度头部(2/4 字节)。驱动按结构整体读取并解码,偏移不要填到第一个字符处。
  • 端序与对齐:数值类型按 S7 约定使用大端编码。建议按类型自然对齐(Word 从偶数开始、DWord/Real 从 4 的倍数开始)以提高可读性并减少 PLC 侧潜在开销。

3.3 Timer / Counter 示例

地址类型说明
T1Timer定时器 T1
C10Counter计数器 C10

基于 Apache License 2.0 许可发布.