INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.


Antwort schreiben 

Dieses Thema hat akzeptierte Lösungen:

Modbus TCP Honeywell HC900-- Kein Schreiben in Register..



Wenn dein Problem oder deine Frage geklärt worden ist, markiere den Beitrag als "Lösung",
indem du auf den "Lösung" Button rechts unter dem entsprechenden Beitrag klickst. Vielen Dank!

29.08.2012, 11:30
Beitrag #1

labviewnick Offline
LVF-Neueinsteiger


Beiträge: 5
Registriert seit: Jan 2012

2011
2011
DE_EN

30655
Deutschland
Modbus TCP Honeywell HC900-- Kein Schreiben in Register..
Moin moin LVF!
Ich bin neu im Thema Modbus, jedoch etwas erfahrener mit LV..

Ich habe ein Problem mit der Datenkommunikation zwischen LV (2011) und Modbus des HC900 (verbaut in einem Parr 4871). Genauer gesagt funktioniert das Schreiben in das Holding Register nicht, weshalb ich hier Hilfe suche.

Hier die Fakten:
- Verwendet wird die freie nimodbus121 Bibliothek (ni.com)
- Auslesen der Register via TCP funktioniert (modpoll und LV)
- Schreiben in das Holding Regiser in LV funktioniert nicht (sowohl als "Write Single" und "Write Multiple Register")
- Schreiben via SpecView (Honywells Softwarelösung) funktioniert (den unten beschriebenen Setpoint)

Parameter:
Durch die verwendeten Modi in den VIs sind ja die "Function Codes" bereits definiert (Write Single=6, Write Multiple=16). Nun soll zunächst ein Wert (in einem 1D-U16-Array der größe 1) in das Holding Register geschrieben werden. Starting Address im Holding Register ist hier die 96, ein Setpoint für Temperatur (read/write).

Ausgegeben wird dann der Exception Code 6004.

Dieser Fehler bedeutet, dass der Slave einen Fehler erfährt und das Schrieben nicht funktioniert.
Vergleiche S. 20 (Single) und S.31(Multiple) im MB-Protokoll.pdf

Wenn ich die Starting Address ändere, z.B. auf eine read only adresse kommt erwartungsgemäß der Fehler Code 6002 (falsche Adresse).

Kann jemand Rat geben oder hat eine Idee?
Ich danke im Voraus!

Grüße
labviewnick
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Anzeige
30.08.2012, 12:26
Beitrag #2

labviewnick Offline
LVF-Neueinsteiger


Beiträge: 5
Registriert seit: Jan 2012

2011
2011
DE_EN

30655
Deutschland
Modbus TCP Honeywell HC900-- Kein Schreiben in Register..
Moin,

eine Ergänzung:
- Single Coils schreiben funktioniert
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
30.08.2012, 16:39
Beitrag #3

jg Offline
CLA & CLED
LVF-Team

Beiträge: 15.864
Registriert seit: Jun 2005

20xx / 8.x
1999
EN

Franken...
Deutschland
RE: Modbus TCP Honeywell HC900-- Kein Schreiben in Register..
Ich schließe aus, dass es an der NI-Modbus-Library liegt.

Ich habe das Ding jetzt schon sooo oft eingesetzt, immer ohne Probleme bei der Software-Implementation des Modbus-Protokolls durch diese Library.

Dein Problem muss also eine andere Ursache haben. Ich fische mal im Trüben:
Schreibst du auf die richtige Adresse?
Passt der MBAP-Header?
Vielleicht muss erst im Hintergrund auf irgendein Register ein Passwort geschrieben werden, bevor dein Honeywell Teil Befehle annimmt?
Du könntest mal den TCP/IP Verkehr mit Wireshark mitsniffen und dann analysieren, vielleicht hilft es.

Gruß, Jens

Wer die erhabene Weisheit der Mathematik tadelt, nährt sich von Verwirrung. (Leonardo da Vinci)

