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!
Ja das Übertragungsprotokoll kenne ich der MCU gibt in Programmier-Modus entweder ACK oder NAK zurück!
Ich benutze Bytes On Port weil dies die Einzige Funktion ist die ich bis jetzt kenn um eine gewisse Anzahl bytes zu lesen!
OK ich werde mal Probieren das VI umzuschreiben!
Hat da vieleicht noch jemand ein kleines beispiel dazu?
2. Ich habe schon mit 16 Ports (2X8Port Karten) unter Windows gearbeitet, kein Problem
3. Serielle Übertragung ist viel langsamer als ein PC-Core rechnen kann, somit auch bei mehreren quazi-parallelen VIs, die serielle Schnittstelle auslesen, sollte es kein Problem machen.
Da stimme ich dir zu. Aber diese Leseschleife mit Bytes at Port, die so auf den ersten Blick solange mit "höchster" Geschwindigkeit läuft, bis ein Byte ausgelesen wurde... Deswegen auch das Edit 2 mit den VISA-Event-VIs, im Prinzip ja ähnlich wie du es vorschlägst.
' schrieb:@Cardinal, ich denke du solltest deine Kommunikation auf eventgesteuert umschreiben. Bytes On Port ist keine besonders gute Wahl. Du kennst doch das Übertragungsprotokoll, somit weisst du auch wie viele Zeichen du lesen willst, warum benutzt du denn noch Bytes On Port?
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!
' schrieb:Ja das Übertragungsprotokoll kenne ich der MCU gibt in Programmier-Modus entweder ACK oder NAK zurück!
Ich benutze Bytes On Port weil dies die Einzige Funktion ist die ich bis jetzt kenn um eine gewisse Anzahl bytes zu lesen!
OK ich werde mal Probieren das VI umzuschreiben!
Hat da vieleicht noch jemand ein kleines beispiel dazu?
Danke für eure hilfe!
1. (in diesem Fall wahrscheinlich kompliziertere) Möglichkeit: Hast du mal geschaut, ob du die "VISA-Event-VIs" in LV6.1 hast?
2. Möglichkeit: Da du nur ein Zeichen zurückerwartest, direkt eine 1 am Read-Eingang anschließen. Das VI wartet dann, bis ein Zeichen anliegt.
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!
Ganz einfach. So wie ich es verstehe ist es einfaches ASCII Übertragungsprotokoll und sehrwarscheinlich kommt nach ACK oder NACK noch ein Zeilenende. Somit kannst du bei der Konfiguration der Schnittstelle Termination Character auf Zeilenende setzen (wird auch defaultmäßig gemacht). Dann beim Lesen kannst du eine große Zahl (muss unbedingt größergleich der erwarteten Antwort sein) z.B. 10 Bytes einstellen. Das Lesen wird automatisch abgebrochen sobald ein Zeilenende empfangen wird oder die angegebene Anzahl Zeichen ausgelesen wird. Beim Lesen werden keine CPU Ressourcen gebraucht, es können also in dieser "Wartezeit" andere von deinen 8 Tasks bedient werden.
Das 1. VI definiert das Event "Serial Character", das 2. VI wartet dann auf das Event "Serial Character" (wird ausgelöst, wenn ein Zeichen am Serial Port anliegt), und das 3. zerstört das Event wieder.
VI1 & VI3 brauchst du natürlich nur am Anfang und am Ende der gesamten Kommunikation, VI2 kannst du quasi anstelle von "Bytes at Port" verwenden, es wartet halt so lange, bis mind. ein Byte am Port anliegt.
Aber wie schon oben gesagt, da du nur einen Buchstaben zurückbekommst, ist das nicht unbedingt nötig.
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!