Форум: "Начинающим";
Текущий архив: 2008.01.27;
Скачать: [xml.tar.bz2];
ВнизПолучение данных с СОМ порта Найти похожие ветки
← →
vamp_avp (2007-12-13 18:43) [0]Привет всем! Не знаю в какой раздел писать.
Вопрос в следующем:
к компу подключено устройство через сом1 порт
какие параметры не знаю и найти наверное не реально
можно как то получить данные с сом порта?
если можно с примерами
заранее благодарен!!!
← →
Anatoly Podgoretsky © (2007-12-13 18:49) [1]По теме в WinAPI, по уровню, по крайней мере в данный момент в Начинающие.
← →
Германн © (2007-12-13 18:52) [2]
> можно как то получить данные с сом порта?
> если можно с примерами
Теоретически можно. Но лучше все-таки искать документацию на устройство.
← →
Free_Breeze (2007-12-13 20:11) [3]На torry.net вроде даже встречал компонент для работы с СОМ-портом, правда давненько уже, года полтора назад. посмотри там.
← →
morgoth (2007-12-14 10:10) [4]>>какие параметры не знаю и найти наверное не реально
наверное все таки стоит попробовать поискать, у устройства же есть производитель или оно совсем неизвестное?
>>можно как то получить данные с сом порта?
как-то может и можно, но без доки на него даже не поймешь что получишь, если только интуитивно.
← →
F@T@L_Err0r (2007-12-14 10:37) [5]Для начала инициализируеш порт...И потом читаеш из него.
← →
korneley © (2007-12-14 10:47) [6]Вообще-то с COM работают так же, как и с файлами + есть готовые компоненты. Бесплатные. Некоторые с документацией на русском. А некоторые даже TComPort называются. В Гугл...
← →
morgoth (2007-12-14 10:49) [7]>но без доки на него даже не поймешь что получишь
имелось ввиду документация к устройству конечно, а не com порту
← →
korneley © (2007-12-14 11:09) [8]
> morgoth (14.12.07 10:49) [7]
Иногда даже с документацией, т.к. она печатная, в единственном виде, неизвестно кем, как и когда переведена, для этого ли девайса вообще етс. ;-)
← →
morgoth (2007-12-14 11:17) [9]как правило документация дается к девайсу, если же ее нет, то стоит порыскать в инете, можно и без перевода...
устройство может реагировать только на определенные посланные ему данные, которые описаны в доке к нему, и соответсвенно отвечает данными в определенном формате, который также должен быть описан в доке, чем здесь может помочь компонет по работе с портом, не знаю ))), если только чтобы передать/получить данные с сом-порта. Но у автора в вопросе присутствует какое-то подключенное устройство.
← →
korneley © (2007-12-14 12:50) [10]
> если только чтобы передать/получить данные с сом-порта.
> Но у автора в вопросе присутствует какое-то подключенное
> устройство.
Присутствует. Но! "какие параметры не знаю и найти наверное не реально можно как то получить данные с сом порта?" :) Вот тут-то и компонент ему в помощь. Ну еще 1/8/No + одинаковые скорости с обоих сторон. А уж, что он будет слать, как интепретировать полученное - другой вопрос 8-)
← →
morgoth (2007-12-14 12:56) [11]если только так, то ноу комментс )))
← →
F@T@L_Err0r (2007-12-14 13:00) [12]а чего он передает неизвесно что ли???
← →
morgoth (2007-12-14 13:08) [13]>>а чего он передает неизвесно что ли???
посмотри [1], может поймешь что он там передает...
← →
morgoth (2007-12-14 13:10) [14]вернее не [1], а [0] )))
← →
korneley © (2007-12-14 13:11) [15]
> morgoth (14.12.07 13:08) [13]
+ и кому.
← →
tesseract © (2007-12-14 14:18) [16]
> какие параметры не знаю и найти наверное не реальноможно
> как то получить данные с сом порта?
Без протокола знания протокола можешь с высокой вероятностью получить ответ от устройтсва " команда не опознана".
← →
Anatoly Podgoretsky © (2007-12-14 14:46) [17]Вроде автору только параметры надо определить, скорость, количество бит, а это легко делается методом проб и ошибок.
← →
Германн © (2007-12-14 15:41) [18]
> Anatoly Podgoretsky © (14.12.07 14:46) [17]
Не всегда. Если устройство работает как slave, т.е. только отвечает на запросы, то обломишься пробовать.
← →
Anatoly Podgoretsky © (2007-12-14 15:54) [19]> Германн (14.12.2007 15:41:18) [18]
А для этого от автора нужна дополнительная информация, он же ничего не сказал, может у него обычное внешнее устройство с выводом лога на ком порт, в режиме принтера.
← →
korneley © (2007-12-14 16:10) [20]При работе с устройствами, подключенными по COM, чаще всего возникают вопросы из оперы: "Как симметрично настроить?". (выставить скорость, стоп-биты, длину, проверку чётности,...) Причем, если в софте еще можно "подкрутить" (своё же :), то железо, зачастую, настраивают другие дядьки. Из последнего (про COM): люди крест на пузе рисовали, что 19400, а оказалось 2200. Пришлось читать мануал к железу, и проверять. Они были не правы :)
← →
korneley © (2007-12-14 16:14) [21]Да, это к тому, что протокол, конечно, надо знать. Но не только. Ещё и клаву на железе, называемым "устройство через сом1 порт "
← →
jin_jin (2007-12-27 10:48) [22]Держи кусок рабочего кода кода с моей проги читает первые 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;
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2008.01.27;
Скачать: [xml.tar.bz2];
Память: 0.51 MB
Время: 0.006 c