Uwaga! W przykładzie wykorzystano moduł Gate Modbus drugiej generacji z FW 1.1.0-2034C!
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.
Uwaga! Moduł Gate Modbus z FW 1.1.10-2140 umożliwia bezpośredni odczyt wartości 64-bitowych za pomocą obiektu wirtualnego ModbusValue!
Przykładem urządzenia, które zwraca wartości w 4 rejestrach jest m. in. inwerter Fronius. W rejestrach zwracane są wartości energii dziennej, rocznej oraz całkowitej:
Uwaga! W celu odczytania wartości rejestrów od wybranego adresu należy odjąć offset wynoszący 1.
W związku z tym - chcąc odczytać np. wartość energii dziennej musimy:
* utworzyć dwa obiekty wirtualne na module Gate Modbus (o nazwie Gate_Modbus)
- pierwszy odczytujący dwa rejestry:
- drugi odczytujący kolejne dwa rejestry:
* dodać cechy użytkownika w CLU (o nazwie 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:
Tak utworzoną konfigurację przesyłamy do modułu CLU oraz Gate Modbus. Po jej przesłaniu cechy użytkownika w CLU powinny przyjąć odpowiednie wartości: