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 

Daten lesen/schreiben Vorrangproblem Variablen



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!

26.05.2015, 11:49
Beitrag #1

buettnerstefan Offline
CLAD
*


Beiträge: 23
Registriert seit: Sep 2014

2014
2014
DE_EN


Deutschland
Daten lesen/schreiben Vorrangproblem Variablen
Hallo LV-Gemeinde,

ich hab grad Pech beim Denken und hoffe das jemand ne gute Idee hat.
Ich hab über Modbus TCP-IP eine Verbindung zu einer SPS aufgebaut, und kann da die Variablen auslesen (read holding Registers) und schreiben (write multiple Registers). Kommt alles an und passt erstmal soweit. Nun hab ich in einer While-Schleife eine Eventstruktur welche im timeoutcase mir alle 100ms die Werte liest und auf die Frontpanelelemente gibt. Einige dieser Frontpanelelemente sind Bedienelemente wie Motor An/Aus oder Sollposition. Um in diese schreiben zu können komme ich nicht darum lokale Variablen oder Eigenschaftsknoten dieser zu erstellen.
Nun habe ich weitere Ereignis-Case in denen ich bei "value change" den Wert an die SPS schreibe. Das klappt zwar, aber manchmal wird mein neuer Wert noch vor dem senden von dem alten (ausgelesenen) Wert überschrieben (selbst bei booleans!!). Wie kann ich das verhindern? Macht die Eventstrucktur immer erst das case fertig bevor sie auf das nächste Event reagiert?

- Lesefrequenz runtersetzen ist keine Option, da die Messwerte mit dieser Protokolliert werden soll
- Haken bei "Frontpanel während case für bedienung sperren" klappt nicht
- Es handelt sich um 50 Register mit read und r/w bunt gemischt, also trennung dieser seeeehr aufwendig
- Bedienelemente nur am Anfang lesen ist auch keine Option, da ich sehen will das der neue Wert angekommen ist bzw. welcher grad drin steht (SPS kann auch ändern)

Bin beim Forum surfen auf den Begriff Queue gekommen, hab aber keine Idee wie ich das einbinden soll.
Hatte auch schon die Idee State-Maschine, aber 50 Schieberegister?? Huh

Beste Grüße
Construction
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Anzeige
26.05.2015, 14:37
Beitrag #2

Trinitatis Offline
LVF-Guru
*****


Beiträge: 1.694
Registriert seit: May 2008

7.1 / 8.0 /2014-1, 18
2002
DE

18055
Deutschland
RE: Daten lesen/schreiben Vorrangproblem Variablen
Hallo Stefan,

das ist wohl eine race condition zw. Wertänderung durch dich und Überschreiben der Dedienelementwerte durch das TO case. Das Herabsetzen der Lesegeschwindigkeit würde dein Problem auch nicht beseitigen sondern nur seltener machen. Und die Sperrung des FP kann hier auch nicht helfen, da ja dein Sende case und dein TO case ohnehin nacheinander ausgeführt werden.

Der einfachste Weg (wenn auch nicht der ideale) wäre wohl eine Bediensperre einzubauen, die entweder das Auslesen aus der SPS oder deine Bedienung zulässt.


Gruß, Marko
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
26.05.2015, 15: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: Daten lesen/schreiben Vorrangproblem Variablen
Natürlich wird - solange du dich im Timeout Case befindest - das Value Change Event nicht abgearbeitet, sondern nur in eine "Event-Queue" gespeichert.

Die Frage ist: Wie liest du den "New Value" nach dem Value-Change Event aus? Aus einer lokalen Variable oder dem Terminal? Das wäre falsch. Aber so geht 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
26.05.2015, 16:11
Beitrag #4

buettnerstefan Offline
CLAD
*


Beiträge: 23
Registriert seit: Sep 2014

2014
2014
DE_EN


Deutschland
RE: Daten lesen/schreiben Vorrangproblem Variablen
Vielen Dank für die schnellen Antworten!

@Marko: geht leider nicht, da schreiben und lesen gleichzeitig gehen muss.

@Jens: Das sieht schon vielversprechend aus, aber wie mach ich das bei 50 Werten mit dem new Value? Und mit der Sekunde verzögerung in der timeoutschleife komm ich dann leider auch nicht mehr auf meine 10 Messwerte die Sekunde..

Ich hab ja in meinem timeout-case die lesefunktion (aller 100ms) und schreibe direkt in die reinen Anzeigeelemente. Und für die Bedienelemente schreibe ich jetzt in eine "read-Variable" und mach für jedes Bedienelement ein value-change-case?? Also muss ich für jedes Bedienelement noch ein Anzeigeelement erstellen welches als read-Variable für dieses dient? Oder gibt es auch variablen ohne Frontpanel-element? Aber wenn ich diese Sekunde Verzögerung zum schreiben in das case packe macht meine Messwerterfassung ja solange auch Pause oder hab ich gerade einen Denkfehler?

So viele Fragen, ohjeGlas1
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
26.05.2015, 16:24
Beitrag #5

jg Offline
CLA & CLED
LVF-Team

Beiträge: 15.864
Registriert seit: Jun 2005

20xx / 8.x
1999
EN

Franken...
Deutschland
RE: Daten lesen/schreiben Vorrangproblem Variablen
Der Time-Out 1 Sekunde in meinem Beispiel dient NUR dazu, um zu zeigen, dass es prinzipiell funktioniert. Das sollst du nicht übernehmen.

Die "Read"-Boolean repräsentiert deinen Modbus-Lesevorgang - inkl. Lesezeit (hier extrem verlängert auf 1 Sekunde).

Trotzdem wird im Value-Change-Case der Wert nach Value-Change aus dem "Eingabe"-Boolean ausgelesen, auch wenn die Event-Struktur gerade im Timeout festhängt und dadurch per lokaler Variable den Wert von "Eingabe" eigentlich wieder überschreibt.

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
26.05.2015, 16:42
Beitrag #6

buettnerstefan Offline
CLAD
*


Beiträge: 23
Registriert seit: Sep 2014

2014
2014
DE_EN


Deutschland
RE: Daten lesen/schreiben Vorrangproblem Variablen
Okay, ich glaube jetzt hab sogar ich es verstanden Big Grin

Also meinen timeout-case lasse ich wie er ist (die gelesenen Werte werden in locale variablen geschrieben) und nun lege ich für 50 event-cases an, jeweils mit dem zugehörigen Bedienelement drinnen und nutze zum schreiben aber den NewVal- Anschluss.
Vielen Dank!


BTW..gibt es auch noch eine Variante in der man ganz auf lokale Variablen (oder Eigenschaftsknoten) verzichten kann, weil die ja so schlecht sind und so..Hmm
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Anzeige
26.05.2015, 21:48
Beitrag #7

jg Offline
CLA & CLED
LVF-Team

Beiträge: 15.864
Registriert seit: Jun 2005

20xx / 8.x
1999
EN

Franken...
Deutschland
RE: Daten lesen/schreiben Vorrangproblem Variablen
Ob du wirklich 50 Cases brauchst, hängt von dir ab. Man kann natürlich auch mehrere Events in einem Event-Case zusammenfassen.

Um lokale Variablen wirst du bei deinem Ansatz nicht herumkommen, es ist nun mal neben PropertyNodes die einzige Möglichkeit, einem Control einen Wert zuzuweisen. Und in diesem Fall spricht nichts gegen lokale Variablen.

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
  bitte Hilfe, wieder Problem bei Datasocket Lesen/Schreiben LabviewLearning 4 6.734 22.08.2014 08:58
Letzter Beitrag: LabviewLearning
Wink Siemens OPC - Array schreiben/lesen vescon 1 5.079 04.03.2014 08:26
Letzter Beitrag: Y-P
  TCP / IP gleichzeitig Lesen und Schreiben Kiesch 2 4.242 27.02.2013 23:18
Letzter Beitrag: Kiesch
  Mehere Queues lesen und schreiben.... Schorschi79 4 6.521 08.11.2009 15:31
Letzter Beitrag: Schorschi79

Gehe zu: