Unidirektionale RS232-Verbindung - Druckversion +- LabVIEWForum.de (https://www.labviewforum.de) +-- Forum: LabVIEW (/Forum-LabVIEW) +--- Forum: Hardware (/Forum-Hardware) +---- Forum: 3rd Party Hardware (/Forum-3rd-Party-Hardware) +---- Thema: Unidirektionale RS232-Verbindung (/Thread-Unidirektionale-RS232-Verbindung) |
Unidirektionale RS232-Verbindung - Hosenscheisser - 22.07.2016 11:47 Hallo Miteinander, ich habe schon einen POST bezüglich RS232 via PCIe-Karte geschrieben. Es geht um folgendes. Normale RS232 Geräte erhalten immer einen Befehl ein Signal zu senden (Visa Write). Ich hingegen empfange nur was. Jede Sekunde kommt ein 13 byte Wort an. Jetzt wollte ich fragen, ob das mit meinem VI gut ist? Angenommen es kommen nur mal 12 bytes oder sogar 14 bytes an. Geht dann mein Programm in einen falschen Zustand über? Ich beende meine Signale von meinen zwei Ohaus-Waagen immer mit einem TermChar. Ich verwende zwei RS232-Ports. Beste Grüße, Stefan RE: Unidirektionale RS232-Verbindung - Freddy - 22.07.2016 12:26 Hallo Stefan, versuch es mal so. Gruß Freddy RE: Unidirektionale RS232-Verbindung - GerdW - 22.07.2016 12:50 Hallo, wenn du mit TermChar arbeitest, dann lass einfach BytesAtPort weg! Einfach stupide VISARead mit 20 zu lesenden Zeichen abfragen… RE: Unidirektionale RS232-Verbindung - Freddy - 22.07.2016 13:15 Hallo GerdW, meinst Du das so? Gruß Freddy RE: Unidirektionale RS232-Verbindung - GerdW - 22.07.2016 13:27 Was soll das VISAActivateEvent bewirken? In jeder Iteration auch noch? Dafür gibt es doch das SerialPortInit, welches mit seinen zwei Inputs bzgl. des TermChars alles nötige erledigt! RE: Unidirektionale RS232-Verbindung - Freddy - 22.07.2016 13:53 Gruß Freddy RE: Unidirektionale RS232-Verbindung - Hosenscheisser - 22.07.2016 15:54 Vielen Dank für eure Hilfe, wenn ich das richtig verstanden habe läuft das Programm dann so: Schreibe in Buffer bis TermChar kommt--> lese RS232 aus und gib es in LV aus--> lösche Buffer Angenommen es kommt einmal zufällig kein TermChar, weil es einen Paritätsfehler gibt, etc. Dann schreibt mir der ja zwei 13 byte Wörter also 26 byte (bzw. 25 weil das TermChar fehlerhaft ist) hintereinander in den Buffer. Stürzt mir dann nicht das VI ab, weil anstatt kleiner 20 byte aufeinmal 25 byte anliegen? Und es kommen bei mir meistens nur 13 byte an, wartet der dann nicht auf 20 byte? Ich denke mal 15 byte wäre ein guter Sicherheitsbereich. Sorry für mein Generve RE: Unidirektionale RS232-Verbindung - GerdW - 22.07.2016 16:33 Hallo Scheisser, Zitat:läuft das Programm dann so: Schreibe in Buffer bis TermChar kommt--> lese RS232 aus und gib es in LV aus--> lösche BufferDie serielle Schnittstelle bzw. deren (VISA-)Treiber hat einen internen Buffer. In diesem landen die am Port ankommenden Daten. Das VISARead wartet jetzt bis zum Empfang eines TermChar (bzw. bis zum TimeOut) und liest/holt dann die Daten aus dem Buffer… Zitat:Angenommen es kommt einmal zufällig kein TermChar, weil es einen Paritätsfehler gibt, etc.Bei einem Paritätsfehler bekommst du eine Fehlermeldung… Zitat:Stürzt mir dann nicht das VI ab, weil anstatt kleiner 20 byte aufeinmal 25 byte anliegen?Wieso sollte es "abstürzen"? Meinst du, der LabVIEW-Speichermanager kommt mit einem 25 Zeichen langen String nicht klar? Zitat:Und es kommen bei mir meistens nur 13 byte an, wartet der dann nicht auf 20 byte?Nein. VISARead wartet auf folgende Bedingungen: - Anzahl der angefragten Bytes steht im Buffer bereit. - Das konfigurierte TermChar ist im Buffer angekommen. - TimeOut - Fehler So steht es jedenfalls in der LabVIEW-Hilfe, die du ja sicher auch schon durchgelesen hast! Was passiert wohl, wenn du auf 20 Zeichen wartest und auf ein TermChar? Zitat:Ich denke mal 15 byte wäre ein guter Sicherheitsbereich.Das hängt davon ab, wieviele Bytes in deinen Messages enthalten sind. Entweder es sind immer 13 (+TermChar) oder eben nicht… Abgesehen davon: wie oben dargelegt, ist es irrelevant, ob du auf 20, 99 oder 9999 Zeichen wartest - solange dein TermChar vorher ankommt… RE: Unidirektionale RS232-Verbindung - Hosenscheisser - 22.07.2016 16:47 Vielen Dank für eure großartige Hilfe!!!! Gerd und Freddy ihr habt mir super geholfen. |