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

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

ruisui882周前 (04-09)技术分析5

戳我有惊喜!!!

一般获取精准时间的方式有两种,第一种就是从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

分享给朋友:

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

GitLab-合并请求

描述合并请求可用于在您对项目进行的其他人员之间交换代码,并轻松与他们讨论更改。合并请求的步骤步骤1-在创建新的合并请求之前,GitLab中应该有一个创建的分支。您可以参考本章来创建分支-步骤2-登录到您的GitLab帐户,然后转到“ 项目”部分下的项目 -步骤3-单击“ 合并请求”选项卡,然后单击“...

程序员开发必会之git常用命令,git配置、拉取、提交、分支管理

整理日常开发过程中经常使用的git命令![送心]git配置SSH刚进入项目开发中,我们首先需要配置git的config、配置SSH方式拉取代码,以后就免输入账号密码了!# 按顺序执行 git config --global user.name "自己的账号" git config -...

HTML5学习笔记三:HTML5语法规则

1.标签要小写2.属性值可加可不加””或”3.可以省略某些标签 html body head tbody4.可以省略某些结束标签 tr td li例:显示效果:5.单标签不用加结束标签img input6.废除的标签font center big7.新添加的标签将在下一HTML5学习笔记中重点阐述。...

「干货」FPGA设计中深度约束技巧及调试经验总结

今天跟大家分享的内容很重要,也是我们调试FPGA经验的总结。随着FPGA对时序和性能的要求越来越高,高频率、大位宽的设计越来越多。在调试这些FPGA样机时,需要从写代码时就要小心谨慎,否则写出来的代码可能无法满足时序要求。另外,最近跟网友聊天时,有谈到公众号寿命的问题,我觉得网络交换FPGA公众号应...

雅马哈TMAX 560 TECH MAX 外媒深度测评

应雅马哈(Yamaha)的邀请,在葡萄牙埃斯托里尔对全新的Yamaha TMAX 560 Tech Max踏板车进行了测试,在这里TMAX 560 Tech Max售价为11649英镑。雅马哈TMAX长期以来一直站在踏板车的顶端,就声誉和知名度而言,它是当之无愧的大踏板界NO.1。2020 TMAX...

数组、去重、排序、合并、过滤、删除

ES6数字去重 Array.from(new Set([1,2,3,3,4,4])) //[1,2,3,4] [...new Set([1,2,3,3,4,4])] //[1,2,3,4]2、ES6数字排序 [1,2,3,4].sort(); // [1, 2,3,4],默认是升序...