roboforum.ru

Технический форум по робототехнике.
Текущее время: 26 ноя 2024, 19:23

Часовой пояс: UTC + 4 часа




Начать новую тему Ответить на тему  [ Сообщений: 30 ]  На страницу 1, 2  След.
Автор Сообщение
 Заголовок сообщения: Организация передачи данных по COM-порту
СообщениеДобавлено: 24 фев 2016, 19:29 
Не в сети
Аватара пользователя

Зарегистрирован: 29 янв 2016, 11:56
Сообщения: 49
Откуда: Нижний Новгород
Всем привет!

Подскажите с огранизацией протокола передачи данных по COM-порту.
Есть Arduino Nano (со своим скетчем) и PC (например реализация в MATLAB, это не суть важно).
Arduino считывает данные с трёх аналоговых пинов (по типу analogRead(A0)) и непрерывно передаёт в Serial COM-порт.
Это:
1) управляющее напряжение источника питания фотоумножителя (положительные 0-5 Вольт)
2) реальное напряжение источника питания (оно через инвертор ОУ от 0 до минус 800 Вольт конвертируется в положительные 0-5 Вольт)
3) питания с выхода фотоумножителя (оно через инвертор ОУ от 0 до минус 40 Вольт конвертируется в положительные 0-5 Вольт)
Т.е. с Ардуино на PC в COM-порт отдаётся три потока с цифрами напряжений, их нужно как то разделять при приёме на PC.
С PC на Ардуино в COM-порт тоже может придти информация для выставления уровня ШИМ.
Т.е. эта информация должна разбираться только в скетче Ардуины.

На ум приходит такое решение. С Ардуины идут непрерывно пакеты в виде "SupplyControlVoltage:2,35", "SupplyOutputVoltage:3,86" и "PTMVoltage:1,67"
С компа может придти например: "FromPCSupplyControlVoltage:1,89".

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

Спасибо!


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Организация передачи данных по COM-порту
СообщениеДобавлено: 24 фев 2016, 19:43 
Не в сети
Аватара пользователя

Зарегистрирован: 15 ноя 2009, 13:37
Сообщения: 750
Откуда: Porto Franco "Odessa"
шлите интом все что читаете 512;768;312 и перевод строки ... на стороне компа приводите к уровню 5 вольт и делайте расчет

_________________
die Wahrheit ist irgendwo da draußen


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Организация передачи данных по COM-порту
СообщениеДобавлено: 24 фев 2016, 20:07 
Не в сети
скрытый хозяин вселенной :)
Аватара пользователя

Зарегистрирован: 18 сен 2006, 12:26
Сообщения: 18018
Откуда: Тверь по прозвищу Дверь
прог. языки: псевдокод =) сила в алгоритме!
ФИО: глубокоуважаемый Фёдор Анатольевич
поддерживаю
нафиг лишние сложности, считал напряжение и как есть выдал его по уарту в компьютер, без лишних преобразований в вольты.
аналогично в обратную сторону, ардуине твои буквы нафиг не нужны.

_________________
<telepathmode>На вопросы отвечает Бригадир Телепатов!</telepathmode>
Всё уже придумано до нас!


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Организация передачи данных по COM-порту
СообщениеДобавлено: 25 фев 2016, 00:41 
Не в сети
Аватара пользователя

Зарегистрирован: 04 фев 2014, 13:53
Сообщения: 448
Откуда: Комсомольск-на-Амуре
прог. языки: машинные коды
ФИО: Иван Иваныч
Я так понимаю, что нужно не просто передать эти значения в монитор IDE Arduino. На стороне ПК будет работать какая то программа принимающая эти данные обрабатывающая их и передающая управляющие воздействия обратно в Arduino?
Если это так, то действительно без протокола не обойтись, иначе будут теряться данные, переполняться буфер и вообще не будет понятно какие значения находятся в буфере не данные момент.
Для решения вашей задачи имеется два пути:
1. написать собственный протокол обмена
2. воспользоваться готовым решением.
В первом случае придется писать модули приемо-передатчика как на стороне ПК, так и на стороне Arduino. При этом, нужно продумать последовательность обмена. На передающей стороне вместе с данными передавать какие то дополнительные признаки, типа начала и конца пакета с данными, и не передавать очередной пакет пока принимающая сторона не подтвердит получение текущего пакета. В общем задача не очень сложная, но при этом нужно четко представлять себе как работает асинхронный обмен данными.
Во втором варианте все на много проще - вы берете готовую библиотеку для Arduino, например "messenger" (на всякий случай прикрепил ее) и обмениваетесь из своего приложения с Arduino текстовыми сообщениями в которых содержатся ваши данные и еще некоторая служебная информация. С ней разобраться не трудно рассмотрев примеры имеющиеся в самой библиотеке. Удачи!


