Форум: "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