Codesys中如何设置趋势对象时间与系统时间匹配
趋势对象时间不一致问题解决方案
问题根因
三个相关模块默认读取的时钟源完全独立,未做全局统一绑定,才会出现时间不匹配:
- 屏幕显示时间:默认读取项目指定的业务主时钟,当前配置为主板自带RTC时钟,也就是你项目实际采用的时间基准
- 日期范围选择控件:默认读取运行项目的宿主设备(Raspberry Pi)的系统软件时钟,即Pi终端执行
date命令返回的时间 - 趋势(trend)对象:默认读取Raspberry Pi板载硬件RTC时钟,历史趋势点存储的时间戳为点写入时直接从Pi板载RTC读取的值,不会自动跟随后续系统时间调整更新
之前通过手动同步Raspberry Pi时间实现的修复只是临时对齐了三个独立时钟的数值,没有统一时钟源,一旦Pi掉电、主板RTC走时出现偏差,问题会再次出现。
配置方法(统一对齐主板时间)
- 配置全局时钟源
打开项目系统参数页,找到Runtime时钟源配置项,放弃默认的本地系统时钟选项,手动指定为主板外接RTC时钟,配置后所有新增控件默认从该时钟源读取时间。 - 修正趋势对象配置
选中已添加的trend趋势控件,打开属性面板找到时间轴来源项,取消使用设备本地时间的默认勾选,绑定到全局时钟源对应的时间变量;同时将趋势缓存的时间戳生成规则修改为读取全局时钟源时间戳,覆盖原本初始化时读取的Pi本地时间基准。 - 修正日期范围选择控件配置
打开日期范围选择控件属性面板,找到时间基准选项,将默认的宿主OS时间切换为全局项目时钟,把控件返回的起止时间戳计算基准同步到主板时钟。 - 添加兜底同步逻辑
在全局脚本中添加周期为1分钟的同步任务,定期把Pi的系统时间、板载RTC时间和主板RTC时间对齐,参考代码:# 可根据实际使用的组态SDK调整接口 mainboard_time = read_mainboard_rtc() set_pi_system_time(mainboard_time) trend_ctrl.set_time_reference(mainboard_time) date_picker.set_time_reference(mainboard_time)
各模块默认时间来源说明
- 屏幕显示时间:项目配置的业务主时钟,当前为主板RTC时钟
- 日期范围选择控件:Raspberry Pi的系统软件时钟
- 趋势(trend)对象:Raspberry Pi板载硬件RTC时钟
注意:如果Raspberry Pi未配置NTP时间同步、板载RTC没有备用电池,Pi的系统软件时钟和板载硬件RTC时钟本身就会存在偏差,这也是部分场景下同步了Pi系统时间、趋势时间仍然不对的核心原因——趋势模块读的是板载硬件时钟,不是系统软件时钟。
内容的提问来源于stack exchange,提问作者SGKlee
相关产品推荐
相关产品推荐

