Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "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.038 c
1-1117031143
SergP.
2005-05-25 18:25
2005.06.14
Необходимость деструктора в описании своего класса


9-1111131446
Xeno
2005-03-18 10:37
2005.06.14
Как узнать количество полигонов в кадре


1-1117225715
Димастый
2005-05-28 00:28
2005.06.14
Иконка своего компонента


3-1115659500
xroot
2005-05-09 21:25
2005.06.14
Пустые поля


4-1113980046
dimasih
2005-04-20 10:54
2005.06.14
Знатокам TService in a Delphi 5.0





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