Easyelectronics.ru

Электроника для всех
Текущее время: 18 ноя 2018, 15:48

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



    • JLCPCB - Прототипы 10 PCBs всего за 2$ (100*100mm, 2-layer)
    • Как мы делаем платы, смотрите на YouTube
    • Крупнейшая китайская фабрика прототипов. 300000+ заказчиков и 10000+ заказов в день!
    • LCSC - Крупнейший китайский онлайн магазин комплектующих.

Начать новую тему Ответить на тему  [ Сообщений: 6 ] 
Автор Сообщение
 Заголовок сообщения: Система команд устройством по rs485
СообщениеДобавлено: 16 июн 2018, 11:28 
Заглядывает иногда

Зарегистрирован: 25 янв 2012, 22:59
Сообщения: 35
Здравствуйте! Есть система команд устройством с адресом 1, каждая команда это последовательность Аски ii символов , у каждой допустимой команды есть начальный символ , адрес, тело несколько символов и конечный символ, возможны как ответы на правильную команду так и на неправильную. Вопрос как должно и должно ли вообще ответить устройство если совпадает начальный символ команды, адрес, но не совпадает длина команды- как на не неправильную команду или вообще никак(т.е. считать, что адресована не ему)?и должно ли отвечать, если адрес не совпадает(думаю не должно)?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Система команд устройством по rs485
СообщениеДобавлено: 16 июн 2018, 11:37 
Старожил
Аватара пользователя

Зарегистрирован: 22 июл 2017, 11:48
Сообщения: 2478
Это вопрос вообще о принципе, с каким-то гипотетическим конструируемым устройством, или же устройство конкретное и готовое?
Если вопрос о гипотетической разработке нового устройства, то конечно - если нет полного совпадения вплоть до каждой буквы, значит, команда пришла неверная. Её можно либо полностью игнорировать, либо отправить в ответ сообщение типа #{адрес_устройства}*BAD COMMAND*<CR><LF>, что более правильно с точки зрения ответной реакции и обнаружения ошибок. То есть, почему это вдруг длина команды не верная? Не хватает параметров в команде, неправильно она сформирована? И почему это произошло? Но мало просто отправить сообщение об ошибке. Надо же как то исправить ошибку на передающей стороне. Надо повторно сформировать команду, проверив ее правильность. Тут тоже как бы не следует шибко то очеловечивать тупой железный МК, он же не в состоянии совершать человеческие ошибки типа "ай, блин, отвлекся, проехал нужный поворот".
Хотя, ответное сообщение BAD COMMAND является полезным для интерфейса терминалки, когда сам человек может текстом передавать комманды.

Когда не совпадает адрес, отвечать конечно ничего не нужно. Пусть ответит тот, чей адрес был передан в команде.
Так же, в том случае, когда любые команды, в том числе и ошибочные, предполагают ответы при совпадении адреса, то таким образом получаем еще одну возможность: если в течение интервала времени не пришел ни один ответ, значит можно на передающем устройстве сформировать оповещение "Такого адреса в сети не существует".


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Система команд устройством по rs485
СообщениеДобавлено: 16 июн 2018, 12:58 
Старожил
Аватара пользователя

Зарегистрирован: 28 дек 2011, 11:24
Сообщения: 3772
Откуда: г. Липецк
Возможно это стандартный Modbus ASCII, почитайте о нем...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Система команд устройством по rs485
СообщениеДобавлено: 17 июн 2018, 00:13 
Заглядывает иногда

Зарегистрирован: 25 янв 2012, 22:59
Сообщения: 35
Устройство не готовое, вопрос о принципе как это правильно делают, спасибо, вроде пока понятно


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Система команд устройством по rs485
СообщениеДобавлено: 17 июн 2018, 13:02 
Супермодератор
Аватара пользователя

Зарегистрирован: 26 янв 2010, 22:19
Сообщения: 6264
Откуда: Из тех... Из бывших...
Оконечное устройство, не распознавшее адресованную ему команду, просто отправляет '?' <cr> в ASCII. Так, например, определено в протоколе многих проекторов (Sanyo в частности). Если адрес не совпадает, ответ не отправляется.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Система команд устройством по rs485
СообщениеДобавлено: 18 июн 2018, 18:19 
Старожил
Аватара пользователя

Зарегистрирован: 24 июл 2012, 13:54
Сообщения: 791
Я обычно использую фреймы ошибок с кодами, соответствующими:
UndefinedHeader - нет такой функции.
WrongDataLength - длина фрейма данных не соответствует ожидаемой.
WrongDataFormat - какая-то общая проблема при анализе фрейма данных.
WrongArgsTotal - количество аргументов неверное.
WrongArgsData - формат верный, но данные вне диапазона, или не совпадают по ожидаемому типу.
Ok - Все в порядке.
и т.д.
(Состав ошибок может быть разным в зависимости от задачи и протокола. Тут же ошибки связанные с природой изделия (их можно обрабатывать автоматически)).

Фрейм возврата имеет вид статус-данные. Это общий вид и для ошибки и для коректного ответа. Это позволяет при необходимости конкретизировать ошибку. На практике, правда, это обычно не нужно. Просто вывода ошибки достаточно для диагностики.

Диагностировать возвращенный код ошибки проще, чем пытаться разобраться, почему изделие молча проигнорировало команду.
Здесь, правда, есть техническое противоречие. Возврат ошибки требует синхронного взаимодействия запрос-ответ. Клиенту приходится ждать фазу прямой-обратной передачи. Это сильно замедляет работу. Безответный вариант значительно быстрее.

Я пришел к выводу, что на ответственных, связанных с возможными неисправностями применениях, всегда стоит использовать формат запрос-ответ.
Это позволяет вовремя остановить поток команд, что помогает не допустить аварии.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 6 ] 

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


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

Сейчас этот форум просматривают: 45893569365, Eddy_Em


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

Найти:
Перейти:  

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB