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 

VISA read/write eventuell zeitgleich



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!

15.04.2011, 14:24
Beitrag #1

sm Offline
LVF-Neueinsteiger


Beiträge: 6
Registriert seit: Mar 2011

2010
2010
EN


Deutschland
VISA read/write eventuell zeitgleich
Hallo zusammen,

ich habe von einem Kollegen ein LabVIEW-Programm übernommen und soll es nun erst einmal so gut es geht optimieren. Meine grundsätzliche Erfahrungen in der Programmierung in LabVIEW sind auch eher zwischen Anfänger und Fortgeschrittener einzustufen.

Die Grundstruktur des Programms ist Producer/Consumer. In der Producer-Schleife wird auf den VISA-Port geschrieben und die Consumer-Schleife liest die Antworten des verbundenen Gerätes aus.

Nun zu meiner Frage: Kann es zu einer Race Condition kommen, wenn ich in zwei parallel laufende Schleifen einmal mit "VISA read" die bestehenden Bytes am Port auslese und in der zweiten Schleife Daten mit "VISA write" auf den Port schreibe? Ist das Problematisch? Können dadurch "nur" Verzögerungen entstehen, oder kann es soweit kommen, das Bytes nicht gesendet oder gelesen werden? Grundsätzlich weiß ich: Bloß nicht gleichzeitig auf etwas (egal ob Control, Indicator oder Local Variable) lesen und schreiben, ich würde halt gern wissen, ob das bei Com-Ports genau aussieht. Bisher ist mir leider auch noch keine Möglichkeit eingefallen, dieses Verhalten zu umgehen.

Ich hoffe meine Angaben reichen aus um meine Frage zu beantworten und sind Verständlich dargestellt! Falls das nicht der Fall ist, versuche ich das Problem näher zu erläutern.

Grüße
SM

Grüße
SM
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
15.04.2011, 15:42
Beitrag #2

IchSelbst Offline
LVF-Guru
*****


Beiträge: 3.692
Registriert seit: Feb 2005

11, 14, 15, 17, 18
-
DE

97437
Deutschland
RE: VISA read/write eventuell zeitgleich
(15.04.2011 14:24 )sm schrieb:  Nun zu meiner Frage: Kann es zu einer Race Condition kommen, wenn ich in zwei parallel laufende Schleifen einmal mit "VISA read" die bestehenden Bytes am Port auslese und in der zweiten Schleife Daten mit "VISA write" auf den Port schreibe? Ist das Problematisch?
Mit Blick auf RaceConditions gibt es keine Probleme (solange die Schnittstelle selbst eine bidirektionale ist wie z.B. eine RS232).

Zitat:Können dadurch "nur" Verzögerungen entstehen
Genau.
Wenn zwei eigentlich unabhängig gedachte Prozesse auf das selbe (VISA-)Modul zugreifen - dann kann es natürlich zu diesen Verzögerungen können. Die Prozesse sind dann eben nicht ganz unabhängig. Außerdem: Welcher der beiden Prozesse z.B. ist berechtigt, das (VISA-)Modul zu konfigurieren? Aus solchen Überlegungen heraus ist davon abzuraten, von zwei parallelen Prozesses aus auf ein und das selbe (VISA-)Modul zuzugreifen. Lieber ein eigenes Schnittstellenmodul machen, das die VISA-Schnittstelle vom Rest den Programms entkoppelt(!).

Zitat:oder kann es soweit kommen, das Bytes nicht gesendet oder gelesen werden?
Das kann nicht sein.
Lesen und Schreiben sind zwei unabhängige Kanäle, für die es im VISA-Modul jeweils einen eigenen Puffer gibt. Daher wird es nicht zu einem Verlust in einem der Kanäle kommen.
Außer:
Einer der beiden Prozesse konfiguriert gerade das VISA-Modul um, während der andere schreiben will. Dann geht selbstverständlich was verloren. Wenn man solche Umstände aber kennt und entsprechend behandelt, kann man natürlich auch mit parallelen Prozessen ...

Zitat:Grundsätzlich weiß ich: Bloß nicht gleichzeitig auf etwas (egal ob Control, Indicator oder Local Variable) lesen und schreiben
Du meinst wohl das richtige.
"Gleichzeitig lesen und schreiben" geht grundsätzlich immer. Das kann auch so gewollt sein. "Gleichzeitig zweimal schreiben" - da gibt es grundsätzliche Probleme. Einer der beiden Schreibvorgänge könnte umsonst sein - aber welcher? Bei zweimal Schreiben kann im schlimmsten Falle sogar was kaputt gehen.

