应该向调制解调器发送什么AT命令以获取时间?


11

我正在使用SIM800E。我想知道应该将哪些AT命令发送到调制解调器以获取时间?该调制解调器具有RTC。但是我需要通过手机信号塔自动设置它。使用AT命令请求时,塔可以将时间发送到调制解调器。我已经在许多电话中看到,交接期间时间会更新。

手册没有此信息。


1
根据该硬件设计文档,您需要获取“ SIM800E AT命令手册”-一个单独的文档。
RedGrittyBrick

那么在实践中非多媒体电话如何简单更新位置呢?
gpuguy

3
NITZ是GSM标准的可选部分,并非所有运营商都支持,并且准确性可能不会超过几分钟。
RedGrittyBrick

3
我认为这是热门话题,因为它涉及到用于M2M通信的嵌入式GSM模块的使用。为什么该帖子偏离主题,并允许以下四个帖子:示例1 2 3 4
tcrosley 2013年

Answers:


7

我使用了以下命令:

AT+CCLK?

返回日期和时间,例如:

+CCLK: "00/01/12,05:44:53+00" 

使用三种不同的电池模块成功地应用于产品:Enfora,Telit和Sierra。它在AT后面使用+字符的事实意味着它是一个常见的命令(相对于专有命令),并且在大多数(如果不是全部)电池模块上应该可用。(专有命令在AT后面使用供应商特定的字符,例如AT $,AT%,AT!等。)

正如我在评论中提到的那样,如果您无法使用该命令获取时间(例如,它返回全0),那么另一种方法是连接到网络并使用HTTP命令获取服务器的时间。

For example, the following HTTP request:
HEAD /index.html HTTP/1.1\r\n
Host: www.somehost.com\r\n;
\r\n

其中somehost是您自己的服务器或Google.com等。这还假定index.html是网站的主页(对于Google而言并非如此)。

它将返回一个标题,如:

HTTP/1.x 200 OK  
Transfer-Encoding: (something)  
Date: Fri, 13 Nov 2013 04:36:25 GMT
(lots more stuff)

据我所知,所有服务器都必须在其标头中返回GMT时间。


1
读过一些东西,暗示+ CCLK返回的值可能来自板载时钟(RTC),而不是来自GSM网络(塔)。
RedGrittyBrick

1
我已经阅读过以这种方式描述的命令,但是在过去的五年左右的时间里,我已经在使用三种不同电池模块的几种不同产品中使用了该命令,并且该命令在美国以及欧洲和亚洲的几乎所有地区都有效。已经有一些运营商,例如德国的一家运营商不起作用(返回全0);我联系了他们,并被告知他们不支持通过网络进行时间更新。因此,我编写了代码以执行HTTP 1.1请求并节省了服务器的时间。
tcrosley13年

1
我认为可以更好地编写HTTP请求,HEAD / HTTP/1.0\r\nHost: example.com\r\n\r\n因为我感觉/不那么容易使用404,并且HTTP 1.0更好地表示了我们(在设备方面)对HTTP的无知。此外,分号看起来像错字。除此之外,根据规范,日期是GMT / UTC (另请参见)。

1
这个答案是有根据的,但是应该就机载RTC与网络时间问题进行更新。

5

首先,许多网络对NITZ的支持都很差(可以说COST-CUTTING)。我根本不会依赖它,因为十分之十的网络都在使用它,尤其是在遥远的地方。

其次,+ CCLK命令用于调制解调器的内部RTC。某些调制解调器具有从网络更新此时钟的功能。依靠它是有风险的。

上面的HTTP请求不完整,即不起作用。我曾经知道如何执行此操作,因此它将在工作时还原。

它在AT后面使用+字符的事实意味着它是一个常见的命令(相对于专有命令),并且在大多数(如果不是全部)电池模块上应该可用。(专有命令在AT后面使用供应商特定的字符,例如AT $,AT%,AT!等。)

这并非完全正确。有遵循AT +约定的专有调制解调器命令。例如,AT + WOPEN是专有的Sierra命令。

无论调制解调器如何,都有一组相同的命令。这些在3GPP文档中定义。专有命令通常在供应商的用户手册中定义,并明确标记为专有。


4

AT + CLTS = 1(获取本地时间戳)AT&W(保存配置)

关闭调制解调器并打开调制解调器(重新启动以从网络获取本地时间)

下次调制解调器启动时,您应该能够通过网络获取本地时间,并且可以通过发送来读取

AT + CCLK?

这适用于我使用SIM800 GSM调制解调器读取AT命令说明的更多信息


@ s0nic2k答案已确认,这将无法正常工作。
Ali80 '19

3

油灰:

AT+COPS=2

OK

AT+CTZU=1

OK

AT+COPS=0

OK

+CTZU: "15/05/06,17:25:42",-12,0

完美的作品,以后你要解析的结果,发生在CLK,因为这并不会自动发生。(至少在我的Cinterion中)


