Announcement

Collapse
No announcement yet.

AT-Command an Comschnittstelle senden und auf antwort warten

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • AT-Command an Comschnittstelle senden und auf antwort warten

    <b>BITTE - BRAUCH DRINGEND HILFE - BITTE</b><br>
    ich möchte das mein programm nach dem senden an die schnittstelle max. 20 sek. auf eine antwort wartet. je nach antwort sollte dann das nächste ereigniss starten.<br>
    geht das mit "while..do.." und wenn ja - wie.<br>
    <b>bitte dringend um antwort - bin halb am rotieren</b><br>
    DANKE UND GRUSS<br>
    GERNOT

  • #2
    Mußt du wohl noch ein bischen verfeinern, sollte aber im Prinzip so gehen.
    <pre>
    var
    bytes_read : DWORD; {Anzahl gelesener Bytes}
    laenge : DWORD;
    status : TCOMSTAT;
    firstcount : Longword;
    const
    timeout=20000;
    begin
    firsttickcount := GetTickCount;
    While ((Longword(abs(GetTickCount - FirstTickCount)) <= Longword(timeout))) Do
    begin
    application.processmessages;
    if ClearCommError(hcomdev, ErrorMask, @status) then
    begin
    laenge := status.cbInQue;//Anzahl der empfangenen Zeichen feststellen
    If laenge > 0 Then //falls etwas empfangen wurde
    begin //Daten lesen
    ReadFile(hcomdev, readbuf^, laenge, bytes_read, Nil);
    break;
    end;
    end;
    end;
    end;
    </pre>
    Nach dem Ende der Funktion hast Du in readbuf die empfangenen Zeichen. Diese kannst Du dann in einer anderen Procedure auswerten und dann dem Modem neue Vefehle schicken. hcomdev ist vom Typ Thandle, welches Du dir über hcomdev := CreateFile(port,
    GENERIC_READ Or GENERIC_WRITE,
    0, { comm devices must be opened w/exclusive-access }
    Nil, { no security attrs }
    OPEN_EXISTING, { comm devices must use OPEN_EXISTING }
    0, { not overlapped I/O }
    0); { hTemplate must be NULL for comm devices } besorgen kannst. Natürlcih solltest Du oben auch noch Fehlerabfragen machen, falls ClearCommError nicht true zurücklierfert.<br>
    Ich hoffe, daß hilft Dir erst mal weite

    Comment


    • #3
      vielen dank meister kneffel<br>
      ich werde es mal ausprobieren und nachher bescheid geben.<br>
      Gruss Gerno

      Comment


      • #4
        ich habe da noch etwas ganz geniales im forum gefunden<br>
        was mein problem auf sehr einfache und elegante weise löst.<br>
        <br>
        vielleicht hilft das auch anderen weiter:<br>
        <br>
        function pause(timesleep:longint):Integer;<br>
        var t:longint;<br>
        begin<br>
        t:=GetTickCount;<br>
        repeat Application.ProcessMessages until (GetTickCount - t>timesleep)<br>
        end;<br>
        <br>
        Aufruff durch pause(2000);<br>
        <br>
        funktioniert einwandfrei.<br>
        danke an den autor.<br>
        gruss gernot

        Comment

        Working...
        X