Форум: "Система";
Текущий архив: 2002.05.30;
Скачать: [xml.tar.bz2];
Внизчтение данных с ком порта... Найти похожие ветки
← →
pvn (2002-03-03 16:44) [0]Мужики, я уже понял, что про ком порт спрашивают каждый день, но вот посмотрите код:
procedure TForm1.Button2Click(Sender: TObject);
var
S, D: array[0..127] of Char;
actual_bytes: Cardinal;
// The DCB structure defines the control setting
// for a serial communications device
DCB: TDCB;
begin
FillChar(S, 128, #0);
FillChar(D, 128, #0);
try
GetCommState(hPort, dcb);
dcb.BaudRate:= CBR_9600;
dcb.DCBlength:= Sizeof(DCB);
dcb.ByteSize := 8;
dcb.StopBits := 1;
dcb.Parity:=NOPARITY;
SetCommState(hPort, dcb);
except
ShowMessage("Error connection...");
end;
PurgeComm(hPort, PURGE_TXABORT or PURGE_RXABORT or PURGE_TXCLEAR or PURGE_RXCLEAR);
// StrPCopy(S, Edit1.Text+ #13 + #10);
StrPCopy(S, "AT"+ #13 + #10);
if not WriteFile(hPort, S, StrLen(S), actual_bytes, nil) then
begin
ShowMessage("Can""t write to port: " + IntToStr(GetLastError)) ;
Exit;
end;
Memo2.Lines.Add(S);
if not ReadFile(hPort, D, 1, actual_bytes, nil) then
ShowMessage("Can""t read from port: " + IntToStr(GetLastError))
else
ShowMessage("Read " + IntToStr(actual_bytes) + " bytes");
Memo1.Text := D;
end;
порт открывается, вроде даже данные отсылаются, но не могу получить ответ от модема...
что не так
← →
Королев (2002-03-03 16:56) [1]может я конечно тоже что-то не понимаю, но мне кажется, что тут нигде не указано имя порта: com1 или com2. надо получить его хэндл: hport:=createfile("com1",.....)
← →
pvn (2002-03-03 19:27) [2]инициализацию порта я закинул в ф-ию создания формы...
hPort := CreateFile(PChar("COM2"), GENERIC_READ + GENERIC_WRITE,
0, nil, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
if hPort = INVALID_HANDLE_VALUE then
ShowMessage("Can""t open COM2");
← →
Королев (2002-03-03 19:54) [3]в такой записи он тоже читает, но он читает все 127 char D массива, т.е. пока все 127 не прийдут событие чтения не остановится. надо воспользоваться WaitCommEvent.
← →
pvn (2002-03-04 05:03) [4]пара вопросов:
1) почему ждет, ведь в чтении if not ReadFile(hPort, D, 1, actual_bytes, nil) стоит 1? как правильно?
2) а как это событие сделать? только по подробнее плз, а то я на Делфи лет 5 не писал...
← →
Королев (2002-03-04 05:26) [5]подробно не могу - не делал, но думаю надо читать побайтно (D должно быть размером в 1 байт), и чтение производить только при возникновении события WaitCommEvent для пришедшего байта. в SDK подробно описано WaitCommEvent.
Страницы: 1 вся ветка
Форум: "Система";
Текущий архив: 2002.05.30;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.007 c