!! BITTE !! stellt mir keine Fragen über PM, dafür ist das Forum da - andere haben vielleicht auch Interesse an der Antwort!

Einführende Links zu LabVIEW, s. GerdWs Signatur.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
31.08.2012, 11:35 (Dieser Beitrag wurde zuletzt bearbeitet: 31.08.2012 11:37 von labviewnick.)
Beitrag #4

labviewnick Offline
LVF-Neueinsteiger


Beiträge: 5
Registriert seit: Jan 2012

2011
2011
DE_EN

30655
Deutschland
RE: Modbus TCP Honeywell HC900-- Kein Schreiben in Register..
Moin Jens,

vielen Dank für die Antwort.

Zum Fischen im Trüben:
Ich gehe davon aus auf die richtige Adresse zu schreiben, da ich mit SpecView einen Wert auf diese schreiben kann und die Veränderung an der Stelle im Register sehe (mit LV, Modpoll etc). Ausserdem erwarte ich bei einer falschen Adresse ja der Exception-Code 2 (gut möglich, dass ich falsch erwarte :/ ).

MBAP-Header: darum hab ich mich nicht so intensiv gekümmert, da er in den Demos (Master/Slave (Legacy)) nicht zu finden war). Ich hatte im Forum gelesen die Unit-ID undbedingt auf 1 zu setzen und dies getan. Die Symptome haben sich leider dadurch nicht verändert.

Den Punkt mit dem Passwort halte ich für unwahrscheinlich, da ich Coils schreiben kann, und SpecView als auch der Controll Builder ohne Abfrage in die Register schreiben können.

Vielen Dank für den Tipp mit Wireshark, sehr nützlich! Dies hat mich wieder auf eine andere Spur gebracht. Ich habe einen Setpoint (mit SpecView) geschrieben auf 100, dann die mit Wireshark erfassten Daten nach den Funktion-Code=16 durchsucht (Write Multiple Register) und unter DATA dann den Hexwert 42C8 0000 gefunden, entspricht der gesuchten 100 in der 32-bit schreibweise. Hier steht auf S.32/33 das IEEEFP-Format, also 32-bit float verwendet wird. Soweit ich das überblicke arbeitet die nimodbus121 ja durchgängig mit U16-bit.
Kann hier das Problem liegen???


Grüße
labviewnick
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
31.08.2012, 13:00 (Dieser Beitrag wurde zuletzt bearbeitet: 31.08.2012 14:18 von jg.)
Beitrag #5

jg Offline
CLA & CLED
LVF-Team

Beiträge: 15.864
Registriert seit: Jun 2005

20xx / 8.x
1999
EN

Franken...
Deutschland
RE: Modbus TCP Honeywell HC900-- Kein Schreiben in Register..

Akzeptierte Lösung

Modbus arbeitet IMMER mit U16 Registern!!

Was gerne gemacht wird, und das ist auch hier der Fall, dass zwei oder auch mehr U16 Register zusammengefasst werden, um einen größeren Datentyp unterzubringen.

In diesem Fall sind zwei U16-Register zusammengefasst und bilden auf Binärebene die Darstellung des 4-Byte-Float-Wertes. Insgesamt entspricht, wie du richtig erkannt hast, 0x42C80000 als Float-Wert genau 100.
   

Beim Schreiben musst du das natürlich genau umgekehrt machen. Wenn du einen Float-Wert setzen willst, dann musst du diesen auf 2 U16 Register aufteilen und dann per "Write Multiple Register" schreiben, also etwas in dieser Art:
   

Gruß, Jens

Wer die erhabene Weisheit der Mathematik tadelt, nährt sich von Verwirrung. (Leonardo da Vinci)

!! BITTE !! stellt mir keine Fragen über PM, dafür ist das Forum da - andere haben vielleicht auch Interesse an der Antwort!

Einführende Links zu LabVIEW, s. GerdWs Signatur.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
31.08.2012, 14:04
Beitrag #6

