|
|
  |
Помехозащищенный RS-485 |
|
|
|
Nov 25 2015, 14:27
|

Гуру
     
Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244

|
QUOTE (demiurg_spb @ Nov 25 2015, 15:22)  С импортными не сталкивался. Назовите одну-другую модельку, пожалуйста. Сейчас в отъезде - на сдедующей неделе гляну. Но их реально уже больше, чем симметричных. В последних наших вариантах разводок опциональные растяжки, которые стояли, как защита от радиолюбителей на встречой стороне, были убраны вообще, ибо ассиметричные приемники массовые вещи.
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
Nov 25 2015, 22:31
|

pontificator
     
Группа: Свой
Сообщений: 3 055
Регистрация: 8-02-05
Из: страны Оз
Пользователь №: 2 483

|
Цитата(Atlantis- @ Nov 26 2015, 00:04)  Что касается Modbus и прочего, то дело в том, что у меня пакет данных от датчика составляет 12 байт плюс могу рассчитать контрольную сумму. Это траффик от датчика до МК1. Там чистый UART и скорость не хочется задирать, она там и так 350 кбит/с. Далее, к МК1 подсоединены несколько датчиков (8). То есть если приделывать к пакетам большие обрамления в МК1, то опять же придется повышать скорость передачи по RS-485 (передача на МК2). При использовании COBS длина вашего (короткого) пакета увеличится на 1 байт. После преобразования COBS в вашем пакете не будет нулей. Для очистки грязи из приемного буфера надо дважды передать 0 до начала самого пакета. Первый 0 может оказаться испорченным, зато второй дойдет и очистит буфер. Для простоты можно еще раз передать 0 по завершению пакета. "Простота" заключается в том, что это позволяет не парсить приходящие байты "на лету", надо ловить только 0 и проверять валидность пакета целиком после прихода нуля. Итого, 4 байта накладных расходов. И никаких таймеров и пауз, это лишнее, если делать с байт-стаффингом. Таймеры и паузы нужны для Модбаса RTU и подобных ему протоколов. Правда, не все липовые "специалисты" это способны понять.
|
|
|
|
|
Nov 26 2015, 08:41
|
Местный
  
Группа: Участник
Сообщений: 491
Регистрация: 18-05-11
Пользователь №: 65 102

|
А я смогу это преобразование выполнить на 8-битном процессоре с тактовой частотой 12 Мгц? Я имею ввиду по скорости, это преобразование много времени занимает? И еще, после передачи от датчиков на МК мне надо как минимум добавить один байт - номер датчика (1,2,3..8). Можно ли это сделать без ущерба протоколу? Кроме того, нули то должен именно этот МК отправлять, потому что он передает по RS-485
Сообщение отредактировал Herz - Nov 26 2015, 10:06
Причина редактирования: Избыточное цитирование
|
|
|
|
|
Nov 26 2015, 09:45
|

pontificator
     
Группа: Свой
Сообщений: 3 055
Регистрация: 8-02-05
Из: страны Оз
Пользователь №: 2 483

|
Цитата(Atlantis- @ Nov 26 2015, 19:11)  А я смогу это преобразование выполнить на 8-битном процессоре с тактовой частотой 12 Мгц? На чем угодно. Хоть на брэйнфаке. Цитата(Atlantis- @ Nov 26 2015, 19:11)  Я имею ввиду по скорости, это преобразование много времени занимает? Мизер. Посмотрите сами на код в Википедии и не задавайте таких вопросов. Причем, там приведен "сложный" вариант кода, поскольку они обрабатывают сообщения произвольного размера, а потому перекладывают из одного буфера в другой, чтобы по ходу можно было вставлять дополнительные байты. В случае же коротких сообщений (меньше 255 байт) все гораздо проще, поскольку заранее все известно: один дополнительный байт появится в начале. Поэтому и перекладывать ничего не надо, одного буфера достаточно, просто незакодированное сообщение надо в него класть начиная не с 0-го байта, а 1-го. Потом просто пробегаете по буферу и заменяете нули. Цитата(Atlantis- @ Nov 26 2015, 19:11)  И еще, после передачи от датчиков на МК мне надо как минимум добавить один байт - номер датчика (1,2,3..8). Можно ли это сделать без ущерба протоколу? Кроме того, нули то должен именно этот МК отправлять, потому что он передает по RS-485 Да какая может быть разница, что вы там запихнете в свое сообщение? COBS-у это абсолютно по барабану. На передающем узле закодировали, на приемном раскодировали.
|
|
|
|
|
Nov 26 2015, 10:43
|

неотягощённый злом
     
Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643

|
Цитата(Ruslan1 @ Nov 25 2015, 23:11)  Называется это "Fail-Safe". А я вот не уверен. ИМХО Fail-Safe - это не обязательно смещённый порог, а лишь наличие растяжек. Хочется понять есть-ли специальный термин, определяющий, что есть именно смещение порога. Хочу понять для собственного ЛИКБЕЗа. Чтобы спать спокойно мы стали выводить четыре клеммы для RS485: VABC. А задачу по установки растяжек и терминаторов перекладываем на плечи эксплуатантов. Т.к. от слабых растяжек с терминатором один вред, а сильные ставить нельзя т.к. при параллельной работе приборов в одной сети RS485 они суммируют проводимость и получаем другие грабли...
--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
|
|
|
|
|
Nov 26 2015, 11:09
|
Местный
  
Группа: Участник
Сообщений: 491
Регистрация: 18-05-11
Пользователь №: 65 102

