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 

Modbus Input Read



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!

01.06.2010, 09:21
Beitrag #1

stromflo Offline
LVF-Gelegenheitsschreiber
**


Beiträge: 125
Registriert seit: Apr 2010

8.2
2010
DE


Deutschland
Modbus Input Read
Hallo,

ich arbeite zur Zeit sehr viel mit LabVIEW im Zusammenhang mit Modbus.
Mein Modbus arbeitet mit 9600 Baud. Es funktioniert auch sowohl das einlesen von Inputs u. Holdings als auch das Ausgeben von Coils oder Holdings.

Ich versuche aber die Geschwindigkeit beim einlesen der Inputs zu verbessern. Ich hab mal ein kleines performance Tool gemacht, in dem ich die Zeiten für das einlesen von 41 und einem einzelnen Input darstelle. Der einzelne Input benötigt nach Messungen rund 157ms das lesen von einem Input 64ms. Die Problematik liegt, darin, dass die auszulesenden Datenpunkte nicht untereinander angeordnet sind, sondern durcheinander. So kann es vor kommen, dass ich Datenpunkt 1 und 10 brauche usw.

Meine Frage wäre es, ob es eine Optimierungsmöglichkeit gibt, um einzelne Inputs bzw. eine bestimmte Anzahl bzw. bestimmte Datenpunkte einzulesen. Hat jemand eine Idee wo man da evtl. noch schrauben kann.
Das eigentliche Ziel wäre ein einlesen von 8 Inputs in etwa 70 ms zu erreichen.

Wenn ich mir so die Übertragung per Modbus anschaue habe ich in jedem Fall:

8-Bit Adresse, 8-Bit Funktion, Daten N x 8 Bits, 16-Bit CRC

Gruß Florian

Lv82_img


Angehängte Datei(en) Thumbnail(s)
       

Sonstige .vi  performance.vi (Größe: 24,18 KB / Downloads: 300)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Anzeige
01.06.2010, 09:39 (Dieser Beitrag wurde zuletzt bearbeitet: 01.06.2010 09:39 von stromflo.)
Beitrag #2

stromflo Offline
LVF-Gelegenheitsschreiber
**


Beiträge: 125
Registriert seit: Apr 2010

8.2
2010
DE


Deutschland
Modbus Input Read
Neue Erkenntnis:

Wenn ich z.B. nur 10 inputs deren Datenpunkte hintereinander liegen einlese komme ich auf 86ms.
Sprich ich müsste evtl. die Zielsoftware anpassen und die Datenpunkte für die Testzwecke verändern.

Trotzdem wäre es natürlich interessant ob jemand noch einen anderen weg sieht oder kennt:)Man lernt ja nie aus.

Gruß Flo
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
01.06.2010, 09:44 (Dieser Beitrag wurde zuletzt bearbeitet: 01.06.2010 09:52 von GerdW.)
Beitrag #3

GerdW Offline
______________
LVF-Team

Beiträge: 17.480
Registriert seit: May 2009

LV2021
1995
DE_EN

10×××
Deutschland
Modbus Input Read
Hallo Flo,

bei der Baudrate braucht schon die (rein hardware-bezogene) Übertragung eines Bytes ca. 1ms. Und das ohne irgendwelche Zeiten für Treiber, Berechnungen etc. Viel zu optimieren gibt es da nicht - das Timing ist halt hardware-getrieben.

Wenn du mehrere Bytes lesen willst, z.B. Index 1 und 10, würde es sich anbieten, den kompletten Bereich von Index 1 bis 10 zu lesen und die benötigten Werte zu indizieren. Dann brauchst du etwa 120ms (geschätzt aus deinen Angaben). Edit: Hast du ja nun schon selbst ausprobiert...

Oder du guckst in diese (mir unbekannte) ModBus-Funktion hinein, um dort nach evtl. möglichen Optimierungen zu schauen. Aber wie schon erwähnt: aus einem 9600 Baud-Bus wirst du schwerlich größere Geschwindigkeiten zaubern können...

Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
01.06.2010, 09:50 (Dieser Beitrag wurde zuletzt bearbeitet: 01.06.2010 09:56 von stromflo.)
Beitrag #4

