jop danke - jetzt hab ich das ganze mal mit Synaser umgeschrieben... folgendes:
Delphi-Quellcode:
procedure TForm1.Button2Click(Sender: TObject);
var StartIni : TIniFile;
Answer : string;
begin
ComPort1.Connect(Edit1.Text);
//Ini File
StartIni:=TIniFile.Create(ChangeFileExt(Application.ExeName,'.INI'));
try
StartIni.writeString('Com1','Name',Edit1.Text);
finally
StartIni.Free;
end;
//Modem Configuration
ComPort1.Config(com_rate, com_bits, Char(com_parity), com_stop, com_softflow, com_hardflow);
Memo_text.Lines.Add('-------');
Memo_text.Lines.Add('Connected to '+Edit1.text);
Memo_text.Lines.Add('-------');
Writeln(Logf, 'Connected to '+Edit1.text);
//Modem status
ComPort1.SendString('AT'+#13#10);
Writeln(Logf, 'SEND: AT');
Answer := ComPort1.RecvString(readtotal);
if (Answer = 'OK') then
begin
if Logout then
Writeln(Logf, 'RECIEVED: '+Answer);
if Memoout then
Memo_text.Lines.Add('RECIEVED: '+Answer);
end else
begin
Memo_text.Lines.Add('RECIEVED: no answer!');
Memo_text.Lines.Add('ERROR: '+IntToStr(ComPort1.LastError));
end;
ComPort1.Flush;
//set +cfun=1
ComPort1.SendString('AT+CFUN=1'+#13+#10);
Writeln(Logf, 'SEND: AT+CFUN=1');
Answer := ComPort1.Recvstring(readtotal);
if (Answer = 'OK') then
begin
if Logout then
Writeln(Logf, 'RECIEVED: '+Answer);
if Memoout then
Memo_text.Lines.Add('RECIEVED: '+Answer);
end else
begin
Memo_text.Lines.Add('RECIEVED: no answer!');
Memo_text.Lines.Add('ERROR: '+IntToStr(ComPort1.LastError));
end;
end;
das wird ausgeführt, wenn man den ConnectButton klickt.
Readtotal : Integer -> da hab ich zb 500 bzw 1000 eingegeben und es ging eigentlich.
aber nach "AT+CFUN=1" bekomme ich keine Antwrot mehr... und wenn ich manuell die Befehle eingebe:
Delphi-Quellcode:
procedure TForm1.Button4Click(Sender: TObject);
var Str: String;
begin
//write to port
Str := Edit2.Text;
ComPort1.SendString(str+#13+#10); // string type variable
if logout then
Writeln(Logf, '(ComPort1) SEND: '+str+' #13 #10');
if memoout then
Memo_text.Lines.Add('SEND: '+str+' #13 #10');
ComPort1.RecvString(readtotal);
if memoout then
Memo_text.Lines.Add('Answer: '+str);
Edit2.Clear;
end;
dann wird zwar der Befehl geschickt: (monitor) "
COM Bridge.exe IRP_MJ_WRITE USBER000 SUCCESS AT+CFUN=1.."
aber ich bekomme keine Antwort zurück.........
und allgemein, wie kann ich, wie bei TComPort das Programm warten lassen, so dass es sofort, wenn es einen Input bekommt etwas macht...
Klartext: Programm startet -> connect drücken (den code oben ausführen) -> Programm ist fertig, es bleibt offen -> Modem sendet irgendwas -> Programm "wacht auf" und macht was mit dem Befehl, den es bekommen hat.
wie könnte das gehen?