|
Цитата(=AK= @ Nov 26 2015, 12:45)  Да какая может быть разница, что вы там запихнете в свое сообщение? COBS-у это абсолютно по барабану. На передающем узле закодировали, на приемном раскодировали. Я имел ввиду, что у меня есть данные 12 байт плюс считаю контрольную сумму = 13 байт. Преобразую все это дело по COBS-у, получается 14 байт. Это данные от одного датчика. Они поступают на МК через обычный UART, в обработчике DMA я добавляю номер датчика. Так вот эта добавка не будет противоречить COBS-у? По идее, мне надо бы преобразовывать данные в этом МК, а не в датчике, но там у меня и так проблемы со временем, не хочется еще какие то преобразования там проводить.
|
|
|
|
|
Nov 26 2015, 12:00
|

pontificator
     
Группа: Свой
Сообщений: 3 055
Регистрация: 8-02-05
Из: страны Оз
Пользователь №: 2 483

|
Цитата(Atlantis- @ Nov 26 2015, 21:39)  Я имел ввиду, что у меня есть данные 12 байт плюс считаю контрольную сумму = 13 байт. Преобразую все это дело по COBS-у, получается 14 байт. Это данные от одного датчика. Они поступают на МК через обычный UART, в обработчике DMA я добавляю номер датчика. Так вот эта добавка не будет противоречить COBS-у? Я не понимаю о чем вы говорите. Выражайте свои мысли яснее. Тот, кто отсылает сообщение, может добавить в сообщение что угодно, затем закодировать и переслать. Приемник раскодирует принятое сообщение обрабатывает как требуется, если надо - добавляет номер датчика. В чем проблема-то? Не играет роли кто является приемником, кто передатчиком. И что вы там в своем железе нагородили, кто у вас там "датчик", кто "МК", причем тут ДМА, и кто чего должен добавлять, то ли на передающем конце, то ли на приемном - так телепатов нет. Кстати, однобайтная контрольная сумма - это мало, так вы ложные сообщения не отсеете. Используйте двухбайтный CRC.
|
|
|
|
|
Nov 26 2015, 12:14
|
Местный
  
Группа: Участник
Сообщений: 491
Регистрация: 18-05-11
Пользователь №: 65 102

|
Цитата(=AK= @ Nov 26 2015, 15:00)  Я не понимаю о чем вы говорите. Выражайте свои мысли яснее. Тот, кто отсылает сообщение, может добавить в сообщение что угодно, затем закодировать и переслать. Приемник раскодирует принятое сообщение обрабатывает как требуется. В чем проблема-то? Не играет роли кто является приемником, кто передатчиком. И что вы там в своем железе нагородили, кто у вас там "датчик", кто "МК", причем тут ДМА, и кто чего должен добавлять, то ли на передающем конце, то ли на приемном - так телепатов нет.
Кстати, однобайтная контрольная сумма - это мало, так вы ложные сообщения не отсеете. Используйте двухбайтный CRC. Конструкция такая: Датчики (8 штук) по UART подключаются к МК1, МК1 по RS-485 подключается к МК2, МК2 подключается по USB к ПК То есть в Вашей концепции передатчик - это МК1, а приемник - МК2. А мне удобнее COBS преобразование сделать в датчике, а в МК1 добавить байт - номер датчика. Цитата(=AK= @ Nov 26 2015, 15:00)  Кстати, однобайтная контрольная сумма - это мало, так вы ложные сообщения не отсеете. Используйте двухбайтный CRC. почему? данных же мало, всего то 12 байт.
|
|
|
|
|
Nov 26 2015, 16:01
|
Гуру
     
Группа: Свой
Сообщений: 2 360
Регистрация: 6-03-06
Из: Кишинев
Пользователь №: 15 025

|
Цитата(demiurg_spb @ Nov 26 2015, 12:43)  ИМХО Fail-Safe - это не обязательно смещённый порог, а лишь наличие растяжек. Хочется понять есть-ли специальный термин, определяющий, что есть именно смещение порога. Извините, я не смогу ответить, не задумывался над этим. Вы правы, это другое- если подать напряжение на вход, то эти подтяжки никак не перетянут вход в сторону от нуля. Но там начинает работать гистерезис на переключение (Input hysteresis voltage). Цитата(Atlantis- @ Nov 26 2015, 14:14)  МК1 по RS-485 подключается к МК2, МК2 подключается по USB к ПК Почему Вы напрямую не подключаете шину RS-485 от MK1 к компьютеру? Или почему не подключаете компьютер к RS-485 просто как еще один узел сети RS-485, если уж MK2 действительно нужен?
|
|
|
|
|
Nov 26 2015, 16:58
|
Местный
  
Группа: Участник
Сообщений: 491
Регистрация: 18-05-11
Пользователь №: 65 102

|
Цитата(Ruslan1 @ Nov 26 2015, 19:01)  Почему Вы напрямую не подключаете шину RS-485 от MK1 к компьютеру? Или почему не подключаете компьютер к RS-485 просто как еще один узел сети RS-485, если уж MK2 действительно нужен? У меня задание - сделать USB устройство. Видимо это связано с вопросами синхронизации прибора с другими устройствами.
|
|
|
|
|
Nov 26 2015, 18:08
|

Гуру
     
Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095

|
Цитата(Atlantis- @ Nov 26 2015, 19:58)  У меня задание - сделать USB устройство. Так подключите MAX485 прямо к FT232R или CP2103 или возьмите готовый переходник, а всю обработку делайте на компьютере. Зачам там еще МК?
--------------------
На любой вопрос даю любой ответ"Write code that is guaranteed to work, not code that doesn’t seem to break" ( C++ FAQ)
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|