Работа с COM портом

Подключаем наши девайсы к компьютеру. Обсуждаются: порты, протоколы, драйвера, языки программирования и т.д.
Ответить
Прорезались зубы
Аватара пользователя
Сообщения: 213
Зарегистрирован: Ср дек 15, 2010 14:37:38

Сообщение gdoom »

Добрый день товарищи, подскажите с чего начать - пытаюсь разобраться как работать с COM портом, приём и передача данных - но литературы много и информации с чего лучше копать? В итоге нужно, что бы в программе написанной на Microsoft Visual Studio с++ я мог получать данные с кажем с датчика температуры, и посылал команду при достижении температуры на включение тэна. Это самое простое пока хочется освоить. :oops: Я понимаю на avr это просто как два пальца, но хочется освоить именно интеграцию с ПК и пока, что COM т.к USB пока сложновато...
Реклама
Мудрый кот
Аватара пользователя
Сообщения: 1817
Зарегистрирован: Пн ноя 29, 2010 15:58:43

Сообщение igor-x »

разделите свою задачу на две:
1. подготовка данных с датчика и передача этих данных в формате UART , пребразование в уровни RS232 .
2. прием данных с СОМ порта на ПК и визулизация (или сохранение) данных на компе.

каждая задача может быть отлажена по отдельности. например когда сделали устройство передающее данные на комп по RS232 , эти данные можно принять программками предназначенными для работы с эти портом (я предпочитаю PUTTY).
после этого можно переходить в VS для обработки принимаемых данных.
вот как то так ?
Реклама
Друг Кота
Аватара пользователя
Сообщения: 7016
Зарегистрирован: Вс июл 12, 2009 19:15:29
Откуда: Ижевск

Сообщение pyzhman »

gdoom писал(а):...получать данные с кажем с датчика температуры...на avr это просто как два пальца,.
Подключить датчик (тот же температурный) к AVR и уже с него гнать в комп. Ну а в компе делать с ними всё, что заблагорассудится.
Docendo discimus
Контактная информация:
Прорезались зубы
Аватара пользователя
Сообщения: 213
Зарегистрирован: Ср дек 15, 2010 14:37:38

Сообщение gdoom »

igor-x писал(а):разделите свою задачу на две:
1. подготовка данных с датчика и передача этих данных в формате UART , пребразование в уровни RS232 .
2. прием данных с СОМ порта на ПК и визулизация (или сохранение) данных на компе.

каждая задача может быть отлажена по отдельности. например когда сделали устройство передающее данные на комп по RS232 , эти данные можно принять программками предназначенными для работы с эти портом (я предпочитаю PUTTY).
после этого можно переходить в VS для обработки принимаемых данных.
вот как то так ?
ну да тут я согласен.
тогда сразу возникают вопросы:
1) можете ткнуть носом на примеры устройств.....
2) непосредственно на программу желательно с исходниками где описывается сам процесс приёма и передачи данных. - скажем зажечь лампочку если пришёл сигнал внешний от выключателя.
сохранение и обработка и отображение - это достаточно тривиально простые задачи, уже знаю как можно решить.
pyzhman писал(а):
gdoom писал(а):...получать данные с кажем с датчика температуры...на avr это просто как два пальца,.
Подключить датчик (тот же температурный) к AVR и уже с него гнать в комп. Ну а в компе делать с ними всё, что заблагорассудится.
такой вариант пока не хочется рассматривать.
Реклама
Эиком - электронные компоненты и радиодетали
Открыл глаза
Сообщения: 60
Зарегистрирован: Пт янв 11, 2013 10:54:43

Сообщение Vano79 »

gdoom писал(а): с датчика температуры
Что за датчик?
gdoom писал(а): и посылал команду при достижении температуры на включение тэна
Кому и какую команду посылал?
PS
хочется освоить именно интеграцию с ПК
С нуля задача трудоемкая и значительно упрощается при использовании мк.
Реклама
Встал на лапы
Сообщения: 145
Зарегистрирован: Ср фев 01, 2012 10:55:53

Сообщение BorisSPB »

Самое сложное в этой задаче это получить имя последовательного порта которое можно использовать для открытия файла CreateFile.
Многие используют наивный подход, добавляя к базовому имени \\.\COM последовательные индексы. Более продвинутые сканируют ветку реестра HKEY_LOCAL_MACHINE\HARDWARE\DEVICEMAP\SERIALCOMM.
Однако самое правильное, IMHO, это использование функций из группы SetupDi. Найти интерфейс с требуемым GUID (GUID_DEVINTERFACE_COMPORT), получить DEVICE_INTERFACE_DETAIL_DATA и открыть файл. Все остальное совсем просто, правда если чтение-запись делать в одном потоке, надо настроить COMMTIMEOUTS так чтобы операция чтения завершалась по таймауту.
Вообще у Microchip'а в примерах есть исходники в которых все эти моменты можно посмотреть. Можно у них скачать MLA.
Реклама
Встал на лапы
Сообщения: 82
Зарегистрирован: Чт мар 22, 2012 20:28:49

Сообщение ddimochka »

Для освоения программной части работы с COM-портом советую воспользоваться следующей связкой программ. Proteus - Программа для моделирования электронных схем с возможностью эмуляции работы микроконтроллеров AVR. VSPE - программа для создания виртуальных COM-портов, к которым можно приконнектиться из любой программы. COM Port Toolkit - программа-терминал для приема/передачи байтов через COM-порт. Пишем программу для МК, создаем необходимую схему в Proteus с использованием элемента COMPIM. В программе VSPE создаем пару виртуальных COM-портов связанных между собой. Далее элемент COMPIM в Proteus соединяем с одним из созданных портов, а COM Port Toolkit со вторым. Отлаживаем программу МК. Потом пишем необходимую программу для компьютера и используем её вместо COM Port Toolkit.

Вот такой общий алгоритм действий. По каждому из этих пунктов могу проконсультировать отдельно, если потребуется. Пиши в личку.
Мудрый кот
Аватара пользователя
Сообщения: 1817
Зарегистрирован: Пн ноя 29, 2010 15:58:43

Сообщение igor-x »

1) можете ткнуть носом на примеры устройств.....
да примеров просто немеряно если полазить гуглом, ну вот несложный пример:
http://denialmedia.ca/weather-station/
на первый взгляд чтото очень сложное - но на самам деле всего один чип Atmega32 читает данные с датчика (ов) ,
и передает по СОМ порту на комп. На компе
- обработка и даже то что вы считаете очень простым -сохранение и отображение :))
в приведенном примере есть исходники для прошивки МК , и комповой программы.
Прорезались зубы
Аватара пользователя
Сообщения: 213
Зарегистрирован: Ср дек 15, 2010 14:37:38

Сообщение gdoom »

ddimochka писал(а):Для освоения программной части работы с COM-портом советую воспользоваться следующей связкой программ. Proteus - Программа для моделирования электронных схем с возможностью эмуляции работы микроконтроллеров AVR. VSPE - программа для создания виртуальных COM-портов, к которым можно приконнектиться из любой программы. COM Port Toolkit - программа-терминал для приема/передачи байтов через COM-порт. Пишем программу для МК, создаем необходимую схему в Proteus с использованием элемента COMPIM. В программе VSPE создаем пару виртуальных COM-портов связанных между собой. Далее элемент COMPIM в Proteus соединяем с одним из созданных портов, а COM Port Toolkit со вторым. Отлаживаем программу МК. Потом пишем необходимую программу для компьютера и используем её вместо COM Port Toolkit.

Вот такой общий алгоритм действий. По каждому из этих пунктов могу проконсультировать отдельно, если потребуется. Пиши в личку.
- спасибо! :shock: не думал что можно такое замутить с Proteus....
igor-x писал(а):
1) можете ткнуть носом на примеры устройств.....
да примеров просто немеряно если полазить гуглом, ну вот несложный пример:
http://denialmedia.ca/weather-station/
на первый взгляд чтото очень сложное - но на самам деле всего один чип Atmega32 читает данные с датчика (ов) ,
и передает по СОМ порту на комп. На компе
- обработка и даже то что вы считаете очень простым -сохранение и отображение :))
в приведенном примере есть исходники для прошивки МК , и комповой программы.
С МК не хочу связыватсья, так как потом будет мк участвовать в этом:
http://kibermaster.net/upravlenie-elekt ... pyami-che/
решил начать пока без МК - и с СОМ так как хочется освоить это в начале....
Vano79 писал(а):
gdoom писал(а): с датчика температуры
Что за датчик?
gdoom писал(а): и посылал команду при достижении температуры на включение тэна
Кому и какую команду посылал?
PS
хочется освоить именно интеграцию с ПК
С нуля задача трудоемкая и значительно упрощается при использовании мк.
это простой пример - который я взял из головы.... Если расписывать на компе стоит программа где ставим температуру при которой включать тэн и он работает пока температура не поднимется до установленной, датчик тут думать нужно - типа DS.
Прорезались зубы
Аватара пользователя
Сообщения: 213
Зарегистрирован: Ср дек 15, 2010 14:37:38

Сообщение gdoom »

НУ пока накопал вот интересный материал - отсюда уже можно, что то сделать:
http://www.kernelchip.ru/pcports/PS054.php
- но мне не понравилось

но вот что то есть живое:
http://www.labkit.ru/html/autocontrol?id=136
- но всё упрётся уже в Microsoft Visual Studio С++ - так как исходника нет :cry: а было бы здорово посмотреть, что там... . Но остаётся разобраться с работой СОМ глубже как я понял....
Друг Кота
Аватара пользователя
Сообщения: 3385
Зарегистрирован: Пн окт 11, 2010 19:00:08

Сообщение Мурик »

gdoom писал(а):я мог получать данные с кажем с датчика температуры
С какого? Например DS18B20?
Можете посмотреть журнал Радио №1 2015. Там есть статья о работе с подобными датчиками через COM порт (в т. ч. виртуальный). Компонент приложения используемый в статье. ftp://ftp.radio.ru/pub/2015/01/OWire.zip
Его можно подключить к проекту VS и использовать для чтения температуры. Преимущество в том что не нужно знать как работать с COM портом и датчиком. Все это берет на себя компонент. А если все же хочется разобраться как это работает, можно посмотреть исходник компонента - файл OWire_Module.pbi находящийся в папке Library\Src.
gdoom писал(а):USB пока сложновато...
Ну я бы так не сказал бы. Смотрите журнал Радио №4 2011. Там есть статья о работе с USB HID, а также компонент приложения, который сможете подключить к проекту VS C++.
Последний раз редактировалось Мурик Чт июн 25, 2015 13:55:19, всего редактировалось 2 раза.
Открыл глаза
Сообщения: 60
Зарегистрирован: Пт янв 11, 2013 10:54:43

Сообщение Vano79 »

gdoom писал(а):остаётся разобраться с работой СОМ глубже как я понял....
поэтому и говорю - процесс трудоемкий, если с нуля. Если только компорт начните с
Агуров П. "Последовательные интерфейсы ПК. Практика программирования".
Гугл в помощь, исходников на VC++ море.
Друг Кота
Сообщения: 13796
Зарегистрирован: Чт сен 20, 2007 14:08:00

Сообщение kalobyte »

gdoom писал(а):решил начать пока без МК - и с СОМ так как хочется освоить это в начале..
без мк ком порт "не работает"
либо тебе надо будет ставить специальный софт для создания виртуального порта, чтобы соединить твой софт и терминал, который будет показывать тебе работу твоей проги

алгоритм работы с портом такой
открыть порт с параметрами скорости, например 9600 (там еще есть опции контроля передачи)
отправить байт в порт или принять
слушать порт на наличие данных
закрыть его, когда закрываеш приложение или по кнопке

слушание порта делается в главном цикле, если софт однопоточный или по таймеру
есть еще готовые библиотеки для работы с портами и они могут предоставлять более удобные механизмы взаимодействия с портом

а насчет управления и команд, то ты сам п ридумываеш протокол
например контроллер тебе шлет с датчика температуру в виде t 25
ты ищеш в строке подстроку в виде буквы t и понимаеш, что дальше следует число и это интерпретируется как температура

на стороне контроллера примерно так же
вот пример http://sheepdogguides.com/dt4t.htm
тематические ответы только в форуме, в приват не пишите
Друг Кота
Аватара пользователя
Сообщения: 3385
Зарегистрирован: Пн окт 11, 2010 19:00:08

Сообщение Мурик »

kalobyte писал(а):без мк ком порт "не работает"
Т. е. если подключить DS18B20 к COM порту - работать не будет? :)))
DS это не МК, что уже противоречит высказыванию. Наверное его стоит перефразировать в "без чего-либо, подключенного к порту это бессмысленно, т. к. данные отправляются в никуда и нечего принимать кроме помех". :)
abc
Друг Кота
Аватара пользователя
Сообщения: 3688
Зарегистрирован: Чт мар 20, 2008 01:06:40
Откуда: Севастополь

Сообщение abc »

К ком-порту можно подключать разные датчики напрямую, используя пины DTR/RTS/CTS и "дрыгая" ими из своей программы.
Разумеется, надо согласовывать уровни.
Получается не совсем по-людски, но работает нормально (во всяком случае, в ВинХП и более старых виндах).
Напр, вот схема подключения АЦП MCP3550 :

Изображение
>(*.*)<
Котище огромно, ушасто, пушисто, глазасто, зубасто, колючелапо и мявай. (c)
Прорезались зубы
Аватара пользователя
Сообщения: 213
Зарегистрирован: Ср дек 15, 2010 14:37:38

Сообщение gdoom »

Мурик писал(а):
kalobyte писал(а):без мк ком порт "не работает"
Т. е. если подключить DS18B20 к COM порту - работать не будет? :)))
DS это не МК, что уже противоречит высказыванию. Наверное его стоит перефразировать в "без чего-либо, подключенного к порту это бессмысленно, т. к. данные отправляются в никуда и нечего принимать кроме помех". :)
ну вот http://www.kernelchip.ru/pcports/PS054.php
и цитата:

Код: Выделить всё

С аппаратной частью нам тоже придется "повозиться", в том смысле что она будет сложнее чем с первым устройством для LPT порта. Дело в том что протокол RS-232 по которому идет обмен данными в COM порту, имеет несколько отличное соотношение логическое состояние - напряжение. Если обычно это логический 0 <-> 0 В, логическая 1 <-> +5 В, то в RS-232 это соотношение следующее: логический 0 <-> +12 В, логическая 1 <-> -12 В.

И например, получив -12 В не сразу понятно что с этим напряжением делать. Обычно проводят преобразование уровней RS-232 в ТТЛ (0, 5 В). Самый простой вариант - стабилитроны. Но я предлагаю сделать этот преобразователь на специальной микросхеме. Называется она MAX232.
вот пример - только проблема согласования, дёшево и сердито :hunger:
Друг Кота
Сообщения: 13796
Зарегистрирован: Чт сен 20, 2007 14:08:00

Сообщение kalobyte »

Мурик писал(а):Т. е. если подключить DS18B20 к COM порту - работать не будет?
как повезет, для любительских целей может и будет работать, я не пробовал
тематические ответы только в форуме, в приват не пишите
abc
Друг Кота
Аватара пользователя
Сообщения: 3688
Зарегистрирован: Чт мар 20, 2008 01:06:40
Откуда: Севастополь

Сообщение abc »

kalobyte писал(а): я не пробовал
но при этом - сразу , безапелляционно :
kalobyte писал(а):без мк ком порт "не работает"
ну так и чО сразу лезть в тему с ТАКИМИ советами, если нет своего опыта и твое мнение - чисто умозрительное ?

Да и по поводу "любительских целей" ты снова не попал.
Вот схема вполне заводского девайса, продававшегося миллионными тиражами :

Изображение
>(*.*)<
Котище огромно, ушасто, пушисто, глазасто, зубасто, колючелапо и мявай. (c)
Друг Кота
Сообщения: 13796
Зарегистрирован: Чт сен 20, 2007 14:08:00

Сообщение kalobyte »

abc писал(а):ну так и чО сразу лезть в тему с ТАКИМИ советами, если нет своего опыта и твое мнение - чисто умозрительное ?
потому что делал программатор по такому же принципу
если он там в старых системах работал, то в новых тайминги не совпадали и нихера не работало

а серийный девайс этот то же гавно древнее, у меня был такой, только там стояла специальная мс - железный адаптер под ком порт и эту шину, стоил дороже намного

а так автор начнет использовать порт в ненормальном режиме, у него нихера не заработает и будет он потом плеваться и материть все подряд
тематические ответы только в форуме, в приват не пишите
abc
Друг Кота
Аватара пользователя
Сообщения: 3688
Зарегистрирован: Чт мар 20, 2008 01:06:40
Откуда: Севастополь

Сообщение abc »

Т.е. конкретно у тебя не заработал программатор ? И это повод говорить, что ком-порт без МК не работает ?
Охренеть...
Но тот самый MCP3550 у меня работал на XP 24/7 в теч. трех месяцев. А у тысяч людей - таблетки DS1990 в паре с DS9097.
Да и о чем спрашивает ТС в своем первом сообщении - о конкретно твоем программаторе или о датчиках вообще ?
>(*.*)<
Котище огромно, ушасто, пушисто, глазасто, зубасто, колючелапо и мявай. (c)
Ответить

Вернуться в «Интеграция с ПК»