Antwort schreiben 
 
Themabewertung:
  • 0 Bewertungen - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Direct I/O - Read Terminator
14.01.2011, 08:30
Beitrag: #1
Direct I/O - Read Terminator
Hallo,

ich habe ein Problem mit einem Direct I/O Objekt. Es handelt sich um eine Steuerung für einen elektrischen Greifer, die über RS232 angebunden ist. Diese erhält Ihre Positionsdaten und Ihre Befehle immer als eine Folge von Bytes (z.B. Positionierung sind insgesamt 10Byte: 2 Byte als Kennung, 1 Byte in dem die Länge des folgenden Befehls steht, 1 Byte Kommando, 4 Byte Parameter und 2 Byte CRC16). Die Kommunikation klappt soweit gut, auch die Antworten die die Steuerung zurück sendet werden verstanden.

Jetzt das Problem:
Ich bekomme ab und zu einen Error 701 (End of File). Dies geschiet immer dann wenn in einer Antwort ein Byte steht, das den Wert hat, der beim Direct I/O Objekt als Read Terminator eingestellt ist (z.B. 13).
Ich habe schon versucht das Feld einfach leer zu lassen oder NIL einzutragen, allerdings schaffe ich es leider nicht den Read Terminator zu deaktivieren.
Kann mir bitte jemand sagen ob und wie das Möglich ist?

Bis jetzt bleibt mir nur die Möglichkeit das ganze über den Error-Output und eine IF-Abfrage zu umgehen.

Danke schon mal für die Antworten.
Diese Nachricht in einer Antwort zitieren
15.01.2011, 10:01
Beitrag: #2
RE: Direct I/O - Read Terminator
Moin,

hier wäre es schon sinnvoll eine Auswertung zu machen, ob ein Rückgabewert kommt oder ob ein nur Steuerzeichen erwartet wird.
Das heißt abhängig vom gesendeten Befehl die Antwort auszuwerten.
(z.B. 2 Byte einlesen, statt 1 Byte).

Denn nur wenn Daten erwartet werden, ist eine weitere Auswertung erforderlich und das hängt immer vom der Funktion (Sendeaufruf) ab.

Gruߟ Bratbaecker
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
17.01.2011, 08:09
Beitrag: #3
RE: Direct I/O - Read Terminator
Danke für die Antwort.
Ganz versteh ich sie leider nicht Huh

Also aus dem VEE-Programm wird immer ein Bewegungsbefehl gesendet (dieser hat immer 10 Byte). Von meinem Greifer kommen immer 2 Antworten auch 10Byte. Die erste Antwort ist quasi ein "Habe Bewegung gestartet" das zweite Kommando ist dann "Habe Position erreicht".
Ich lese jede Antwort jeweils in ein Array mit Größe 10 ein (Befehl: READ Binary x BYTE ARRAY:10).

Also ich weiß das 2 mal 10 Byte erwartet werden, das ist quasi fix.

Und an diesem Protokoll des Greifers kann ich auch nichts verändern.

Das Problem ist aber, ich will wirklich die Werte der Bytes haben und es muss wirklich von 0 - 255 jeder Wert vorhanden sein können. Ich brauche kein Steuerzeichen als READ Terminator.
Allerdings kann unter den 20 Antwortbytes zufällig einmal ein Byte mit dem Wert stehen, den VEE als READ Terminator nutzen will. Dann liest es zwar die Arrays ein, sogar komplett. Es gibt aber dann den Error 701, eben weil z.B. an der 5. Stelle des zweiten Arrays der Wert als READ-Terminator interpretiert wird.

Ich habe nach dem Direct I/O Objekt dann eine IF-Abfrage, die prüft, ob die zurückgegebenen Arrays auch besagen, dass der Greifer an der gewünschten Position ist.

Ich hoffe es ist jetzt klarer, was ich brauche. Es geht mir darum das ich eben diesen READ Terminator auf NIL setzten will, oder deaktivieren will, aber eben nicht weiß wie das geht und ob es überhaupt möglich ist.
Diese Nachricht in einer Antwort zitieren
17.01.2011, 16:32
Beitrag: #4
RE: Direct I/O - Read Terminator
Das die Daten immer als 10 Byte Antwort kommen war nicht ersichtlich.
Ich hatte eigentlich nie Probleme, wenn der Datensatz als Binary eingelesen wurde ?

