Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.06.14;
Скачать: CL | DM;

Вниз

Срочно нужна помощь, трабла с 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 вся ветка

Текущий архив: 2005.06.14;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.05 c
1-1117185097
electric
2005-05-27 13:11
2005.06.14
Прокрутка в TWebBrowser


8-1109668309
Ivolg
2005-03-01 12:11
2005.06.14
Инфо о видео файле


1-1117043182
KLOPs
2005-05-25 21:46
2005.06.14
Двоичный --в--> десятичный


3-1115720609
GreatMaster
2005-05-10 14:23
2005.06.14
Так как через ADO общаться с DBF в кодировке 1251?


3-1115183239
Zhekson
2005-05-04 09:07
2005.06.14
InstallShield Express & добавление BDE & Aliases