Telecomanda prin SMS / GSM

Limbaj programare: C, Java

Sumar

Telecomanda / Radiocomanda prin SMS este conceputa pentru monitorizarea si controlul proceselor simple aflate la mare distanta de operator si care nu implica un control foarte precis din punctul de vedere al executiei. Controlul se face prin intermediul mesajelor SMS sau dintr-o aplicatie care ruleaza pe dispozitive mobile cu sistemul de operare Android.

Utilitate

Produsul a fost dezvoltat pentru a veni in ajutorul celor care doresc sa controleze si sa monitorizeze diverse obiective de la distanta. Setul de comenzi acceptat a fost dezvoltat in asa fel incat utilizatorul sa poata crea textul de comanda fara batai de cap, prin comenzi simple si intuitive.

Mod de livrare

Produsul este compus din un modul electronic si aplicatie software pentru Android.

Principalele caracteristici ale modulului:

  • Upgrade de firmware gratuit pe masura ce implementam noi functii
  • Dimensiuni carcasa 205mm x 100mm, h80mm
  • Livrare in carcasa cu prindere pe sina omega, antena externa cu fir sau cu prindere pe carcasa (la cerere antena interna)
  • Modem GSM SIM908-C cu GPS (GPS-ul nu este implementat la aceasta data, dar va fi implementat ulterior sau la cererea expresa a unui client*)
  • optional baterie LiIon de backup pentru obiective speciale ***
  • 16 iesiri cu tranzistoare (Open Collector) **
  • 2 Relee
  • 8 intrari cu functii selectabile din care: 3 Analogice, 1 counter, 4 digitale, 2 Capture sau 8 digitale
  • functie de upgrade firmware (descarcarea ultimei vesiuni de software)
  • interfata RS232
  • interfata RS485
  • conexiune UEXT
  • conector LCD (inca neimplementat in software*)
  • Alimentare 8-24v DC (8-18v AC)
  • protectie la alimentare inversa

* - aceasta functie poate fi suportata la o data ulterioara prin upgrade gratuit de software prin portul RS232

** - acestea pot fi inlocuite cu intrari pentru aplicatii customizate

*** - functionalitate redusa a modulului

Modul de utilizare

Mesajul trimis catre modul poate fi compus foarte simplu datorita setului de instructiuni format numai din caracterele vizibile si disponibile pe tastatura telefonului mobil plus cateva caractere speciale usor accesibile cum ar fi punctul '.' (1xTasta_1), virgula ',' (2xTasta_1) si semnul intrebarii '?' (4xTasta_1), caractere des utlizate si in scrierea mesajelor SMS in mod curent.

 

Comenzile nu sunt case sensitive, adica nu conteaza daca sunt scrise cu majuscule sau nu. Mesajul este prelucrat automat de catre modul pentru a elimina nevoia scrierii unui mesaj cu un singur tip de caractere. De exemplu comanda OFF poate fi scrisa 'off' sau 'OFF' sau 'OfF' sau 'oFf', etc.

Modulul dispune de functia Spelling and Syntax Check, care ii permite sa valideze mesajul primit inaintea executiei acestuia, in acest mod eliminandu-se posibilitatea introducerii unei comenzi neacceptate sau a introducerii unei comenzi acceptate dar cu parametri gresiti sau incompleti. Pentru mai multe detalii privind aceasta functie consultati capitolul dedicat. Un mesaj gresit va duce la returnarea catre expeditor a unui SMS de catre modem specificand faptul ca s-a produs o eroare de spelling sau sintaxa cat si pozitia in SMS unde aceasta eroare a fost gasita. Este returnata numai prima eroare gasita intrun SMS, de aceea este indicat sa verificati tot textul SMS-ului trimis in cazul in care primiti o eroare.

 

Comenzile primite se executa secventual pana la sfarsitul SMS-ului dupa care se trece la urmatorul SMS. Comenzile primite sunt puse in aplicare la un timp de maxim 10mS intre ele in cazul in care nu se gasesc comenzi de intarziere in textul SMS-ului, iar in cazul in care se introduc comenzi de intarziere comenzile sunt executate luand in considerare valorile acestora.

 

Anularea executiei unui SMS se face prin apelarea modemului (apel voce), iar modemul va respinge apelul drept confirmare. Este suficient ca in casca sa se auda un singur beep iar executia va fi anulata. Modulul va respinge apelul pentru confirmare dupa al doilea beep. Dupa aceasta se executa urmatorul SMS primit, daca acesta exista. Drept urmare a acestei functii se pot executa mai multe SMS-uri in ordinea primirii lor, astfel se poate executa un program secvential cu o complexitate ridicata. Atentie ca optiunea de notificare de apel pierdut sa fie dezactivata deoarece modemul va primi de la operatorul de telefonie mesaj cu informatii despre apelul respins iar acesta va fi returna un mesaj cu eroare de spelling catre numarul de la care a primit ultimul SMS.

 

Intarzierile dorite sunt disponibile in doua versiuni, una dintre ele cu intarzieri cu pasul se 1 secunda iar cealalta cu pasul de 10ms. Intarzieri de valori mai mici nu au fost considerate fezabile avand in vedere viteza de transmisie a SMS-ului. La preprocesarea mesajului, intarzierile sunt insumate si daca aceasta valoare depaseste un prag, raspunsul in cazul solicitarii acestuia este returnat imediat, urmand ca mesajul de confirmarea indeplinirii taskului este returnat dupa terminare. Sub acest prag, mesajul de confirmare va contine si mesajul de indeplinire al taskului 'DONE'.

 

Pentru aplicatii speciale, compania noastra poate executa rutine sau functii dedicate pentru comanda unor utilaje la cererea explicita a unui client. Pentru acest lucru va rugam sa luati legatura cu departamentul nostru de vanzari.

 

Comenzile acceptate, sintaxa si formatul

 

Regulile de sintaxa pentru ca un SMS sa fie validat de preprocesor sunt urmatoarele:

Caracterul spatiu < >

Sintaxa:
<comanda><valoare><spatiu><urmatoarea comanda>
<comanda><valoare_start><.><valoare_stop><spatiu><urmatoarea comanda>
<comanda><iesirea_x><spatiu><iesirea_y> ...<spatiu>... <iesirea_n><spatiu><urmatoarea comanda>
<comanda><iesirea_x><,><parametru><spatiu><urmatoarea comanda>

Spatiul este interpretat fie ca  separator intre comenzi, fie ca spatiu intre elementele unei enumerari. Acesta poate fi inserat sau nu intre o comanda si primul parametru pentru lizibilitate dar pentru ca un mesaj sa fie cat mai compact acesta poate fi omis.
Intro inlantuire, spatiul tine loc de separare in locul virgulei pentru usurarea scrierii unui mesaj folosind tastatura standard a telefonului mobil.
Intre numele iesirilor sau intrarlilor se pune obligatoriu spatiu cand acestea sune enumerate, de exemplu ON1 2 nu este echivalent cu ON12.

Caracterul punct <.>

Sintaxa: <comanda><valoare_start><.><valoare_sfarsit>

Caracterul punct este utilizat pentru a simboliza o enumerare a unor valori consecutive incluzand valorile de inceput si sfarsit. Spre exemplu comanda ON3.12 va opera pornirea tuturor iesirilor de la valoarea 3 pana la 12, adica 3, 4, 5, 6, 7, 8, 9, 10, 11, 12.
Un caracter punct amplasat intro sintxa eronata va returna un mesaj de eroare. Eroarea semnalizata va contine si pozitia in SMS a comenzii gresite. De exemplu un SMS de forma: On1.5 off6. on 10 va returna eroare la pozitia 2 deoarece formula completa este <val_start><.><val_sfarsit> iar in comanda <off> valoarea de start este 6 iar valoarea de sfarsit lipseste.

Caracterul virgula <,>

Sintaxa: <comanda><iesirea_x><,><parametru><spatiu><urmatoarea comanda>

Caracterul virgula este interpretat ca separator pentru atribuirea unei valori pentru o comanda care accepta acest lucru.
Exemplu de utilizare: ADCMIN2,563 <urmatoarea comanda>
In cazul prezentat mai sus, valoarea de <563> este atribuita valorii de ADC a intrarii <2> pentru trimiterea unei alarme cand valoarea acesteia scade sub aceasta valoare.

Caracterul semnul intrebarii <?>

Sintaxa: <comanda><?> Sau <comanda><valoare><?>

Caracterul <?> este folosit pentru interograrea valorii unui parametru configurabil cum ar fi valorile de prag ale alarmelor.
Exemplu de utilizare: ADCMAX?
La primirea acestei comenzi modulul va returna starea intrarilor de la 2 pana la 6, valoarea programata a lui ADCMAX si starea releului 1.

Setul de comenzi

Cand o intrare configurabila este interogata cu o comanda, acea intrare va fi configurata pentru acea functie. Un exemplu poate fi intrarea de ADC care poate fi configurata si ca intrare digitala. La interogarea cu comanda IN, aceasta este configurata ca intrare digitala si o valoare de “1” sau “0” este returnata. Cand aceasta intrare este interogata cu comanda ADC, intrarea este configurata pentru conversia unei valori analogice si valoarea pentru acea conversie este returnata, adica o valoare intre 0 si 1023.

Detalii privind comenzile

ON - activeaza o iesire de tip tranzistor cu colector in gol (leaga iesirea la GND)
Sintaxe acceptate:
ONx - porneste iesirea x
ONx y z <etc> - porneste iesirile enumerate (maxim 16)
ONx.y – porneste iesirile de la x pana la y inclusiv x si y
Valori acceptate: numere de la 1 pana la 16 (alte valori genereaza eroare)
Exemplu de utilizare: ON2 ON6.8 ON10 12 16
Porneste iesirile: 2, 6, 7, 8, 10, 12, 16

