当前位置:首页 > 技术分析 > 正文内容

「技术分享」利用卫星校准系统时间

ruisui883周前 (04-09)技术分析7

戳我有惊喜!!!

一般获取精准时间的方式有两种,第一种就是从NTP服务器上获取,第二种则是通过卫星获取UTC时间,对于不能联网的设备若想通过NTP协议获取时间就只能通过外接支持UDP传输的网络模块,比如串口服务器。若设备支持卫星定位则可通过获取卫星的UTC时间来获取准确时间,对于需要使用北京时间的设备则需要通过换算。

UTC就是协调世界时,又称世界统一时间、世界标准时间、国际协调时间,北京位于东八区比UTC时间快8小时的时区。

下面小编将通过Modbus卫星定位模块获取UTC时间并通过MCGS脚本转换东八区时间再通过Modbus协议修改PLC的RTC时钟。

卫星定位模块采用EBYTE的E108-D01,一款支持多模定位并且支持UTC时间查询的Modbus RTU从机,下表为E108-D01寄存器表截取的本案例会使用到的寄存器,寄存器直接存储的UTC时间,需要+8小时换算成北京时间;

时间运算不能时简单的加8小时,需要考虑大小月与闰年,以及时间计算的进位处理,比较复杂,MCGS脚本支持时间戳转换,则可以将获取的UTC时间转换为时间戳,在加上8小时(时间戳计算需要使用秒,8小时等于28800秒),再转换为其他格式的时间数据,使用时间戳计算可以忽略大小月、闰年等复杂的时间处理过程。

有些PLC也支持通过时间戳配置RTC时间,有些则需要使用BCD或者普通的数值。

TM221可以通过BCD码利用存储字和存储位配置系统字(%SW49-%SW53)结合系统位(%S50),下图就可以看出利用系统字和系统位配置时间比较复杂;

TM221也可以通过PLC组态软件中的“功能块”的RTC功能修改,这里小编就通过这种方式修改PLC的RTC时间;

MCGS使用最便宜的TPC7062TX,该设备具有两个串口,一个RS485(COM2)接口,一个RS232接口(COM2)接口,引脚定义这里就不再说明,不知道的可以到MCGS官网查询。

这里使用官方自带的设备,“所有设备”的“PLC”目录下的“莫迪康-Modbus RTU”驱动,

PLC则使用施耐德的TM221,需要配置下列PLC梯型图,使用了6个保持寄存器存储MCGS发送的“年”“月”“日”“时”“分”“秒”,利用中间寄存器将参数写入RTC功能块实现时间校准。

将TM221使用寄存器格式化为下表,方便MCGS配置寄存器。

配置MCGS的设备列表以及寄存器查询表,如下图所示:


父设备配置,即RS-485总线的波特率参数,这里使用波特率9600,数据位8,停止位1,无校验;

分别配置GPS的寄存器地址,并使用地址1,配置TM221的寄存器地址,并使用地址0;

简单做一个人机交互界面,如下所示:

下图是MCGS的时间戳处理函数,这里只说明了时间字符串转时间戳,以及通过时间戳获取年份的两个函数,其余函数用法类似。

将从GPS获取的UTC时间分别赋予“当前UTC时间”,并通过字符串格式化函数将数值格式化为YYYY-MM-DD HH:MM:SS格式的字符串,方便直观读取数据和使用;

!StrFormat("%g-%g-%g %g:%g:%g",GPS_Year,GPS_Month,GPS_Day,GPS_Hour,GPS_Minute,GPS_Second)

将当前UTC时间转换为时间戳,并将函数服务器控件“UTC时间戳”;

!TimeStr2I(!StrFormat("%g-%g-%g %g:%g:%g",GPS_Year,GPS_Month,GPS_Day,GPS_Hour,GPS_Minute,GPS_Second))

将时间戳增加8小时后,转换为对应的北京时间的“年月日时分秒”并服务“北京时间”控件;

!TimeGetYear(!TimeStr2I(!StrFormat("%g-%g-%g %g:%g:%g",GPS_Year,GPS_Month,GPS_Day,GPS_Hour,GPS_Minute,GPS_Second))+28800)

!TimeGetMonth(!TimeStr2I(!StrFormat("%g-%g-%g %g:%g:%g",GPS_Year,GPS_Month,GPS_Day,GPS_Hour,GPS_Minute,GPS_Second))+28800)

!TimeGetDay(!TimeStr2I(!StrFormat("%g-%g-%g %g:%g:%g",GPS_Year,GPS_Month,GPS_Day,GPS_Hour,GPS_Minute,GPS_Second))+28800)

!TimeGetHour(!TimeStr2I(!StrFormat("%g-%g-%g %g:%g:%g",GPS_Year,GPS_Month,GPS_Day,GPS_Hour,GPS_Minute,GPS_Second))+28800)

!TimeGetMinute(!TimeStr2I(!StrFormat("%g-%g-%g %g:%g:%g",GPS_Year,GPS_Month,GPS_Day,GPS_Hour,GPS_Minute,GPS_Second))+28800)

!TimeGetSecond(!TimeStr2I(!StrFormat("%g-%g-%g %g:%g:%g",GPS_Year,GPS_Month,GPS_Day,GPS_Hour,GPS_Minute,GPS_Second))+28800)

“修改”按钮控件,需要先判断UTC时间有效后才能进行校时,具体脚本如下:

至此就完成了卫星校时的全部配置,小编从E108-D01如何获取时间到PLC梯形图开放RTC配置接口再到MCGS如何写入时间PLC进行了细化简介,根据这种方法可以对任何支持Modbus RTU协议的设备进行卫星校时。

下图是利用仿真设备演示跨月与跨年时设备自动校准北京时间的过程:

扫描二维码推送至手机访问。

版权声明:本文由ruisui88发布,如需转载请注明出处。

本文链接:http://www.ruisui88.com/post/3384.html

分享给朋友:

“「技术分享」利用卫星校准系统时间” 的相关文章

5个看起来像 MacOS 的 Linux 发行版,赶紧收藏!

既想使用 Linux,又想同时使用 Mac ?那么你可以尝试这些 Linux 发行版,你肯定会觉得自己在用 Mac 系统。1. Elementry OSElementry OS 是看起来像 Mac OS 的最好的 Linux 发行版。和 Mac 一样,这个操作系统也是为了保护隐私而设计的。因此你会得...

总结了Vue3的七种组件通信方式,别再说不会组件通信了

写在前面本篇文章是全部采用的<script setup>这种组合式API写法,相对于选项式来说,组合式API这种写法更加自由,具体可以参考Vue文档对两种方式的描述。本篇文章将介绍如下七种组件通信方式:propsemitv-modelrefsprovide/injecteventBusv...

继Yuzu后,任天堂要求移除多个Switch模拟器项目

IT之家 7 月 11 日消息,任天堂美国分公司 (Nintendo of America) 已要求移除多个用于模拟 Nintendo Switch 游戏的开源模拟器项目,其中包括 Suyu、Nzu、Uzuy、Torzu、Sudachi 和 Yuzu-vanced 等。这些模拟器均被指控包含绕过任天...

抖音 Android 性能优化系列:启动优化实践

启动性能是 APP 使用体验的门面,启动过程耗时较长很可能使用户削减使用 APP 的兴趣,抖音通过对启动性能做劣化实验也验证了其对于业务指标有显著影响。抖音有数亿的日活,启动耗时几百毫秒的增长就可能带来成千上万用户的留存缩减,因此,启动性能的优化成为了抖音 Android 基础技术团队在体验优化方向...

身体越柔软越好?刻苦拉伸可能反而不健康 | 果断练

坐下伸直膝盖,双手用力向前伸,再用力……比昨天前进了一厘米,又进步了! 这么努力地拉伸,每个人都有自己的目标,也许是身体健康、线条柔美、放松肌肉、体测满分,也可能为了随时劈个叉,享受一片惊呼。 不过,身体柔软,可以享受到灵活的福利,也可能付出不稳定的代价,并不是越刻苦拉伸越好。太硬或者太软,都不安全...

国产操作系统上Vim的详解03--安装和使用插件 | 统信 | 麒麟 | 中科方德

原文链接:国产操作系统上Vim的详解03--使用Vundle插件管理器来安装和使用插件 | 统信 | 麒麟 | 中科方德Hello,大家好啊!今天给大家带来一篇在国产操作系统上使用Vundle插件管理器来安装和使用Vim插件的详解文章。Vundle是Vim的一款强大的插件管理器,可以帮助我们轻松地安...