Re: Strings über RS232 Kategorie: Programmierung (von Thomas Ferl - 13.07.2001 22:20) | |
Als Antwort auf Strings über RS232 von Stefan - 10.07.2001 13:27
| |
Hallo Stefan, ganz so kompliziert ist das Ganze nicht. Mein gesamter Dialog zwischen PC und CC läuft über Strings ab, wobei ich PC-seitig mit Delphi arbeite. 1. PC -> CC Procedure SendString(St:String); var i:Integer; Begin st := st + '*'; For i:=1 to length(st) do CC.SendByte(ord(st[i])); End; 2.Auf der Seite des CControls existiert folgende Funktion: function getserial() returns int { long timout; int c; // Daten im Puffer ? if hwcom.rxd() == 0 return 0; // nix tun // andernfalls solange an hwcom lauschen bis das Ende symbolisiert wird oder das Timeout (500ms) erreicht ist str.clear(inp); timeout = system.timer() + MAXTIMEOUT; // zB.500ms loop { if hwcom.rxd() < 0 { timeout = system.timer() + MAXTIMEOUT; c = hwcom.get(); if c != '*' str.putchar(inp,c) else return str.length(inp); } if (system.timer() > timeout return -1; } } 3. CC->PC function send_ADPort01() { int ad; string s; ad = ports.adc(); s = 'AD1:'; str.putint(s,ports.adc); s = s+'*'; hwcom.send(s,str.length(s)); wait hwcom.ready; } Ob nun in einem extra- oder im main-thread - das ist egal so könnte es dann aussehen.... tread main { .... loop { if modul.getserial() > 0 { // im gobal vereinbarten "inp" ist jetzt ein Textstring der interpretiert werden kann ... if inp = "AD1" send_ADPort1(); if inp = "BEEP" doBeep(); . . usw } .... } was nun noch bleibt ist eine Routine, die PC-seitig die ankommenden byres zu einen String zusammensetz zb while getTickCount if cc.DataAvailable then Begin timeout := GetTickCount+TMAXTIMEOUT; c := chr(cc.getByte); if c <> '*' InpStr := InputStr + chr(cc.GetByte) else EXIT; End; End; ..... Ich hoffe ich habe nicht zu viele Tippfehler gemacht und Du kannst etwas damit anfangen. Für Rücfragen stehe ich zur Verfügung. Thomas | |
Antwort schreiben Antworten: |