Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2004.09.12;
Скачать: [xml.tar.bz2];

Вниз

COM - порт. Тестирование.   Найти похожие ветки 

 
dosik   (2004-07-31 23:48) [0]

Добрый день, господа программеры. Суть задачи такова. На com порте стоит заглушка, т.е. получается обыкновенное эхо. Почему же это тогда не работает???

var
 hPort : THandle;
 rand  : array[1..1] of byte;
 Size  : DWORD;
 over  : TOverlapped;
begin
 if lvPorts.ItemIndex>-1 then
 begin
   hPort:=CreateFile(PChar(lvPorts.Items[lvPorts.ItemIndex]),GENERIC_READ and GENERIC_WRITE,0,
                     nil,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL or FILE_FLAG_OVERLAPPED,0);
   if Succeeded(hPort) then
   begin
     Randomize;
     rand[1]:=Random(100);
     Size:=1;
     if WriteFile(hPort,rand,Size,Size,@over) then
       ShowMessage("yes")
     else
       ShowMessage(IntToStr(GetLastError));
     if ReadFile(hPort,rand,1,Size,@over) then
       ShowMessage("yes");
     else
       ShowMessage(IntToStr(GetLastError));
     CloseHandle(hPort);
   end;
 end;
И там и там ошибка 5 (отказ в доступе) :(


 
tesseract   (2004-08-01 14:40) [1]

А зачем Overlapped если не используещь Wait? и что за Succeeded(hPort) ? типа на больше ноля проверяет? и зачем randomize? а SetCommState где? поставь пораметры порта и сбрось PurgeCom. У тебя заглушка 2-3? а DTR/DSR, CTS/RTS?  Ну и главное  PChar(lvPorts.Items[lvPorts.ItemIndex]) - так делать в 6-7 не рекомендуется - сделай pcharPort= Pchar(stringPort)


 
dosik   (2004-08-01 23:10) [2]

Вот, так, только не работает все равно:
   hPort:=CreateFile(PChar(lvPorts.Items[lvPorts.ItemIndex]),GENERIC_READ and GENERIC_WRITE,0,
                     nil,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL or FILE_FLAG_OVERLAPPED,0);
   if Succeeded(hPort) then
   begin
     if SetupComm(hPort,SizeOf(DWORD),SizeOf(DWORD)) then
       ShowMessage("Setup")
     else
       ShowMessage("ERROR SETUP : "+IntToStr(GetLastError));

     if GetCommState(hPort,PortDCB) then
       ShowMessage("Get DCB")
     else
       ShowMessage("ERROR GET DCB : "+IntToStr(GetLastError));
     PortDCB.BaudRate:=CBR_9600;
     PortDCB.Parity:=1;
     PortDCB.ByteSize:=5;
     PortDCB.StopBits:=ONESTOPBIT;
     if SetCommState(hPort,PortDCB) then
       ShowMessage("Set DCB")
     else
       ShowMessage("ERROR SET DCB : "+IntToStr(GetLastError));

     if GetCommTimeouts(hPort,PortTime) then
       ShowMessage("Get COMTimeouts")
     else
       ShowMessage("ERROR GET COMTimeouts : "+IntToStr(GetLastError));
     PortTime.ReadTotalTimeoutConstant:=50;
     PortTime.ReadIntervalTimeout:=MAXDWORD;
     PortTime.ReadTotalTimeoutMultiplier:=MAXDWORD;
     PortTime.WriteTotalTimeoutMultiplier:=1000;
     PortTime.WriteTotalTimeoutConstant:=1500;
     if SetCommTimeouts(hPort,PortTime) then
       ShowMessage("Set COMTimeouts")
     else
       ShowMessage("ERROR SET COMTimeouts : "+IntToStr(GetLastError));

     Randomize;
     for i:=1 to 10 do
       rand[i]:=Random(65535);
     Size:=10;
     if WriteFile(hPort,rand,Size,Size,@over) then
       ShowMessage("WRITE : "+IntToStr(Rand[1]))
     else
       ShowMessage("ERROR WRITE : "+IntToStr(GetLastError));
       
     if ReadFile(hPort,rand,Size,Size,@over) then
       ShowMessage("READ : "+IntToStr(Rand[1]))
     else
       ShowMessage("ERROR READ : "+IntToStr(GetLastError));
     CloseHandle(hPort);
   end;
??? Может кто кинет ссылку как правильно это делается и что означают параметры. Только желательно на русском. )))


 
dosik   (2004-08-02 00:22) [3]

Отвечаю сам себе:
не GENERIC_READ and GENERIC_WRITE а GENERIC_READ or GENERIC_WRITE. Как я это упустил??? )))



Страницы: 1 вся ветка

Форум: "WinAPI";
Текущий архив: 2004.09.12;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.46 MB
Время: 0.038 c
1-1093489221
SNV-Soft
2004-08-26 07:00
2004.09.12
Компонент "Линейка"


3-1092339929
Сергей Плоткин
2004-08-12 23:45
2004.09.12
Огромный размер БД


14-1093343366
elected
2004-08-24 14:29
2004.09.12
Ищу работу программистом (удаленно)


1-1093534167
hamster
2004-08-26 19:29
2004.09.12
Двоичные данные


14-1093367680
Fredericco
2004-08-24 21:14
2004.09.12
Меня уволили :-)





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