Форум: "WinAPI";
Текущий архив: 2005.06.14;
Скачать: [xml.tar.bz2];
ВнизСрочно нужна помощь, трабла с COM портом... Найти похожие ветки
← →
ComPort (2005-04-15 22:26) [0]Есть устройство, оно общается с одной программой черег COM порт.
никак не получается добиться от этой чертовой железяки ответа....
вот что родная прога "пишет" в порт(смотрел портмониторм):
IRP_MJ_CREATE Serial0 SUCCESS Options: Open
IOCTL_SERIAL_SET_TIMEOUTS Serial0 SUCCESS RI:1 RM:0 RC:20 WM:0 WC:20
IOCTL_SERIAL_SET_QUEUE_SIZE Serial0 SUCCESS InSize: 32 OutSize: 32
IOCTL_SERIAL_SET_BAUD_RATE Serial0 SUCCESS Rate: 10417
IOCTL_SERIAL_SET_LINE_CONTROL Serial0 SUCCESS StopBits: 1 Parity: SPACE WordLength:8
IOCTL_SERIAL_SET_CHAR Serial0 SUCCESS EOF:0 ERR:0 BRK:0 EVT:0 XON:11 XOFF:1
IOCTL_SERIAL_SET_HANDFLOW Serial0 SUCCESS Shake:1 Replace:c0 XonLimit:600
XoffLimit:150
IOCTL_SERIAL_SET_WAIT_MASK Serial0 SUCCESS Mask: TXEMPTY
IOCTL_SERIAL_PURGE Serial0 SUCCESS Purge: TXCLEAR RXCLEAR
я делаю так (взято из местного примера):
//создание и иницализация порта
KolByte:=0;
//создание порта и получение его хэндла
CommHandle := CreateFile("COM1",GENERIC_READ or GENERIC_WRITE,0,nil,OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL or FILE_FLAG_OVERLAPPED,0);
//ставим маску - "по пришествии определенного символа"
SetCommMask(CommHandle,EV_RXFLAG);
//построение DCB
GetCommState(CommHandle,DCB);
DCB.BaudRate:=CBR_10417;
DCB.Parity:=NOPARITY;
DCB.ByteSize:=8;
DCB.StopBits:=OneStopBit;
DCB.EvtChar:=chr(13);//задание символа для флага
//устанавливаем DCB
SetCommState(CommHandle,DCB);
//создаем паралельный поток
//там будет вертеться процедура приема строки
//с порта - ReadComm
CommThread := CreateThread(nil,0,@ReadComm,nil,0,ThreadID);
не знаю только как выставить все указаные выше параметры...
буду очень благодарен за помощь! :)
← →
ComPort (2005-04-16 06:47) [1]:-(
← →
GanibalLector © (2005-04-16 13:06) [2]>Parity: SPACE
А ты пишешь : DCB.Parity:=NOPARITY;
← →
ComPort (2005-04-16 22:04) [3]RI:1 RM:0 RC:20 WM:0 WC:20
а как это сделать?
← →
GanibalLector © (2005-04-17 01:28) [4]
var
TOut:TCommTimeouts;
begin
if (TimeC=0) AND (TimeM=0) then
TOut.ReadIntervalTimeout := MAXDWORD
else TOut.ReadIntervalTimeout := 0;
TOut.ReadTotalTimeoutMultiplier := TimeM;
TOut.ReadTotalTimeoutConstant := TimeC;
TOut.WriteTotalTimeoutMultiplier := 0;
TOut.WriteTotalTimeoutConstant := 0;
Result:=SetCommTimeOuts(Handle, TOut);
end;
Надеюсь смысл понятен.Варьируй значениями.
← →
ComPort (2005-04-18 10:09) [5]а не подскажешь как решить проблему с установкой нужной скорости?
нужно 10417? в набор CBR_ она не входит...
← →
wal © (2005-04-18 16:16) [6]Пиши прямо цифирью, без CBR_
← →
wal © (2005-04-18 16:21) [7]Тока сама железяка (СОМ-порт) всеравно на этой скорости работать не будет, а будет на 10472, но это мелочи, допускается +-5%
← →
comport (2005-04-18 21:34) [8]wal
надеюсь что будет работать :)
← →
ComPort (2005-04-19 15:13) [9]Сделал так:
TOut:TCommTimeouts;
dcb:_DCB;
cto:TCommTimeOuts;
begin
FHandle:= CreateFile(PChar("COM1"), GENERIC_READ or GENERIC_WRITE,
0, nil, OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL or FILE_FLAG_OVERLAPPED, 0);
GetCommState(FHandle, dcb);
dcb.BaudRate:=10417;
dcb.ByteSize:=8;
dcb.Parity:=SPACEPARITY;
dcb.StopBits:=OneStopBit;
dcb.XonLim:=600;
dcb.XoffLim:=150;
SetCommState(FHandle, dcb);
GetCommTimeouts(FHandle, cto);
cto.ReadIntervalTimeout:=1;
cto.ReadTotalTimeoutMultiplier:=0;
cto.ReadTotalTimeoutConstant:=20;
cto.WriteTotalTimeoutMultiplier:=0;
cto.WriteTotalTimeoutConstant:=20;
SetCommTimeOuts(FHandle, cto);
SetupComm(FHandle, 32,32);
PurgeComm(FHandle, PURGE_TXCLEAR);
Теперь трабла в том что не могу читать, вот так ничего не выходит:
var
Received: DWORD;
begin
ReadFile(FHandle, Buffer, Size, Received, nil);
Help me...:)
← →
wal © (2005-04-19 15:17) [10]>FILE_ATTRIBUTE_NORMAL or FILE_FLAG_OVERLAPPED, 0);
Это к чему?
← →
tesseract (2005-04-20 09:56) [11]>> FILE_ATTRIBUTE_NORMAL or FILE_FLAG_OVERLAPPED - не забудь что работать будет только в отложенном режиме
>> После Createfile
if (hCom=INVALID_HANDLE_VALUE) or (hcom=ERROR_ALREADY_EXISTS) then
begin
fLog:=fLog+#13#10+" Порт не существует или занят";
fLastError:=ErrInterfaceError;
exit;
end;
Страницы: 1 вся ветка
Форум: "WinAPI";
Текущий архив: 2005.06.14;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.035 c