labviewnick Offline
LVF-Neueinsteiger


Beiträge: 5
Registriert seit: Jan 2012

2011
2011
DE_EN

30655
Deutschland
RE: Modbus TCP Honeywell HC900-- Kein Schreiben in Register..
Hab vielen Dank Jens, so funktionierts!!

Für mein Verständnis:
Ist das die Funktion des "Write Multiple Registers", also das Schreiben in die Ordnung von zusammengefassten und damit multiple Register?
Die Aufteilung auf 2 U16 Register zum Schreiben passiert dann beim typcasten von SGL auf das U16-Array, weshalb es dann die Größe 2 hat?
Beim Lesen wird da schon der "leere" Teil automatisch entfernt?

Grüße
labviewnick
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
31.08.2012, 19:59
Beitrag #7

jg Offline
CLA & CLED
LVF-Team

Beiträge: 15.864
Registriert seit: Jun 2005

20xx / 8.x
1999
EN

Franken...
Deutschland
RE: Modbus TCP Honeywell HC900-- Kein Schreiben in Register..
(31.08.2012 14:04 )labviewnick schrieb:  Ist das die Funktion des "Write Multiple Registers", also das Schreiben in die Ordnung von zusammengefassten und damit multiple Register?
Ja und Nein. Mit "Write Multiple Registers" kannst du ganz allgemein mehrere aufeinander folgende Register mit einem Kommando schreiben.
(31.08.2012 14:04 )labviewnick schrieb:  Die Aufteilung auf 2 U16 Register zum Schreiben passiert dann beim typcasten von SGL auf das U16-Array, weshalb es dann die Größe 2 hat?
Richtig erkannt. Anderes Beispiel: Wenn dir mal ein Gerät unterkommt, das einen Wert z.B. als U64 oder DBL erwartet, dann kommt nach dem Typecasten halt ein U16-Array der Größe 4 heraus.

Man sollte sich allgemein zum besseren Verständnis von der Vorstellung lösen, dass bei "Modbus" in der Registern wirklich U16-Werte stehen.
Aus meiner Sicht fährt man besser mit der Vorstellung, dass jedes Modbus-Register einfach einen Speicherbereich von 2 Byte Größe hat. Was in diesem Speicherbereich drinnen steht und wie das zu interpretieren ist, das muss man der Dokumentation des entsprechenden Gerätes entnehmen.
(31.08.2012 14:04 )labviewnick schrieb:  Beim Lesen wird da schon der "leere" Teil automatisch entfernt?
Was willst du damit aussagen bzw. fragen?

Gruß, Jens

Wer die erhabene Weisheit der Mathematik tadelt, nährt sich von Verwirrung. (Leonardo da Vinci)

!! BITTE !! stellt mir keine Fragen über PM, dafür ist das Forum da - andere haben vielleicht auch Interesse an der Antwort!

Einführende Links zu LabVIEW, s. GerdWs Signatur.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
06.09.2012, 08:36
Beitrag #8

labviewnick Offline
LVF-Neueinsteiger


Beiträge: 5
Registriert seit: Jan 2012

2011
2011
DE_EN

30655
Deutschland
RE: Modbus TCP Honeywell HC900-- Kein Schreiben in Register..
Moin Jens,

ignorier den letzen Punkt bitte mit dem "leeren Bereich". War ein Problem meiner Vorstellung mit der Darstellung..

Gruß
labviewnick
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Antwort schreiben 


Möglicherweise verwandte Themen...
Themen Verfasser Antworten Views Letzter Beitrag
  Wago 750-652 Modbus Register Klas 3 7.532 28.07.2015 07:50
Letzter Beitrag: Klas
  Modbus TCP/IP - Register lesen TSC 9 17.399 12.06.2013 10:24
Letzter Beitrag: TSC
  Modbus TCP MrChipsy 1 5.251 26.06.2012 06:33
Letzter Beitrag: NWOmason

Gehe zu: