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 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.



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: