Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Получение данных с СОМ порта [D7, WinXP]


Страницы:   1 2

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 вроде даже встречал компонент для работы с СОМ-портом, правда давненько уже, года полтора назад. посмотри там.


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо