Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
fredyxx
Anmeldungsdatum: 26.01.2009 Beiträge: 22
|
Verfasst am: 01.02.2009, 17:04 Titel: COM-Eingangspuffer löschen |
|
|
Hallo zusammen,
wie kann ich in QBasic den Eingangspuffer der COM-Schnittstelle löschen, ohne die Daten zu übernehmen?
Geöffnet habe ich die SS mit OPEN COM, die Größe der eingelaufenen Telegramme kann ich mit LOC(1) abfragen.
Aber wie kann ich ihn löschen ohne INPUT zu verwenden?? _________________ vG
fredyxx |
|
Nach oben |
|
 |
dreael Administrator

Anmeldungsdatum: 10.09.2004 Beiträge: 2529 Wohnort: Hofen SH (Schweiz)
|
Verfasst am: 01.02.2009, 23:25 Titel: |
|
|
Um INPUT$() wirst Du aber trotzdem nicht herumkommen. Wie wäre es mit folgender Variante?
Code: | SUB LoeschePuffer(DateiNr%)
DO
n% = LOC(DateiNr%)
IF n% > 0 THEN
dummy$ = INPUT$(n%, DateiNr%)
END IF
LOOP WHILE n% > 0
END SUB |
(Code übrigens nicht getestet) d.h. dummy$ verarbeitest Du gar nicht! _________________ Teste die PC-Sicherheit mit www.sec-check.net |
|
Nach oben |
|
 |
fredyxx
Anmeldungsdatum: 26.01.2009 Beiträge: 22
|
Verfasst am: 02.02.2009, 07:13 Titel: |
|
|
Hallo dreael,
bei dem Input$ -Befehl liegt genau das Problem.
Sobald ich den aufrufe, bekomme ich Gerätefehler.
Beim Einschalten der Gegenstelle kommt offensichtlich was in den Puffer, das zwar eine Puffergröße von 1 meldet, bei Input$ aber den Fehler bringt. Erwische ich den richtigen Zeitpunkt nach dem Einschalten der Gegenstelle, dann kommen die Telegramme lesbar an.
Mein Programm soll aber auf das Einschalten der Gegenstelle warten, um dann sofort aktiv zu werden, weil die Gegenstelle das Senden einstellt, wenn sie keine Antwort bekommt.
Fällt Dir dazu noch was ein??
Daher möcht ich gerne das 1. (defekte) Telegramm verwerfen, trotzdem eine Antwort schicken und dann könnte es losgehen!! _________________ vG
fredyxx |
|
Nach oben |
|
 |
dreael Administrator

Anmeldungsdatum: 10.09.2004 Beiträge: 2529 Wohnort: Hofen SH (Schweiz)
|
Verfasst am: 02.02.2009, 10:40 Titel: |
|
|
Wie unter
http://www.dreael.ch/Deutsch/BASIC-Knowhow-Ecke/SerielleKommunikation.html
sowie auch in der QB-Onlinehilfe genannt, gibt es noch verschiedene Spezialoptionen wie CD0 usw., mit denen man die Auswertung bestimmter Hardware-Handshake-Signale ausschalten kann. => Vielleicht diese einmal probieren.
Ausserdem, wie im Beispiel
http://beilagen.dreael.ch/QB/SERTRAN3.BAS
ersichtlich (war von mir einst eine Dateitransfertoutine zwischen Amiga und PC, um Festplatte für WinUAE übernehmen zu können), musste ich bestimmte Fehler ebenfalls schon mit ON ERROR GOTO abfangen, um einen stabilen Lauf zu ermöglichen. _________________ Teste die PC-Sicherheit mit www.sec-check.net |
|
Nach oben |
|
 |
fredyxx
Anmeldungsdatum: 26.01.2009 Beiträge: 22
|
Verfasst am: 03.02.2009, 23:12 Titel: |
|
|
Hallo, ich habe das Problem nun folgendermaßen gelöst:
da ich weiß, dass die vollständigen Telegramme mindestens 6 Byte lang sind, die Einschaltfehler die Empfangspuffer aber immer nur bis zu einer Größe von 1 Byte füllen, frage ich die Länge der Eingangspuffer ab und schließe und öffne eine COM-Schnittstelle solange immer wieder (das ist in meinem Fall 2 mal) , bis ein erstes Telegramm mit mehr als 6 Byte im Puffer steht.
Nach jedem Offnen und Schließen ist die Puffergröße wieder NULL.
Was Eleganteres ist mir nicht eingefallen! _________________ vG
fredyxx |
|
Nach oben |
|
 |
|