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 

1x COM-Port, 2 x Write & 2x 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!

03.12.2015, 14:31
Beitrag #1

Jann Offline
LVF-Grünschnabel
*


Beiträge: 22
Registriert seit: Sep 2015

2011
2013
DE



1x COM-Port, 2 x Write & 2x Read
Hallo liebe Community,

seit ca. einem Monat setze ich mich bzgl. meiner Masterarbeit mit LabVIEW auseinander.
Meine Kenntnisse sind dementsprechend nicht die ausgeprägtesten.
Für das euch folgende geschilderten Thema/Problem habe ich schon einige Posts durchgelesen, jedoch konnte ich leider keine Lösung meines Problems finden.
Ich bitte daher um Verzeihung falls es ein Doppelpost sein sollte.
Meine geschriebenen Kommentare im Screenshot bitte ich ebenfalls auszublenden, falls dies möglich ist^^Big Grin

Also ich nutze die LabVIEW Version 2011 und zur zeit sitze ich daran, eine Steuerung für eine Pumpe zu schreiben.
Mittels Button möchte ich die Pumpe an/aus schalten können, die Steuerung von Local zu Remote ändern und bestätigen und andere Befehle senden und bestätigen können, wie zB die Frage nach Fehlern. Des weitern möchte ich einen Massenstrom einstellen können. Wird kein Button betätigt, so läuft die Pumpe mit ihren letzten Einstellungen weiter.
Dies funktioniert soweit alles sehr gut.

Mein Problem ist nun folgendes.

Ich möchte von der Pumpe "kontinuierlich", sobald ich den Knopf DRUCK LESEN AN betätige, den Druck abfragen und habe es, wie ihr im Screenshot oben rechts in der Case-Structure sehen könnt, auf diese Weise aufgebaut. Das ganze ist in einer While-Schleife, damit die Pumpe kontiuierlich fördert. Auf dem Screenshot ist diese nicht zu sehen.

Fall 1: Ist der Schalter "Druck Lesen" auf AUS gestellt, so läuft das Programm reibungslos und ich kann alle Befehle/Abfragungen ohne große Verzögerung tätigen. Soweit alles super.
Fall 2: Ist der Schalter "Druck Lesen" auf AN, so ist dies nicht mehr möglich. Es Bedarf ein öfteres klicken, bis sich endlich mal etwas tut, sprich, dass ein Befehl gesendet wird etc.

Ich habe schon versucht die Case-Structure an anderen Stellen einzupflegen und bin bisher zu keiner Lösung gekommen.

Habt ihr eine Idee und könnt mir hier weiter helfen?


Beste Grüße
Jann


Angehängte Datei(en) Thumbnail(s)
   
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Anzeige
03.12.2015, 14:48 (Dieser Beitrag wurde zuletzt bearbeitet: 03.12.2015 14:54 von GerdW.)
Beitrag #2

GerdW Offline
______________
LVF-Team

Beiträge: 17.469
Registriert seit: May 2009

LV2021
1995
DE_EN

10×××
Deutschland
RE: 1x COM-Port, 2 x Write & 2x Read
Hallo Jann,

wenn du mit einer einzelnen Resource arbeitest, kannst du nur bedingt parallel darauf zugreifen. Dies gilt um so mehr, als deine "Pumpe" von dir Befehle empfängt und darauf antwortet!

Lösung:
- VI aufräumen und über eine vernünftige Programmstruktur nachdenken
- dann solltest du auch der Meinung sein, dass eine saubere Statemachine hier sehr hilfreich wäre!

Allgemeine Tipps:
- BytesAtPort ist zu 99.9% aller Fälle fehl am Platz! Deine "Pumpe" scheint ein TermChar zu verwenden, jedenfalls hast du die Kommunikation so konfiguriert und sendest Befehle damit. Deshalb: BytesAtPort durch eine genügend große Konstante ersetzen! Dann entfallen auch irgendwelche Wartezeiten zwischen Write und Read! (Dies wurde hier schon desöfteren diskutiert, einfach mal andere Threads zum Themenbereich "serielle Schnittstelle" lesen.)
- Wenn immer das gleiche TermChar beim Befehlsversand genutzt wird, sollte man diese mit einer VISA-Propertynode setzen und aktivieren!
- Wenn man die Schleife im Bild nicht sieht: Warum muss man die serielle Schnittstelle in jeder Iteration erneut initialisieren? Warum muss man den VISA-Buffer jedesmal löschen? Hmm
- Das Parsen des Druckwertes sieht auch übermäßig kompliziert aus. Ein ScanFromString sollte hier ausreichen! Gib mal ein Beispiel für einen typischen Antwortstring…

Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
04.12.2015, 10:08 (Dieser Beitrag wurde zuletzt bearbeitet: 04.12.2015 10:40 von Jann.)
Beitrag #3

