2. 西门子PLC硬件与数据基础

做生产数据采集,第一步不是写通信程序,而是先弄清楚“数据到底住在PLC的哪里”。S7-1200/1500的CPU内部并不是一片扁平的存储空间,而是按功能划分为若干区域,每个区域有各自的访问方式、掉电保持特性和寻址语法。如果地址认知错了,采集程序即使能连上PLC,读回来的也可能是错位、过期或根本不存在的数据。

一、硬件结构:从CPU到存储卡

S7-1200与S7-1500在硬件组织上思路一致,但规模差异明显。以S7-1200 CPU 1214C DC/DC/DC为例,本体集成14点DI、10点DO、2点AI,本体右侧可扩展最多8个信号模块(SM)或通信模块(CM/CP);S7-1500则采用机架式结构,CPU带显示屏和诊断功能,通过U型连接器挂接电源、DI/DO/AI/AO、工艺模块和通信模块,扩展能力更强。

对数据采集而言,真正关键的是CPU内部的三个部分:工作存储器(Work Memory)存放运行中的程序和数据;装载存储器(Load Memory)通常由SIMATIC存储卡承担,保存离线项目和配方;保持存储器(Retentive Memory)用于掉电后仍需保留的数据。S7-1200的存储卡是必需的,S7-1500则内置装载存储器,存储卡主要用于配方和归档。采集程序读取的是工作存储器中的实时值,因此必须保证采集点位于CPU可访问的存储区内。

二、存储区划分:I、Q、M、DB、L

S7-1200/1500的存储区可归纳为五类,采集时最常用的是I、Q、M和DB:

  • 过程映像输入区(I):每个扫描周期开始时从物理输入模块刷新,地址如I0.0、IB0、IW0、ID0。采集数字量状态时读I区,但要注意它反映的是扫描周期开始时的值。
  • 过程映像输出区(Q):扫描周期结束时写入物理输出模块,地址如Q0.0、QB0、QW0。采集设备动作状态时,Q区可反映PLC下发的控制结果。
  • 位存储区(M):内部中间继电器,地址如M0.0、MB0、MW0、MD0。常用于标志位、状态字和中间结果,部分M区可设为掉电保持。
  • 数据块(DB):结构化数据的核心载体,分为全局DB和背景DB。采集的工艺参数、产量计数、配方数据通常都放在全局DB中。
  • 局部数据区(L):仅在OB、FC、FB内部有效的临时变量,随调用结束而释放,不能作为跨周期采集的数据源。

需要特别区分物理地址与过程映像地址。I区是过程映像,而通过“直接访问”语法(如PIB、PIW、PID)可以绕过过程映像直接读物理输入模块,适合需要立即读取的场合。采集程序中若对实时性要求高,应明确使用哪种访问方式,并在注释中标注。

三、数据类型:决定读取长度与解析方式

数据类型直接决定采集时读取的字节数和上位机的解析方式。S7-1200/1500常用数据类型如下:

数据类型长度取值范围/说明采集用途
Bool1位0或1设备启停、报警状态
Byte/Word/DWord8/16/32位无符号整数状态字、计数器
Int/DInt16/32位有符号整数温度、压力原始值
Real32位IEEE 754浮点数工艺参数、流量
String可变字符序列批次号、产品型号
DTL12字节日期时间结构时间戳

采集时最容易出错的是字节序。S7-1200/1500采用大端序(Big-Endian),即高位字节在前。例如一个Int值1000(十六进制03E8),在DB中存储为03 E8;而上位机若按小端序解析,会读成E8 03即-6141。因此通信程序中必须做字节交换,或使用支持S7协议的大端解析库。

四、DB块组织:采集数据的“货架”

全局DB是采集数据的主要来源。建议按“一个设备一个DB”或“一个工艺段一个DB”的原则组织,避免所有变量堆在一个DB里。DB内变量应使用符号名而非绝对地址,例如“DB1”.Motor1_Status,这样即使后续插入变量导致地址偏移,符号访问仍能正确对应。

DB有两种优化访问方式:标准访问(允许绝对地址,如DB1.DBX0.0)和优化访问(只允许符号访问,不支持绝对地址)。优化DB的访问速度更快,且支持保持性设置,但采集时无法用绝对地址读取。如果上位机通过S7协议按绝对地址采集,必须将DB设为“标准访问”或“优化访问但允许绝对地址”。这是实际项目中最常见的采集失败原因之一。

建议在DB属性中勾选“允许绝对地址访问”,同时保留符号名。这样既方便PLC程序维护,也方便上位机按偏移量批量读取。

五、地址与结构认知的落地检查

在开始编写采集程序前,建议完成以下检查:确认每个采集点位于I、Q、M或DB中,而非L区;确认数据类型与读取长度匹配;确认DB的访问方式与上位机寻址方式一致;确认需要掉电保持的数据已设置保持性;确认字节序处理方式。下面这张图把S7-1200/1500的存储区、数据类型与DB组织关系集中呈现,可作为采集地址规划的对照参考。

S7-1200/1500 存储区 · 数据类型 · DB组织关系图 CPU 内部 工作存储器 程序 + 实时数据 装载存储器 存储卡 / 离线项目 保持存储器 掉电保持数据 过程映像 I/Q 每周期刷新 M 位存储区 标志位 / 状态字 L 局部数据(临时) 数据类型 Bool(1位) Byte / Word / DWord Int / DInt(有符号) Real(IEEE 754) String(字符序列) DTL(日期时间) 字节序:大端 高位字节在前 上位机需交换 DB 块组织(采集数据货架) 全局DB:DB1_设备状态 Motor1_Status : Bool Motor1_Speed : Real 全局DB:DB2_工艺参数 Temp_SP : Real Pressure_PV : Int 全局DB:DB3_产量计数 Shift_Count : DInt Batch_No : String[20] 背景DB:FB_采集背景 与FB实例绑定 不可跨FB复用 访问方式选择 标准访问 → 支持绝对地址 优化访问 → 仅符号,需勾选允许绝对地址 采集地址规划原则:采集点必须位于 I / Q / M / DB 中;L 区不可跨周期采集;DB 访问方式需与上位机寻址一致

把这张图当作采集地址规划的对照表:左侧确认数据“住在哪”,中间确认数据“长什么样”,右侧确认数据“怎么组织”。三者一致,采集程序才有稳定的数据基础。实际项目中,建议在PLC变量表中为每个采集点标注存储区、数据类型、DB名称和偏移量,形成一份《采集点地址清单》,作为PLC程序与上位机配置的共同依据。