Вложения:
messenger.rar [11.18 КиБ]
Скачиваний: 0
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Организация передачи данных по COM-порту
СообщениеДобавлено: 25 фев 2016, 12:30 
Не в сети
скрытый хозяин вселенной :)
Аватара пользователя

Зарегистрирован: 18 сен 2006, 12:26
Сообщения: 18018
Откуда: Тверь по прозвищу Дверь
прог. языки: псевдокод =) сила в алгоритме!
ФИО: глубокоуважаемый Фёдор Анатольевич
ага, ты ещё посоветуй CRC считать и зашифрованное соединение устанавливать, чтоб 3 цифры по уарту передать.

_________________
<telepathmode>На вопросы отвечает Бригадир Телепатов!</telepathmode>
Всё уже придумано до нас!


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Организация передачи данных по COM-порту
СообщениеДобавлено: 25 фев 2016, 14:13 
Не в сети
Аватара пользователя

Зарегистрирован: 15 ноя 2009, 13:37
Сообщения: 750
Откуда: Porto Franco "Odessa"
лучше md5 или sha-1

_________________
die Wahrheit ist irgendwo da draußen


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Организация передачи данных по COM-порту
СообщениеДобавлено: 25 фев 2016, 14:53 
Не в сети

Зарегистрирован: 03 янв 2012, 12:55
Сообщения: 3298
Откуда: Москва
прог. языки: VB6, BASCOM, ASM...
ну с контролем данных никому хуже не бывало) контрольную сумму можно и считать...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Организация передачи данных по COM-порту
СообщениеДобавлено: 25 фев 2016, 15:03 
Не в сети
скрытый хозяин вселенной :)
Аватара пользователя

Зарегистрирован: 18 сен 2006, 12:26
Сообщения: 18018
Откуда: Тверь по прозвищу Дверь
прог. языки: псевдокод =) сила в алгоритме!
ФИО: глубокоуважаемый Фёдор Анатольевич
главное чтобы ничё не сгорело за то время пока ардуина эту контрольную сумму будет вычислять)))

_________________
<telepathmode>На вопросы отвечает Бригадир Телепатов!</telepathmode>
Всё уже придумано до нас!


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Организация передачи данных по COM-порту
СообщениеДобавлено: 25 фев 2016, 19:46 
Не в сети
Аватара пользователя

Зарегистрирован: 15 ноя 2009, 13:37
Сообщения: 750
Откуда: Porto Franco "Odessa"
... идеальный вариант ! подписывать пакеты RSA-1024 !!! никто не перехватит , очень сильно увеличим защищенность канала!

_________________
die Wahrheit ist irgendwo da draußen


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Организация передачи данных по COM-порту
СообщениеДобавлено: 26 фев 2016, 01:09 
Не в сети
Аватара пользователя

Зарегистрирован: 04 фев 2014, 13:53
Сообщения: 448
Откуда: Комсомольск-на-Амуре
прог. языки: машинные коды
ФИО: Иван Иваныч
Человеку нужно организовать простой и надежный способ передачи потоков данных от адуино в ПК и обратно, и в этом случае без разработки или использования готового протокола не обойтись. Ему не нужно шифрование а CRC вычисляется и так без нашего участия. Нам лишь нужно синхронизировать прием/передачу через порт, без потери данных.
И с каких это мы пор с вами на "ты " перешли?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Организация передачи данных по COM-порту
СообщениеДобавлено: 26 фев 2016, 09:43 
Не в сети
Аватара пользователя

Зарегистрирован: 15 сен 2007, 13:03
Сообщения: 6338
Откуда: Красноярск
прог. языки: ASM(МК), C(PC)
ФИО: Гагарский Андрей Александрович
Myp писал(а):
главное чтобы ничё не сгорело за то время пока ардуина эту контрольную сумму будет вычислять)))

ну XOR то и правда сложно считать на дуине..

_________________
«Как сердцу выразить себя? … Мысль изреченная есть ложь!»
В этом мире меня подводит доброта и порядочность...
"двое смотрят в лужу, один видит лужу, другой отраженные в ней звезды"


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Организация передачи данных по COM-порту
СообщениеДобавлено: 26 фев 2016, 11:57 
Не в сети

Зарегистрирован: 03 янв 2012, 12:55
Сообщения: 3298
Откуда: Москва
прог. языки: VB6, BASCOM, ASM...
да, бурги (даже в коммерческих проектах) халтурят и вместо КС используют ксор :D


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Организация передачи данных по COM-порту
СообщениеДобавлено: 26 фев 2016, 12:55 
Не в сети
скрытый хозяин вселенной :)
Аватара пользователя

