Téma: Quido - příklad čtení vstupů
Pěkný den,
pokud by to někdy někomu k něčemu bylo, tak tady uvádím příklad mojí komunikace s Quidy (2/32 a 30/3) data se mi ukládájí do pole RAM odkud si je čtu pomocí user.htm stranky. Toto co sem davam je moje DEBUG stranka pro nasazeni systemu. Potom to bude uz komplexnejsi. (kontrola, zda je ramec dlouhy jak ma byt a ma spravny kontrolni soucet, ale to az v ostre verzi.
Komunkace je pomoci Spinel 97 po RS485 se dvema moduly Quido na jedne lince z SDS-MACRO.
Tady jsou trifunkce, ktere volam v te hlavnejsi funkci. Tyto funkce cisti uart buffer a cast ram pole, kam ukladam vysledek z uartu a uklada uart do casti pole ram[400-450]. Funkci uartClean volam i pri inicializaci sds-c programu (funkce init{}).
uartClean {
// Vycisti zasobnik UART
var _uc;
wait(500);
label uartClean_1:
_uc = sys[49];
wait(50);
if (sys[49] > -1) goto uartClean_1;
}
serialResponseSave {
// Vloži odpověď seriove linky do ram[400-450]
// Pro prijem seriovych dat je vyuzivano pole ram[400-450]
var _srs;
var _srst;
_srst = 3;
label serialResponseSave_2:
if (sys[48]==0) {
_srs = 399;
label serialResponseSave_1:
_srs++;
ram[_srs] = sys[49];
if (sys[48]==0 && _srs<450) goto serialResponseSave_1;
} else {
wait(300);
if (sys[48]!=0 && _srst<=0) goto serialResponseSave_2;
}
}
serialResponseClean {
// Smaz odpoved ze seriove linky
var _src;
_src = 400;
label serialResponseClean_1:
ram[_src] = 0;
_src++;
if (_src<450) goto serialResponseClean_1;
}
Tady je hlavni funkce, kterou volam z main{}.
Je zde odkomentovana cast httpget, ktera mi posila stavy do databaze, kde mam ulozeny casy zmen na vstupech mozno smazat a stejne zakomentovana cast, ktera stavy vypisuje do console.
inputRead {
// Cte stavy vstupu a uklada je do pole ram[300-350]
// Cleaning
uartClean();
serialResponseClean();
// Quido 30/3
// Vyšli požadavek na stav vstupu a vyčkej na odpověď a ulož ji do ram
serial_text_out(0x2a, 0x61, 0x00, 0x05, 0x32, 0x0b, 0x31, 0x01, 0x0d);
wait(500);
serialResponseSave();
// Zkontroluj zda ma odpoved spravne parametry
if (ram[400] != 0x2A) goto jumpOverModule_1; // prefix
if (ram[401] != 0x61) goto jumpOverModule_1; // protokol
if (ram[404] != 0x32) goto jumpOverModule_1; // adresa zarizeni
if (ram[405] != 0x0b) goto jumpOverModule_1; // podpis odesilatele
if (ram[406] != 0x00) goto jumpOverModule_1; // ack
// Nastav ram[301-330] podle vstupu 1-30
_ram = 300;
_ram1 = 410;
label inputRead_1:
_ram2 = 8;
_y = ram[_ram1];
label inputRead_2:
_x = _y % 2;
_y = _y /2;
_ram++;
ram[_ram] = _x;
_ram2--;
if (_ram2>0) goto inputRead_2;
_ram1--;
if (_ram1>406) goto inputRead_1;
label jumpOverModule_1:
// Cleaning
serialResponseClean();
// Quido 2/32
// Vyšli požadavek na stav vstupu a vyčkej na odpověď a ulož ji do ram
serial_text_out(0x2a, 0x61, 0x00, 0x05, 0x31, 0x0c, 0x31, 0x01, 0x0d);
wait(500);
serialResponseSave();
// Zkontroluj zda ma odpoved spravne parametry
if (ram[400] != 0x2A) goto jumpOverModule_2; // prefix
if (ram[401] != 0x61) goto jumpOverModule_2; // protokol
if (ram[404] != 0x31) goto jumpOverModule_2; // adresa zarizeni
if (ram[405] != 0x0c) goto jumpOverModule_2; // podpis odesilatele
if (ram[406] != 0x00) goto jumpOverModule_2; // ack
// Nastav ram[331-332] podle vstupu 1-2
_ram = 330;
_ram1 = 2;
_y = ram[407];
label inputRead_3:
_x = _y % 2;
_y = _y /2;
_ram++;
ram[_ram] = _x;
_ram1--;
if (_ram1>0) goto inputRead_3;
label jumpOverModule_2:
//Cleaning
serialResponseClean();
// // Vypis vysledek do konzole
// echo(ram[301],ram[302],ram[303],ram[304],ram[305],ram[306],ram[307],ram[308],ram[309],ram[310],
// ram[311],ram[312],ram[313],ram[314],ram[315],ram[316],ram[317],ram[318],ram[319],ram[320],
// ram[321],ram[322],ram[323],ram[324],ram[325],ram[326],ram[327],ram[328],ram[329],ram[330],
// ':',
// ram[331],ram[332])
// ;
// Odesli vysledek do DB
http_get(10,1,3,1,'host','/debug/data.php?hodnota=',
ram[301],ram[302],ram[303],ram[304],ram[305],ram[306],ram[307],ram[308],ram[309],ram[310],
ram[311],ram[312],ram[313],ram[314],ram[315],ram[316],ram[317],ram[318],ram[319],ram[320],
ram[321],ram[322],ram[323],ram[324],ram[325],ram[326],ram[327],ram[328],ram[329],ram[330],
':',
ram[331],ram[332])
;
}
Pokud bude zajem mohu sem dat i user.html a funkce pro ovladani relatek (na modulech quido i sds). user.htm samozrejme zobrazuje i vstupy. Data mam v intervalu javascriptem nacitana z sds pomoci get_sys a get_ram. Diky pouziti js, neni treba refreshovat celou stranku, ale refreshuji se casti stranky. Na strance jsou taky zobrazeny teploty z cidel na obou sbernicich.