Форум портала Metropolis

Высокие технологии и мобильный мир => Софт и интернет => Тема начата: vania-pooh от 09 Август 2006, 21:10



Название: Программирование COM - порта
Отправлено: vania-pooh от 09 Август 2006, 21:10
Значит задача такая: есть устройство, подсоединенное через ком1 порт (используется 4 жилы - RXD, TXD, GND и кажись DTR, номера жил - 1,2,3,4). Необходимо каким-то образом считать из внутренней памяти устройства данные. Мой вариант (на Pascal):

...
assign(f,COM1); //f - файловая переменная, присваиваем
reset(f); //читаем
read(f,var1,var2,...,varn);//считываем в переменные
...

Т.е. мы открываем порт для доступа через стандартный псевдоним и читаем данные. Я так не пробовал никогда, но кажется должно работать. Кто имел дело с подобными вещами, напишите что вы об этом думаете и как можно реализовать подобную тему. Пока считайте, что данные - некодированные, а просто лежат последовательно в ячейках памяти. Код программы желательно писать на паскале или объектном паскале, но можно и на "с". Заранее спасибо.


Название: Re:Программирование COM - порта
Отправлено: frost_ii от 09 Август 2006, 22:57
Я так полагаю, что сначала на устройство нужно послать команду, чтобы оно эти данные в порт бросило...
э-э-э... как оно там?
var
     command : string;
begin
     command = "GET";
     assign(f,COM1);
     rewrite(f);
     write(f,command);
     close(f);

     reset(f)
     .....


Название: Re:Программирование COM - порта
Отправлено: PeaK от 10 Август 2006, 10:16
Вообще нужно бы задавать параметры порта. :) В свое время для работы с ком портом на Делфи я потратил кучу времени для создания отдельного модуля.
Програмка создается на каком именно компиляторе?


Название: Re:Программирование COM - порта
Отправлено: vania-pooh от 10 Август 2006, 10:24
пусть для удобства всех это будет delphi 6. соотв. там меняется close на closefile.


Название: Re:Программирование COM - порта
Отправлено: PeaK от 10 Август 2006, 10:34
Написано более чем на 50% не мной, но почти все процедуры доводились мною. Использую постоянно.
Создаем объект и наслаждаемся. Использую Д7, но ничего привязанного именно к семерке нет.


Название: Re:Программирование COM - порта
Отправлено: vania-pooh от 10 Август 2006, 20:11
а кстати куда этот модуль класть чтобы просто подключать?


Название: Re:Программирование COM - порта
Отправлено: PeaK от 11 Август 2006, 09:03
Модуль кладется в каталог с проектом.
В том модуле, который будет работать с портом, вверху, после uses, через запятую, добавляем ComPort. Если все правильно, то проект должен компилироваться и при зажатом контроле на клавиатуре кликом мышки по строчке ComPort проваливаться в файл ComPort.pas.
После чего, объявляем глобальную переменную типа
Код:
var
  ComPort    : TRS232 ;
Это можно сделать прямо за инструкцией implementation.
Иннициализируется порт примерно так
Код:
ComPort := TRS232.Create(AOwner) ;
ComPort.ComPortParity := ptEVEN ;
ComPort.ComPortDataBits := db8BITS ;
ComPort.ComPortStopBits := sb1BITS ;
ComPort.ComPortHwHandshaking := hhNONE ;
ComPort.ComPortSwHandshaking := shNONE ;
ComPort.Connect ;
Это удобно делать при создании формы в методе Create.
Соответственно при окончании работы память неплохо бы освободить.


Название: Re:Программирование COM - порта
Отправлено: vania-pooh от 11 Август 2006, 09:50
а ну с самим то модулем я уже разберусь. а в готовую программу он сам вкомпилирует этот модуль или придется класть пас-файл и в дистрибутив?


Название: Re:Программирование COM - порта
Отправлено: PeaK от 11 Август 2006, 10:54
Нет. Все будет откомпилировано и включено.