OFF – dezactiveaza o iesire de tip tranzistor cu colector in gol (duce iesirea in starea de impedanta mare)
Sintaxe acceptate:
OFFx - opreste iesirea x
OFFx y z <etc> - opreste iesirile enumerate (maxim 16)
OFFx.y – opreste iesirile de la x pana la y inclusiv x si y
Valori acceptate: numere de la 1 pana la 16 (alte valori genereaza eroare)
Exemplu de utilizare: OFF2 OFF6.8 OFF10 12 16
Opreste iesirile: 2, 6, 7, 8, 10, 12, 16

OUT – interogheaza starea unei iesiri de tip tranzistor cu colector in gol
Sintaxe acceptate:
OUTx – transmite starea iesirii x
OUTx y z <etc> - transmite starea iesirilor enumerate (maxim 16)
OUTx.y – transmite starea iesirilor de la x pana la y inclusiv x si y
Valori acceptate: numere de la 1 pana la 16 (alte valori genereaza eroare)
Exemplu de utilizare: OUT2 OUT6.8 OUT10 12 16
Returneaza mesaj cu starea iesirilor: O2,1 O6,0 O7,1 O8,1 O10,0 O12,1 O16,1
Parametrul de dupa virgula reprezinta starea iesirii, unde “1” inseamna activa, iar “0” inseamna inactiva.

ONR - activeaza o iesire de tip releu (comuta releul in starea aclansat)
Sintaxe acceptate:
ONRx - porneste iesirea x
ONRx y z <etc> - porneste releele enumerate (maxim 16)
ONRx.y – porneste iesirile de la x pana la y inclusiv x si y
Valori acceptate: numere de la 1 pana la 2 (alte valori genereaza eroare)
Exemplu de utilizare: ONR2 ONR1.2 ONR1 2
Porneste releele: 1 si 2

OFFR – dezactiveaza o iesire de tip releu (comuta releul in starea neaclansat)
Sintaxe acceptate:
OFFRx - opreste iesirea x
OFFRx y z <etc> - opreste releele enumerate (maxim 16)
OFFRx.y – opreste iesirile de la x pana la y inclusiv x si y
Valori acceptate: numere de la 1 pana la 2 (alte valori genereaza eroare)
Exemplu de utilizare: OFF1 OFF1.2 OFF1 2
Opreste releele: 1 si 2

REL – interogheaza starea unei iesiri de tip releu
Sintaxe acceptate:
RELx – transmite starea iesirii x
RELx y z <etc> - transmite starea iesirilor enumerate (maxim 16)
RELx.y – transmite starea iesirilor de la x pana la y inclusiv x si y
Valori acceptate: numere de la 1 pana la 2 (alte valori genereaza eroare)
Exemplu de utilizare: REL2 REL1.2 REL1 2
Returneaza mesaj cu starea iesirilor: R2,1 R1,0 R2,1 R1,0 R2,1
Parametrul de dupa virgula reprezinta starea releului, unde “1” inseamna activ, iar “0” inseamna inactiv.

PWM – output valoare PWM in procente (tensiune 0.0v-10.0v cu un digit)
Sintaxe acceptate:
PWMx – valoare iesire
Valori acceptate: numere de la 0 pana la 100 (alte valori genereaza eroare)
Exemplu de utilizare: PWM56

DLYS – intarziere in secunde
Sintaxe acceptate:
DLYSx – interziere de x secunde
Valori acceptate: numere de la 1 pana la 65535 (alte valori genereaza eroare)
Exemplu de utilizare: ON2 DLYS23 OFF2

DLYM – intarziere in minute
Sintaxe acceptate:
DLYMx – interziere de x secunde
Valori acceptate: numere de la 1 pana la 65535 (alte valori genereaza eroare)
Exemplu de utilizare: ON2 DLYM60 OFF2

DLYZMS – intarziere in zeci de milisecunde
Sintaxe acceptate:
DLYZMSx – interziere de x secunde
Valori acceptate: numere de la 1 pana la 65535 (alte valori genereaza eroare)
Exemplu de utilizare: ON2 DLYZMS23 OFF2

RPT – repeta comenzile primite in mesaj pana se apeleaza pentru anulare
Sintaxe acceptate:
RPT
Valori acceptate: nu accepta
Exemplu de utilizare: ON2 DLYS2 OFF2 DLYS2 RPT
Anularea comenzii se face prin apelarea (apel voce) a modemului. Modemul va respinge apelul drept confirmare a anularii. Pentru a evita transmisia de mesaje inutile, optiunea de notificare a apelurilor pierdute va trebui dezactivata pe cartela din modem. Configurati cartela inainte de a o introduce in modem.

IN – interogheaza starea unei intrari digitale
Sintaxe acceptate:
INx – transmite starea intrarii x
INx y z <etc> - transmite starea intrarii enumerate (maxim 16)
INx.y – transmite starea intrarii de la x pana la y inclusiv x si y
Valori acceptate: numere de la 1 pana la 8 (alte valori genereaza eroare)
Exemplu de utilizare: IN2 IN6.8 IN1 3 5
Returneaza mesaj cu starea iesirilor: I2,1 I6,0 I7,1 I8,1 I1,0 I3,1 I5,1
Parametrul de dupa virgula reprezinta starea intrarii, unde “1” inseamna activa, iar “0” inseamna inactiva.