Главная страница
    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.46 MB
Время: 0.016 c
3-97151
Саша
2002-05-06 12:37
2002.05.30
EDBEngineError Translate error.Value out of bounds


1-97229
Dr.Pipe
2002-05-19 15:44
2002.05.30
А можно изменить значение формы. Та, которая не главная - на глав


4-97451
Влад_К
2002-03-28 08:44
2002.05.30
Как установать курсор в _классе_ окна


3-97172
Sobolyn
2002-05-07 14:52
2002.05.30
Как очистить файл *.mb для какой-нибудь таблицы *.db


1-97216
Kabal
2002-05-18 06:47
2002.05.30
Перенос строк в RadioGrup





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский