Uwaga! W przykładzie wykorzystano moduł Gate Modbus drugiej generacji z FW 1.1.0-2034C!
Celem niniejszego artykułu jest przedstawienie sposobu integracji inwertera Fronius Symo 8.2-3-M z systemem Grenton Smart Home za pośrednictwem protokołu komunikacyjnego Modbus RTU.
W przykładzie zostaną odczytane dane dotyczące m.in.:
- generowanej mocy chwilowej;
- całkowitej energii wytworzonej w ciągu dnia, roku oraz od początku działania instalacji.
Do zrealizowania poniższego przykładu potrzebujemy:
- CLU Z-Wave (o nazwie CLU)
- Gate Modbus (o nazwie Gate_Modbus)
- Inverter Fronius
Konfiguracja obiektów wirtualnych Modbus
1. Na module Gate Modbus tworzymy obiekty wirtualne Modbus:
2. Wartości cech wbudowanych poszczególnych obiektów konfigurujemy w następujący sposób:
* całkowity prąd przemienny:
Uwaga! W celu odczytania wartości rejestrów od wybranego adresu należy odjąć offset wynoszący 1.
* prąd przemienny fazy A:
* napięcie międzyfazowe A-B:
* napięcie fazowe A-N:
* moc chwilowa:
**
* częstotliwość:
Uwaga! Moduł Gate Modbus z FW 1.1.0-2034C umożliwia odczyt wartości co najwyżej 32-bitowych, czyli dwóch rejestrów dwubajtowych (16-bitowych). W przypadku niektórych urządzeń informacje zawarte są w czterech rejestrach dwubajtowych. Odczyt wartości 64-bitowych będzie możliwy poprzez podział na dwie wartości 32-bitowe i ich niezależny odczyt - pod warunkiem, że urządzenie zezwala na taki odczyt wartości 64-bitowych.
Moduł Gate Modbus z FW 1.1.10-2140 umożliwia bezpośredni odczyt wartości 64-bitowych za pomocą obiektu wirtualnego ModbusValue.
3. Rejestrami 64-bitowymi w przypadku inwertera Fronius są rejestry zwracające wartości energii dziennej, rocznej oraz całkowitej:
Chcąc odczytać wartość energii dziennej musimy:
* utworzyć dwa obiekty wirtualne na module Gate Modbus:
- pierwszy odczytujący dwa rejestry:
- drugi odczytujący kolejne dwa rejestry:
* dodać cechy użytkownika w CLU:
gdzie cechy day_p1 oraz day_p2 przyjmują wartość początkową równą 00000000000000000000000000000000
* utworzyć skrypt w CLU, który przekonwertuje do postaci binarnej odczytane wartości dziesiętne rejestrów, połączy obie wartości i przekonwertuje je do postaci dziesiętnej:
if(day_reg==502) then
CLU->day_p1="0"
num=Gate_Modbus->x502_day_energy_p1->Value
a=31
for a=31, 0, -1 do
b=2^a
if(num>=b) then
num=num-b
CLU->day_p1=CLU->day_p1 .. "1"
else
CLU->day_p1=CLU->day_p1 .. "0"
end
end
CLU->day_p1=string.sub(CLU->day_p1,2,33)
end
if(day_reg==504) then
CLU->day_p2="0"
num=Gate_Modbus->x504_day_energy_p2->Value
a=31
for a=31, 0, -1 do
b=2^a
if(num>=b) then
num=num-b
CLU->day_p2=CLU->day_p2 .. "1"
else
CLU->day_p2=CLU->day_p2 .. "0"
end
end
CLU->day_p2=string.sub(CLU->day_p2,2,33)
end
CLU->day_sum_bin=CLU->day_p1 .. "" .. CLU->day_p2
CLU->day_energy_modbus=(tonumber(CLU->day_sum_bin,2))/1000
gdzie zmienna day_reg jest parametrem skryptu:
* przypisać wywołanie powyższego skryptu z odpowiednią wartością parametru:
- w pierwszym obiekcie wirtualnym:
- w drugim obiekcie wirtualnym:
Do odczytu wartości energii rocznej oraz całkowitej analogicznie tworzymy obiekty wirtualne, zmienne użytkownika oraz skrypty.
4. Tak utworzoną konfigurację przesyłamy do modułu CLU oraz Gate Modbus.
5. Po przesłaniu konfiguracji cechy użytkownika w CLU powinny przyjąć odpowiednie wartości:
podobnie obiekty wirtualne modułu Gate Modbus - poniżej obiekt zwracający wartość energii chwilowej: