Seite 1 von 1
serielle Schnittstelle auslesen
Verfasst: 23.10.2008 13:16
von exit
Hallo!
Ich möchte eine RS232-Verbindung zu einem Zähler herstellen. Befehle wie Zählerreset gehen schon.
Wie lese ich die Daten mit Version PB4.2 aus? Oder wo stehen diese zum Abholen bereit?
Über AvailableSerialPortInput sehe ich, dass Daten vorhanden sind.
Sind sie im *Puffer und wie komme ich daran?
Code: Alles auswählen
daten_vorhanden = AvailableSerialPortInput(2) ;gibt die Anzahl vorhandener Bytes im Eingangspuffer zurück
If daten_vorhanden > 0
Daten_Zaehler = ReadSerialPortData(2, *Puffer, Laenge)
EndIf
Im Codearchiv sind leider nur Beispiele älterer PB-Versionen.
Verfasst: 23.10.2008 13:40
von bobobo
Verfasst: 23.10.2008 14:10
von mk-soft
Wenn die Daten als String vorhanden sind, dann:
FF

Verfasst: 23.10.2008 18:24
von THEEX
@exit
es kommt drauf an, ob Dein Zähler von selbst Daten sendet oder diese erst sendet wenn er einen Befehl erhalten hat.
Gibt es eine Anleitung zu dem Zähler? Unter Umständen kann man das dort nachlesen.
Ich selbst schreibe an einem Programm, mit dem man Thermostate (Kühl.- bzw. Heizaggregate) für Reaktoren (Chemie) steuert/überwacht. Diese senden in der Regel erst irgendwelche Werte, wenn sie einen Befehl erhaten haben. Dabei muß ich drauf achten, daß ich die Befehle nicht zu schnell hintereinander los schicke, weil man die Werte sonst nicht in der richtigen Reihenfolge erhält oder sogar nicht alle übertragen werden.
Verfasst: 23.10.2008 18:43
von exit
Vielen Dank erstmal für die Antworten.
- Ja es ist eine Beschreibung vorhanden in der steht welche Zeichen man senden muss um Daten zu erhalten. Auch diesem Wege kann ich auch schon den Zählerstand auf 0 setzen.
- Ich denke, dass die Antwort von mk-soft meiner Frage am nächsten kommt.
Wenn es nicht klappt nerve ich an dieser Stelle weiter.
Verfasst: 24.10.2008 23:59
von Falko
exit hat geschrieben:...Wenn es nicht klappt nerve ich an dieser Stelle weiter.
Du darfst auch ruhig hier weiter nerven

Verfasst: 31.10.2008 13:39
von exit
So funktioniert es!
Danke für die Hilfe
Code: Alles auswählen
;Abfrage Zählerstand im Zeittakt senden
If COMFehler = 0 ;Durchlauf NUR wenn ComPort ohne Fehler geöffnet wurde
Wait_RSR232 = Wait_RSR232 + 1 ;Abfragezyklus
If Wait_RSR232 > 50 ;Abfragezyklus einstellen und starten
WriteSerialPortString(ComPort_Nr, STX$) ;Startzeichen senden
WriteSerialPortString(ComPort_Nr, "0001") ;00 01 Zähleradresse und Auslesebefehl senden
WriteSerialPortString(ComPort_Nr, ETX$) ;Endezeichen senden
Wait_RSR232 = 0 ;Reset Abfragezyklus
EndIf
Bytes_im_Puffer = AvailableSerialPortInput(ComPort_Nr) ;liegen Daten vor?
If Bytes_im_Puffer > 0 ;dann Daten auslesen
laenge.s = Space(14) ;Längenstring erstellen
ReadSerialPortData(ComPort_Nr, @laenge,14) ;akt. Länge (14 byte) aus dem Zähler auslesen
laengenstring$ = laenge.s
laenge$ = Mid(laengenstring$, 8,5) ;Länge herausfiltern
SetGadgetText(#akt_Laenge, laenge$) ;Länge anzeigen
EndIf
EndIf