Promotic

PmSMS - Driver do komunikacji z modemami GSM przy pomocy wiadomości SMS

Driver komunikacyjny do przesyłania wiadomości SMS umożliwia przy pomocy modemu GSM wysyłanie i odbieranie wiadomości SMS (Short Message Service).
Moduł GSM musi wspierać AT polecenia w trybie tekstowym (standard GSM ETSI 07.05). Standard ten wspiera większość modemów GSM.

Przykłady modułów GSM, z którymi driver został przetestowany:
- TC35, TC35i, MC35, MC35i, MC39i od firmy SIEMENS
- GS-01 od firmy WESTERMO
- Wavecom (np. WMOD2) od firmy WISMO
- GSM-BGS5-EEN od firmy SeaPraha (patrz https://www.seapraha.en/produkt/gsm-bgs5-een). Umożliwia komunikować się poprzez Ethernet.
- ale także każdy inny, który obsługuje standard GSM ETSI 07.05


Przed zastosowaniem tego drivera w aplikacji PROMOTIC należy obejżeć "PROMOTIC wideo kurs 4 - Drivery komunikacyjne".

Podstawowe właściwości drivera:
- Zastosowanie tego drivera wymaga zakup licencji PmSMS. Podczas wytwarzania aplikacji w trybie freeware PmFree lub z licencją deweloperską oraz podczas jej testowania w runtime element ten jest zawsze funkcjonalny.
- Komunikacja jest dla Ethernetu (aplikacja PROMOTIC jest klientem) lub dla łącza szeregowego (COM1, COM2 ...). W chwili obecnej jest zaimplementowana transmisja poprzez Ethernet takich samych danych jak dla łącza szeregowego.
Nawet jeżeli urządzenie nie posiada łącza Ethernet, można do niego podłączyć konwerter "łącze szeregowe-Ethernet" a po stronie PROMOTIC aplikacji wtedy komunikować poprzez Ethernet.
- Driver jest wbudowany do systemu PROMOTIC przy pomocy obiektu PmaComm.
Driver wspiera zastosowanie obiektu PmaCommMsg. Obiekt PmaCommGroup nie można zastosować.
Dla łatwego dodania tego drivera do aplikacji jest dogodne zastosować: Konfiguracja wstępna "PmSMS - wysyłanie i odbiór SMS z aplikacji"


Zalecone wartości parametrów obiektu PmaComm:

Zalecane wartości dla pozycji Parametry łącza szeregowego:
Prędkość transmisji9600 Bd (jest zależne od ustawienia modemu GSM)
Ilość bitów informacji8
ParzystośćNO (żaden)
Ilość bitów stopu2 (jest zależne od ustawienia modemu GSM)
Ilość powtórzeń przy nieudanej transmisji0
Timeout pomiędzy odbiorem 2 znaków100 ms
Opóźnienie pomiędzy odbiorem-wysyłaniem200 ms
Zarządzanie działaniem RTSlog.1
Zarządzanie działaniem DTRlog.1
Zalecane wartości dla pozycji Parametry Ethernet-klient:
W chwili obecnej jest zaimplementowana transmisja poprzez Ethernet takich samych danych jak dla łącza szeregowego. W tym przypadku można ustawić parametry Ethernetu według parametrów konwertera Ethernet/łącze szeregowe.
Opis i zalecane wartości dla pozycji Parametry protokołu:
Timeout odbioru odpowiedzi2000 ms. Wyłącznie dla łącza szeregowego.
Okres czasu (w milisekundach) w którym driver będzie oczekiwać na odpowiedź po odesłaniu wiadomości.
Jeżeli do tego czasu nie zostanie odebrana żadna odpowiedź, wtedy transmisja wiadomości zostanie zakończona (zostanie wywołane zdarzenie onEndOfTransfer z błędem 24 lub 66).
Zwłoka w nawiązaniu połączenia przy inicjalizacji2000 - 5000 ms
Wykonaj inicializacyjne ustawienie modemuOkreśla polecenie, które jest przesyłane do modemu podczas inicjalizacji
Tak - Polecenie "AT&F" (fabryczne ustawienie modemu)
Nie - Nie zostanie wysłane nic
W wiadomości odbieranej będzie także odesłana wiadomość (tzn. jest ECHO)Tak / Nie.
Parametr ten jest nadrzędny niż odpowiedni parametr Filtrować znaki ECHO w konfiguratorach Ustawienie parametrów łącza szeregowego. Z tego powodu jest konieczne wybrać "Filtrować znaki ECHO"=Nie.
Format wiadomościIstnieje kilka rodzai modemów GSM, które nie są razem w pełni kompatybilne. Z tego powodu w driverze można określić rodzaj formatu wiadomości:
Tryb tekstowy według GSM 07.05 - Zalecamy wykorzystanie tego trybu. Dane są transmitowane w trybie tekstowym. Ten tryb jest kompatybilny na przykład z GSM modemami: Siemens M20,TC35,TC35i,MC35,MC35i,MC39i, Westermo-GS01, Wavecom-WMOD2, itd.
PDU tryb dla starego modemu GSM M1 - Dane są transmitowane w tzw. danych PDU, które są kompatybilne z GSM modemem M1 od firmy Siemens.
PDU tryb dla starego modemu GSM A1 - Dane są transmitowane w danych TPDU (według GSM 03.40), kompatybilne z modemem A1 (lecz prawdopodobnie także z modemem M20 oraz Westermo-GS01). W tym protokole jest jednak zabudowane tylko wysyłanie wiadomości SMS (odbiór nie)!
Kodowanie znakówPodczas inicjalizacji drivera zostanie wysłane polecenie AT+CSCS, które przełączy modem do trybu, w którym wiadomości tekstowe będą wysyłane w określonym zestawie znaków.
No - Polecenie AT+CSCS nie zostanie wysłane. Wszystkie wiadomości tekstowe będą wysyłane w postaci znaków ASCII. W tym przypadku nie można wysyłać znaki diakrytyczne (np. znaki ż,ą,ć ...).
UTF-8 - Podczas inicjalizacji zostanie wysłane polecenie AT+CSCS=UTF-8. Wszystkie wiadomości tekstowe będą wysyłane w postaci Unicode UTF-8. W tym przypadku można wysyłać teksty zawierające dowolne znaki diakrytyczne.

Opis komunikacji przy pomocy obiektu PmaCommMsg

W parametrach wiadomości obiektu PmaCommMsg można określić typy wiadomości:

- Inicjalizacja SMS: Wiadomość ta musi zostać uruchomiona przed wszystkimi innymi typami wiadomości. Wykona się inicjalizacja modemu GSM.
Ze względu na powolność nawiązania połączenia (prawdopodobnie przy rejestracji w sieci GSM) jest możliwe, że inicjalizacja po raz pierwszy nie uda się. W tym przypadku jest konieczne zwiększenie zwłoki przy nawiązywaniu w parametrach protokołu lub ponownie wywołać wiadomość inicjalizacyjną.
- Karta "Parametry":
- Preferowaná pamięć wiadomości: Tu można ustawić, która to pamięć modemu zostanie wykorzystana do transmisji wiadomości. Możliwości są następujące:
- Według ustawienia w module GSM modulu (domyślnie)
- Pamięć na karcie SIM
- Pamięć modemu GSM
- Pamięć na SIM karcie i w modemie GSM
- W karcie "Dane-wysłanie" znajdują się zmienne:
- PIN (Personal Identification Number): Numer PINu SIM (Subscriber Identity Module) karty włożonej do modemu GSM.
Przykład: "1589"
- SCA (Service center addres): Numer telefoniczny centrum SMS (Short Message Service Center).
- W karcie "Dane-odbiór" nie ma żadnej zmiennej.

- Wysłanie wiadomości SMS: Wiadomość ta wyśle wiadomość SMS pod wprowadzony numer telefoniczny.
- Karta "Parametry":
- Timeout przyjęcia potwierdzenia wysłania [ms]:
W tym miejscu można ustawić jak długo driver będzie czekał (w milisekundach) na potwierdzenie odebrania transmisji.
Wartość 0 oznacza, że będzie czekał zgodnie z wartością parametru Timeout transmisji jednego pakietu [ms].
Jeżeli do tego czasu nie zostanie odebrane żadne potwierdzenie, wtedy transfer wiadomości zostanie zakończony z błędem 24.
- W karcie "Dane-wysłanie" znajdują się zmienne:
- TLF (Phone number): Numer telefoniczny, pod który ma zostać wysłana wiadomość SMS.
Przykład: "602505647" lub "+48602505647".
Czasami konieczne jest wpisanie tej liczby bez cudzysłowu, a czasem z cudzysłowem.
- MSG (Content of message): Tekst wiadomości SMS, który ma zostać wysłany. Tekst może zawierać najwyżej 160 znaków.
Przykład: "Kociol1 - doszło do awarii".
- W karcie "Dane-odbiór" nie ma żadnej zmiennej.

- Odbiór wiadomości SMS:
Wiadomość ta stwierdzi, czy w modemie GSM znajduje się przyjęta przynajmniej jedna wiadomość SMS.
Jeżeli taka wiadomość znajduje się w modemie, wtedy zapisze zawartość wiadomości do danych odbioru, wiadomość SMS następnie zostanie usunięta z modemu GSM i transmisja zostanie zakończona.
Jeżeli w modemie GSM nie znajduje się żadna odebrana wiadomość, wtedy transmisja zostanie zakończona (tzn. zostanie wywołane zdarzenie onEndOfTransfer) z błędem 62 (negatywne potwierdzenie).
A więc uruchomenie tego rodzaju wiadomości jednorazowo odbierze najwyżej jedną wiadomość.
W celu nieustannego odbioru przyjmowanych wiadomości SMS jest konieczne uruchamiać obiekt PmaCommMsg z tym rodzajem wiadomości (przy pomocy metody Run) regularnie na przykład co 10 sekund.
- W karcie "Dane-wysłanie" nie ma żadnej zmiennej.
- W karcie "Dane-odbiór" znajdujuą się zmienne:
- TIME (Time of receive): Czas odbioru wiadomości do modemu GSM.
Przykład: "13.5.2023 15:40"
- FROM (Phone number): Numer telefoniczny nadawcy wiadomości.
Przykład: "+48602505648"
- MSG (Content of message): Tekst przyjętej wiadomości SMS.

- Transmisja ogólnej wiadomości: Ta niestandardowa wiadomość służy do bezpośredniego sterowania modemu GSM, na przykład przy pomocy poleceń AT. Lista poleceń AT wychodzi poza zakres niniejszej dokumentacji.
- Karta "Parametry":
- Typ odbioru danych: Można ustawić, czy dane są odbierane w 1 lub w 2 wiadomościach. Domyślnie znajdują się w jednej wiadomości.
Jeżeli odpowiedź dociera na przykład najpierw z modemu GSM i dopiero następnie z centrum SMS, wtedy można ustawić na 2 wiadomości.
- W karcie "Dane-wysłanie" znajdują się zmienne:
- DATA (Data for send): Tekst wiadomości (polecenia), które ma zostać wysłane do modemu GSM.
- W karcie "Dane-odbiór" znajdujuą się zmienne:
- DATA (Data for receive): Tekst odpowiedzi z modemu GSM.
Notatki:
- Wiadomości SMS nie powinny zawierać znaków diakrytycznych.
- GSM modem może mieć pewne problemy z odbiorem wiadomości szybko następujących po sobie. W niektórych sytuacjach może się nawet rozłączyć i jest konieczne rączne zresetowanie modemu. Jeżeli do takich sytuacji będzie dochodzić, wtedy jest konieczne powiększenie:
b) Timeout odbioru odpowiedzi w oknie konfiguracyjnym "Parametry protokołu".


Modem GSM, sieć GPRS i wysyłanie SMS-ów:

Jeżeli istnieje konieczność podłączenia modemu GSM/GPRS także do sieci GPRS, wtedy jest konieczna instalacja modemu w SO Windows. W czasie połączenia GPRS łącze szeregowe jest kontrolowane przez SO Windows (poprzez zainstalowany modem) i driver w tym czasie nie ma dostępu do tego łącza - a więc nie można poprzez niego wysyłać wiadomości SMS. Rozwiązaniem jest dynamicznie odłączenie sieci GPRS, podłączenie drivera, wysłanie/odbiór SMSów a następnie ponowne odłączenie drivera i podłączenie sieci GPRS. Siecią GPRS można sterować przy pomocy programu użytkowego rasphone.exe (jest częścią SO Windows).
Przykład:
Na początku konfigurator "PmaComm > Ustawienie parametrów łącza szeregowego > Port szeregowy" jest ustawiony na "Nieustawione". Sieć GPRS jest podłączona (nazwa modemu w SO Windows jest na przykład "GSMname") i nie można zastosować z tego powodu na przykład portu "COM1". W przypadku konieczności wysłania wiadomości SMS:
JavaScriptVBScriptWybierz oraz skopiuj do schowka

var b1, b2;
b1 = Pm.CreateProcessSync("rasphone -h GSMname", ".");   // Odłączenie od sieci GPRS
if (b1)
{
b2 = pMe.Pm("/PmaCommSMS").OpenPort("COM1");
if (b2)
{
pMe.Pm("/PmaCommSMS/Msg1").Run();   // Wysłanie wiadomości SMS
}
else
{
// Error OpenPort !!!
}
}
else
{
// Error Disconnect Rasphone !!!
}
Jeżeli nie doszło do błędu, wtedy za pomocą tych poleceń zostało zainicjowane wysłanie wiadomości SMS. Po wysłaniu wiadomości SMS zostanie wywołane zdarzenie PmaCommMsg.onEndOfTransfer w którym można odłączyć port i ponownie podłączyć się do sieci GPRS:
JavaScriptVBScriptWybierz oraz skopiuj do schowka

var b1;
pMe.Pm("/PmaCommSMS").ClosePort();
b1 = Pm.CreateProcessSync("rasphone -d GSMname", ".");   // Podłączenie do sieci GPRS
if (! b1)
{
// Error Connect Rasphone
}
Polecenia odłączenia i ponownego podłączenia sieci są synchroniczne i mogą trwać dłuższy czas (kilka sekund). Z tego powodu jest zalecane wykorzystanie opisanych algorytmów w innym wątku (threadu) - patrz Jak uruchamiać skrypty w innym wątku (threadu).

Historia:
Pm9.00.27: Nowy konfigurator "Timeout przyjęcia potwierdzenia wysłania [ms]" umożliwia określić czas oczekiwania na potwierdzenie dla wiadomości typu "Wysłanie wiadomości SMS".
Pm9.00.13: Nowy konfigurator "Kodowanie znaków" umożliwia przełączenie modemu do kodowania UTF-8.
© MICROSYS, spol. s r.o.