AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Daten von einem anderen Programm "auffangen" und verarbeiten
Thema durchsuchen
Ansicht
Themen-Optionen

Daten von einem anderen Programm "auffangen" und verarbeiten

Offene Frage von "schweindi"
Ein Thema von schweindi · begonnen am 7. Mär 2010 · letzter Beitrag vom 13. Mär 2010
 
schweindi

Registriert seit: 4. Feb 2010
60 Beiträge
 
#5

Re: Daten von einem anderen Programm "auffangen" u

  Alt 9. Mär 2010, 00:21
hmm.. jetzt geht mir das ganze doch schon ziemlich auf die Nerven, manchmal geht das Programm manchmal nicht und ich hab eig keine Ahnung, was ich verändert habe, damit es ging.

Folgendes Problem:

Wenn ich mein Programm starte soll es zuerst "at+cfun=1" ans modem schicken, dann die Antwort des Modems abwarten und dann "at" schicken, wieder die Antwort abwarten. Klingt extrem einfach, doch irgendwie bin ich unfähig!

mein Versuch:
Delphi-Quellcode:
procedure TForm1.Button2Click(Sender: TObject);
var StartIni : TIniFile;
begin
ComPort1.Port:=Edit1.Text;
//Ini File
StartIni:=TIniFile.Create(ChangeFileExt(Application.ExeName,'.INI'));
try
StartIni.writeString('Com1','Name',Edit1.Text);
finally
  StartIni.Free;
end;
ComPort1.Open;
Memo_text.Lines.Add('-------');
Memo_text.Lines.Add('Connected to '+Edit1.text);
Memo_text.Lines.Add('-------');
Writeln(Logf, 'Connected to '+Edit1.text); //logfile
//set +cfun=1
ComPort1.WriteStr('AT+CFUN=1');
ComPort1.TransmitChar(#13);
Writeln(Logf, 'SEND: AT+CFUN=');
sleep(sleeptime);
Application.ProcessMessages;
//send status
ComPort1.WriteStr('AT');
ComPort1.TransmitChar(#13);
Writeln(Logf, 'SEND: AT');
sleep(sleeptime);
Application.ProcessMessages; //brauch ich da noch eines?
So sleeptime hab ich 10ms,50ms,100ms und 1000ms probiert, es hilft natürlich nichts.
So siehts im Monitor aus:
Code:
REQUEST                  Port       Result       Other

IOCTL_SERIAL_GET_MODEMSTATUS   USBER000    SUCCESS
IRP_MJ_WRITE                   USBER000    SUCCESS   Length 9: AT+CFUN=1
IOCTL_SERIAL_WAIT_ON_MASK      USBER000    SUCCESS
IOCTL_SERIAL_WAIT_ON_MASK      USBER000    SUCCESS
IOCTL_SERIAL_GET_COMMSTATUS    USBER000    SUCCESS
IRP_MJ_READ                    USBER000    SUCCESS   Length 16: AT+CFUN=1...OK..
IOCTL_SERIAL_GET_COMMSTATUS    USBER000    SUCCESS
IRP_MJ_WRITE                   USBER000    SUCCESS   Length 2: AT
daraus schließe ich, dass in der zeile IRP_MJ_READ at+cfun=1 vom modem zurückgesendet wurde und drangehängt "...OK.." wenn ich nach diesem Button dann manuell zb AT eingebe, passiert nichts, keine Antwort vom Modem kein Wait nichts.

Interessant: wenn ich disconnect klicke (ComPort1.Close und dann wieder connecte steht vor der Ausgabe "Answer: OK" dh das Event OnPacket von TComPort1 hat sich eingeschaltet... also ich blicke da nicht mehr durch und kenne mich anscheinend zu wenig aus :S

Was möchte ich?
1) Das Programm soll erst den nächsten Befehl senden, (in dem Fall "AT") wenn es vom Modem eine Antwort bekommen hat
2) Wenn es zum Timeout kommt, soll der Befehl erneut versendet werden.

Danke für jede Hilfe!
Gruß Schweindi
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:40 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz