Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Система";
Текущий архив: 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
14-97383
BigBadMutuh
2002-04-14 12:10
2002.05.30
Как из Офиса выдрать дистрибутив Ворда.


1-97222
Blacki
2002-05-19 23:51
2002.05.30
Проблемы с выключением Windows


3-97193
Great DAN
2002-05-05 15:56
2002.05.30
Как упорядочить QRep?


3-97117
Oleg-2
2002-05-09 16:43
2002.05.30
Сохранение базы данных


1-97296
sdmitrii
2002-05-19 06:17
2002.05.30
Реализация drag&Drop несколько строк из StringGrid а





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский