Licznik DTS1946 / APV L3F1946-P - rejestry i interpretacje wyników

Szanowni,
O liczniku w temacie były już tematy. Ale nie znalazłem odpowiedzi na mój problem.
Otóż wysyłam prosty kod z zapytaniem o częstotliwość sieci i zgodnie z dokumentacją producenta jest to rejestr typu FLOAT 0032 - 0033.

msg.payload = {
‘fc’ : 3,
‘unitid’ : 3,
‘address’: 0x0032, // kod szesnastkowy [Hz]
‘quantity’: 2,
‘datatype’: ‘float’
}
return msg;

Wartości jakie otrzymuję są odklejone od rzeczywistości:

[16968,0]

Konwersja z danych float za pomocą kodu:

let buf = Buffer.alloc(4);
buf.writeUInt16BE(msg.payload[0], 2); // Starszy rejestr
buf.writeUInt16BE(msg.payload[1], 0); // Młodszy rejestr
let value = buf.readFloatBE(0);
msg.payload = value;
// Jeśli wynik jest nieoczekiwany, zastosuj Math.abs
if (value < 0) {
msg.payload = Math.abs(value);
}
return msg;

daje równie bzdurne wartości:

2.3777232342663496e-41

Odwrócenie rejestrów także daje wynik od czapy.
Podobne próby wykonałem dla pozostałych rejestrów jak napięcie w sieci czy moc całkowita.

Ja się chciałem zapytać, czego nie wiem i co robię nie tak.
Z góry uprzejme dzięki za podpowiedź.

czyli w hex 16968=0x4248 , 0=0x0000 całość 0x42480000 po konwersji na Float - Big Endian (ABCD) = 50.

więc konwersja w NR na float

readFloatBE(0,4).toFixed (1) 

4 - bo cztery bajty.

W odpowiedzi z modbusa jest już zmienna buffer i nie ma potrzeby tego tak lepić

msg.responseBuffer.buffer
msg.responseBuffer.buffer.readFloatBE(0,4).toFixed (1)

Oooo Papo Smerfie!!!
Dziękuje.

Tak z ciekawości do czego to wykorzystujesz?

Moja Pompa Ciepła pobiera dziwne (czyt. duże) wartości prądu. Muszę monitorować jej zużycie. Dane odbieram co 5 sekund i wysyłam do INFLUX-DB. Przy okazji dorzucę do tego temperaturę na zewnątrz aby sprawdzić zależność zużycia od temperatury.

A dlaczego nie pobierasz tych danych z rejestru 0219?
obraz
(Zaznaczam że nie jestem specjalistą od Modbus i może czegoś przy okazji się nauczę).

Ten licznik, dla wygody użytkownika ma dwie mapy. Jedna jest tylko z danymi typu float.
Ma to taką zaletę, że wszystkie rejestry możesz odczytać na raz i obrobić dane w pętli bez rożniania typu - jedna funkcja konwersji dla wszystkich… taka kosmetyczna sprawa :blush:

1 Like