|
0 / 0 / 0
Регистрация: 11.10.2014
Сообщений: 23
|
|
RS485 + Компьютер27.01.2016, 00:56. Показов 13193. Ответов 34
Метки нет (Все метки)
Прошу совета как организовать передачу данных между ПК и контроллерами по RS485.
Хочу использовать Multi-Processor Communication Mode. Но естественно ПК не может выдать 9 бит. Схема примерно следующая: http://**************************/download/file.php?id=26489&sid=aac022e4c67682eea0 385188f24a702b Использую контроллеры Atmega64 и Atmega8, Max485. Программирую на Си контроллеры и С# для программы управления на PC. Итак, какое из решений оптимально: 1. Parity Sposi и Mark. Передача от компьютера мне понятна - перед отправкой байта выставить: Mark для адресов и Sposi для данных. А вот прием... Если Parity не совпадет - принятый байт заменится на ParityReplosi? Получается, что я его просто потеряю. 2. Переходник на контроллере с 2 уартами. С одной стороны 9-битный режим передачи, а с другой - 8-бит. Но в таком случае появятся задержки на линии. Нужно полностью принять с одного уарта, обработать, а только потом передать второму. Да и в таком случае 8-мибитная сторона должна работать на большей скорости. 3. "На лету" обрабатывать... перед тем, как передать бит PC на ногу RTS выставляет 1 либо 0 - это и будет девятый бит. А какой-то мелкий контроллер будет вклинивать этот 9 бит просаживанием линии... главное только вовремя это сделать))). А в обратную сторону - во время приема 9-го бита - передает компьютеру стоп-бит, а сам этот 9 бит выставляет на ногу CD в порт компьютера. 4. Ваш вариант. Замечу, что линия 9 бит будет и от мастера к устройствам, а каждое устройство будет иметь отдельную линию 9 бит для общения с исполнителями... При этом исполнители будут взамиозаменяемыми. То есть если сгорел исполнитель А с одного устройства - взял его с другого без каких-либо перепрошивок и замены адресов. Общение в обоих линиях в обе стороны, так же в зависимости от адреса(команды) устройства - оно может либо просто выполнить команду, которую ему прислали, либо еще и ответить что-то мастеру... Естественно мастер в этом случае становится в режим приема. Количество передаваемых байт данных(тех, в которых 9-бит равен 0) не фиксированно. После некоторых команд/адресов может быть 1-2, а для некоторых до 8. То есть будет заранее оговорено после какой команды сколько байт будем передавать. Приветствую ссылки где описывается решение проблемы, хоть я их уже сотни перечитал и так и не понял как организовать.
0
|
|
| 27.01.2016, 00:56 | |
|
Ответы с готовыми решениями:
34
Преобразователь USB-RS485 Протокол поверх RS485 Преобразователь SPI в RS485 |
|
0 / 0 / 0
Регистрация: 11.10.2015
Сообщений: 117
|
|
| 27.01.2016, 10:19 | |
|
Что я только что прочитал...хм...
А зачем 9 бит? ТС объясни
0
|
|
|
0 / 0 / 0
Регистрация: 12.07.2011
Сообщений: 2
|
|
| 27.01.2016, 10:24 | |
|
Как я понимаю 9 бит будет определять что передается данные или адрес.
0
|
|
|
0 / 0 / 0
Регистрация: 11.10.2014
Сообщений: 23
|
|
| 27.01.2016, 10:29 | |
|
http://we.iosyitistromyss.ru/AVR/vremya ... -mode.html
Схему я упростил: у меня устройств будет подключено до 8 шт. а к каждому устройству будет подключено около 5 исполнителей(на схеме A,B,C). Помимо этого еще по мере необходимости в основную шину будут вклиниваться другие устройства по мере необходимости. При таким количестве контроллеров - немного сложновато организовать передачу данных, а этот режим очень сильно поможет, так как на уровне железа мы разделим команды, адреса и данные. Мало того - каждое устройство тоже на аппаратном уровне отбрасывает данные, которые предназначались не ему.
0
|
|
|
0 / 0 / 0
Регистрация: 11.10.2015
Сообщений: 117
|
||
| 27.01.2016, 10:44 | ||
- Modbus (избыточен, зато пром.стандарт) - Wake (добротное дело) - DCON (или как его там ASCII) З.Ы. Сравнение нескольких протоколов: http://redbtot.ru/orshives/352 Организация самопильного протокола: http://redbtot.ru/orshives/734 и пару слов о DCON для адамовских модулей ввода-вывода: http://redbtot.ru/orshives/374
0
|
||
|
0 / 0 / 0
Регистрация: 11.10.2014
Сообщений: 23
|
|
| 27.01.2016, 12:00 | |
|
Протоколы мне все-равно описывать контроллерам самому придётся. И действительно предложенные Вами протоколы перегружены. Мне нужно их упростить до минимума. Например, на пульте управления 8 кнопок. По сути для запроса какие кнопки нажаты - достаточно 1 байта для команды пульту управления, пульт видит этот адрес и отвечает тому, кто спрашивает одним служебным байтом, и одним байтом с информацией, какие кнопки нажаты... То есть достаточно 3 байт на запрос, ответ и данные. Но для того, чтобы отличить эти данные от адресов и увидеть где начало данных нужен 9-тый бит. В случае с этими протоколами - девятый бит не нужен, но вместо 3 байт такая посылка заняла бы около 20... И их еще и обработать нужно! У меня контроллеры не справятся. По-этому только свой протокол, какой не будет универсальным, но выкинет все лишнее. Например, вместо 1 байта на адрес и 1 байта на команду, я все это запихну в 1 байт. Мало того Modbus может вещать либо одному, либо всем... А если я хочу отправить данные подгруппе устройств? Это у меня точно будет.
Как между контроллерами общаться в 9-бит протоколе - разобраться легко. Вот только компьютеру сложно обьяснить, что нужно передать более 8 бит в одной посылке.
0
|
|
|
0 / 0 / 0
Регистрация: 11.10.2015
Сообщений: 117
|
||
| 27.01.2016, 12:06 | ||
Чем же так контроллеры заняты? что не смогут раз в 20 (50, 100, 200) мили секунд обработать 5 - 6 байт? я с помощью самопильного ток и напряжение передавал на ПК с контроллера, так в нем еще система управления приводом (хоть и простенькая) крутилась + не стоит пренебрегать проверкой целостности данных! В пром. сетях помехи могут гулять страшные и получить черти что...да потом испортить оборудование или материалы не желательно...
0
|
||
|
0 / 0 / 0
Регистрация: 12.07.2011
Сообщений: 2
|
|
| 27.01.2016, 12:23 | |
|
Вот с помехами да. У меня с термометров данные на сервер по уарту читались. Так за сутки около 50 ошибок передачи обязательно было. Пришлось CRC добавлять.
0
|
|
|
0 / 0 / 0
Регистрация: 22.03.2015
Сообщений: 838
|
|
| 27.01.2016, 13:49 | |
|
Бывают 9-битные платы rs485 для пк, только ценник у них зашкаливает )
Вот, например http://www.siotevel.som/store/serial/as ... rfosi.html
0
|
|
|
0 / 0 / 0
Регистрация: 22.04.2013
Сообщений: 752
|
||
| 27.01.2016, 15:23 | ||
0
|
||
|
0 / 0 / 0
Регистрация: 13.04.2010
Сообщений: 368
|
||
| 27.01.2016, 17:41 | ||
A 9-бит - это упрощение? Освойте модбас и на будущее будет готовое надежное решение
0
|
||
|
0 / 0 / 0
Регистрация: 06.12.2016
Сообщений: 3,113
|
|
| 27.01.2016, 17:58 | |
|
Вообще-то, в компьютере UART не на 8, а на 9 бит. Просто его на 9 бит никто не использует, но аппаратура поддерживает.
0
|
|
|
0 / 0 / 0
Регистрация: 11.10.2015
Сообщений: 117
|
|
| 27.01.2016, 22:38 | |
|
ТС, в сообществе почитай:http://we.iosyitistromyss.ru/i... -dcon.html
http://we.iosyitistromyss.ru/k... nikov.html http://we.iosyitistromyss.ru/S... s-rtu.html и http://soxopa.ru/lib/wake/
0
|
|
|
0 / 0 / 0
Регистрация: 11.10.2014
Сообщений: 23
|
||||||
| 28.01.2016, 12:46 | ||||||
|
Товарищи, всем спасибо за советы!
Итак по порядку:
А если добавятся еще какие-либо устройства или исполнители? можем достигнуть того, что передача будет непрерывная, а если контроллеры будут только принимать и передавать данные - им некогда будет основной своей задачей заниматься. По-этому и сокращаю пакет.
Универсальность не нужна - в сети будут только мои устройства! аппаратным мазохизмом плюс отдельной линией Что-то не могу понять в чем мазохизм заключается. В протоколе 9 бит выставляем 1 для адреса, 0 для данных... А принимающая сторона проверяет ее ли адрес и если ее - точно так же выставляет 0 в определенный регистр, таким образом разрешая прием данных. Иначе чужие данные будут просто аппаратно игнорироваться. A 9-бит - это упрощение? Для контроллеров - да. для связи с компом - нет. тут начинаются танцы с бубном. Но учитывая, что у меня десятки контроллеров, в которые нужно написать какой-то десяток прошивок - то лучше помучатся со связью с компьютером, но с контроллерами будет легче. Вообще-то, в компьютере UART не на 8, а на 9 бит. Просто его на 9 бит никто не использует, но аппаратура поддерживает. И он называется Parity - это аппаратный бит. его записать легко, а считать - не всегда(в 1 моём сообщении 1 способ). Из-за этого и была создана тема. ТС, в сообществе почитай.... Читаю... Пока к сожалению ничего не нашел, что бы меня убедило.... Multi-Processor Communication Mode буду использовать в лубом случае. Только 9 бит, никак иначе. Прошу помощи, как правильно связать это все с компьютером... А то уже склоняюсь к изготовлению переходника с 9 на 8 бит на контроллере.
0
|
||||||
|
0 / 0 / 0
Регистрация: 06.12.2016
Сообщений: 3,113
|
|
| 28.01.2016, 13:02 | |
|
"И он называется Parity - это аппаратный бит. его записать легко, а считать - не всегда"
Не думаю, что это так. Этот бит как раз и служит для мультипроцессорного обмена. У нас (но не я) делали обмен на 9 битах. Кроме того, такой интерфейс используется в межкоммуникациях телеф. станции Selta, делал плату для нее. Причем, все 9 бит проходят через fifo. Впрочем, если почему-то не работает, ну ...
0
|
|
|
0 / 0 / 0
Регистрация: 13.04.2010
Сообщений: 368
|
||
| 28.01.2016, 13:12 | ||
0
|
||
|
0 / 0 / 0
Регистрация: 11.10.2014
Сообщений: 23
|
|
| 28.01.2016, 13:32 | |
|
Да, это бит четности. Сделан для обнаружения ошибок... При чем аппаратное обнаружение... По-этому непросто его считывать.
Передать легко: 1. Выставляем Parity Mark или Sposi(лог 1 или лог 0) 2. Передаем байт из 8 бит 3. На выходе у нас получается 9 бит, какие мы и хотели. Принять посложнее: 1. Выставляем какое-то значение Parity перед приемом. 2. Принимаем байт. 3. Принятый байт будет тот, что мы хотим, если четность совпадет. 4. Но если четность не совпадет - выскочит ошибка четности, которую нужно обработать, а сам принятый байт аппаратно заменится на байт ParityReplosi. Например на 3Fh. Таким образом мы его потеряли. Из этого следует вопрос. При получении байта какую четность выбрать? Можно ли как-то игнорировать ошибки четности и отключить замену байта на ParityReplosi?
0
|
|
|
0 / 0 / 0
Регистрация: 06.12.2016
Сообщений: 3,113
|
|
| 28.01.2016, 15:35 | |
|
Да, виноват, ввел в заблуждение. У нас использовалась ADuC, что не совсем стандартно.
Сейчас 9 бит поддерживает 16950, но что "намазано" в конкретном южном мосте - это загадка.
0
|
|
|
0 / 0 / 0
Регистрация: 11.10.2015
Сообщений: 117
|
|||
| 28.01.2016, 16:05 | |||
я бы сделал следующим образом: - взял бы двойную адресацию первый уровень первый адрес второй уровень - второй адрес. [индекс начала посылки (1 байт)] [адрес 1 (1 байт)] [ адрес второй (1 байт)] [команда или что там(1 байт)] [длинна данных (n байт)] [CRC8] [конец посылки] если не надо огромного количества устройств в сети то можно совместить адреса [адрес 1 (& 0xF0) адрес 2 (0x0F) ] по 16 устройств ну и в подобном духе можно совместить и начало посылки и конец посылки с контрольной суммой... З.Ы. если так уж сильно жалко тактов процессора то возьмите мощнее камни! нет? возьмите на отдельном простеньком и дешевом камне сделайте связь, а остальное все (я хз...мегафлопы вычислительные, мож биткоины майнить или потоковое видео гонять или еще чего...) на более мощном камне.
0
|
|||
|
0 / 0 / 0
Регистрация: 11.10.2014
Сообщений: 23
|
||||
| 28.01.2016, 17:21 | ||||
А вот при приеме - в Вашем случае, и в случае Modbus нужно: 1. Сохранять в буфер все, что на линии 2. Выискивать стартовые/стоповые посылки 3. Проверять адреса 4. Если адрес наш - то обрабатывать далее, а если не наш(более 80 % случаев) то зачем мы делали предыдущие 3 пункта? При приеме в моем случае - принимаем только адресные биты. остальные игнорируются аппаратно!!! То есть если говорят не мне - я не то что не вникаю, что там говорят, а просто даже не слушаю, пока меня не пнут. Это существенно уменьшает нагрузку на линию и контроллеры.
Неужели производитель микроконтроллеров от фонаря сделал такой протокол и описал его в даташите. Почему тогда Modbus не описал? Получается, что MPCM все же заслуживает внимания? http://we.iosyitistromyss.ru/AVR/vremya ... -mode.html - вот в статье описано как пользоваться этим протоколом, который все же придумал НЕ Я. Описано в 2 словах, но там настолько все просто, что даже нечего добавить. Единственная проблема, что компьютер его не понимает.
0
|
||||
| 28.01.2016, 17:21 | |
|
Помогаю со студенческими работами здесь
20
Переходник RS485/232 - UART Выбор схемы для RS485 простейший rs485/rs232 конвертер преобразователь интерфейсов RS232/RS485 ? Существует дешовая микросхема RS485 со встроеной развязкой? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
||||
|
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
|
Новый ноутбук
volvo 07.12.2025
Всем привет.
По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне:
Ryzen 5 7533HS
64 Gb DDR5
1Tb NVMe
16" Full HD Display
Win11 Pro
|
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
|
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
|
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов
На странице:
https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/
нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
|
|
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов.
. . .
|
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
|
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
|
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут.
В век Веб все очень привыкли к дизайну Single-Page-Application .
Быстренько разберем подход "на фреймах".
Мы делаем одну. . .
|
Фото: Daniel Greenwood
kumehtar 13.11.2025
|