Jann Offline
LVF-Grünschnabel
*


Beiträge: 22
Registriert seit: Sep 2015

2011
2013
DE



RE: 1x COM-Port, 2 x Write & 2x Read
Hallo GerdW,

erstmal Danke für deine Hilfe.
Dass das Programm ein wenig unübersichtlich ist, ist mir auch bewusst.
Ich bin nun gerade dabei, es aufzuräumen und umzugestalten.

Das mit dem andauernd neu initialisieren finde ich auch nicht gut, da gebe ich dir recht! Das wird ebenfalls im Neuaufbau des Programms neu aufgesetzt.

Ein möglicher String sieht folgendermaßen aus:

Abfrage String/ Befehl: STATUS?
Ausgabe String/Befehl: STATUS:14895226,1,0,,1500,0,100,0,0,0,0,0,0,0,0,0,0,142696,0,0

Das Problem dabei ist, dass der String in seiner Länge variiert. Das bedeutet die Zahlen zwischen den Kommatar sind mal 1/2 Stellen lang sodass ich hier keinen festen Offset angeben kann.
Die Idee mit Scan for String kam mir auch schon Sad.
Für mich ist in der Ausgabe des Strings der Wert 142696 von Wichtigkeit.
Hast du evtl. eine andere/einfachere/smartere Möglichkeit?

Das BytesAtPort habe ich aus dem LabVIEW Beispiel Write and Read, also Befehle Senden und Empfangen übernommen.
Wenn ich eine Konstante Zahl verwende, dann braucht mein VI schon länger zum lesen und Ausgaben des Strings, als es mit BytesAtPort der Fall ist. Sad

Jemand eine Idee oder einen Vorschlag?
Wie gesagt, bin erst seit einem Monat dabei!


Grüße
Jann
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
04.12.2015, 10:56 (Dieser Beitrag wurde zuletzt bearbeitet: 04.12.2015 10:57 von GerdW.)
Beitrag #4

GerdW Offline
______________
LVF-Team

Beiträge: 17.469
Registriert seit: May 2009

LV2021
1995
DE_EN

10×××
Deutschland
RE: 1x COM-Port, 2 x Write & 2x Read
Hallo Jann,

Zitat:Das BytesAtPort habe ich aus dem LabVIEW Beispiel Write and Read, also Befehle Senden und Empfangen übernommen.
Das heißt nicht, dass BytesAtPort sinnvoll ist…

Zitat:Wenn ich eine Konstante Zahl verwende, dann braucht mein VI schon länger zum lesen und Ausgaben des Strings, als es mit BytesAtPort der Fall ist.
Nein, es geht sogar schneller: Momentan musst du eine Wartezeit verwenden, um sicherzustellen, dass die Geräteantwort vollständig angekommen ist.
Ohne BytesAtPort bekommst du die Antwort aber sofort, nachdem sie vollständig (dank TermChar!) angekommen ist…

Zum String-Auswerten:
   

Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
04.12.2015, 11:11
Beitrag #5

Jann Offline
LVF-Grünschnabel
*


Beiträge: 22
Registriert seit: Sep 2015

2011
2013
DE



RE: 1x COM-Port, 2 x Write & 2x Read
Hallo GerdW,