Ich schaue mal ob dein Problem reproduzierbar ist.

Gruߟ Bratbaecker
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
17.01.2011, 16:55 (Dieser Beitrag wurde zuletzt bearbeitet: 17.01.2011 17:37 von detlef.)
Beitrag: #5
RE: Direct I/O - Read Terminator
Ich gehe mal davon aus, dass du den Read Terminator in den "Advanced Instrument Properties" eingestellt hast.
Wenn du da einen Read terminator aendern willst, solltest du da eine Zeichenfolge eintragen, die in deinem Kontext nicht vorkommt....
Nur wie weiss man dann, dass zu Ende gelesen ist ?
Schau dir doch mal ganz genau deine Kommunikation mittels des IOMonitors an.

Andererseits koenntest du mal REad binblock versuchen, und da No End byte einstellen- nur mal so aus dem Blauen heraus...
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
18.01.2011, 08:29
Beitrag: #6
RE: Direct I/O - Read Terminator
Guten Morgen und nochmal Danke Smile

Also das mit dem Binblock geht leider auch ned.
Habe als Transaktion 'READ BINBLOCK t BYTE ARRAY:* NOEND'. Müsste doch theoretisch passen. Aber da bekomm ich dann einen ERROR 640 (Mismatch error: Expected <name>, got <name>) also quasi das nicht das zum lesen da ist, was erwartet wird.

Der Read Terminator wurde in den "Advanced Instrument Properties" eingestellt. Leider kann man dafür nur exakt ein Zeichen einstellen ist RS232. Und es kann leider theoretisch jeder Wert für die Bytes vorkommen, also von 0 bis 255.

Habe jetzt noch herausgefunden, dass der Fehler nicht auftritt, wenn man die Bytes einzeln als Scalar liest, statt alle in ein Array. Also mach ich es im Moment so, sieht halt etwas unübersichtlich aus, aber ist ja in einem UserObject versteckt Big Grin
Diese Nachricht in einer Antwort zitieren
31.05.2011, 12:20
Beitrag: #7
RE: Direct I/O - Read Terminator
Hallo,

ich habe das gleiche Problem. Bei mir gibt's Error 701 (End of File), wenn 0a (ASCII: LF, line feed) über den Bus geht. Allerdings tritt der Fehler nur auf, wenn noch andere Instrumente (in meinem Fall ein zweiter COM-Port) im Instrument Manager configuriert sind.

Ich habe zunächst deine Lösung übernommen und lese die einzelnen Bytes als Scalar aus. Kann aber nicht Sinn der Sache sein...
Diese Nachricht in einer Antwort zitieren
31.05.2011, 12:33
Beitrag: #8
RE: Direct I/O - Read Terminator
Also, es geht hier um RS 232, da kann man die Daten auslesen, bis nix mehr kommt --- siehe dazu das Beispiel Best Practice RS232....
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
11.07.2011, 14:57
Beitrag: #9
RE: Direct I/O - Read Terminator
Hallo,

ich habe gerade auch das Problem mit dem Fehler 701 bei der seriellen Kommunikation, deshalb würde es mich interessieren, ob dafür inzwischen eine Lösung (ausser den workaround mit Bytes einzeln lesen) gefunden wurde.

Ich lese die Programmdaten aus einem Controller aus, wobei ich festlege wieviele Daten pro Anfrage gesendet werden sollen. Befindet sich in den Daten das Byte 0x0A beendet VEE das lesen und löscht den Puffer (Egal was ich als Read Terminator angebe).

Wobei das Phänomen an einem PC auftritt und wenn ich das VEE Programm an einem anderen PC starte funktioniert alles wie es soll.

Ich hoffe es hat jemand das Schräubchen gefunden an dem man drehen muss. Vielen Dank schonmal.

Gruß
Jo
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Gehe zu:




Partnerforen: LabVIEWForum.de| DIAdem-Forum.de| Machine-Vision-Forum.de| goMatlab.de| VEEforum.de