시간을 얻으려면 모뎀에 어떤 AT 명령을 보내야합니까?


11

SIM800E 사용 하고 있습니다. 시간을 얻으려면 모뎀에 어떤 AT 명령을 보내야하는지 알고 싶습니다. 이 모뎀에는 RTC가 있습니다. 그러나 나는 셀 타워를 통해 자동으로 설정해야합니다. AT 명령을 사용하여 요청하면 타워는 모뎀으로 시간을 보낼 수 있습니다. 많은 전화에서 핸드 오프 중에 시간이 업데이트되는 것을 보았습니다.

매뉴얼은 이 정보를 가지고 있지 않습니다.


1
해당 하드웨어 설계 문서에 따르면 별도의 문서 인 "SIM800E AT Command Manual"을 구해야합니다.
RedGrittyBrick

그렇다면 실제로 비 멀티미디어 전화가 얼마나 간단한 위치를 업데이트합니까?
gpuguy

3
NITZ 는 GSM 표준의 선택적 부분으로, 모든 통신 업체가 지원하지는 않으며 몇 분 이상 정확하지 않을 수 있습니다.
RedGrittyBrick

3
M2M 통신에 내장 GSM 모듈을 사용하는 것과 관련이 있기 때문에 이것이 주제라고 생각합니다. 이 게시물이 주제를 벗어난 이유는 무엇이며 다음 4 개의 게시물이 허용되었습니다. 예 1 2 3 4
tcrosley

답변:


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가 반환 한 값이 GSM 네트워크 (타워)가 아닌 온보드 시계 (RTC)에서 나올 수 있다고 제안했습니다.
RedGrittyBrick

1
나는 또한 그런 식으로 설명 된 명령을 읽었지만 지난 5 년 동안 3 개의 다른 셀 모듈을 사용하여 여러 제품에서 사용했으며 미국과 유럽 및 아시아의 거의 모든 곳에서 작동했습니다. 예를 들어 독일에서 작동하지 않는 운송 업체가 몇 개있었습니다 (모두 0으로 반환). 나는 그들에게 연락하여 네트워크를 통한 시간 업데이트를 지원하지 않는다고 들었습니다. 그래서 HTTP 1.1 요청을 수행하고 서버에서 시간을 절약하는 코드를 작성했습니다.
tcrosley

1
나는 HTTP 요청이 더 잘 쓸 수 있다고 생각 HEAD / HTTP/1.0\r\nHost: example.com\r\n\r\n나는 느낌으로 /404에 덜 경향이 더 나은 1.0은 HTTP의 우리 (장치 현명한) 무지를 나타내는 HTTP를 것이다. 게다가 세미콜론은 오타처럼 보입니다. 그 이외의 날짜는 사양따라 GMT / UTC입니다 ( 참조 ).

1
이 답변은 정보를 제공하지만 온보드 RTC 대 네트워크 시간 문제에 대한 업데이트가 필요합니다.

5

우선 NITZ는 많은 네트워크에서 제대로 지원되지 않습니다 (COST-CUTTING이라고 말할 수 있음). 10 개 네트워크 중 1 개가 특히 멀리 떨어진 곳에서 사용하기 때문에 전혀 의존하지 않습니다.

두 번째로 + 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

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 계속 지켜봐주십시오. 채팅에서 번역 작업을하고 있습니다.
Nick Alexeev

2
나를 위해 일한 SIM800H의 변형 : CTZU가 지원되지 않으므로 AT + CTZU = 1 대신 AT + CLTS = 1을 사용하십시오. 다시 등록하면 * 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 위치 명령을 사용하십시오.

AT+CIPGSMLOC=1,1

이 명령은 네트워크에서 정보를 가져 오려면 상당한 시간 (몇 초)이 필요하므로 명령 실행 기능에 적절한 시간 초과를 지정하십시오.

이 명령은 또한 모듈이 연결된 BTS 위치를 반환합니다. 따라서 GSM 모듈의 대략적인 위치도 얻을 수 있습니다.

자세한 내용은이 설명서를 참조하십시오. (SIM800과 동일한 방식으로 작동)

SIM900_GSM Location AT Command Manual_V1.00

또한 AT + CLBS 명령은이 명령과 다릅니다. 일부 지역에서는 작동하지 않을 수 있습니다. (사용할 수 없었습니다!). 그러나 AT + CIPGSMLOC는 항상 작동합니다.


내가 얻을 +CIPGSMLOC: 302<\r><\n> 응답
Ali80

1
@ Ali80 SIM 카드 크레딧을 재충전하십시오. SIM 카드에 크레딧이 있지만 오랫동안 청구되지 않은 경우에 발생할 수 있습니다. 다른 심 카드로 테스트 할 수도 있습니다.
MDR

예,이 방법이 제대로 작동하는지 확인할 수 있습니다. SIM 카드에는 크레딧이 있지만 일부 데이터 플랜에는 액세스가 제한되어 있습니다.
Ali80

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가 네트워크에서 설정되기까지 1-2 분이 소요될 수 있습니다. 시간이 실제로 유효한지 나타내는 플래그를 유지하는 것이 좋습니다.


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는 정확한 시간을 결정하고 시스템 시간을 업데이트합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.