danke für die Rückmeldung!
Mit dem String konnte ich schon sehr gut umsetzen!
Danke dafür (:

Ich hab das Lesen des Strings/ des Befehls dann so bewerkstelligt, dass ich das BytesAtPort gelöscht habe und den Eingang von Serial-Read mit einer Constante versehen habe.
Dazu habe ich 2 Screenshots angeheftet.

Ist dies so korrekt, so wie du es meintest?


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

GerdW Offline
______________
LVF-Team

Beiträge: 17.469
Registriert seit: May 2009

LV2021
1995
DE_EN

10×××
Deutschland
RE: 1x COM-Port, 2 x Write & 2x Read
Hallo Jann,

das ist dann korrekt, wenn die Konstante größer ist als die erwartete Stringlänge der Antwort.

Hintergrund:
VISARead wird beendet, wenn
1. die gewünschte Anzahl der Zeichen vom Buffer (des seriellen Ports) gelesen wurde
2. das TermChar im Buffer gelesen wurde
3. nicht genügend Zeichen gelesen werden konnten und der TimeOut erreicht wurde
Du willst Fall 2, ohne das Fall 1 eintritt…

Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Anzeige
07.12.2015, 09:56
Beitrag #7

Jann Offline
LVF-Grünschnabel
*


Beiträge: 22
Registriert seit: Sep 2015

2011
2013
DE



RE: 1x COM-Port, 2 x Write & 2x Read
Das Problem was weiterhin noch besteht ist, dass ich nicht zeitgleich Befehle senden bzw abfragen und den Druck auslesen kann.
Ich hab mir überlegt, das Ganze in einer flachen Sequenzstruktur nacheinander abarbeiten zu lassen.

Also erst Befehl senden für neuen Massenstrom setzen und danach den Druck, der an der Pumpe anliegt, auslesen zu lassen.

Ist dieses Vorhaben sinnvoll oder gibt es da etwas schnelleres/besseres!?

Grüße
Jann
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
07.12.2015, 10:05 (Dieser Beitrag wurde zuletzt bearbeitet: 07.12.2015 10:06 von GerdW.)
Beitrag #8

GerdW Offline
______________
LVF-Team

Beiträge: 17.469
Registriert seit: May 2009

LV2021
1995
DE_EN

10×××
Deutschland
RE: 1x COM-Port, 2 x Write & 2x Read
Hallo Jann,

Zitat:Das Problem was weiterhin noch besteht ist, dass ich nicht zeitgleich Befehle senden bzw abfragen und den Druck auslesen kann.
Korrekt. Du hast nur einen Kommunikationskanal und dein Gerät antwortet immer auf den letzten Befehl.
Also musst du selbst dafür sorgen, dass immer die Reihenfolge "Befehl senden und seine Antwort lesen" eingehalten wird!

Zitat:Ich hab mir überlegt, das Ganze in einer flachen Sequenzstruktur nacheinander abarbeiten zu lassen.

Ist dieses Vorhaben sinnvoll oder gibt es da etwas schnelleres/besseres!?
In Beitrag #2 hatte ich eine Statemachine empfohlen, das scheinst du überlesen zu haben…
(Eine Sequenzstruktur ist immer nur eine Krücke, um mit Gewalt den DATAFLOW durchzusetzen. Es gibt garantiert besseres dafür!)

Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
07.12.2015, 15:56
Beitrag #9

Jann Offline
LVF-Grünschnabel
*


Beiträge: 22
Registriert seit: Sep 2015

2011
2013
DE



RE: 1x COM-Port, 2 x Write & 2x Read
Okay, das mit der flachen Sequenzstruktur, da gebe ich dir Recht.
Ich versuche das mit der State Machine zu bewerkstelligen.

Du hast im Beitrag #2 gesagt, dass meine Pumpe Termchar verwendet, bzw weil cih es so programmiert habe.
Darf ich dich fragen, woran du das gesehen hast, bzw woher du weißt welches der Termchar ist?
Ich habe nun schon einige Zeit hier im Forum verbracht, aber keine Lösung mittels TermChar gefunden, wie ich es aufzubauen habe etc. Sad Bin da etwas ratlos und das entmutigt mich schon ein wenig.DodgyDodgyDodgyDodgyDodgyDodgy
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
07.12.2015, 16:01
Beitrag #10

jg Offline
CLA & CLED
LVF-Team

Beiträge: 15.864
Registriert seit: Jun 2005

20xx / 8.x
1999
EN

Franken...
Deutschland
RE: 1x COM-Port, 2 x Write & 2x Read

Akzeptierte Lösung

Da wir das Kommunikationsprotokoll deiner Pumpe nicht kennen, wissen wir nicht wirklich, ob sie jede Nachricht mit einem Termination Character abschließt. Das musst du selber wissen Rtmfx .

Aber du hast es so programmiert, da du an den Eingängen "Enable Termination Char" und "Termination Char" nichts angeschlossen hast:
   
Das entspricht somit einem <LINEFEED> als Termination Character.

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


Möglicherweise verwandte Themen...
Themen Verfasser Antworten Views Letzter Beitrag
  VISA Read und Bytes at Port tanka 9 13.870 28.08.2019 08:10
Letzter Beitrag: Lucki
  Serial Port mit Continuous Serial Read Write Hoang Nguyen 2 7.773 15.04.2016 10:35
Letzter Beitrag: Hoang Nguyen
  VISA Read liest nicht alle Bytes von Bytes at Port numumba 2 7.049 21.01.2014 20:24
Letzter Beitrag: numumba
  Einteilung und Verwendungszweck von VISA und Instrument I/0 seriel write and read clubmatejunkie 2 5.020 20.11.2013 12:16
Letzter Beitrag: clubmatejunkie
  Visa Write and Read derwisch 8 7.591 02.07.2013 08:13
Letzter Beitrag: GerdW
  Read,Write vom COM Port Gisele 28 23.098 19.03.2013 15:20
Letzter Beitrag: Gisele

Gehe zu: