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:

Code: Alles auswählen

daten.s = PeekS(*puffer, daten_zaehler)
FF :wink:

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 :lol:

Verfasst: 31.10.2008 13:39
von exit
So funktioniert es!

Danke für die Hilfe :allright:

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