Jeder, der zur wahren Erkenntnis hindurchdringen will, muss den Berg Schwierigkeit alleine erklimmen (Helen Keller).
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
16.04.2011, 07:29 (Dieser Beitrag wurde zuletzt bearbeitet: 18.04.2011 06:51 von Lucki.)
Beitrag #3

Lucki Offline
Tech.Exp.2.Klasse
LVF-Team

Beiträge: 7.699
Registriert seit: Mar 2006

LV 2016-18 prof.
1995
DE

01108
Deutschland
RE: VISA read/write eventuell zeitgleich
IchSelbst hat ja schon geantwortet, hier nur noch etwas zusätzliche Information dazu:
Ja, es geht uneingeschränkt, und Race-Condition ist kein Problem.
Ein allgemeines Problem bei serieller Kommunikation ist eher die Synschronisation von Sendeinformation und empfangener Information. Da man auf LV-Seite in der Regel einen Empfangspuffer hat, kann man nicht von vornherein sicher sein, daß es sich beim Lesen um die Antwort des letzten gesendeten Befehls handelt, oder nicht vielleicht um eine alte Nachricht, sie sich außerdem noch im Empfangspuffer befindet.
Gerade umgekehrt ist es beim Senden, worauf ebenfalls IchSelbst schon hinwies:
Es ist eher unüblich, daß die Gegenstelle über einen nennenswert großen Empfangspuffer verfügt. Deshalb nach jedem gesendete Befehl besser die Quittung abwarten, bevor wieder gesendet wird.
Und wenn man das alles beachtet, dann läuft es letztlich darauf hinaus, daß Senden und Empfangen doch nicht gleichzeitig stattfindet..
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
18.04.2011, 06:43
Beitrag #4

sm Offline
LVF-Neueinsteiger


Beiträge: 6
Registriert seit: Mar 2011

2010
2010
EN


Deutschland
RE: VISA read/write eventuell zeitgleich
Hallo,

vielen Dank erst einmal für eure hilfreichen Antworten! Wink

Ok, dann weiß ich bescheid. Ja, es handelt sich um eine RS232-Schnittstelle. Konfiguriert wird die Schnittstelle nur einmal ganz am Anfang. In dieser Hinsicht dürfte also nichts weiter passieren.

