Inteligentny Budynek eHouse Tworzenie nakładek oprogramowania Windows i własnych algorytmów

Inteligentny Dom, Inteligentny Budynek eHouse wraz z oprogramowaniem na PC pozwala na tworzenie nakładek na system automatyki budynku.
Umożliwia to tworzenie własnych, indywidualnych algorytmów, które nie są zaimplementowane w firmware sterowników ani w seryjne oprogramowanie sterujące automatyka domu, automatyka budynku eHouse.
W tym celu udostępniamy użytkownikom systemu kody źródłowe oprogramowania (w Delphi 5.0). Mogą one być kompilowane w nowszych wersjach delphi lub przerobione na inne języki programowania. Świadomie wybraliśmy tak archaiczne wersje oprogramowania gdyż są one już dostępne darmowo dla amatorów programowania. Pracują równie stabilnie na środowisku Windows XP, Vista, Windows 7 zarówno 32 i 64 bitowych.

Oprogramowanie To nazwaliśmy eHouseLogAnalizer i stanowi one szablon aplikacji odczytujących logi z plików tekstowych na bieżąco.
Może ono być zarządzane i monitorowane przez aplikacje KillWdt.exe.

Podstawowe funkcje aplikacji:

  • Odczyt stanu i nazw wyjść wszystkich sterowników
  • Odczyt stanu i nazw wejść wszystkich sterowników
  • Odczyt pomiarów i nazw wejść pomiarowych wszystkich sterowników
  • Załadowanie wszystkich danych do wewnętrznej pamięci programu, które mogą być dalej przetwarzane przez aplikację

Aplikacja wykorzystuje tworzone pliki statusu w postaci plików tekstowych znajdujących się w katalogu ‘logs/status/’ z rozszerzeniem ‘.status’.
Plik jest odczytywany tylko w przypadku jego zmiany przez aplikację eHouse.exe.

Dane sterowników są ładowane w kolejnych instancjach rekordów “ehouse_rm_em_hm” znajdujących się w tablicy RM.

Dodatkowo dane HeatManagera są utrzymywane w następujących zmiennych:

bonfire_status:string; //status of bonfire for HeatManager – status kominka z panelu ogrzewania eHouse.exe
boiler_status:string; //status of boiler for HM – status kotła z panelu ogrzewania eHouse.exe
Solar_status:string; //status of solar system – status kolektorów słonecznych z panelu ogrzewania ehouse.exe
recuperator_status:string;// status of recuperation, ventilation, air heating – status wentylacji i rekuperacji nagrzewnicy

HADC:array [0..15] of double; //heat manager temperatures – pomiary temperatury HeatManagera
//Heat Manager indexes for direct access of HADC array – Stałe indeksy temperatur do bezpośredniego odczytu temperatur HeatManagera
CONST HM_GWC=3; //GWC – Ground Heat Exchanger
HM_KOM1=4; //Kominek Plaszcz 1 – Bonfire water jacket 1
HM_KOMKONV=5; //Kominek konvekcyjne – bonfire convection
HM_KOM2=6; //kominek plasz 2 – bonfire water jacket 2 (backup)
HM_TWEWN=7; //Temperatura pokojowa wewnetrzna – internal room temperature
HM_SOLAR=9; //Kolektor sloneczny – solar system
HM_ZEWNPN=8; //Temperatura zewnetrzna polnoc – external temperature north
HM_ZEWNPD=1; //temperatura zewnetrzna poludnie – external temperature south
HM_KOC=10; // temperatura kociol – boiler temperature
HM_BANDOL=11; // CO/CWU zasobnik dol – hot watter buffer bottom
HM_REQIN=12; // rekuperator wejscie czystego powietrza – recuperation clear air input
HM_REQOUT=13; // rekuperator wyjscie do domu – recuperation fresh heaten air blow to room – temperature
HM_NAG=14; // temperatura regulowana zaworem trojdroznym za nagrzewnica lub dla kaloryferow – temperature after three ways cutoff for water heater or other heating system
HM_REQWYC=15; // rekuperator wyciag z domu brudne – recuperation exhaust from home dirty temp
HM_BANGORA=2; // co/cwu zasobnik gora – hot water buffer TOP
HM_BANSRO=0; // co/cwu zasobnik srodek – hot water buffer MIDDLE
var HADCNames:array[0..15] of string; //Nazwy czujników (wejść pomiarowych) HeatManagera

Podstawowe funkcje EhouseLogAnalizer:

