Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.05.30;
Скачать: CL | DM;

Вниз

чтение данных с ком порта...   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.012 c
1-97286
Demon Ltd
2002-05-18 00:31
2002.05.30
Копи файла


1-97239
tararasyk
2002-05-18 11:27
2002.05.30
Вопрос по поводу раскладки клавиатуры под Win2000


3-97146
Sirus
2002-05-04 09:36
2002.05.30
Как создать файл БД InterBase (*.gdb) программно???


3-97198
Savage
2002-05-08 15:52
2002.05.30
Очень интересная ошибка с ADO


3-97153
XanderMan
2002-05-06 15:02
2002.05.30
Поиск в BLOB поле