stromflo Offline
LVF-Gelegenheitsschreiber
**


Beiträge: 125
Registriert seit: Apr 2010

8.2
2010
DE


Deutschland
Modbus Input Read
Hallo Gerd,

ja wie schon bei neuer Erkenntnis geschrieben, wäre das auslesen von Datenpunkten die hintereiander liegen im Moment aus meiner Sicht wohl die einzigste Optimierungsmöglichkeit. Dafür müsste ich praktisch die Software des Zielgerätes anpassen, was in diesem Fall aber nicht so aufwendig sein sollte.

Wie im letzten Beitrag geschrieben bräuchte ich für 10 Messwerte 86ms. Die Messwerte landen hier bereits in einem Array. Ich müsste aber auch noch ein wenig filtern und die Werte im Signalverlauf wie gewünscht darzustellen. Ich werde einfach mal noch ein wenig rumprobieren.

Ansonsten würde halt noch eine höhre Baudrate helfen.


Zitat:Oder du guckst in diese (mir unbekannte) ModBus-Funktion hinein, um dort nach evtl. möglichen Optimierungen zu schauen. Aber wie schon erwähnt: aus einem 9600 Baud-Bus wirst du schwerlich größere Geschwindigkeiten zaubern können...

Ich denke um hier was zu ändern bzw. optimieren fehlt mir noch einiges an LabVIEW Know HowSmile

Aber danke!

Gruß Flov
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
01.06.2010, 09:56 (Dieser Beitrag wurde zuletzt bearbeitet: 02.06.2010 08:47 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
Modbus Input Read
' schrieb:ja wie schon bei neuer Erkenntnis geschrieben, wäre das auslesen von Datenpunkten die hintereiander liegen im Moment aus meiner Sicht wohl die einzigste Optimierungsmöglichkeit. Dafür müsste ich praktisch die Software des Zielgerätes anpassen, was in diesem Fall aber nicht so aufwendig sein sollte.
Ja, eine Array von hintereinanderliegenden Werten anfordern ist so ziemlich die einzige Optimierungsmöglichkeit. Hier sparst du dir dann den Overhead, da jede Anfrage einen Header hat, vom Empfänger verarbeitet werden muss, dir erst dann eine Antwort (wieder mit Header) schickt, die du dann verarbeiten musst. Das kostet natürlich alles.
' schrieb:Ansonsten würde halt noch eine höhre Baudrate helfen.
Ob das wirklich so viel helfen würde, steht auf einem anderen Blatt. Ich würde auf jeden Fall bei z.B. 19,2 kBaud nicht die doppelte Performance erwarten. Der Overhead ist ja auch, dass deine Gegenstelle die Anfrage empfangen und verarbeiten muss, und dann erst die Antwort sendet.

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
02.06.2010, 08:09
Beitrag #6

stromflo Offline
LVF-Gelegenheitsschreiber
**


Beiträge: 125
Registriert seit: Apr 2010

8.2
2010
DE


Deutschland
Modbus Input Read
So, mit 250ms Zyklus geht alles so weit.
Werd mich aber trotzdem noch dran versuchen den Zyklus noch etwas nach unten zu bekommen.
Die Anwendung rennt in jedem Fall schon malSmile

Und wirklich mal vielen Dank an alle hier! Ist ein wirklich sehr hilfsbereites Forum und man lernt hier echt eine Menge!
Zudem macht es dann auch gleich viel mehr Spaß mit LabVIEW zu arbeiten.

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


Möglicherweise verwandte Themen...
Themen Verfasser Antworten Views Letzter Beitrag
  Modbus RTU - Read Holding Register Alb 1 5.285 20.12.2017 12:15
Letzter Beitrag: Freddy
  Input Parameter is invalid dbuckl 3 4.230 01.10.2013 14:42
Letzter Beitrag: dbuckl
  ModBus Lakritzast 2 7.912 26.01.2010 18:18
Letzter Beitrag: stevenhiker
  Fehlermeldung wenn RS-232-Input in SubVI Achim 2 4.402 03.12.2007 08:16
Letzter Beitrag: Achim
  Parallele Schnittstelle als Input AiM 1 5.670 03.07.2006 18:09
Letzter Beitrag: jg

Gehe zu: