精华内容
下载资源
问答
  • 用GPS模块校准系统时间

    千次阅读 2019-01-20 10:08:06
    用GPS模块校准系统时间
                   

      //========================================================================
      //TITLE:
      //    用GPS模块校准系统时间
      //AUTHOR:
      //    norains
      //DATE:
      //    Friday 04-September-2009
      //Environment:
      //    WINDOWS CE 5.0
      //========================================================================

        众所周知,大家在使用XP桌面系统的时候,我们可以通过设置时间的属性,让其通过互联网进行校准,这样我们就不会为不准点而烦恼了。但这在大部分车载设备上就行不通,因为它们往往不会带有网络模块,更不用提在大马路上还要随处可见无线网络。
       
        条条大路通罗马。用不了互联网,那我们就用GPS模块的数据咯。做过GPS导航的人应该都不陌生,GPS模块会每隔1秒就会不停地往串口发送数据。其中数据包含的信息可就多了,经度,维度,速度,当然还少不了我们所需要的时间。
       
        本文的主题是时间,所以GPS模块的其它数据就随它去吧,我们只要知道带有$GPRMC标志开头的数据包含时间信息即可。
       
        我们先来看看$GPRMC数据各位代表的意义.
       
        $GPRMC,<1>,<2>,<3>,<4>,<5>,<6>,<7>,<8>,<9>,<10>,<11>,<12>*hh
      <1> UTC时间,hhmmss(时分秒)格式
      <2> 数据状态,A=有效,V=无效
      <3> 纬度ddmm.mmmm(度分)格式(前面的0也将被传输)
      <4> 纬度半球N(北半球)或S(南半球)
      <5> 经度dddmm.mmmm(度分)格式(前面的0也将被传输)
      <6> 经度半球E(东经)或W(西经)
      <7> 地面速率(000.0~999.9节,前面的0也将被传输)
      <8> 地面航向(000.0~359.9度,以正北为参考基准,前面的0也将被传输)
      <9> UTC日期,ddmmyy(日月年)格式
      <10> 磁偏角(000.0~180.0度,前面的0也将被传输)
      <11> 磁偏角方向,E(东)或W(西)
      <12> 模式指示(仅NMEA0183 3.00版本输出,A=自主定位,D=差分,E=估算,N=数据无效)

        在这12组数据之中,我们需要用到的是2和9。第9项大家都好理解,其中保存的是时间数据嘛,不用它还用谁呢?可第2项呢?为什么会有无效或有效这两种状态呢?其实,对于GPS模块来说,并不是检测到数据有效才会往外发送数据;而是不管三七二十一,有效还是无效,源源不断地往外发送数据。判断数据是否有效的唯一方式,就是查看第二项是否为A。
       
        于是,我们的软件流程就很简单明了:不停地从GPS模块中读取数据,然后判断标志头是否为$GPRMC,接着再查看第二项是否为A,如果为A有效,直接提取第9项UTC时间,通过SetSystemTime进行设置。
       
        以下给出一个从GPS数据中提取UTC时间并转化为SYSTEMTIME结构的函数代码:

        BOOL CGpsTimeSync::GetUTCFromGPS(const std::string &strBuf,SYSTEMTIME &sysTime)    {     BOOL bResult = FALSE;     std::string::size_type stPosBegin = 0;         memset(&sysTime,0,sizeof(sysTime));          stPosBegin = strBuf.find("$GPRMC");     if(stPosBegin == std::string::npos || strBuf.find("*") == std::string::npos )      {      return FALSE;     }         std::vector<char> vtBuf(10,0);       int iCount = 0;         //The UTC time for hhmmss     stPosBegin = strBuf.find(",",stPosBegin + 1);     if(stPosBegin != std::string::npos)     {      iCount ++;          //The hour      memset(&vtBuf[0],0,vtBuf.size());      strncpy(&vtBuf[0],&(strBuf.c_str()[stPosBegin + 1]),2);      sysTime.wHour = atoi(&vtBuf[0]);          //The minute      memset(&vtBuf[0],0,vtBuf.size());      strncpy(&vtBuf[0],&(strBuf.c_str()[stPosBegin + 3]),2);      sysTime.wMinute = atoi(&vtBuf[0]);          //The second      memset(&vtBuf[0],0,vtBuf.size());      strncpy(&vtBuf[0],&(strBuf.c_str()[stPosBegin + 5]),2);      sysTime.wSecond = atoi(&vtBuf[0]);     }             //The date     while(TRUE)     {      stPosBegin = strBuf.find(",",stPosBegin + 1);      if(stPosBegin != std::string::npos)      {       iCount ++;              if(iCount == 2 && (strBuf.c_str())[stPosBegin + 1] == 'A')       {        bResult = TRUE;       }       else if(iCount >= 9)       {        //The day        memset(&vtBuf[0],0,vtBuf.size());        strncpy(&vtBuf[0],&(strBuf.c_str()[stPosBegin + 1]),2);        sysTime.wDay = atoi(&vtBuf[0]);            //The month        memset(&vtBuf[0],0,vtBuf.size());        strncpy(&vtBuf[0],&(strBuf.c_str()[stPosBegin + 3]),2);        sysTime.wMonth = atoi(&vtBuf[0]);            //The year        memset(&vtBuf[0],0,vtBuf.size());        strncpy(&vtBuf[0],&((strBuf.c_str())[stPosBegin + 5]),2);        sysTime.wYear = atoi(&vtBuf[0]);            //It's 2008 now when I write the source code. It cann't be less than 2008 forever when the GPS data is validate.        if(sysTime.wYear < 2000)        {         sysTime.wYear += 2000;        }            break;       }      }      else      {       break;      }     }     return bResult;;    }

     

        代码没有什么出彩的地方,唯一需要注意一点的是,因为年是以两位数表示,并且现在已经过了2000年,所以在代码中简单性地手工加了2000。我无法保证这代码永远正确,但至少在2099年之前还是能正常运作的。:-)

     

        调用很简单:

        //获取GPS数据    strData = GetGPSData();        //提取UTC时间    SYSTEMTIME sysTimeUTC = {0};   if(GetUTCFromGPS(strData,sysTimeUTC) != FALSE)   {     //设置系统时间    SetSystemTime(&sysTimeUTC);   }

     

       还有一点需要注意的是,在WINCE中,串口是独占设备。也就是说,如果你在程序中打开了串口进行数据的监控,那么在你进入导航软件之前,必须要在程序中将串口关闭。还有另一种方法,就是用虚拟串口的方式,让多个进程能同时获取数据(请见该文:http://blog.csdn.net/norains/archive/2009/03/28/4032257.aspx#1140231)。
      
       这校准时间的方式还有一个非常变态的用法。大家都知道,CPU都会有一个32.768KHZ的RTC晶振,用来给CPU准确计时。如果该晶振不工作,那么系统时钟将会停止。这时候,你就可以每隔1秒钟通过读取GPS数据对系统时间进行设置,让时间看起来真的是在不停变动一样。不过,这样方式比较耗费资源,实用性也不大,偶尔无聊时可为之。

               

    再分享一下我老师大神的人工智能教程吧。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!https://blog.csdn.net/jiangjunshow

    展开全文
  • 树莓派自动校准时间

    2021-02-12 09:35:54
    操作系统:RASPBIAN JESSIE LITE 1 #安装NTP 2 sudo apt-get install ntpdate 3 #选择 上海时区 4 sudo dpkg-reconfigure tzdata #同步时间 #添加到/etc/rc.local里面实现开机自启动 sudo ntpdate cn.pool.ntp.org #...

    硬件:树莓派3B

    操作系统:RASPBIAN JESSIE LITE

    1 #安装NTP
    2 sudo apt-get install ntpdate
    3 #选择 上海时区
    4 sudo dpkg-reconfigure tzdata
    #同步时间
    #添加到/etc/rc.local里面实现开机自启动
    sudo ntpdate cn.pool.ntp.org
    #查看当前时间
    date

    转载于:https://www.cnblogs.com/cjxltd/p/7202467.html

    展开全文
  • Linux中的所有命令(包括函数)都是采用的系统时钟设置。在Linux中,用于时钟查看和设置的命令主要有date、hwclock。1、date名称 : date使用权限 : 所有使用者使用方式 :date [-u] [-d datestr] [-s datestr] [--utc] ...

    Linux中的所有命令(包括函数)都是采用的系统时钟设置。在Linux中,用于时钟查看和设置的命令主要有date、hwclock。

    1、date

    名称 : date

    使用权限 : 所有使用者

    使用方式 :

    date [-u] [-d datestr] [-s datestr] [--utc] [--universal] [--date=datestr] [--set=datestr] [--help] [--version] [+FORMAT] [MMDDhhmm[[CC]YY][.ss]]

    说明 :

    date 可以用来显示或设定系统的日期与时间,在显示方面,使用者可以设定欲显示的格式,格式设定为一个加号后接数个标记,其中可用的标记列表如下 :

    时间方面 :

    % : 印出 %

    %n : 下一行

    %t : 跳格

    %H : 小时(00-23)

    %I : 小时(01-12)

    %k : 小时(0-23)

    %l : 小时(1-12)

    %M : 分钟(00-59)

    %p : 显示本地 AM 或 PM

    %r : 直接显示时间 (12 小时制,格式为 hh:mm:ss [AP]M)

    %s : 从 1970 年 1 月 1 日 00:00:00 UTC 到目前为止的秒数

    %S : 秒(00-60)

    %T : 直接显示时间 (24 小时制)

    %X : 相当于 %H:%M:%S

    %Z : 显示时区

    日期方面 :

    %a : 星期几 (Sun-Sat)

    %A : 星期几 (Sunday-Saturday)

    %b : 月份 (Jan-Dec)

    %B : 月份 (January-December)

    %c : 直接显示日期与时间

    %d : 日 (01-31)

    %D : 直接显示日期 (mm/dd/yy)

    %h : 同 %b

    %j : 一年中的第几天 (001-366)

    %m : 月份 (01-12)

    %U : 一年中的第几周 (00-53) (以 Sunday 为一周的第一天的情形)

    %w : 一周中的第几天 (0-6)

    %W : 一年中的第几周 (00-53) (以 Monday 为一周的第一天的情形)

    %x : 直接显示日期 (mm/dd/yy)

    %y : 年份的最后两位数字 (00.99)

    %Y : 完整年份 (0000-9999)

    若是不以加号作为开头,则表示要设定时间,而时间格式为 MMDDhhmm[[CC]YY][.ss],其中 MM 为月份,DD 为日,hh 为小时,mm 为分钟,CC 为年份前两位数字,YY 为年份后两位数字,ss 为秒数

    参数 :

    -d datestr : 显示 datestr 中所设定的时间 (非系统时间)

    --help : 显示辅助讯息

    -s datestr : 将系统时间设为 datestr 中所设定的时间

    -u : 显示目前的格林威治时间

    --version : 显示版本编号

    例子 :

    显示时间后跳行,再

    显示目前日期: #date '+%T%n%D'

    显示月份与日数: date '+%B %d'

    显示日期与设定时间(12:34:56): #date --date '12:34:56'

    注意 :当你不希望出现无意义的 0 时(比如说 1999/03/07),则可以在标记中插入 - 符号,比如说 date '+%-H:%-M:%-S' 会把时分秒中无意义的 0 给去掉,像是原本的 08:09:04 会变为 8:9:4。另外,只有取得权限者(比如说 root)才能设定系统时间。

    当你以 root 身分更改了系统时间之后,请记得以 clock -w 来将系统时间写入 CMOS 中,这样下次重新开机时系统时间才会持续抱持最新的正确值。

    例子:修改日期时间

    在命令行输入:

    Date:显示当前时间 Fri Aug 3 14:15:16 CST 2007

    date –s:按字符串方式修改时间

    可以只修改日期,不修改时间,输入: date -s 2007-08-03

    只修改时间,输入:date -s 14:15:00

    同时修改日期时间,注意要加双引号,日期与时间之间有一空格,输入:

    #date -s "2007-08-03 14:15:00"

    2、查看硬件时间

    # hwclock

    设置硬件时间

    # hwclock -set -date="07/07/06 10:19" (月/日/年 时:分:秒)

    3、硬件时间和系统时间的同步

    按照前面的说法,重新启动系统,硬件时间会读取系统时间,实现同步,但是在不重新启动的时候,需要用hwclock命令实现同步。

    硬件时钟与系统时钟同步:

    # hwclock --hctosys(hc代表硬件时间,sys代表系统时间)

    系统时钟和硬件时钟同步:(让系统的时间同步到硬件时钟)

    # hwclock –-systohc

    上述提到的是手动设置时间到一个时间点,可能与当前网络的时间有误差。下面介绍一下与时间服务器上的时间同步的方法

    1.  安装ntpdate工具

    # sudo apt-get install ntpdate

    2.  设置系统时间与网络时间同步

    # ntpdate cn.pool.ntp.org

    3.  将系统时间写入硬件时间# hwclock --systohc

    展开全文
  • 本文实例讲述了C++设置系统时间系统时间网络更新的方法。分享给大家供大家参考。具体实现方法如下:复制代码 代码如下://根据返回的时间设置系统时间void setTimeFromTP(ULONG ulTime){FILETIME ft;SYSTEMTIME st;...

    本文实例讲述了C++设置系统时间及系统时间网络更新的方法。分享给大家供大家参考。具体实现方法如下:

    复制代码 代码如下:

    //根据返回的时间设置系统时间

    void setTimeFromTP(ULONG ulTime)

    {

    FILETIME ft;

    SYSTEMTIME st;

    //将基准时间转换成windows文件时间

    st.wYear = 1900;

    st.wMonth = 1;

    st.wDay = 1;

    st.wHour = 0;

    st.wMinute = 0;

    st.wSecond = 0;

    st.wMilliseconds = 0;

    SystemTimeToFileTime(&st, &ft);

    LONGLONG* pLLong = (LONGLONG*)&ft;

    *pLLong += (LONGLONG)10000000*ulTime;

    FileTimeToSystemTime(&ft, &st);

    ::SetSystemTime(&st);

    }

    void main()

    {

    CInitSock initSock;

    SOCKET s = ::socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);

    if (s == INVALID_SOCKET)

    {

    printf("socket error...");

    return;

    }

    sockaddr_in servAddr = {0};

    servAddr.sin_family = AF_INET;

    servAddr.sin_port = ::htons(37);

    servAddr.sin_addr.S_un.S_addr = ::inet_addr("69.25.96.13"); //别用210.72.145.44这个IP, 这是天朝的 常TMD不返回值

    if (SOCKET_ERROR == ::connect(s, (sockaddr*)&servAddr, sizeof(servAddr)))

    {

    printf("connect error..");

    return;

    }

    //接收时间

    ULONG ulTime = 0;

    int nRecv = ::recv(s, (char*)&ulTime, sizeof(ulTime), 0);

    if (nRecv > 0)  //收到数据

    {

    ulTime = ::ntohl(ulTime);

    setTimeFromTP(ulTime);

    }

    else

    {

    printf("recv error...");

    return;

    }

    ::closesocket(s);

    printf("*******************************");

    getchar();

    }

    希望本文所述对大家的C++程序设计有所帮助。

    展开全文
  • 最近由于台式机CMOS电池没电了,每次开机后系统时间都会被初始化。出于每次都要重新设置系统时间太麻烦的考虑,今天用Python实现了系统开机自动校正时间的程序。大致的思路是:首先产生一个windows service,该...
  • CentOS 系统时间校准

    2021-03-04 15:49:26
    CentOS 系统时间不对校准 查询时区 [root@FJ050 ~]# date +"%Z %z" CST +0800 或者 [root@FJ050 ~]# date -R Thu, 04 Mar 2021 23:35:06 +0800 修改时区 [root@FJ050 ~]# timedatectl set-timezone Asia/...
  • lpar;持续中&rpar;字符串 折分字符串:split和explode 函数原型:array split (string $pattern, string $string [, int $limit]) ...... - BlackHat 2015 黑帽大会总结 day 2你的指纹还安全吗? 0x03 FINGERPRINTS...
  • 很多国外的服务器改成国内时间了之后,要要校准时间,估计很多人都只校准系统时间,都不去校准bios时间,又或者觉得手动去校准系统和bios时间很麻烦,毕竟手动去找ntp服务器来同步还是很麻烦的,下面给大家一个shell脚本来...
  • 北京时间

    2021-07-30 09:42:09
    不少朋友都可能遇到北京时间校准不能同步或电脑时间不准的情况,出现北京时间校准不能同步的多数原因是由于电脑主板上工作电池老化,或者电脑长期未使用导致主板电池没电,内部时钟自然因为没电时间变乱,今天编辑为...
  • sudo ntpdate time.apple.com #校准系统时间 sudo hwclock --systohc # 将系统时间同步到硬件 timedatectl status #查看时间 Local time: Tue 2021-07-13 08:52:20 CDT Universal time: Tue 2021-07-13 13:52...
  • adb date 命令 MMDDhhmm[[CC]YY][.ss] POSIX P0801K:/ # date 10211416 set 10月21日14:16分 YYYY-MM-DD [hh:mm[:ss]] ISO 8601 P0801K:/ # date 2023-08-15
  • 服务器时间校准

    2021-05-12 01:09:00
    系统时间部分:1. 编辑时区配置文件:vi /etc/sysconfig/clockZONE="Asia/Shanghai"UTC=false #把UTC设置为false关闭状态ARC=false2.运行如下命令#删除默认配置rm -rf /etc/localtime#重新指定配置ln -s /usr/share/...
  • 网上找了以下,发现下面这个说的比较简单,但是不适合ubuntu:来源:http://zhidao.baidu.com/question/491258850.html?seed=0通过ntp服务,自动获取网络时间并同步定时校正服务器时间# yum install –y ntp //安装...
  • CentOS 8系统时间校准

    千次阅读 2020-11-04 11:30:24
        最近发现我的Centos8总是出现时间不对劲,于是乎,去yum install ntpdate,发现竟然没有这个包,如下图一所示。以为自己忘了安装epel源,奈何安装后还是这样,莫不是centos又升级了?改了什么东西?    ...
  • Linux系统时间校准

    2021-03-05 17:15:14
    1、systemctl status ntpd 查看ntpd是否启动 2、如果已经启动跳过第二步。 没有启动 systemctl start ntpd 3、执行 ntpdate 210.72.145.44
  • 若当前系统时间与标准时间误差在( )分钟内,需进行校准。出处:《计算机化系统时钟校准管理规程》MS-E050。更多相关问题发生人工费索赔时能按日计工费计算的是( )。工业的飞速进步使得人类的生活发生了巨大的改变....
  • 关于linux校准时间

    2021-02-16 16:05:54
    hwclock -w 根据系统时间设置硬件时间 很完整的文章,其中ntpdate设置时间会造成时间跳跃,不安全,而且只能一次性,所以一般还需要搭配crontab来定时设置,使用ntpd服务器则相对安全,能替代:ntpdate+crontab 在...
  • /bin/bash# NTP网络时间校正脚本# 奔跑#NTP服务器数组列表ntpServer=([0]=ntp.fudan.edu.cn[1]=asia.pool.ntp.org[2]=210.72.145.44[3]=133.100.11.8[4]=ntp.sjtu.edu.cn[5]=time.scau.edu.cn)#校验#serverNum=`echo...
  • 1.设置linux系统时间 查看时间: [root@localhost ~]# date 设置时间 [root@localhost ~]# date -s "20211122 10:16:00" 2.设置linux硬件时间 查看硬件时间 [root@localhost ~]# hwclock --show 修改硬件...
  • 刚刚购买的新电脑安装完系统后,时间都是调整好准确的,很少发生不准确的情况。但是最近就有用户说电脑显示的时间不准确,影响办公效率,有什么方法可以调整电脑时间?下面,小编跟大家介绍校正电脑时间的步骤。相信...
  • 电脑时间校准服务器

    2021-07-30 04:51:01
    篇一:如何自动校正电脑时间如何自动校正电脑时间 计算机时间可是一定要准的,那么计算机时间不准该如何校正,理论上而言手动是永远不会准的,现在小编教你如何设置自动校正,此法一劳永逸方法/步骤1. 首先点击任务...
  • 简洁版本:问题:我需要几个Android设备才能在同一时间(大约100毫秒内)执行某项操作。例如,我希望所有设备在预先确定的时间点播放某种声音。问题:我可以使用GPS时间来确保设备时钟同步吗?较长版本:几个拥有...
  • ??电脑是人们生活中必不可少的工具。它不仅仅我们的生活来的丰富多彩的信息,还为我们提供了便捷。俗话说,世界上没有东西是十全十美的,由于部分人过于依赖电脑,有时候电脑出现错误也未必能...如何设置时间校对同...
  • 电脑系统时间总是不对变快 变慢自动同步校准方法:1、我们直接使用一段批处理代码就可以轻松解决这个问题,请复制下面的批处理命令代码粘贴并保存到新建文本文档.txt里面,再修改文件扩展名为:time.bat运行一次即可...
  • 计算机时间校准方法

    2021-07-27 03:08:05
    计算机时间校准方法本文通过对DOS系统中“实时时钟”的分析(本文共2页)阅读全文>>从理论上分析了适合于红外/雷达双模复合制导背景下数据融合的3种时间校准方法,以校准误差为标准,时间片和目标机动为影响因素对...
  • 很多比较注重时间的人,通常都会使用使用了北京时间校准显示器的用户都纷纷表示,这是一款所占内训很小、对系统没有任何影响,且每小时会主动的进行一次北京时间校准,从而让系统时间永久都符合标准时间,...
  • 手机北京时间校准

    2021-06-13 11:00:22
    怎么把手机时间变成北京时间。将手机时间变成北京时间步骤如下:首先打开手机,在屏幕主界面点击“设置”按钮。在设置系统和设备一栏中点击“高级设置”。在高级设置里面选择“日期和时间”点击“自动确定日期和时间...
  • 使用电脑的时候都会遇到一个现象,就是使用时间长了,我们电脑的系统时间有时候不正确,造成这种问题的原因有很多,虽然windows支持时间同步服务器功能,但是对于很多用户来说设置起来比较麻烦,下面,小编给大家...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 22,806
精华内容 9,122
关键字:

校准系统时间