Dekodowanie binarnego statusu ze sterowników Inteligentnego domu – kod źródłowy

Inteligentny Dom , Inteligentny Budynek eHouse – Dekodowanie statusu ze sterowników mikroprocesorowych Automatyka Domu, Automatyka Budynku odebranego przez panele sterujące pracujące w sieci LAN lub WiFi, po protokole UDP (User Datagram Protocol).
Standardowa ramka odbioru statusu w postaci binarnej, ze sterowników mikroprocesorowych została omówiona w artykule Inteligentny Budynek eHouse pakiet statusu sterowników.
Dekodowanie tej ramki wymaga analizowania każdego bitu danych z osobna. Dodatkowo każdy typ sterownika:

  • RoomManager
  • ExternalManager
  • HeatManager
  • InputExtender
  • CommManager
  • LevelManager
  • EthernetRoomManager

Posiada różnice wynikające z różnej ilości wejść cyfrowych, pomiarowych, wyjść cyfrowych, ściemniaczy, funkcji monitorowanych i algorytmów które powodują, że dane w standardowej ramce mutują w zależności od typu sterownika.

Powoduje to konieczność dekodowania bit po bicie dla każdego typu sterownika niezależnie.  W przypadku implementacji wszystkich typów sterowników mikroprocesorowych stworzenie i przetestowanie algorytmu dekodującego tą ramkę może zająć do 1 miesiąca.

Aby zminimalizować ten czas do minimum,  dla ułatwienia przedstawiamy gotowy algorytm zapożyczony z aplikacji ehouse.exe, umożliwiający automatyczne dekodowanie wszystkich informacji ze sterownika i ładowanie danych do rejestrów szablonu panelu dotykowego (dla tabletów) Windows XP, Vista, 7, 8. Po automatycznym załadowaniu tych danych do bibliotek oprogramowania eHouse, przy pomocy paru linijek kodu można tworzyć własne algorytmy sterujące systemem eHouse.

Do standardowego szablonu oprogramowania paneli należy dołożyć bibliotekę „binary”, która w całości zajmuje się dekodowaniem ramki statusu z postaci binarnej.

Dekodowanie całej ramki (dla sterowników mikroprocesorowych eHouse1 RM, EM, HM) realizowane jest przez funkcję procedure set_rm(str:array of char;TCP_INDEX_INC:integer);

parametrami funkcji są bufor statusu i przesunięcie (offset). Bufor zawiera wszystkie odebrane dane ze statusu. Offset zależy od rodzaju transmisji (extended address, normalna, i inne przyszłe zastosowania zależne od algorytmów komunikacyjnych).

Funkcja automatycznie zapełnia tablicę statusu dla każdego sterownika indywidualnie i pozwala później bezpośrednio manipulować tymi danymi lub automatycznie aktualizować dane na ekranie paneli dotykowych.

Funkcja ta jest uruchamiana w procedurze odbioru danych z komponentu clienta UDP (TNMUDP – nazwanego binary) w zdarzeniu onDataReceived .

Funkcja odbioru ma następującą postać:

 

procedure TForm1.binaryDataReceived(Sender: TComponent;
NumberBytes: Integer; FromIP: String; Port: Integer);
var   C: array[0..1024] of char;
MyStream: TMemoryStream;

begin
if filesystem_status then exit; //jeśli nie przez system plików filesystem_status
MyStream := TMemoryStream.Create;   //tworzy strumień danych
binary.ReadStream(MyStream); //odczytuje strumień danych
MyStream.Read(C[0], NumberBytes); //ładuje do bufora C
set_rm(C,1);  // przetwarza dane binarne i ładuje do rejestrów rm[index] dla sterowników eHouse 1
Test_save;     // Testowy zapis danych wyjściowych do plików tekstowych dla ułatwienia pracy
update_panel; //Ładowanie danych dla panela sterującego
end;

Pozwala na automatyczny i bezinwazyjny odbiór danych przez sieć LAN lub WiFi przy pomocy pakietów broadcastów UDP (User Datagram Protocol). Co więcej nie wymaga łączenia z serwerem a tylko  nasłuchuje rozgłoszeń na porcie '6789′ domyślnym lub innym.

Błędy łącza, sieci, routerów nie powodują też zawieszania oprogramowania czy nieokreślonych błędów (jak w przypadku łączności z serwerami TCP), lecz zanika tylko aktualizacja danych bez wpływu na serwer nadający danę czy aplikację klienta UDP.

UWAGA!! Tylko 1 klient UDP może odbierać na tym samym porcie na tym samym panelu (komputerze) Windows. W przypadku tworzenia oprogramowania sterującego na serwerze Windows dla systemu eHouse, konieczne jest zaimplementowanie wszystkich algorytmów w jednej aplikacji, która analizuje dane i wykonuje wszystkie algorytmy oraz je wizualizuje.

Ważniejsze zmienne w bibliotece binary:

boiler_alarm:boolean=false;   //boiler alarm above programmed alarm temperature

//przekroczenie temperatury alarmowej kotła
bonfire_stat:integer; //bonfire heating level 0-7 for binary mode – status pracy kominka
//0 – fire off – nie grzeje
//1 – fire on / extinguishing => green level<temp jacket (green led blinking) – wygasa błyska zielony
//2 – fire on => green level>=temp jacket>yellow level – histeressis (green led) – zielony
//3 – fire on => yellow level – histeressis>temp jacket>yellow level+ histeressis) (green + yellow leds) – zielony – żółty
//4 – fire on => yellow level +histeressis>temp jacket>red level – histeressis (yellow ) – żółty
//5 – unconditional => red level – histeressis < temp jacket < red level + histeressis (red+yellow leds) żółty – czerwony
//6 – unconditional => temp jacket > red level + histeressis     (red led constant) – czerwony
//7 – unconditional => temp jacket > bonfire alarm (red led blinking) ALARM – czerwony miga

bonfire_sensor_error:boolean=false;//bonfire sensors error too much different water jacket temperature between two sensors
// błąd czujników temperatury płaszcza kominka zbyt duża różnica
recuperator_status:string;// status of recuperation, ventilation, air heating – status rekuperatora i wentylacji
recu_winter:boolean=false;    //recuperator winter/summer mode heat exchanger enabled / disabled – rekuperator zima/lato
recu_manual_amalva:boolean=true;  //recuperator auto/manual mode for amalva recuperator (auto managed by internal amalva controler, manual by eHouse HeatManager) // rekuperator amalva manual /auto
went_cooler:boolean=true;       //water cooler on/off for ventilation or recuperation chłodnica w układzie rekuperacji lub GWC ON/OFF
went_gwc:boolean=false;        //gwc (ground heat exchanger) servomotor on/off  – gruntowy wymiennik ciepła siłownik wł/wył
went_aux_gwc_fan:boolean=false;        //auxiliary gwc ventilator / fan on/off for ground heat exchanger – wentylator wspomagający GWC
bonfire_dgp:boolean=false;      //bonfire hot air distribution system enabled / disabled – Wentylator dystrybucji gorącego powietrza z kominka DGP
ventilation_on:boolean=false;   //ventilation is currently working on/off – włączenie wentylacji i rekuperacji
heater_pump:boolean=true;       //pump for heater for ventilation on / off  – pompa nagrzewnicy w obwodzie wentylacji lub dla kaloryferów
three_ways_cutoff:integer=0;    //three ways cutoff direction 0 off, 1 increasing level, -1 decreasing level) kierunek obrotu elektro zaworu trójdrożnego
solar_pump:boolean=false;    //solar pump on/off – pompa kolektora słonecznego
boiler_on:boolean=false;        //boiler enabled / disabled – kocioł wł/wył
boiler_pump:boolean=false;    //boiler pump status on/off – pompa kotła wł/wył
boiler_fuel_out:boolean=false;   //boiler out of fuel aproximate (count hours of heating) – szacunkowy brak paliwa dla kotła na paliwo stałe (obliczone na podstawie godzin pracy kotła)
boiler_power_on:boolean=false; //boiler power supplay on/off; – Zasilanie kotła wł/wył
boiler_fuel_supply_override:boolean=false; //boiler fuel supplyier override (control by ehouse / internal boiler controller) – nadrzędne sterowanie podawaniem paliwa z systemu eHouse wł/wył
bonfire_pump:boolean=false;   //bonfire pump status on/off – pompa kominka wł/wył

recu_speed:integer=0;     //recuperator speeed 0..3 – prędkość rekuperatora
recu_temperature:integer; //temperature level of recu 0..30C temperatura rekuperatora dla amalwa
_recu_mode:string=”;     //recuperation mode in text as on HEatManager control panel (ehouse.exe) – tryb pracy rekuperatora jak dla panela sterującego HeatMAnagerem w aplikacji eHouse.exe
went:string;    //ventilation text status as on HeatManager Control panel (ehouse.exe) – status wentylacji identycznie jak w panelu HeatManagera ehouse.exe
koci,sola:string; //boiler,solar text status as on HeatManager Control panel (ehouse.exe)  – status kotła i kolektora słonecznego jak w panelu HeatManagera sterującym eHouse.exe
komi:string; //bonfire text status as on HeatManager Control panel (ehouse.exe) – status kominka jak w panelu sterującym heatmanagera w aplikacji eHouse.exe
 
sterowanie oświetleniem
 

Jeden komentarz do “Dekodowanie binarnego statusu ze sterowników Inteligentnego domu – kod źródłowy”

Możliwość komentowania została wyłączona.