![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Получение данных с СОМ порта [D7, WinXP]
vamp_avp © (2007-12-13 18:43:00)Привет всем! Не знаю в какой раздел писать.
Вопрос в следующем:
к компу подключено устройство через сом1 порт
какие параметры не знаю и найти наверное не реально
можно как то получить данные с сом порта?
если можно с примерами
заранее благодарен!!!
jin_jin (2007-12-27 10:48:00) [1]Держи кусок рабочего кода кода с моей проги читает первые 4 байта
лишние переменные удалишь
...
var
Form1: TForm1;
Port:Thandle = 0;
DCB:TDCB;
lpCommTimeouts:TcommTimeOuts;
kd,l:integer;
com1,com2:string;
overlapp: Toverlapped;
lpevtMask:dword;
num:integer;
buf:array [0..3] of byte;
proverka:array [0..10] of byte;
bufs,ii:integer;
ct: TCommTimeouts;
implementation
{$R *.dfm}
...
procedure TForm1.FormCreate(Sender: TObject);
var i:word;
begin
l:=0;
CloseHandle(port);
port:=0;
port:= CreateFile ('com1',
GENERIC_READ or GENERIC_WRITE,0,nil,
OPEN_EXISTING,0,0);
{ with dcb do begin
BaudRate := 1200;
ByteSize:= 8;
Parity:=n;
StopBits:=1;
end;
SetCommState (port, dcb); }
// ct.ReadTotalTimeoutConstant := 0;
// ct.ReadIntervalTimeout := 0;
// ct.ReadTotalTimeoutMultiplier :=15;
// ct.WriteTotalTimeoutMultiplier := 0;
// ct.WriteTotalTimeoutConstant := 10;
buf[0]:=0;
end;
procedure TForm1.Timer1Timer(Sender: TObject);
var n,BytesRead:integer;
begin
flushfilebuffers(port);
setcommMask (port,EV_rxchar);
WaitCommEvent (port,lpevtMask,nil);
readFile(port, buf,4 , dword(BytesRead), nil);
label1.Caption:='1 байт = '+inttostr(buf[0]);
label2.Caption:='2 байт = '+inttostr(buf[1]);
label3.Caption:='3 байт = '+inttostr(buf[2]);
label4.Caption:='4 байт = '+inttostr(buf[3]);
label5.Caption:= 'Количество принятых байт = ' + inttostr(BytesRead);
label6.Caption:= 'Всего принятых байт = ' + inttostr(kd*BytesRead);
end;
korneley (2007-12-14 16:14:00) [2]Да, это к тому, что протокол, конечно, надо знать. Но не только. Ещё и клаву на железе, называемым "устройство через сом1 порт "
korneley (2007-12-14 16:10:00) [3]При работе с устройствами, подключенными по COM, чаще всего возникают вопросы из оперы: "Как симметрично настроить?". (выставить скорость, стоп-биты, длину, проверку чётности,...) Причем, если в софте еще можно "подкрутить" (своё же :), то железо, зачастую, настраивают другие дядьки. Из последнего (про COM): люди крест на пузе рисовали, что 19400, а оказалось 2200. Пришлось читать мануал к железу, и проверять. Они были не правы :)
Anatoly Podgoretsky (2007-12-14 15:54:00) [4]> Германн (14.12.2007 15:41:18) [18]
А для этого от автора нужна дополнительная информация, он же ничего не сказал, может у него обычное внешнее устройство с выводом лога на ком порт, в режиме принтера.
Германн (2007-12-14 15:41:00) [5]
> Anatoly Podgoretsky © (14.12.07 14:46) [17]
Не всегда. Если устройство работает как slave, т.е. только отвечает на запросы, то обломишься пробовать.
Anatoly Podgoretsky (2007-12-14 14:46:00) [6]Вроде автору только параметры надо определить, скорость, количество бит, а это легко делается методом проб и ошибок.
tesseract (2007-12-14 14:18:00) [7]
> какие параметры не знаю и найти наверное не реальноможно
> как то получить данные с сом порта?
Без протокола знания протокола можешь с высокой вероятностью получить ответ от устройтсва " команда не опознана".
korneley (2007-12-14 13:11:00) [8]
> morgoth (14.12.07 13:08) [13]
+ и кому.
morgoth (2007-12-14 13:10:00) [9]вернее не [1], а [0] )))
morgoth (2007-12-14 13:08:00) [10]>>а чего он передает неизвесно что ли???
посмотри [1], может поймешь что он там передает...
F@T@L_Err0r (2007-12-14 13:00:00) [11]а чего он передает неизвесно что ли???
morgoth (2007-12-14 12:56:00) [12]если только так, то ноу комментс )))
korneley (2007-12-14 12:50:00) [13]
> если только чтобы передать/получить данные с сом-порта.
> Но у автора в вопросе присутствует какое-то подключенное
> устройство.
Присутствует. Но! "какие параметры не знаю и найти наверное не реально можно как то получить данные с сом порта?" :) Вот тут-то и компонент ему в помощь. Ну еще 1/8/No + одинаковые скорости с обоих сторон. А уж, что он будет слать, как интепретировать полученное - другой вопрос 8-)
morgoth (2007-12-14 11:17:00) [14]как правило документация дается к девайсу, если же ее нет, то стоит порыскать в инете, можно и без перевода...
устройство может реагировать только на определенные посланные ему данные, которые описаны в доке к нему, и соответсвенно отвечает данными в определенном формате, который также должен быть описан в доке, чем здесь может помочь компонет по работе с портом, не знаю ))), если только чтобы передать/получить данные с сом-порта. Но у автора в вопросе присутствует какое-то подключенное устройство.
korneley (2007-12-14 11:09:00) [15]
> morgoth (14.12.07 10:49) [7]
Иногда даже с документацией, т.к. она печатная, в единственном виде, неизвестно кем, как и когда переведена, для этого ли девайса вообще етс. ;-)
morgoth (2007-12-14 10:49:00) [16]>но без доки на него даже не поймешь что получишь
имелось ввиду документация к устройству конечно, а не com порту
korneley (2007-12-14 10:47:00) [17]Вообще-то с COM работают так же, как и с файлами + есть готовые компоненты. Бесплатные. Некоторые с документацией на русском. А некоторые даже TComPort называются. В Гугл...
F@T@L_Err0r (2007-12-14 10:37:00) [18]Для начала инициализируеш порт...И потом читаеш из него.
morgoth (2007-12-14 10:10:00) [19]>>какие параметры не знаю и найти наверное не реально
наверное все таки стоит попробовать поискать, у устройства же есть производитель или оно совсем неизвестное?
>>можно как то получить данные с сом порта?
как-то может и можно, но без доки на него даже не поймешь что получишь, если только интуитивно.
Free_Breeze (2007-12-13 20:11:00) [20]На torry.net вроде даже встречал компонент для работы с СОМ-портом, правда давненько уже, года полтора назад. посмотри там.