6
如果您可以用英语解释这样做的目的以及为什么它可以解决该问题,将很有帮助。
戴维(David)

@David敬请期待,我们正在聊天中进行翻译。
尼克·阿列克谢耶夫

2
适用于我的SIM800H的变体:使用AT + CLTS = 1而不是AT + CTZU = 1(因为不支持CTZU)。然后,当您重新注册时,您会收到诸如* PSUTTZ的不请自来的消息:2017,1,30,20,17,28,“-20”,0
Matt Thomas

2

使用AT + CIPGSMLOC命令。它在SIMCOM模块中运行良好。

使用此命令之前,需要附加GPRS服务。因此,首先使用适当的命令序列连接GPRS服务,然后使用此命令从GSM网络获取日期和时间。

附加GPRS服务:

CMD:AT+CGATT=1 CMD:AT+SAPBR=3,1,"Contype","GPRS" CMD:AT+SAPBR=3,1,"APN","" CMD:AT+SAPBR=3,1,"USER","" CMD:AT+SAPBR=3,1,"PWD","" CMD:AT+SAPBR=1,1 CMD:AT+SAPBR=2,1 /* to confirm that GPRS is attached. will show IP if attached */

然后使用GSM Location命令:

AT+CIPGSMLOC=1,1

该命令需要相当长的时间(几秒钟)才能从网络获取信息,因此请给命令执行功能适当的超时。

此命令还返回模块连接到的BTS位置。因此,您也可以大致了解GSM模块的位置。

有关更多信息,请参阅本手册:(与SIM800的工作方式相同)

SIM900_GSM Location AT Command Manual_V1.00

另请注意,AT + CLBS命令与此命令不同。在某些地区可能无法使用。(我无法使用它!)。但是AT + CIPGSMLOC始终可以工作。


我得到+CIPGSMLOC: 302<\r><\n> 回应
Ali80 '19

1
@ Ali80充值您的Simcard积分。如果您的simcard确实有信用但已经很长时间没有收费,则可能会发生这种情况。您也可以使用其他SIM卡进行测试。
MDR

是的,我可以确认此方法有效,我的simcard信誉良好,但某些数据计划的访问权限受到限制。
Ali80 '19

1

RedGrittyBrick指出的NITZ就是答案。但是,这是仅由网络发送的消息,通常是在加入网络时发送的。一些运营商发送它,一些不发送。没有标准的方法来请求它。


1

这是获取蜂窝网络时间的AT命令序列,它在我的UBLOX LEON G-200 GSM模块中有效。

GSM_Send_Modem_Command("AT+COPS=2\r\n");//de register
GSM_Send_Modem_Command("AT+CTZU=1\r\n");//automatic time zone update is enabled
GSM_Send_Modem_Command("AT+COPS=0\r\n");// register to network
GSM_Send_Modem_Command("AT+CCLK?\r\n");// gets the clock of the MT

1

首先发送这两个命令
AT + CLTS = 1;&W

AT + CFUN = 1,1,而不是AT + CLTS?检查是否收到此回复+ clts:1,
然后发送此命令AT + CCLK?


欢迎来到EE.SE。在帖子中的代码片段周围使用两个反引号(``),或{}与其他答案一样,使用编辑器工具栏上的按钮获取代码块。这将提供灰色背景和固定宽度的字体,使您可以轻松查看代码的开始和结束位置。
晶体管

0

我已经在初始化期间成功使用NITZ,并且在我想读取内部RTC时成功使用了CCLK。从网络设置调制解调器RTC可能需要一两分钟。值得保留一个标志以指示时间是否确实有效。


0

我为U-Blox LTE开发了固件。在那里我用过AT + CCLK?从调制解调器获取当前本地时间。

它以以下格式给出时间。并不是说这是一个同步命令。

+CCLK: "00/01/01,05:44:53+00" (might get unsynchronized time if the modem time is not sync with the system time)

因此,在注册之前发送了以下AT命令,以将时间与网络同步

AT+CTZU=1\r\n

所以我的命令顺序是:

AT+CTZU=1\r\n
AT+CREG=1\r\n (to subscribe for the network registration updates)
AT+CCLK?\r\n (The Time Zone information is provided after the network registration, if the network supports the time
zone information)

确保其具有正确时间的其他逻辑:

它根据70/01/01或00/01/01来检查日期(在我们的情况下,这是调制解调器具有无效时间时获得的时间)。如果无效,它将每隔1分钟定期尝试一次,直到获得正确的时间为止。重试几次后停止发送CCLK吗?并依靠其他时间来源。

注意:少数国家/地区支持NITZ(https://en.wikipedia.org/wiki/NITZ

因此,如果该国家/地区不支持使用时间更新,则最好使用备用方法。

就我而言,我们具有GPS模块,因此我可以通过GNSS数据获取时间更新。

此外,这与此处无关,但对时间同步很有用。

我们运行chrony deamon来更新系统时间(启用手动命令)。因此,将同时获取两个时间更新,并且chrony会确定正确的时间并更新系统时间。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.