Zur Übersicht - INFO - Neueste 50 Beiträge - Neuer Beitrag - Suchen - FAQ - Zum CC1-Forum - Zum CC-Pro-Forum

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