Правильное подключение:
| Код | function TForm1.Connect(APort: String): boolean; var DeviceName: array[0..80] of Char; begin result:=false;
if hCom<>0 then begin log('Порт '+Aport+' уже открыт.'); exit; end;
currPort:=APort;
StrPCopy(DeviceName, '\\.\'+APort);
hCom := CreateFile(DeviceName, GENERIC_READ or GENERIC_WRITE, 0, nil, OPEN_EXISTING, 0, 0); sleep(500);
if (hCom=INVALID_HANDLE_VALUE) then begin log('Ошибка открытия порта '+APort); hCom:=0; exit; end;
Succ:=GetCommState(hCom,dcb);
if not Succ then begin log('Ошибка 1.'); CloseHandle(hCom); hCom:=0; exit; end;
dcb.BaudRate:=115200; dcb.ByteSize:=8; dcb.Parity:=NOPARITY; dcb.StopBits:=ONESTOPBIT;
Succ:=SetCommState(hCom,dcb);
if not Succ then begin log('Ошибка 2.'); CloseHandle(hCom); hCom:=0; exit; end;
TimeOuts.ReadIntervalTimeout:=MAXDWORD; // устанавливаем timeout. для того чтобы не было задержек Succ:=SetCommTimeouts(hCom,TimeOuts); if not Succ then begin log('Ошибка 3.'); CloseHandle(hCom); hCom:=0; exit; end;
result:=true; end;
|
Правильная отправка СМС:
| Код | function TForm1.TerminalManage(index, mcmd : byte; sec : integer = 0) : boolean; var cmd, res, sep : string; BytesWritten, BytesRead, i : Cardinal; begin result:=false;
cmd:='AT+CMGS="+79242630000",145'#13; WriteFile(hCom, PChar(cmd)^, Length(cmd), BytesWritten, nil); res:=''; while (pos('OK'#13,res)=0) and (pos('ERROR',res)=0) and (pos('>',res)=0) do begin FillChar(IOBuf^,sizeof(tmb),#0); Sleep(100); ReadFile(hCom, IObuf^, Sizeof(tmb), BytesRead, nil); for i:=1 to BytesRead do res:=res+IOBuf^[i]; end; if pos('>',res)=0 then exit; FillChar(IObuf^, sizeof(TMb),#0); sleep(100);
cmd:='SMS TEXT'+#26;
WriteFile(hCom, PChar(cmd)^, Length(cmd), BytesWritten, nil); res:=''; while (pos('OK',res)=0) and (pos('ERROR',res)=0) and (pos('>',res)=0) and (pos(#26,res)=0) do begin FillChar(IOBuf^,sizeof(tmb),#0); sleep(100); ReadFile(hCom, IObuf^, Sizeof(tmb), BytesRead, nil); for i:=1 to BytesRead do res:=res+IOBuf^[i]; end;
result:=true; end;
|
|