Das Problem mit der nicht synchronität der Sende- und Empfangsinformation, dass Lucki anspricht, ist, fürchte ich, genau das, was in meinem Programm die Probleme bereitet. Da müsste ich mir dann etwas neues überlegen, wie ich das realisieren kann. Bisher habe ich da keine Idee. ;(

Grundsätzlich ist der Aufbau des Programms folgerndermaßen: Es gibt drei parallel laufende While-Schleifen. In der ersten ist eine Event-Struktur die reagiert, wenn auf dem FP eine Eingabe erfolgt. Die zweite Schleife erstellt die Sendebefehle und schreibt anschließend auf die RS232-Schnittstelle. Die dritte While-Schleife liest die Bytes auf der Schnittstelle und übersetzt die ankommenden Hex-Befehle in ASCII. Innerhalb dieser dritten Schleife ist noch eine Case-Struktur, die für jeden einzelnen (bisher implementierten) Empfangsbefehl einen Case hat und dementsprechend antwortet. Die verschiedenen Schleifen sind über eine Queue verbunden. In diese Queue werden dann die Sendebefehle hineingeschrieben und in der zweiten Schleife wieder entqueued.

Grüße
SM

Grüße
SM
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
18.04.2011, 07:14 (Dieser Beitrag wurde zuletzt bearbeitet: 18.04.2011 07:15 von Lucki.)
Beitrag #5

Lucki Offline
Tech.Exp.2.Klasse
LVF-Team

Beiträge: 7.699
Registriert seit: Mar 2006

LV 2016-18 prof.
1995
DE

01108
Deutschland
RE: VISA read/write eventuell zeitgleich
Du hast zwar keine Frage gestellt, aber hier noch ein kleiner Tip:
Die stabilste Kommunikation hat man mit aktivierten Abschlußzeichen bei Senden unf Empfangen.
Wenn z.B eine empfangene Nachricht 5 byte lang ist, und man empfängt Nachrichten der Länge 5 byte, ohne das Abschlußzeichens aktiviert zu haben, dann ist es möglich, daß es in Wirklichkeit 3 Byte der letzten Nachricht und 2 byte der neuen Nachricht sind. Bei Empfang mit aktiviertem Anschlußzeichen kann so etwas nicht passieren.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
18.04.2011, 07:44
Beitrag #6

sm Offline
LVF-Neueinsteiger


Beiträge: 6
Registriert seit: Mar 2011

2010
2010
EN


Deutschland
RE: VISA read/write eventuell zeitgleich
Das mache ich bereits! Der Termination-Char ist aktiviert und auch definiert.

Grüße
SM
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Anzeige
18.04.2011, 07:57
Beitrag #7

IchSelbst Offline
LVF-Guru
*****


Beiträge: 3.692
Registriert seit: Feb 2005

11, 14, 15, 17, 18
-
DE

97437
Deutschland
RE: VISA read/write eventuell zeitgleich
(18.04.2011 06:43 )sm schrieb:  Grundsätzlich ist der Aufbau des Programms folgerndermaßen: Es gibt drei parallel laufende While-Schleifen. In der ersten ist eine Event-Struktur die reagiert, wenn auf dem FP eine Eingabe erfolgt. Die zweite Schleife erstellt die Sendebefehle und schreibt anschließend auf die RS232-Schnittstelle. Die dritte While-Schleife liest die Bytes auf der Schnittstelle und übersetzt die ankommenden Hex-Befehle in ASCII. Innerhalb dieser dritten Schleife ist noch eine Case-Struktur, die für jeden einzelnen (bisher implementierten) Empfangsbefehl einen Case hat und dementsprechend antwortet.
Ich würde das so machen:

Eine While-Schleife mit Event-Struktur. Die reagiert auf Benutzereingaben und sendet Befehle (per Queue) an eine zweite While-Schleife. Darin befindet sich eine Statemachine. Die Statemachine macht den eigentlichen strukturierten Ablauf: Warten auf Arbeit, Senden per RS232 an Endgerät, Warten auf Antwort mit eingebautem Timeout, Auswerten und Verarbeiten der Antwort.

Jeder, der zur wahren Erkenntnis hindurchdringen will, muss den Berg Schwierigkeit alleine erklimmen (Helen Keller).
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
18.04.2011, 08:39
Beitrag #8

sm Offline
LVF-Neueinsteiger


Beiträge: 6
Registriert seit: Mar 2011

2010
2010
EN


Deutschland
RE: VISA read/write eventuell zeitgleich
Zitat:Eine While-Schleife mit Event-Struktur. Die reagiert auf Benutzereingaben und sendet Befehle (per Queue) an eine zweite While-Schleife. Darin befindet sich eine Statemachine. Die Statemachine macht den eigentlichen strukturierten Ablauf: Warten auf Arbeit, Senden per RS232 an Endgerät, Warten auf Antwort mit eingebautem Timeout, Auswerten und Verarbeiten der Antwort.

Das hört sich sinnvoll an! Würde auf jeden Fall mein Ursprungs-Problem umgehen. Die erste von dir beschriebene Schleife ist bereits genau so umgesetzt. Habe nur keine Idee, wie ich die zweite While-Schleife realisieren sollte, wie du sie beschrieben hast. Kannst du mir eventuell, wenn es nicht zuviele Umstände macht, ein kleines Beispiel hierfür reinstellen? Das würde mir sehr helfen!

Vielen dank nochmal für eure Hilfe. Wink

Grüße
SM
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
  VISA Read und Bytes at Port tanka 9 13.852 28.08.2019 08:10
Letzter Beitrag: Lucki
  Komische Zeitverzögerung bei VISA write Parallelport dehmelp 8 6.275 20.07.2017 12:29
Letzter Beitrag: dehmelp
  VISA Read Fehler 1073807302 Stefan1101 4 7.677 29.08.2016 10:13
Letzter Beitrag: Stefan1101
  Serial Port mit Continuous Serial Read Write Hoang Nguyen 2 7.752 15.04.2016 10:35
Letzter Beitrag: Hoang Nguyen
  VISA Read mit Keithley 6487 dauert lange jusaca 3 5.533 28.01.2016 11:12
Letzter Beitrag: jusaca
  1x COM-Port, 2 x Write & 2x Read Jann 19 15.202 10.12.2015 14:17
Letzter Beitrag: jg

Gehe zu: