Главная страница
    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.032 c
4-1090486416
parovoZZ
2004-07-22 12:53
2004.09.12
Win98 и Delphi7


14-1092917742
Дмитрий0
2004-08-19 16:15
2004.09.12
веб-браузер


14-1093355242
saNat
2004-08-24 17:47
2004.09.12
DOS и Windows


6-1089197321
ctranik
2004-07-07 14:48
2004.09.12
Если кто знает в чём дело, помогите ........ ( IdHTTP )


3-1092729157
Beethoven
2004-08-17 11:52
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
Английский Французский Немецкий Итальянский Португальский Русский Испанский