Aktuelle Zeit: 23.02.2020 00:38

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]




Ein neues Thema erstellen Auf das Thema antworten  [ 7 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: serielle Schnittstelle auslesen
BeitragVerfasst: 23.10.2008 13:16 
Offline
Benutzeravatar

Registriert: 24.03.2008 12:17
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:
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.

_________________
- Windows 10
- PureBasic 5.62


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: 23.10.2008 13:40 
Offline
jaAdmin
Benutzeravatar

Registriert: 13.09.2004 17:48
liese mal hier
http://www.purebasic.fr/english/viewtop ... 274#254274

_________________
‮pb aktuell5.7 - windoof aktuell und sowas von 10
Ich hab Tinnitus im Auge. Ich seh nur Pfeifen.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: 23.10.2008 14:10 
Offline
Benutzeravatar

Registriert: 24.11.2004 13:12
Wohnort: Germany
Wenn die Daten als String vorhanden sind, dann:

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


FF :wink:

_________________
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul / OPC-Helper DLL
PB v3.30 / v5.4x - OS Mac Mini OSX 10.xx / Window 10 Pro. (X64) /Window 7 Pro. (X64) / Window XP Pro. (X86) / Ubuntu 14.04
Downloads auf My Webspace


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: 23.10.2008 18:24 
Offline

Registriert: 07.09.2004 03:13
@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.

_________________
Eine Art Query-Planner soll die Ausführung von Map/Reduce-Funktionen in Hadoop stark beschleunigen.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: 23.10.2008 18:43 
Offline
Benutzeravatar

Registriert: 24.03.2008 12:17
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.

_________________
- Windows 10
- PureBasic 5.62


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: 24.10.2008 23:59 
Offline
Admin
Benutzeravatar

Registriert: 29.08.2004 11:27
exit hat geschrieben:
...Wenn es nicht klappt nerve ich an dieser Stelle weiter.


Du darfst auch ruhig hier weiter nerven :lol:

_________________
Bild
Win10 Pro 64-Bit, PB_5.4,GFA-WinDOS, Powerbasic9.05-Windows, NSBasic/CE, NSBasic/Desktop, NSBasic4APP, EmergenceBasic


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: 31.10.2008 13:39 
Offline
Benutzeravatar

Registriert: 24.03.2008 12:17
So funktioniert es!

Danke für die Hilfe :allright:

Code:
;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

_________________
- Windows 10
- PureBasic 5.62


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 7 Beiträge ] 

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast


Sie dürfen keine neuen Themen in diesem Forum erstellen.
Sie dürfen keine Antworten zu Themen in diesem Forum erstellen.
Sie dürfen Ihre Beiträge in diesem Forum nicht ändern.
Sie dürfen Ihre Beiträge in diesem Forum nicht löschen.

Suche nach:
Gehe zu:  

 


Powered by phpBB © 2008 phpBB Group | Deutsche Übersetzung durch phpBB.de
subSilver+ theme by Canver Software, sponsor Sanal Modifiye