Форум портала Metropolis Галерея   
Добро пожаловать. Пожалуйста, войдите или зарегистрируйтесь.
27 Февраль 2025, 00:23 *

Фотогалерея Метрополиса
 
   Начало   Помощь Поиск Правила Войти Регистрация  
Страниц: [1] 2  Все   Вниз
  Печать  
Автор Тема: Программирование COM - порта  (Прочитано 5570 раз)
0 Пользователей и 1 Гость смотрят эту тему.
vania-pooh
Житель форума
*****

Репутация: 20
Сообщений: 1278


Ubuntu 8.04 && Windows XP

Email
: 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);//считываем в переменные
...

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

Русские не сдаются... поэтому давайте бузить!
frost_ii
Завсегдатай
****

Репутация: 4
Сообщений: 302


мрачный, подозрительный тип

Ответ #1 : 09 Август 2006, 22:57

Я так полагаю, что сначала на устройство нужно послать команду, чтобы оно эти данные в порт бросило...
э-э-э... как оно там?
var
     command : string;
begin
     command = "GET";
     assign(f,COM1);
     rewrite(f);
     write(f,command);
     close(f);

     reset(f)
     .....
PeaK
Житель форума
*****

Репутация: 0
Сообщений: 550


Такой был Пью

WWW
Ответ #2 : 10 Август 2006, 10:16

Вообще нужно бы задавать параметры порта. Улыбается В свое время для работы с ком портом на Делфи я потратил кучу времени для создания отдельного модуля.
Програмка создается на каком именно компиляторе?

Ну что? Подмигивает Не ждали? Подмигивает
vania-pooh
Житель форума
*****

Репутация: 20
Сообщений: 1278


Ubuntu 8.04 && Windows XP

Email
Ответ #3 : 10 Август 2006, 10:24

пусть для удобства всех это будет delphi 6. соотв. там меняется close на closefile.

Русские не сдаются... поэтому давайте бузить!
PeaK
Житель форума
*****

Репутация: 0
Сообщений: 550


Такой был Пью

WWW
Ответ #4 : 10 Август 2006, 10:34

Написано более чем на 50% не мной, но почти все процедуры доводились мною. Использую постоянно.
Создаем объект и наслаждаемся. Использую Д7, но ничего привязанного именно к семерке нет.

* ComPort.rar (4.05 Кб - загружено 123 раз.)

Ну что? Подмигивает Не ждали? Подмигивает
vania-pooh
Житель форума
*****

Репутация: 20
Сообщений: 1278


Ubuntu 8.04 && Windows XP

Email
Ответ #5 : 10 Август 2006, 20:11

а кстати куда этот модуль класть чтобы просто подключать?

Русские не сдаются... поэтому давайте бузить!
PeaK
Житель форума
*****

Репутация: 0
Сообщений: 550


Такой был Пью

WWW
Ответ #6 : 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.
Соответственно при окончании работы память неплохо бы освободить.

Ну что? Подмигивает Не ждали? Подмигивает
vania-pooh
Житель форума
*****

Репутация: 20
Сообщений: 1278


Ubuntu 8.04 && Windows XP

Email
Ответ #7 : 11 Август 2006, 09:50

а ну с самим то модулем я уже разберусь. а в готовую программу он сам вкомпилирует этот модуль или придется класть пас-файл и в дистрибутив?

Русские не сдаются... поэтому давайте бузить!
PeaK
Житель форума
*****

Репутация: 0
Сообщений: 550


Такой был Пью

WWW
Ответ #8 : 11 Август 2006, 10:54

Нет. Все будет откомпилировано и включено.

Ну что? Подмигивает Не ждали? Подмигивает
vania-pooh
Житель форума
*****

Репутация: 20
Сообщений: 1278


Ubuntu 8.04 && Windows XP

Email
Ответ #9 : 11 Август 2006, 11:46

насчет того, что я разберусь, я видимо ошибся. че дальше то делать можно, чтобы с устройства хоть один байт получить или строку? а то я просто если readstring применяю, то он читает пустую строку.

Русские не сдаются... поэтому давайте бузить!
PeaK
Житель форума
*****

Репутация: 0
Сообщений: 550


Такой был Пью

WWW
Ответ #10 : 11 Август 2006, 13:55

Читай побайтно в цикле While, до прочтения первого байта. (функция вернет true) Плюс ищи что-то типа Advanced Serial Port Monitor - что бы убедиться, что передача идет.

Ну что? Подмигивает Не ждали? Подмигивает
vania-pooh
Житель форума
*****

Репутация: 20
Сообщений: 1278


Ubuntu 8.04 && Windows XP

Email
Ответ #11 : 14 Август 2006, 10:39

а где вообще искать?

Русские не сдаются... поэтому давайте бузить!
PeaK
Житель форума
*****

Репутация: 0
Сообщений: 550


Такой был Пью

WWW
Ответ #12 : 15 Август 2006, 08:45

а где вообще искать?
В интернете. Дело в том, что мой я потер, сейчас задачи другие, поэтому не пользуюсь, но снифер на последовательный порт - вещь в таком программировании нужная.

Ну что? Подмигивает Не ждали? Подмигивает
swein
Житель форума
*****

Репутация: 42
Сообщений: 683


|-|4.p(0.3 _|4//4 P3//3#0p|\/|3|\|7

Email
Ответ #13 : 15 Август 2006, 23:03

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

[Wiki - коммьюнити сайт анта] h77p://10.4.4.124/1nf0/
[IRC] h77p://10.4.4.124/1r(/
Молодой модератор применяет наказания для самоутверждения.
Зрелый - для поддержания порядка. Старый - забывает применять...
Страниц: [1] 2  Все   Вверх
  Печать  
 
Перейти в:  

Powered by SMF 1.1.21 | SMF © 2006-2009, Simple Machines
Text only version | PDA version