Название: Re:Программирование COM - порта
Отправлено: vania-pooh от 11 Август 2006, 11:46
насчет того, что я разберусь, я видимо ошибся. че дальше то делать можно, чтобы с устройства хоть один байт получить или строку? а то я просто если readstring применяю, то он читает пустую строку.


Название: Re:Программирование COM - порта
Отправлено: PeaK от 11 Август 2006, 13:55
Читай побайтно в цикле While, до прочтения первого байта. (функция вернет true) Плюс ищи что-то типа Advanced Serial Port Monitor - что бы убедиться, что передача идет.


Название: Re:Программирование COM - порта
Отправлено: vania-pooh от 14 Август 2006, 10:39
а где вообще искать?


Название: Re:Программирование COM - порта
Отправлено: PeaK от 15 Август 2006, 08:45
а где вообще искать?
В интернете. Дело в том, что мой я потер, сейчас задачи другие, поэтому не пользуюсь, но снифер на последовательный порт - вещь в таком программировании нужная.


Название: Re:Программирование COM - порта
Отправлено: swein от 15 Август 2006, 23:03
если это учебная таска - то мог бы удосужится написать в яндексе чтото типа "программирование rs-232 на pascal"
если пишешь для себя - взял бы яву http://www.java2s.com/Code/Java/Development-Class/COM-Port.htm


Название: Re:Программирование COM - порта
Отправлено: PeaK от 17 Август 2006, 08:52
Если не получается - отпишись. Соберу простенькую тестилку. :)


Название: Re:Программирование COM - порта
Отправлено: vania-pooh от 18 Август 2006, 09:04
да уж собери-ка (лучше с исходным кодом). я не понимаю сам метод доступа к порту. вот мы его открыли, потом записали в него команду, а дальше что? подключенное устройство записывает в него же ответ на команду? и являются ли эти команды стандартными для большинства устройств или для каждого они свои?


Название: Re:Программирование COM - порта
Отправлено: PeaK от 18 Август 2006, 09:40
Какое устройство программируем? :)
Например купюроприемник обменивается пакетами примерно так
#байт - признак начала пакета
#байт - адрес
#байт - длина пакета
#команда (или отклик, может быть довольно длинным)
#CRC-16 - рассчитывается по отдельному алгоритму.
Обмен идет непрерывно - пакет отправили, отклик забрали, пакет отправили, отклик забрали.
Или, допустим сканер штрих-кода - молчит и программирования не требует. Сидим и слушаем - как только код считан идет пакет
# префикс
# код  (строка)
# постфикс.


Название: Re:Программирование COM - порта
Отправлено: vania-pooh от 21 Август 2006, 09:07
устройство называется электронный счетчик импульсов и основная его суть - хранить в памяти инфу о кол-ве сосчитанных импульсов и выгружать их на комп в нужное время.


Название: Re:Программирование COM - порта
Отправлено: PeaK от 22 Август 2006, 14:24
устройство называется электронный счетчик импульсов и основная его суть - хранить в памяти инфу о кол-ве сосчитанных импульсов и выгружать их на комп в нужное время.
Просто выкидывает, или нужно послать что-то, что бы ответ получить? Формат пакета данных какой?


Название: Re:Программирование COM - порта
Отправлено: vania-pooh от 23 Август 2006, 09:41
а вот это - хз. могу посмотреть через ту прогу, кот. ты говорил.


Название: Re:Программирование COM - порта
Отправлено: PeaK от 23 Август 2006, 10:10
Этот счетчик самодельный или у него есть фирма-производитель и модель?


Название: Re:Программирование COM - порта
Отправлено: vania-pooh от 23 Август 2006, 14:42
zenner izm 972 (немецкий)


Название: Re:Программирование COM - порта
Отправлено: PeaK от 24 Август 2006, 09:11
У меня проблемы с поиском руководств в интернете. Есть хоть какое-то описание на любом языке?


Название: Re:Программирование COM - порта
Отправлено: vania-pooh от 24 Август 2006, 10:38
оно в pdf: http://www.zenner.de/shared/files/doku/englisch/performance_specification_izm972_englisch.pdf