当前位置: 首页 >应用方案 >技术应用 >

【技术分享】利用卫星校准系统时间

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

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

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

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

1卫星定位模块

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

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

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

2卫星定位模块

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

3PLC组态软件功能块

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

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

4MCGS系统

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

5PLC寄存器存储

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

6MCGS配置寄存器

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

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

7RS485总线

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

8GPS模块配置

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

9PLC配置

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

10MCGS系统时间运算函数

将从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时间有效后才能进行校时,具体脚本如下:

11PLC卫星校时

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

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

12MCGS配置

https://www.wjx.cn/jq/84863372.aspx