Seite 1 von 1

MVCOM warten auf bestimmten Bufferinhalt...

Verfasst: 06.01.2006 09:23
von Ghosty
Hallo Ihr Puristen...

Ich arbeite gerade an einem kleinen Testprogramm für die serielle Abfrage einer
Steuerungs-CPU und habe da ein kleines Problem mit der MVCOM-Lib.
Wenn ich mit einem Terminalproggi arbeite und die Verbindung zwischen
Rechner und Steuerplatine besteht, esrcheind sobald ich die Steuerplatine
einschalte im Terminal der Schriftzug "XSTART", welchen die
Steuerplatine sendet, sobald ihre Initialisierung abgelaufen ist und meldet
so den "bereit" Status.

Ich versuche nun eine Function hinzukriegen, welcher ich sagen
kann "Warte solage bis im angegebenen Buffer des COMPorts ein
angegebener String ansteht" also z.B.

Procedure WaitCOM(comPort.l, strWait.s)
...
EndProcedure


Noch besser wäre es natürlich, wenn innerhalb dieser Procedure ein
TimeOut verarbeitet werden könnte... also z.B das nach 10 Sek. die
Abfrage abgebrochen wird und über ProcedureReturn=0 dieser Abbruch
mitgeteilt wird.

Kann mir einer von Euch bei diesem Problem mit einem Codeschnipsel aushelfen?
Ich blicke nicht so richtig durch bei der MVCOM. In VB war das kein Problem aber VB
ist halt irgendwie ziemlich unflexibel, wenn es darum geht ein Proggi zu kompilieren,
welches ohne spezielle DLLs auskommt.


Ich danke schonmal im vorraus für Eure Bemühungen.[/b]

Verfasst: 06.01.2006 10:18
von Tafkadasom2k5
Weisst du denn, wie man den Pufferinhalt ausließt?
Ich hätte ne Idee, aber dazu bräuchte ich halt den Befehl um den Inhalt des Puffers nachzuschauen..


Gr33tz
Tafkadasom2k5

Verfasst: 06.01.2006 13:28
von Ghosty
Die MVCOM-Librarie stellt alle Befehle zur Verfügung, die nötig sind, aber
wie schon erwähnt, komme ich nicht so richtig kalr damit...

In VB waren die Befehle sehr einfach wie z.B. COM.output = "<Befehl>"
oder buffer$=COM.input um den Inhalt des Buffers einzulesen, wobei
die einzulesende Länge einfach mittel COM.inbuffercount=x gesetzt werden konnte.

Verfasst: 06.01.2006 16:27
von AND51
Ich versuche, zur Löung mit dem Timeout beizutragen:

Code: Alles auswählen

timeoutzeit_in_millisekunden=10*1000
endzeit=ElapsedMilliseconds()+timeoutzeit_in_millisekunden
Repeat
;
; hier deine Befehle
;
Until ElapsedMillisconds() >= endzeit
In endzeit werden die Anzahl an Milliseconds gespeichert, die der Computer schon läuft, dazu werden noch 10.000 Milliskunden = 10 Sekunden addiert.
Die Repeatschleife läuft so lange, bis ElapsedMilliseconds() ( = so lange läuft der PC in ms) plus die entsprechende Timeoutzeit kleiner als die aktuelle ElapsedMilliseconds() größer ist.

Biddeschööööööön!

Verfasst: 10.01.2006 17:02
von Tafkadasom2k5
Anderer Lösungsansatz:

Code: Alles auswählen

For i=0 to 50

Text.s = ProcedureUmBufferabzufragen()
If Text.s <> ""
  i=50
Endif
Delay(50)
Next

If Text = ""
 Messagerequester("Fehler: ","Deine Steuerungs CPU hat Mist gebaut,  oder   konnte die Daten nicht rechtzeitig übermitteln")
Else
Messagerequester("Daten Angekommen: ", Text)
Endif
EDIT: Hatte einen stumpfen Schreib-Bug entdeckt ;) N bisschen spät, aber effektiv :P