Odczyt wartości 64-bitowych

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: