Het uit lezen van Variable via Modbus

Goede dag
Ik heb een vraag over het uitlezen van Holding Register
Ik gebruik het programma Short modbus En bij de Input Register kan ik de Interger waarden uit lezen Maar in de manual van de regelaar staat onder Input Register ook het type REAL Dit is een temperatuur uitlezing
Maar Als ik de REAL uit lees krijg ik niet de zelfde waarden als op de display van de regelaar

Dit zijn de waarden
Op de regelaar heb ik deze temperaturen 24,9 C and 14,9 C
I read on modbus address 54 : 16751 this must 14,9C
I read on modbus address 55 : - 15729
I read on modbus address 56 : 16836 this must 24,9C
I read on modbus address 57 : 25166

Dus deze waarden komen niet overeen

In de bijlage een voorbeeld modbus punten

Modbus.pdf

GJ_

Moderator

Modbus kent geen real, het zijn normaal allemaal integers. De plaats van een eventuele komma is afgesproken, dus bv 100,00% word 10000.
Bovendien staat je waarde uitgeschreven over twee adressen. Hou er rekening mee dat die ook nog een gewisseld kunnen staan. Uitlezen van één adres werkt dus sowieso niet.
Probeer het binair uit te lezen en kijk dan wat je er mee kan goochelen door de reeksen aan elkaar te plakken in verschillende volgorde.

Have fun >:-)

Hoeben

Golden Member

Het zijn 8-bit bytes? Dan moet elk byte tussen 0 en 255 zijn.

Laat even zien wat er hexadecimaal in het bericht staat? Dus allevier de bytes.

Kijk ook even hier: https://store.chipkin.com/articles/how-real-floating-point-and-32-bit-…

[Bericht gewijzigd door Hoeben op 3 december 2021 11:02:03 (33%)

GJ_

Moderator

Op 3 december 2021 11:00:16 schreef Hoeben:
Het zijn 8-bit bytes? Dan moet elk byte tussen 0 en 255 zijn.

Nee, het zijn 32 bits: twee 16 bits registers.

Hoeben

Golden Member

Even ingelezen: Modbus is Big endian, het belangrijkste word eerst.

Omdat het hier al vertaald is naar decimaal is het niet helemaal duidelijk wat er hex staat. Als je dat even laat zien denk ik dat er snel een antwoord komt.

GJ_

Moderator

Op 3 december 2021 11:06:15 schreef Hoeben:
Even ingelezen: Modbus is Big endian, het belangrijkste word eerst.

Dat zou je willen :-)
Het is verschillend per leverancier.

Zelfs het adres kan verschillend zijn. Als staat opgegeven adres 55 kan het best zijn dat je 54 of 56 moet uitlezen. Het is Amerikaans en die hebben de 0 nooit goed begrepen. Dus de een begint bij adres 1, de ander toch bij 0 , hoewel adres 0 in modbus niet bestaat.

De uitlezing in hex format moet wat meer duidelijkheid geven.
Overigens klopt het dat praktisch elke leverancier zijn eigen interpretatie heeft bedacht van datapresentaties.
De officiële Modbus specificatie kent idd geen real getallen maar je zal de fabrikanten de kost geven die zich daar niets van hebben aangetrokken. Meen me te herinneren dat ik ooit zelfs 64 bit reals ben tegen gekomen.

Ook zoals GJ aangeeft: de adressering methodiek wisselt ook nogal eens. Een adres hoger of lager is geen uitzondering.

Maar ook dat je er 20000 of 40000 (meen ik) voor moet plakken. Dat komt uit de oudste Modbus specificaties waar ze vaste beginadressen voor resp. discrete inputs, discrete outputs (coils), input registers en holding registers kenden.

Vervolgens natuurlijk Integer formaat volgens Intel of Motorola en (het zal eens niet zo zijn) ook nog eens dat men binnen een 16 bit register lo en hi order byte wisselden.
Ik ben zowat alles wel eens tegengekomen.

GJ_

Moderator

Op 3 december 2021 12:00:46 schreef Leo-Bolier:
Maar ook dat je er 20000 of 40000 (meen ik) voor moet plakken.

Die offset komt idd van de functiecode.

Het is altijd even puzzelen en klooien. Het is maar zelden dat je gelijk met de eerste poging gelijk goed zit.

Goede middag

Bedankt voor de ondersteuning
I k heb het gevonden om de juiste waarden in mijn modbus programma te krijgen
Door mijn programma op
Read functie op Raed 3 input registers te zetten en de Result format op Floating Point gezet
En nu lees ik nu wel goed uit ik heb een foto in de bijlage gedaan
Dan zie je waarde in mijn programma

Het is soms zo makkelijke maar je als je maar een goede kant op gestuurd wordt

Nog bedankt allemaal

modbus real_.pdf

Byte order 'normal' : Dan moet je dus maar gokken wat dat betekent? :)

Weer een voorbeeld van onduidelijke user interface.

Ja de regelaars van Carel is altijd een probleem de uitleg van modbus communicatie

Meneer Carel is geen uitzondering maar meer de regel.
Bij het gros van de fabrikanten die in hun apparatuur een Modbus protocol hebben geïmplementeerd is het om met GJ te spreken "aanklooien om de juiste waarden er uit te halen".