Zaman kazanmak için modeme hangi AT komutu gönderilmelidir?


11

SIM800E kullanıyorum . Zaman kazanmak için modeme hangi AT komutunun gönderilmesi gerektiğini bilmek istiyorum? Bu modemin bir RTC'si vardır. Ama hücre kulesinden otomatik olarak ayarlamam lazım. Kule istendiğinde bir AT komutu kullanılarak zamanı modeme gönderebilir. Birçok telefonda görüyoruz ki, devir sırasında zaman güncellenir.

Manuel bu bilgileri yoktur.


1
Bu donanım tasarım belgesine göre, ayrı bir belge olan "SIM800E AT Komut Kılavuzunu" edinmeniz gerekir.
RedGrittyBrick

O zaman pratikte Multimedya olmayan telefonlar nasıl günceller?
gpuguy

3
NITZ , GSM standartlarının isteğe bağlı bir parçasıdır, tüm operatörler tarafından desteklenmez ve birkaç dakikadan daha uzun bir sürede doğru olmayabilir.
RedGrittyBrick

3
Bunun konuyla ilgili olduğuna inanıyorum çünkü M2M iletişimleri için gömülü bir GSM modülünün kullanımı ile ilgilidir. Neden bu yazı konu dışı ve aşağıdaki dört mesaja izin verildi: örnek 1 2 3 4
tcrosley

Yanıtlar:


7

Aşağıdaki komutu kullandım:

AT+CCLK?

tarih ve saati döndüren, örneğin:

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

Enfora, Telit ve Sierra: üç farklı hücre modülü kullanan ürünlerde başarılı bir şekilde. AT'den sonra bir + karakteri kullanması, ortak bir komuttur (tescilli olanın aksine) komutudur ve tüm hücre modüllerinde olmasa da çoğunda kullanılabilir olmalıdır. (Özel komutlar, AT'den sonra AT $, AT%, AT! Vb. Gibi satıcıya özgü bir karakter kullanır.)

Bir yorumda belirttiğim gibi, bu komutu kullanarak zamanı alamıyorsanız (örneğin, 0'ların tümünü döndürür), başka bir yol ağa bağlanmak ve HTTP komutu kullanarak bir sunucunun zamanını almaktır.

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

Burada bazı barındırıcılar kendi sunucunuz veya Google.com vb. olur. Bu, index.html dosyasının sitenin ana sayfası olduğunu varsayar (Google için geçerli değildir).

Şu gibi bir başlık döndürür:

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

Bildiğim kadarıyla, tüm görevliler başlıklarında GMT zamanını iade etmekle yükümlüdür.


1
Bazı şeyler ben okumak + CCLK tarafından döndürülen değeri önerilen yerleşik saatinin (RTC) değil, GSM şebekesinden (kule) arasında olabilir.
RedGrittyBrick

1
Bu şekilde açıklanan komutu da okudum, ancak son beş yıldır üç farklı hücre modülü kullanan birkaç farklı üründe kullanıyorum ve ABD'nin yanı sıra Avrupa ve Asya'nın hemen hemen her yerinde çalıştı. Almanya'da, işe yaramadığı (0'ların tümünü döndürdü) birkaç taşıyıcı vardı; Onlarla iletişime geçtim ve ağ üzerinden zaman güncellemelerini desteklemedikleri söylendi. Bu yüzden bir HTTP 1.1 isteği yapmak ve bir sunucu kapalı zaman kapmak için kod yazdı.
tcrosley

1
HTTP isteğinin 404'lere daha az eğilimli HEAD / HTTP/1.0\r\nHost: example.com\r\n\r\nolduğunu düşündüğümüz /ve HTTP 1.0'ın daha iyi HTTP (cihaz bazında) cehaletimizi temsil ettiği için daha iyi yazılabileceğini düşünüyorum . Ayrıca, noktalı virgül bir yazım hatası gibi görünüyor. Bunun dışında tarih spesifikasyona göre GMT / UTC'dir ( ayrıca bakınız ).

1
Bu yanıt bilgilendirme amaçlıdır, ancak yerleşik RTC ile ağ zaman sorununa ilişkin bir güncelleştirmeyi hak eder.

5

Her şeyden önce, NITZ birçok ağda zayıf bir şekilde desteklenmektedir (MALİYET KESME diyebilirsiniz). 10 ağdan 1'i özellikle uzaktaki yerlerde kullandığına güvenmem.

İkincisi + CCLK komutu modemin dahili RTC'si içindir. Bazı modemlerde bu saati ağdan güncelleme olanakları vardır. Buna güvenmek risklidir.

Yukarıdaki HTTP isteği eksik, yani çalışmıyor. Eskiden bunu nasıl yapacağımı biliyordum, bu yüzden çalıştığında geri dönecekti.

AT'den sonra bir + karakteri kullanması, ortak bir komuttur (tescilli olanın aksine) komutudur ve tüm hücre modüllerinde olmasa da çoğunda kullanılabilir olmalıdır. (Özel komutlar, AT'den sonra AT $, AT%, AT! Vb. Gibi satıcıya özgü bir karakter kullanır.)

Bu tamamen doğru değil. AT + kuralını izleyen özel modem komutları vardır. Örneğin AT + WOPEN tescilli bir Sierra komutudur.

Modemden bağımsız olarak aynı komutlar vardır. Bunlar 3GPP belgelerinde tanımlanmıştır. Özel komutlar genellikle satıcının kullanım kılavuzlarında tanımlanır ve açıkça tescilli olarak işaretlenir.


4

AT + CLTS = 1 (Yerel zaman damgasını al) AT&W (Yapılandırmayı kaydet)

Modemi kapatın ve modemi açın (ağdan yerel saati almak için yeniden başlatın)

Bir dahaki sefere modem açıldığında, ağ ile yerel saati alabilmeniz ve göndererek okuyabilmeniz gerekir.

AT + CCLK?

Bu benim için çalıştı im SIM800 GSM modem okuma AT komut açıklamaları daha fazla bilgi için


@ s0nic2k cevap onaylandı, bu beklediğiniz gibi işe yaramaz.
Ali80

3

Macun:

AT+COPS=2

OK

AT+CTZU=1

OK

AT+COPS=0

OK

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

Bu çünkü clk sonucu ve yeri ayrıştırmak zorunda ondan sonra mükemmel çalışıyor değil otomatik olarak gerçekleşecektir. (en azından Cinterion'umda)


6
İngilizcede bunun ne yaptığını ve sorunun neden bir çözüm olduğunu açıklayabilirseniz yardımcı olacaktır.
David

@David Bizi izlemeye devam edin, sohbette bir çeviri üzerinde çalışıyoruz.
Nick Alexeev

2
Benim için çalışan SIM800H için varyant: AT + CTZU = 1 yerine AT + CLTS = 1 kullanın (CTZU desteklenmediği için). Sonra * PSUTTZ: 2017,1,30,20,17,28, "- 20", 0 gibi istenmeyen bir mesaj alacaksınız
Matt Thomas 20

2

AT + CIPGSMLOC komutunu kullanın. SIMCOM modüllerinde iyi çalışır.

Bu komut, kullanmadan önce GPRS servisinin eklenmesini gerektirir. Bu nedenle, önce uygun komut dizisini kullanarak GPRS servisini ekleyin, ardından GSM şebekesinden tarih ve saat almak için bu komutu kullanın.

GPRS hizmetini eklemek için:

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 */

Ardından GSM Konum komutunu kullanın:

AT+CIPGSMLOC=1,1

Bu komut, ağdan bilgi almak için hatırı sayılır zamana (birkaç saniye) ihtiyaç duyar, bu nedenle komut yürütme işlevine uygun zaman aşımı süresi verin.

Bu komut ayrıca modülün bağlı olduğu BTS konumunu da döndürür. Böylece GSM modülünün kabaca doğru bir yerini de alabilirsiniz.

Daha fazla bilgi için bu kılavuza bakın: (SIM800 için aynı şekilde çalışır)

SIM900_GSM Location AT Command Manual_V1.00

Ayrıca AT + CLBS komutunun bu komutla aynı olmadığını unutmayın. Bazı bölgelerde çalışmayabilir. (Kullanamadım!). Ancak AT + CIPGSMLOC her zaman çalışır.


Ben olsun +CIPGSMLOC: 302<\r><\n> cevaben
Ali80

1
@ Ali80 Simcard kredinizi şarj edin. Bu, simcard'ınızın kredisi varsa ancak uzun bir süre boyunca borçlandırılmadıysa oluşabilir. Başka bir simcard ile de test yapabilirsiniz.
MDR

evet bu yöntemin işe yaradığını onaylayabilirim, simcard'ım kredi aldı ama bazı veri planı sınırlı erişime sahipti.
Ali80

1

RedGrittyBrick tarafından işaret edildiği gibi NITZ bu sorunun cevabıdır. Ancak, bu yalnızca ağ tarafından gönderilen ve genellikle ağa katıldığınızda gönderilen bir mesajdır. Bazı taşıyıcılar gönderir, bazıları göndermez. Bunu istemenin standart bir yolu yok.


1

İşte hücresel ağ zamanını almak için AT komut dizisi. UBLOX LEON G-200 GSM modülümde çalıştı .

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

önce bu iki komutu
AT + CLTS = 1; & W olarak gönderin

AT + CFUN = 1,1 ve AT + CLTS'den daha mı? Bu yanıtı + clts: 1 alıp almadığınızı kontrol edin
ve daha sonra bu komutu AT + CCLK?


EE.SE'ye Hoşgeldiniz. Yazılarınızdaki kod parçacıklarının etrafında iki geri itme (``) kullanın veya {}diğer yanıtlarda olduğu gibi kod blokları için düzenleyici araç çubuğundaki düğmeyi kullanın . Bu, gri bir arka plan ve sabit genişlikli yazı tipi sağlar ve kodunuzun nerede başladığını ve bittiğini görmenizi kolaylaştırır.
Transistör

0

Başlatma sırasında NITZ ve dahili RTC okumak istediğimde CCLK kullandım. Ancak modem RTC'nin ağdan ayarlanması bir veya iki dakika sürebilir. Zamanın gerçekten geçerli olup olmadığını belirtmek için bir bayrak bulundurmaya değer.


0

Bir U-Blox LTE için bir ürün yazılımı geliştirdim. Orada AT + CCLK kullandım mı? geçerli yerel saati modemden almak için.

Aşağıdaki biçimde bir süre verir. Bu senkronize edilmiş bir komut değil.

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

Bu nedenle, saati ağ ile senkronize etmek için kayıttan önce aşağıdaki AT komutu gönderildi

AT+CTZU=1\r\n

Yani benim komut dizilim:

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)

Doğru zamana sahip olmasını sağlamak için ek mantık:

Tarihi 70/01/01 veya 00/01/01'e göre kontrol eder (bizim durumumuzda, modem geçersiz bir zaman varsa alacağımız zamanlardır). Ve geçersizse, doğru bir zaman alana kadar her 1 dakikada bir periyodik olarak çalışır. Birkaç denemeden sonra CCLK göndermeyi durdurur? ve diğer zaman kaynaklarına güvenebilirsiniz.

Not: NITZ henüz sınırlı sayıda ülkede desteklenmektedir ( https://en.wikipedia.org/wiki/NITZ )

Bu nedenle, o ülkede desteklenmiyorsa yedekleme süresini güncellemek en iyisidir.

Benim durumumda GPS modülümüz var, bu yüzden GNSS verileri üzerinden zaman güncellemeleri elde ediyorum.

Ayrıca, burada alakalı olmayan, ancak zaman senkronizasyonu için yararlı olduğu düşünülmektedir.

Sistem saatini güncellemek için kronik deamon çalıştırıyoruz (manuel komutlar etkin). Böylece her iki zaman güncellemesi getirilir ve chrony doğru zamanı belirler ve sistem saatini günceller.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.