Dnešný diel seriálu venujem trochu netradičnému gadžetu, teda aspoň z pohľadu bežného ajťáka, ktorý zvykne len ťukať do klávesnice. Predstavím totiž malý PLC, ktorý môže mnohým pomocť prekonať bariéru medzi softvérovým a fyzickým svetom.
Začnem trošku netradične, príbehom. Pred nejakým časom (bolo to v stredu) sa jeden z klientov rozhodol, že chce mať pri budové platené parkovisko a samozrejme, chce to mať hotové do konca týždňa. Riešení nám napadlo niekoľko. Ako najjednoduchší spôsob sa nám pozdával systém na RFID karty, aký je použítý napríklad v Galérii v Košiciach. Po tom, ako sme obvolali možných dodávateľov a zistili, že snáď neexistuje systém, ktorý by mohol fungovať bez obsluhy, sme túto možnosť zavrhli. Vymienať karty niekoľkokrát denne je totiž megafail. Na parkovisko pri susednej budove namontovali systém na čiarové kódy vytlačené na útržky papiera, čo sa javilo ako o niečo lepšie riešenie, ale neprešiel ani týždeň a systém sa ukázal ako vrcholne nespoľahlivý. Hútali sme, hútali a vymysleli sme teda niečo takéto: Pri vstupe na parkovisko sa zosníma ŠPZ všetkých prichádzajúcich áut, zaznamená sa čas. Pri výstupe sa ŠPZ zosníma opäť a návštevníkovi sa zobrazí kód, ktorý musí poslať SMSkou na určené číslo. Po prijatí SMSky sa rampa otvorí. Aby sa zbytočne nezdržiaval pri rampe, budú v areáli rozmiestnené kiosky, ktoré mu po zadaní jeho ŠPZ tento kód prezradia a má potom 15 minút na jeho odoslanie a opustenie parkoviska. Ani tento systém nie je úplne dokonalý, ale rozhodli sme sa pre neho, lebo sa nám to zdalo cool :)
Zohnali sme teda modul, ktorý z načítaného obrazu rozoznáva ŠPZ (o tom bude článok nabudúce, keď ho poriadne otestujeme), zohnali sme spoločnosť, ktorá vie prevádzkovať platený SMS systém a pustili sme sa do montáže. Posledná vec, čo nám chýbala, bolo zariadenie, ktorým budeme vedieť fyzicky otvoriť rampu. Tá potrebuje nejaký impulz. Začali sme sa teda obzerať po zariadení, ktoré by malo aspoň dva relé výstupy a bolo ovládateľné buď cez nejaký sériový komunikačný kanál (RS485, can-bus) alebo ideálne cez ethernet. Môžete si pomyslieť, že to predsa nie je problém dať dokopy za pár minút, no dni, kedy sme si sami robili všetok hardvér, sú už dávno za nami a navyše, nebol na to ani čas. Potrebovali sme to mať bežiace čím skôr. Zachránil nás nakoniec wao, ktorý mi poslal odkaz na vecičku, ktorú budem predstavovať v tomto článočku (za čo mu nesmierne ďakujem).
Tým zariadením bolo SDS MICRO Light, ktoré presne spĺňalo to, čo sme potrebovali. Objednali sme si verziu Light2, ktorá má miesto 16K EEPROM internú 2MB dataflash, inak je totožná. Má to ethernet port a dva relé vstupy. A omnoho viac. Tu je popis možných využití z oficálnej stránky:
Vidno, že možných využití je neúrekom. Mňa osobne najviac potešila možnosť nahrať do modulu vlastný programček v jazyku nazvanom SDS-C (vzdialene pripomína bežné C) a tým zautomatizovať jeho chod. Na stránke výrobcu je možné nájsť kompletný popis jazyka, nejaké príklady a najnovší kompilátor+simulátor pre Microsoft Windows. Okrem toho je možné z neho čítať všetky možné stavy pomocou SNMP, sťahovaním XML súboru, texťáku, CSV, atď. Pravdu povediac, bol som z celého modulu a jeho možností veľmi nadšený. Otváranie rámp sme mali rozbehané za nejakú hodinku od vybalenia, no mne to nedalo a hral som sa s tým ďalej. Nebudem ale zbytočne viac odbiehať od témy, len poznamenám, že všetky funkcie, ktoré výrobca sľubuje, ten modul skutočne má a všetko funguje bezchybne, respektíve presne podľa popisu.
Vrátim sa teda k rampám a ich otváraniu. Potrebovali sme cez ethernet ovládať dve relátka pripojené k modulu. V podstate to išlo hneď. Modul obsahuje web rozhranie, cez ktoré sa dá nastaviť a kontrolovať všetko, čo je práve pripojené. Zopnúť a rozopnúť ich išlo obyčajným kliknutím na tlačidlo. Zo zdrojáku web stránky som vyčítal, že pri každom kliknutí je načítaná konkrétna URL s parametrami označujúcimi požadovanú akciu. Skúsil som teda niečo takéto:
curl -m1 -q -s "http://192.168.1.250/cgi_rctl?rmode=cson&rn=1"
curl -m1 -q -s "http://192.168.1.250/cgi_rctl?rmode=csoff&rn=1"
curl -m1 -q -s "http://192.168.1.250/cgi_login?passw=test"
function otvor($ip,$id,$pass)
{
$cmd=sprintf("curl -m1 -q -s \"http://%s/cgi_rctl?rmode=cson&rn=%d\"",$ip,$id);
exec($cmd,$v,$ret);
if($ret!=0) return false;
$v=implode('',$v);
if(strpos($v,'password')!==false){
$cmd_login=sprintf("curl -m1 -q -s \"http://%s/cgi_login?passw=%s\"",$ip,$pass);
exec($cmd_login,$v,$ret);
if($ret!=0) return false;
exec($cmd,$v,$ret);
if($ret!=0) return false;
$v=implode('',$v);
if(strpos($v,'password')!==false) return false;
}
return true;
}
// first register (sys[] index) to control relays
#define REG_CONTROL 196
// first register (sys[] index) to set relays states
#define REG_STATE 231
// number of relays to control
#define COUNT 2
// delay to keep relay open in steps (100 steps = 1 second)
#define DELAY 150
#define UPTIME sys[3]
#define INPUT sys[140]
var i,r,t;
checkinput
{
t=INPUT;
if(t>0&&t<=COUNT){
INPUT=0;
t-=1;
r=REG_STATE+t;
sys[r]=1; // open relay
ram[t]=UPTIME+DELAY; // and set time to close
echo(UPTIME,': Opened relay ',t,' and set to be closed at ',ram[t]);
}
}
main
{
echo('Init for ',COUNT,' relays');
i=0;
initloop:
ram[i]=0; // set time to close for i-th delay to zero
// r=REG_CONTROL+i;
// sys[r]=16; // set control of this relay to SDS-C
r=REG_STATE+i;
sys[r]=0; // close relay
i+=1;
if(i<COUNT) goto initloop;
echo('Init completed');
start:
i=0;
loop:
checkinput();
if(ram[i]>0&&ram[i]<UPTIME){
r=REG_STATE+i;
sys[r]=0; // close relay
ram[i]=0; // set time to zero (indicates, that relay is closed)
echo(UPTIME,': Closed relay ',i);
}
i+=1;
if(i>=COUNT) goto start;
goto loop;
}
curl -m1 -q -s "http://192.168.1.250/sdscep?sys140=1"
Okrem sys[] je možné v programe využiť aj pole ram[], ktoré môže slúžiť na pomocné ukladanie si premenných. Veľkosť ram[] a indexy v sys[] sa môžu meniť v závislosti od použitého zariadenia, takže na to treba trochu dávať pozor. Všetko ale pekne nájdete v dokumentácii.
V čase písania tohto článočku nám už modul SDS MICRO Light2 beží viac ako týždeň. Prežil všetky hrozné búrky, ktoré sme tu za ostatné dni mali a funguje skvele, bez jediného výpadku alebo zaseknutia. Nakoniec sa nám podarilo vymyslieť aj využitie pre ďalšie vstupy a jeho užitočnosť si nevieme vynachváliť. Ak teda potrebujete niečo ovládať alebo kontrolovať a nechcete stráviť veľa času pri skladaní si vlastného zariadenia, je táto hračka práve pre vás. Za prijateľnú cenu dostanete vynikajúcu, funkciami nabitú a kvalitnú dosku.
Užitočné linky:
|
webhosting by: |
UnlimitedHosting | CustomHosting | FreeWeb.sk |