procedure init_heat_temperature_names; //Inicjalizuje i/lub odczytuje nazwy czujników temperatury HM
procedure loadnames_rm; //Ładuje Nazwy RoomManagerów (Ehouse 1)
procedure readethernetdevs; //Odczytuje Nazwy sterowników Ethernetowych (Ehouse 2)
function get_index_rm(str:string):integer; //zwraca index tabeli z roomManagerami wyszukiwanie po nazwie pliku statusu
function gb(chr:char):boolean; //zwraca wartość boolean przy odczycie statusu
procedure adc_hm(str:string;index:integer); //przetwarza string z zapisanymi temperaturami przy odczycie statusu HeatManagera
procedure adc_rm(str:string;index:integer); //przetwarza string z pomiarami analogowymi przy odczycie statusu RoomManagerów
function gbs(b:boolean):string; //zapisuje boolean w postaci tekstowej (0,1)
function RMDeviceIndexByName(str:string):integer; //zwraca index tabeli z RoomManagerami wyszukiwanie po nazwie sterownika
function RMGetOutputStateNr(index:integer;OutputNr:integer):boolean; //zwraca Stan wyjścia RM[index] i numerze wyjścia OutputNR
function RMGetOutputState(index:integer;OutputName:string):boolean; //zwraca stan wyjścia RM[index] i nazwie wyjścia OutputName
function RMGetInputStateNr(index:integer;InputNr:integer):boolean; //zwraca stan wejścia RM[index] i numerze wejścia InputNr
function RMGetInputState(index:integer;InputName:string):boolean; //zwraca stan wejścia RM[index] i nazwie wejścia InputName
function RMGetTempNr(index:integer;InputNr:integer):double; //zwraca wartość pomiaru temperatury RM[index] i numerze wejścia InputNr
function RMGetTemp(index:integer;InputName:string):double; //zwraca wartość pomiaru temperatury RM[index] i nazwie wejścia InputName
function RMGetInvPercent(index:integer;InputName:string):double; //zwraca wartość pomiaru procentową odwróconą 100% -x RM[index] i nazwie wejścia InputName (w stosunku do napięcia zasilania sterownika)
function RMGetInvPercentNr(index:integer;InputNr:integer):double; //zwraca wartość pomiaru procentową odwróconą 100% -x RM[index] i numerze wejścia InputNr (w stosunku do napięcia zasilania sterownika)
function RMGetPercent(index:integer;InputName:string):double; //zwraca wartość pomiaru procentową RM[index] i nazwie wejścia InputName (w stosunku do napięcia zasilania sterownika)
function RMGetPercentNr(index:integer;InputNr:integer):double; //zwraca wartość pomiaru procentową odwróconą 100% -x RM[index] i nazwie wejścia InputNr (w stosunku do napięcia zasilania sterownika)
function RMGetDeviceOutputState(Devname:string;OutputName:string):boolean; //zwraca stan wyjścia sterownika o nazwie Devname i nazwie wyjścia OutputName
function RMGetDeviceInputState(Devname:string;InputName:string):boolean; //zwraca stan wejścia sterownika o nazwie Devname i nazwie wejścia InputName
function HMGetTemp(InputName:string):double; //zwraca pomiar temperatury z wejścia pomiarowego o nazwie InputName dla HeatManagera
function HMGetTempNr(InputNr:integer):double; //zwraca pomiar temperatury z wejścia pomiarowego o numerze InputNr dla HeatManagera (1..16)
function chk_int(st:string):integer; //bezpieczna konwersja string na integer
procedure update_status; //update statusu wszystkich sterowników do tabeli (musi być uruchamiane cyklicznie)
procedure Test_save; //procedura testowa do zapisu wyników do pliku tekstowego dla ułatwienia

Inicjalizację programu i wszystkich nazw sterowników wykonuje się jednorazowo przy uruchomieniu aplikacji (FormCreate)

procedure TForm1.FormCreate(Sender: TObject);
begin
path:=getcurrentdir(); //pobiera bieżącą ścieżkę programu musi znajdować się w katalogu %eHouse_DIR%\BIN\
path:=stringreplace(path,’\bin’,’\’,[rfignorecase] ); //get path of ehouse application – ustawia ścieżkę aplikacji eHouse
loadnames_rm; //load ehouse1 controller names – ładuje nazwy sterowników eHouse 1
init_heat_temperature_names; //ładuje nazwy czujników temperatury heatManagera
readethernetdevs; //load ethernet ehouse controllers names – czyta nazwy urządzeń eHouse 2
timer1.interval:=3000; // set cyclic task interwal in miliseconds – Ustawia czas cyklicznego uruchamiania sprawdzania danych
timer1.Enabled:=true; //start automatic tasks (status update – włącza cykliczne sprawdzanie danych
update_status; //odczytuje pierwszy status
end;

Cykliczne sprawdzanie danych jest realizowane przez funkcję Timera 1 (Timer1Timer) uruchamianą w odstępie czasu ustawioną w parametrze Timer1.Interwal (wartość w milisekundach).

procedure TForm1.Timer1Timer(Sender: TObject);
var tf:textfile;
begin
update_status; //przetwarza status sterowników
Test_save; //testowo zapisuje wszystkie wyniki do pliku tekstowego
try //tworzy plik znacznikowy dla aplikacji KillExec.exe która może “pilnować” aplikację przed zawieszaniem
assignfile(tf,path+’logs\log-analizer.stp’);
//notify WDT that application working correctly using stampfile “log\log-analizer.stp”
rewrite(tf);
writeln(tf,’1′);
finally;
closefile(tf);
end;
end;