PLC 记录不同时刻的采样数值(以三菱 FX3U / 西门子 S7-200 为例)
PLC 记录不同时刻的采样数值是工业现场数据追溯、工艺分析的核心需求(如温度 / 压力 / 电流采样、设备运行参数记录),核心逻辑是 **“触发条件 + 时间戳 + 数据存储”**,需结合 PLC 的实时时钟(RTC)、数据寄存器(D)/V 区、循环存储 / 断电保持功能实现。以下分「通用原理」「主流 PLC 实操(三菱 FX3U / 西门子 S7-200)」「进阶优化」三部分详解,覆盖不同采样场景(定时采样、事件触发采样)。
一、核心原理:记录不同时刻采样值的 3 个关键要素
无论哪种 PLC,记录逻辑都需满足以下核心环节,缺一不可:
| 关键要素 | 实现方式 | 作用 |
|---|---|---|
| 时间戳(时刻) | 读取 PLC 内置实时时钟(RTC),获取年 / 月 / 日 / 时 / 分 / 秒,打包为 “时间数据” | 标记采样值对应的具体时刻 |
| 采样触发 | 定时触发(如每隔 10s)、事件触发(如传感器信号、按键、报警)、周期扫描触发 | 决定 “何时” 采集数据 |
| 数据存储 | 连续寄存器区(如 FX3U 的 D1000~D2000、S7-200 的 V1000~V2000),支持循环覆盖 / 断电保持 | 保存 “时刻 + 采样值”,避免数据丢失 |
二、三菱 FX3U 实操:记录不同时刻采样值(最常用)
FX3U 自带实时时钟(无需扩展模块),支持断电保持寄存器(D200~D511 默认断电保持,可通过参数扩展),适合中小规模采样记录。
场景 1:定时采样(每隔 N 秒记录 1 次,如 10s 采样 1 次温度值)
步骤 1:初始化实时时钟(首次使用校准时间)
FX3U 的实时时钟通过 D8013~D8019 存储当前时间,可通过编程或 GX Works2 直接校准:
| 寄存器 | 含义 | 取值范围 | 寄存器 | 含义 | 取值范围 |
|---|---|---|---|---|---|
| D8013 | 秒 | 0~59 | D8016 | 年(后两位) | 0~99 |
| D8014 | 分 | 0~59 | D8017 | 月 | 1~12 |
| D8015 | 时 | 0~23 | D8018 | 日 | 1~31 |
| D8019 | 星期 | 0~6(0 = 周日) | - | - | - |
校准时间示例(手动赋值):
plaintext
LD M8002 ; 上电初始化脉冲 MOV K25 D8016 ; 年份:2025(存后两位25) MOV K11 D8017 ; 月份:11月 MOV K30 D8018 ; 日期:30日 MOV K14 D8015 ; 小时:14点 MOV K20 D8014 ; 分钟:20分 MOV K0 D8013 ; 秒:0秒
步骤 2:编写定时采样程序(10s 采样 1 次,存储 “时间 + 温度值”)
假设:
核心程序:
plaintext
; 1. 10s定时计时 LD M8013 ; 1s脉冲 INC D998 ; 计时+1 LD D998 K10 ; 计满10s RST D998 ; 清零计时器 SET M0 ; 触发采样标志 ; 2. 采样并存储(M0触发) LD M0 MOV D8016 D1000+D999*5 ; 存储年份(如25) MOV D8017 D1001+D999*5 ; 存储月份(如11) MOV D8018 D1002+D999*5 ; 存储日期(如30) ; 时分秒打包:时×10000 + 分×100 + 秒(如14:20:05 → 142005) MOV K0 D1003+D999*5 MOV D8015 D1003+D999*5 K4 K0 ; 时存入高4位 MOV D8014 D1003+D999*5 K4 K4 ; 分存入中4位 MOV D8013 D1003+D999*5 K4 K8 ; 秒存入低4位 MOV D0 D1004+D999*5 ; 存储采样的温度值 ; 3. 指针自增,循环存储(最多存储200笔,超出从D1000重新开始) INC D999 LD D999 K200 RST D999 RST M0 ; 复位采样标志
场景 2:事件触发采样(如传感器 X0 触发,记录触发时刻的电流值)
核心区别:采样触发由 “定时” 改为 “外部事件(X0 上升沿)”,其余存储逻辑不变。
plaintext
LD X0 ANI M8000 PLS M1 ; X0上升沿触发脉冲 LD M1 ; 事件触发采样 ; 以下同定时采样的“存储时间+采样值”逻辑 MOV D8016 D1000+D999*5 ... INC D999
FX3U 关键配置:断电保持
需将存储区(如 D998~D2000)设为断电保持:
三、西门子 S7-200 实操:记录不同时刻采样值
S7-200(CPU224/226)通过READ_RTC指令读取实时时钟,V区作为存储区(默认断电保持),逻辑与 FX3U 一致,仅指令和寄存器不同。
前提:定义变量(便于编程)
| 变量地址 | 含义 | 类型 |
|---|---|---|
| VB100 | 年(BCD 码) | 字节 |
| VB101 | 月(BCD 码) | 字节 |
| VB102 | 日(BCD 码) | 字节 |
| VB103 | 时(BCD 码) | 字节 |
| VB104 | 分(BCD 码) | 字节 |
| VB105 | 秒(BCD 码) | 字节 |
| VW200 | 采样值(如电流) | 字 |
| VW300 | 存储指针(初始 0) | 字 |
场景:定时 5s 采样,存储 “时间 + 采样值”
步骤 1:读取实时时钟(READ_RTC 指令)
plaintext
LD SM0.1 // 上电初始化 CALL READ_RTC, 0, VB100 // 读取实时时钟到VB100~VB105(0=时钟模块地址) LD SM0.0 // 循环读取时钟(保证时间实时更新) CALL READ_RTC, 0, VB100
步骤 2:5s 定时采样 + 存储
plaintext
// 1. 5s定时(SM0.5=1s脉冲) LD SM0.5 INCB VB400 // 1s计数 LDB= VB400, 5 // 计满5s MOVB 0, VB400 // 清零计数器 SET M0.0 // 触发采样 // 2. 采样存储(M0.0触发) LD M0.0 // 计算存储起始地址:VW300×10 + &VB1000(每笔数据占10字节:年/月/日/时/分/秒/采样值) MOVW VW300, VW402 MUL VW402, 10, VW402 LDI DI0 // 禁止中断(避免存储时干扰) // 存储年(VB100)到VB1000+VW402 MOVB VB100, *VD402 // 存储月(VB101)到VB1001+VW402 MOVB VB101, *VD402 + 1 // 存储日(VB102)到VB1002+VW402 MOVB VB102, *VD402 + 2 // 存储时(VB103)到VB1003+VW402 MOVB VB103, *VD402 + 3 // 存储分(VB104)到VB1004+VW402 MOVB VB104, *VD402 + 4 // 存储秒(VB105)到VB1005+VW402 MOVB VB105, *VD402 + 5 // 存储采样值(VW200)到VW1006+VW402 MOVW VW200, *VD402 + 6 EI // 允许中断 // 指针自增,循环存储(最多100笔) INCB VW300 LDB= VW300, 100 MOVW 0, VW300 RST M0.0 // 复位采样标志
四、进阶优化:提升采样记录的实用性
1. 循环存储(避免寄存器溢出)
如示例中设置 “最多存储 200/100 笔”,指针到达上限后复位,覆盖最早数据,适合无上位机的本地记录场景。
2. 数据上传上位机(SCADA / 触摸屏)
3. 高精度采样(ms 级)
若需记录 ms 级时刻(如高速响应场景),需结合 PLC 的高速计数器 / 系统时钟:
4. 异常采样过滤
避免无效数据(如传感器波动导致的异常值),采样后增加判断逻辑:
plaintext
// 三菱FX3U示例:仅存储0~100℃的温度值 LD M0 CMP D0 K0 M10 CMP D0 K100 M11 LD M10 AND M11 MOV D0 D1004+D999*5 ; 仅有效值存储 RST M0
五、常见问题与避坑
总结
PLC 记录不同时刻采样值的核心是 “时间戳 + 触发采样 + 有序存储”:
若需针对具体场景(如 4mm 钢丝折弯的伺服电流采样、温度闭环控制的定时采样)编写完整程序,可告知 PLC 型号、采样频率、存储笔数,进一步提供精准代码!