Зарегистрирован: 18 сен 2006, 12:26
Сообщения: 18018
Откуда: Тверь по прозвищу Дверь
прог. языки: псевдокод =) сила в алгоритме!
ФИО: глубокоуважаемый Фёдор Анатольевич
lori писал(а):
Человеку нужно организовать простой и надежный способ передачи потоков данных от адуино в ПК и обратно
ага, это значит что нужно просто передавать 3 числа через точку с запятой по уже имеющемуся протоколу, uart сам по себе достаточно простой и надёжный.
незачем запихивать эти 3 цифры ещё и во второй протокол.
lori писал(а):
И с каких это мы пор с вами на "ты " перешли?

ты в интернете, тут все на ты. :D

_________________
<telepathmode>На вопросы отвечает Бригадир Телепатов!</telepathmode>
Всё уже придумано до нас!


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Организация передачи данных по COM-порту
СообщениеДобавлено: 27 фев 2016, 02:55 
Не в сети
Аватара пользователя

Зарегистрирован: 04 фев 2014, 13:53
Сообщения: 448
Откуда: Комсомольск-на-Амуре
прог. языки: машинные коды
ФИО: Иван Иваныч
Myp писал(а):
это значит что нужно просто передавать 3 числа через точку с запятой по уже имеющемуся протоколу, uart сам по себе достаточно простой и надёжный.
незачем запихивать эти 3 цифры ещё и во второй протокол.

SpaceQuester ставит конкретную задачу, не просто передать пакеты данных через COM-порт, а еще и обработать их и подать обратное управление в контроллер. И обрабатывать их будет не человек, а какая то программа, а программа должна понимать, что за данные она получила, и что это именно те данные которые ей нужны, а затем сформировать ответ и переслать его обратно. При этом и контроллер, в свою очередь, тоже должен понять что за информация в него поступила. И здесь речь идет не о низкоуровневом UART, а о протоколе более высокого уровня. К примеру, упрощенно, вам нужно передать число "3,25", после передачи посредством UART у вас в буфере окажется три байта данных содержащих следующие ASCI-символы "3" "," "2" "5" и что дальше с ними делать прикажете? А дальше ваша программа должна извлечь эти байты из буфера, "понять", что это именно те данные которые предназначены для нее, превратить эти ASCI коды обратно в число 3,25 принять какое то решение и вернуть управляющее воздействие в контроллер, опять же в виде какого то числа или строки. А вот UART, как раз, обеспечит передачу этого числа или строки в контроллер. На стороне контроллера должна произойти аналогичная операция по декодированию принятой информации.
Мур, похоже вы не очень в теме. Почитайте теорию. UART это низкоуровневый протокол, который развернет ваши байты в длинную цепочку битов и передаст их без потерь и искажений. UART это асинхронный приемо-передатчик, он обеспечивает передачу данных между приемником и передатчиком и поместит эти данные в буфере приемника, а вот что с ними дальше то делать? Расскажите подробнее если знаете!? Как их оттуда извлечь? Как понять что за байты вы получили? У вас в буфере окажется "куча" бессмысленной и не связанной, на первый взгляд, информации состоящей из переданных передатчиком байт данных. Как понять где закончится первый пакет и начнется второй, третий, четвертый, а при этом учтите разность в быстродействии ПК и ардуино. Кто то из них "напихает" в буфер кучу пакетов, при этом второй не успеет прочитать, произойдет переполнение буфера, данные могут потеряться. Вы вообще пробовали передать данные с контроллера в ПК и обратно? И не просто увидеть цифры в окне терминала, а передать в работающую программу, при этом это должен быть не один единственный байт, а бесконечный поток пакетов данных, при чем проходящий в обе стороны. Затем, как-то обработать их и вернуть ответ в контроллер. Если нет, то попробуйте. И с вашим НЕпониманием в этом вопросе все встанет на свои места.

Да и вообще, что мы тут полемику развели между собой? Где сам SpaceQuester, который тему поднял? SpaceQuester, что молчишь?

Ну, а по поводу "ты в интернете", скажу ТЕБЕ так - это ТЫ в "интернете", а у меня все в порядке :D


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Организация передачи данных по COM-порту
СообщениеДобавлено: 27 фев 2016, 20:49 
Не в сети
Аватара пользователя

Зарегистрирован: 30 сен 2008, 18:49
Сообщения: 2681
Откуда: Где-то в Латинской Америке
Правильно. UART - это только один из способов передачи байта данных. А что с ним делать дальше, тут зависит от задачи. Если на стороне МК происходят события, требующие срочного вмешательства со стороны ПК, то это один случай. В описаной задаче, мне кажется, достаточно чтобы МК выдавал свой пакет данных по циклическому запросу от ПК, а не просто посылал их со страшной скоростью в неизвестность. В этом же запросе может быть зашита и команда для МК. И XOR вместо полноценной КС, это весьма простой и надежный способ. Я всегда им пользуюсь.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 30 ]  На страницу 1, 2  След.

Часовой пояс: UTC + 4 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 10


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
phpBB SEO