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 I/O-Server Bound Variables (Bindungsvariablen)



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!

20.02.2014, 11:29
Beitrag #1

weigsi Offline
LVF-Neueinsteiger


Beiträge: 7
Registriert seit: Aug 2013

2012
2011
DE



MODBUS I/O-Server Bound Variables (Bindungsvariablen)
Hallo zusammen,

ich bearbeite gerade die Kommunikation eines Kompressors mit einem cRIO über ModBus RTU.
Das ganze soll über einen I/O-Server (cRIO = Master - Kompressor = Slave) von statten gehen.
Verwendetes Whitepaper:
http://www.ni.com/white-paper/13911/en/

In der ModBus Dokumentation der Kompressorsteuerung habe ich alle Adressen (ca. 26 Adressen 0x0000 bis 0x001C gegeben (mit Lücken..), wobei falls nicht anders angegeben gilt alle Werte 16bit entsprechend 1 Wort breit)

Nur um mich abzuichern einige kurze Fragen:

1. Die in der Doku gegebene Registeradresse: 0x0000 entspricht der Adresse 00000 die ich bei der Erstellung der Bindungsvariable zuweise.
Das ist im Whitepaper dargestellt:
Zitat:Bind Shared Variables to Modbus Adresses Through the I/O Server - Schritt 1.3 (Seite 2/7)

Oder muss ich hier die Syntax beibehalten und für Bindungsvariable als Adresse 0x0000 angeben? - Analog für die anderen Adressen dann auch z.B. 0x001C ->0x001C

2. Den Datentyp der Variable lege ich dann im Normalfall (Falls von Doku nicht anders angegeben) auf Unsigned Integer 16 (Wort)

Evtl. hat das ja schonmal einer gemacht, auf jeden Fall vielen Dank im voraus.


Gruß Weigsi
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
20.02.2014, 11:48
Beitrag #2

jg Offline
CLA & CLED
LVF-Team

Beiträge: 15.864
Registriert seit: Jun 2005

20xx / 8.x
1999
EN

Franken...
Deutschland
RE: MODBUS I/O-Server Bound Variables (Bindungsvariablen)
Ich nehme im Normalfall lieber die NI Modbus Library, da bin ich flexibler beim Programmieren.

Zwecks Adressen: In deinem Fall musst du überall 1 dazuaddieren. Deine Gegenstelle fängt bei der Adresse 0 an, der Modbus I/O Server aber bei 1. Diese Verschiebungen in den Dokus gibt es öfters. Sad

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
20.02.2014, 12:11 (Dieser Beitrag wurde zuletzt bearbeitet: 20.02.2014 12:12 von weigsi.)
Beitrag #3

weigsi Offline
LVF-Neueinsteiger


Beiträge: 7
Registriert seit: Aug 2013

2012
2011
DE



RE: MODBUS I/O-Server Bound Variables (Bindungsvariablen)
Hey,

erstmal Danke für die schnelle Antwort.

Wenn ich das hier richtig verstehe,
Zitat:Zwecks Adressen: In deinem Fall musst du überall 1 dazuaddieren.
also:

-0x0000 in der Doku des Kompressors entspricht dann der Adresse 00001 der Bindungsvariable
-0x0006 --------->>>> 00007 ......
-0x000A --------->>>> 00011 ......

Oder allgemein: hex-Adresse aus Doku nach Dezimalzahl umwandlen + 1 ergibt die Adresse der Bindungsvariable im LV.

Eine Verständnisfrage noch bzgl. dem Werte-Wort:

Die Adresse 0x0000 (00001), gibt mir 16bit (BOOL d.h. 0 od. 1) als Vorgabe. Daher wenn ich die ersten 10 Parameter der Adresse auf 1=an setzen will folgt. Ich schreibe einen 16bit Wort bestehend aus 10 "1en" gefolgt von 6 "0en" (1111111111000000) auf das vorher genannte Register.


Gruß Weigsi
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
20.02.2014, 13:14
Beitrag #4

jg Offline
CLA & CLED
LVF-Team

Beiträge: 15.864
Registriert seit: Jun 2005

20xx / 8.x
1999
EN

Franken...
Deutschland
RE: MODBUS I/O-Server Bound Variables (Bindungsvariablen)
Ach ja, stimmt, die "Adressen" 000001-065535 bei diesem Modbus IO sind die Coils. (Beschäftige dich auch mal mit den Modbus-Specs).

Die Input- und Holding-Register beginnen mit 3 bzw. 4, also die Adressen 300001 bis 365535 bzw. 400001 bis 465535. Bin mir aber nicht sicher, welcher Register Typ jetzt die 3 und welcher die 4 war.

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
20.02.2014, 16:12
Beitrag #5

weigsi Offline
LVF-Neueinsteiger


Beiträge: 7
Registriert seit: Aug 2013

2012
2011
DE



RE: MODBUS I/O-Server Bound Variables (Bindungsvariablen)
Also Anfrage zur Adresszuteilung liegt grad beim NI-Support, werd das gern hier noch weitergeben, wenns geklärt ist.

Bis dahin hab ich mich jetzt mal mit der von dir empfohlenen
Zitat: NI Modbus Library
beschäftigt. Hab kurz was zusammengeklickt, Screenshot ist bei.



Dazu auch hier Fragen:

- Das "Serial Master Query"-VI, setzt über die "Write Multiple Registers" den Registerbereich in diesem Fall 16(0x10)

- Über die Adresse schreibe in das Startregister 0x0000 des Registerbereichs (s.o.).

- Ich schreibe nur in dieses Register, da mein Eingang "Registers" ein U16-Array mit nur einem Element ist.

- Ich setzte den Wert des Registers über ein U16-Wort. Da Bit 0 bis Bit 7 alle auf 1 (True) stehen ergibt sich 255 als U16-Wert (Bit 0 bis Bit 7 stehen laut Kompressordoku als True/False Steuerparameter meines Kompressors)

- Diese 255 schreibe ich jetzt an meine Steuerung in das Register 0x0000 des Bereichsund die Steuerung interpretiert dann entsprechend wieder Bit 0 bis Bit 7 stehen auf 1 (True)

Hab ich die Vi´s, bzw. den Ablauf so richtig verstanden?


Angehängte Datei(en) Thumbnail(s)
   
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
20.02.2014, 16:47
Beitrag #6

jg Offline
CLA & CLED
LVF-Team

Beiträge: 15.864
Registriert seit: Jun 2005

20xx / 8.x
1999
EN

Franken...
Deutschland
RE: MODBUS I/O-Server Bound Variables (Bindungsvariablen)
(20.02.2014 16:12 )weigsi schrieb:  - Das "Serial Master Query"-VI, setzt über die "Write Multiple Registers" den Registerbereich in diesem Fall 16(0x10)
Ja, kann man so sagen. Ich habe mir Folgendes angewöhnt:
Write Single Register/Write Multiple Register ist für mich das "identische" Kommando (1x nur 1 Register, 1x mehr Register in einem Schwung). Lesen kann man diese Multiple Register über Read Holding Register. Input Register sind für den Master dagegen "ReadOnly".
(20.02.2014 16:12 )weigsi schrieb:  - Über die Adresse schreibe in das Startregister 0x0000 des Registerbereichs (s.o.).
Richtig, und im Gegensatz zum I/O Server fängt bei dieser API die Zählung bei 0 an.
(20.02.2014 16:12 )weigsi schrieb:  - Ich schreibe nur in dieses Register, da mein Eingang "Registers" ein U16-Array mit nur einem Element ist.
Richtig, du könntest somit auch die Funktion Write Single Register verwenden.
(20.02.2014 16:12 )weigsi schrieb:  - Ich setzte den Wert des Registers über ein U16-Wort. Da Bit 0 bis Bit 7 alle auf 1 (True) stehen ergibt sich 255 als U16-Wert (Bit 0 bis Bit 7 stehen laut Kompressordoku als True/False Steuerparameter meines Kompressors)
Richtig.
(20.02.2014 16:12 )weigsi schrieb:  - Diese 255 schreibe ich jetzt an meine Steuerung in das Register 0x0000 des Bereichsund die Steuerung interpretiert dann entsprechend wieder Bit 0 bis Bit 7 stehen auf 1 (True)
Wahrscheinlich richtig. Falls nicht zufällig die Kompressorsteuerung High und Low Byte intern noch vertauscht. Das wäre aber sehr ungewöhnlich.

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
Anzeige
21.02.2014, 12:33
Beitrag #7

weigsi Offline
LVF-Neueinsteiger


Beiträge: 7
Registriert seit: Aug 2013

2012
2011
DE



RE: MODBUS I/O-Server Bound Variables (Bindungsvariablen)
Hallo Zusammen,

noch eine Frage vor dem Wochenende. Ein Modbus"telegram" sieht ja für den Fall des "Daten lesens vom Slave" z.B. folgendermaßen aus:

(die "-" sind nur zum Verständniss eingefügt)

02-03-00 00 00-1b

ID des Empfängers-Art des Zugriffs (Read holding Register 0x03)-Start Adresse (0)-Anzahl auszulesender Adressen(1b=27).

Dann bekomme ich vom Slave eine Antwort:

27 Registerwerte.

Soweit so gut.

Wenn ich schreibe dann so (Write Multiple Registers 0x10)

02-10-00 00 00 -05

(dann halt noch 5 Werte die ich in das Register schreibe)

ID des Empfängers-Art des Zugriffs (Write Multiple Registers 0x10)-Start Adresse (0)-Anzahl zu schreibender Adressen(1b=27).

Ich lese also einmal vom Register 00 00 00 ab 27 Register, bekomme 27 Werte. Und einmal schreibe ich diese 27 Register mit von mir gegebenen Werten.

Mein Problem jetzt - die Adressbereich sind doch für bestimmte Werte reserviert. Die Kompressorsteuerung schreibt jetzt 16bit-Worts in den Adressbereich wie oben im Bsp. angegeben. Ich dachte, der 0000er Adressbereich ist für 1Bit Werte reserviert, oder kann ich in den oben gegebenen Adressbereich auch 16bit Werte in die Register schreiben?

Danke im voraus und schönes WE
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
21.02.2014, 12:59
Beitrag #8

jg Offline
CLA & CLED
LVF-Team

Beiträge: 15.864
Registriert seit: Jun 2005

20xx / 8.x
1999
EN

Franken...
Deutschland
RE: MODBUS I/O-Server Bound Variables (Bindungsvariablen)
Deine Modbus-Telegramme werden schon stimmen.

Ganz ehrlich, darum kümmere ich mich bei Verwendung der API im Normalfall nicht mehr.

Noch mal zurück zum Vergleich Modbus I/O Server im Shared Variable Engine zur API:
Die Register mit den "Adressen" 000001-065535 bzw. 100001-165535 entsprechen bei der NI-Modbus API dem Lesen und Schreiben der Coils, bzw. Discrete Inputs!!! Das sind nicht 16bit-Register, sondern wirklich nur Booleans.

U16-Register sind die Holding und Input-Register, jeweils auch mit möglichen Adressen 0-65534 (bzw. im IO-Server 1-65535, Register-Typ über eine vorgestelle 3 oder 4).

Ich stelle mir das immer so vor: Ein Modbus-Slave stellt 4 getrennte Bereiche zur Verfügung. Jeder Bereich hat erlaubte Adressen von 0-65534. Ein Bereich sind die Coils (Boolean, die darf der Master lesen und schreiben). Dann gibt es die Discrete Inputs (Booelan, darf der Master nur lesen). Und das selbe jetzt nochmal mit U16-Registers: Holding-Register sind RW, Input-Register sind RO.

Was deine Kompressorsteuerung jetzt in welchem Register(typ) veröffentlicht, dazu hast du noch keine vollständigen Infos geliefert. Bisher hast du nur Adressen mitgeteilt, aber nicht des Registertyp.

Hast du ein Manual, das du hochladen kannst? Dann wird die weitere Diskussion vielleicht einfacher.

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
21.02.2014, 13:21
Beitrag #9

weigsi Offline
LVF-Neueinsteiger


Beiträge: 7
Registriert seit: Aug 2013

2012
2011
DE



RE: MODBUS I/O-Server Bound Variables (Bindungsvariablen)
Die Modbus Telegramme sind von der Kompressorfirma und als Beispiel gedacht. Die beruhen auf einer tatsächlichen Abfrage.

Laut einziger Doku die ich habe, sind die einzigen Operationen

Read holding registers (0x03)

und

Write multiple registers (0x10)

und dazu hab ich nen Adresssatz

0x0000 bis 0x0021 mit entsprechenden Bitcodes die dann aufgeschlüsselt werden.

Es wird immer 16bit Wort geschrieben bzw. gelesen...

Für die NI-Modbus Bibliothek reichen diese Infos ja schon aus, ich meine Schreibart ich hab die Registeradressen und die Werte die ich in die Register schreibe und lese. Nur diese verflixte Entsprechung zur Adresse der Bindungsvariable fehlt mir....
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
21.02.2014, 13:46
Beitrag #10

jg Offline
CLA & CLED
LVF-Team

Beiträge: 15.864
Registriert seit: Jun 2005

20xx / 8.x
1999
EN

Franken...
Deutschland
RE: MODBUS I/O-Server Bound Variables (Bindungsvariablen)
Dann probiers mal beim IO-Server mit den Adresse-Bereichen 300001-300034 und 400001-400034.
Einer von den beiden muss funktionieren und dir die Werte liefern, die bei der Kompressorsteuerung drinnen sind.
Nachdem im Screenshot die "4er"-Adressen zum Lesen und schreiben genommen werden, spricht vieles dafür, dass der Bereich 4000001 ff. den Holding Registern entspricht.

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
30
Antwort schreiben 


Möglicherweise verwandte Themen...
Themen Verfasser Antworten Views Letzter Beitrag
  Network Shared Variables über DLL oder .NET ansprechen achim @ FZK 1 3.682 18.10.2017 05:48
Letzter Beitrag: Bender AC
  Network Shared Variables - gelöst - NoUse666 0 4.657 11.11.2016 14:29
Letzter Beitrag: NoUse666
  Eigenschaftsknoten bei shared variables auf entferntem PC Lucius2 0 3.241 06.02.2014 17:07
Letzter Beitrag: Lucius2
  Probleme mit Shared Variables (+Engine) Lucius2 8 7.272 06.12.2013 13:27
Letzter Beitrag: Lucius2
  Problem mit Shared Variables von OPC Server Peterpan90 1 3.947 18.04.2013 13:38
Letzter Beitrag: dali4u
  LabVIEW OPC Server auf Windows Server 2003 Ninja2602 5 6.916 30.11.2012 16:30
Letzter Beitrag: lukas_c

Gehe zu: