|
|
  |
Система команд сервоконтроллера, обсудим? |
|
|
|
Feb 18 2009, 15:22
|
Знающий
   
Группа: Свой
Сообщений: 961
Регистрация: 28-11-05
Пользователь №: 11 489

|
Цитата(_Pasha @ Feb 18 2009, 18:00)  Пугает скорость  в два раза упавшая. Меня пугает даже не упавшая, а максимальная скорость UARTа в Меге. Я уже делал серво с интерфейсом на 12 мегабит. Этого в притык хватило для управления 4-мя осями. И без всяких сложно-наворочанных протоколов. Еще и протокол и так примитивный оптимизировать под максимальную скорость пришлось. Но для простого позиционирования одной оси большая скорость обмена конечно не нужна.
--------------------
В действительности всё не так, как на самом деле.
|
|
|
|
|
Feb 19 2009, 04:31
|
;
     
Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509

|
Цитата(Rst7 @ Feb 18 2009, 18:07)  Если обмен организован в стиле "только запрос-ответ" Делаю шаг назад, и вот почему: CODE Протокол 8-E-2 Скорость по умолчанию 9600 Режимы ASCII и BIN
Режимы различаются по первому байту.
Если первый байт 0x00..0x7f то это у нас ASCII с набором команд, о котором позже.
Если же первый байт >= 0x80,то это будет такая весчь: 7 6 5 4 3 2 1 0 1 V R R A A A A
V- номер пакета по версии RST7 RR - командный регистр 00 - положения 01 - скорости 10 - момента 11 - прямой ШИМ ------------------------ AAAA - адрес устройства в сегменте сети, то бишь, короткий адрес. Адрес 0 - всегда адрес хоста. Адреса общего вызова нет, поскольку в бинарном потоке это не нужно. ------------------ Далее (это все про BIN)идет 1 байт signed приращения командного регистра, 1 байт timestamp и crc8 а-ля даллас ----------------------------- После получения подобной команды слейв обязан ответить таким образом: первый байт 1VRR0000 (V,R - тот же смысл, ессно) второй - приращение фактической величины (положение/скорость/момент/ШИМ) третий -timestamp четвертый CRC8 -----------------------
ASCII - в процессе разработки, но сразу скажу, что там с игнорированием регистра, поскольку делать из юзеров неврастеников неприлично. Умерла тема? Не дождетесь!  Возражения и правки принимаются до конца недели в "парламентском" режиме. Насчет интеграции мысль такая: если страдаемый протокол будет поддержан людьми, то дальше - конверторы с чего хошь куда хошь как средство зарабатывания и поддержания интереса к теме вообще. В данном случае за уши притягивается итоговый перфоманс с учетом реализации на АВР. Цитата(Rst7 @ Feb 18 2009, 20:26)  призываю подумать над тем, какой софт или железо будет использоваться в качестве верхнего уровня ЗЫ: посоветуйте, надо ли в рамках бинарного потока сигналить об аварии или достаточно сделать это в текстовом виде?
|
|
|
|
|
Feb 19 2009, 04:57
|

Йа моск ;)
     
Группа: Модераторы
Сообщений: 4 345
Регистрация: 7-07-05
Из: Kharkiv-city
Пользователь №: 6 610

|
Цитата Протокол 8-E-2 Эээ, я не очень понял, данные передаются по инициативе контроллера? Или запрашиваются мастером? Цитата надо ли в рамках бинарного потока сигналить об аварии или достаточно сделать это в текстовом виде? Хотя бы флаг аварии надо передать. А расшифровку можно уже и потихоньку текстом забрать. Но есть ли смысл реализовывать текстовый протокол вообще? Как по мне, так и не очень...
--------------------
"Практика выше (теоретического) познания, ибо она имеет не только достоинство всеобщности, но и непосредственной действительности." - В.И. Ленин
|
|
|
|
|
Feb 19 2009, 06:39
|
;
     
Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509

|
Цитата(Rst7 @ Feb 19 2009, 08:57)  Эээ, я не очень понял, данные передаются по инициативе контроллера? Или запрашиваются мастером? Хотя бы флаг аварии надо передать. А расшифровку можно уже и потихоньку текстом забрать. Но есть ли смысл реализовывать текстовый протокол вообще? Как по мне, так и не очень... 1. Мастер - инициатор обмена. Следовательно запрашиваются мастером 2. Какой нибудь MAGIC... вот: использовать несимметричность signed char, т.е в отдаваемом приращении 0x80 -ето туши свет  3. Вы его еще не видели PS текстовый - в первую очередь для возможности управлять, причем всем сегментом сети, из терминала. Отсюда некоторые особенности: Код 1. Единица обработки команды - строка, заканч. 0x0d или 0x0a - настраивается 2. Команды широковещательные, адресные и может быть приватные сообщения между слейвами 3. широковещательные, адресные - идут от компа, читай - от юзера, поэтому для проверки правильности делаем эхо обратно 4. приваты - в конце добавляется CRC8, пусть слейвы между собой разбираются :) *****Как это выглядит ***** команда назначения имени и адресу assign x=0x04 девайс отвечает @x: assign x=0x04 OK Дальше что-то пишем ему x: S+=20 @x: S+=20 OK
|
|
|
|
|
Feb 19 2009, 08:34
|
;
     
Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509

|
- не защищенХочу сделать в рамках этого мини-языка несколько синонимов одних и тех же действий, чтобы юзер на свой страх и риск их применял. Из предыдущего моего поста: x: S+=20 после получения команды можно сделать сразу эхо, а можно после выполнения - избыточен, раза в два примерно Почему в два? Гораздо больше, но тут упор на макроязык и всякие навороты по синхронному исполнению о них - позже - требует для дешифрации больших ресурсов в слейве "На лету" ничего делаться не будет в текстовом режиме. Получил - сверился- выполнил - отчитался. В бинарном режиме, по получении MAGIC 0x80, сигнализирующем об аварии, хост останавливает процесс элементарно - переходом в текст. Остальные - услышали MAGIC и стали, а для "особо понятливых" - сработает тайм-аут "потеря связи" по прекращению бинарного потока (планируеццо 3,5 символа) Кстати, тайм-аут в символах на полудуплексе ваще удобно делать - Dummy writes при выключенном драйвере 485 ЗЫ какой из меня парсер сообщений!  Следующая "умная мысль". Структура строки Код [#<идентификатор потока>] [<имя устройства>:] [<команда1> [;<команда1>]]
идентификатор потока: число 1-99
имя устройства: идентификатор
команда1: семейство команд модификации регистров S,V,M,T Идент. потока нужен для задания синхронного начала исполнения команд. По именам регистров: регистр момента предлагаю назвать M,а не T(torque) потому что иначе нечем назвать время Еще вопрос из другой оперы: кто как считает ресурс/наработку сервака? Имхо есть смысл считать отдельно: Код 1. Моточасы, т.е. общее время в работе силовухи
2. Счетчик общего пробега
3. Время нахождения в режиме с ускорением По поводу бинарного протокола: +статистика: общее число принятых пакетов, число подтвердженных.
|
|
|
|
|
Feb 19 2009, 09:48
|
;
     
Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509

|
Добавил (текстовый режим): Код Только для адресных команд!
По умолчанию слейв возвращает полученную строку обратно
Запустить ее на исполнение можно набрав / и ввод.
Если же в конце строки будет /, то исполнение начнется сразу, после чего слейв выдаст простой отчет OK
x: S=1200; V=12; T=122m юзер пишет
@x: S=1200; V=12; T=122m OK отвечает сервак
x:/ юзер
сервак подумал, переместился и написал
@x:OK
***********************************
Или то же самое но без эха
x: S=1200;V=12; T=122m / юзер пишет
сервак подумал и сгорел. И никто не знает, что он там получил,
потому что если был бы ошибка, то он написал бы
@x: S=0200;V=12Ё;T= / ERROR
Мораль: не уверен - не пользуй опасные вещи.
Тем более, что испортить можно все и всегда. Еще. Например, выполняется команда, а нам неймется в текстовом режиме обратиться к девайсу Код X: S+=120
@X: S+=120 BUSY Таким образом, других сообщений от слейва не надо, кроме {"OK","BUSY","ERROR"} На какую комбинацию клавиш лучше ввести экстренный стоп?
|
|
|
|
|
Feb 19 2009, 10:28
|
;
     
Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509

|
^C - это скока? Помню ^Z=26, а это - забыл  И вот еще мысль: Пусть нам надо переместиться по одной оси, но взять текущую координату с другой и че-то там с ней сделать Хочу еще попробовать навернуть конструкции типа X.S, т.е. обращение к другому девайсу Код axis1: S+= axis2.S Выполнение этого уже требует разговора двух девайсов. Не вижу сложностей: Код axis2*axis1: S? (здесь CRC в hex-виде) - это слейв спросил у своего "коллеги", чо там у него за Сэ
@axis2*axis1: S=120 (здесь CRC в hex-виде) - на что он ответил.
@axis1 S+=120 OK - а если бы не ответил, то был бы ERROR В общем-то, логика не нарушается, потому что мастер по-прежнему инициирует обмен Задача - эти все навороты разместить в символах, чтоб было понятно пользоваться и чтоб словоподобных команд было минимум, и чтоб парсилось это все легко.
|
|
|
|
|
Feb 19 2009, 10:35
|

Йа моск ;)
     
Группа: Модераторы
Сообщений: 4 345
Регистрация: 7-07-05
Из: Kharkiv-city
Пользователь №: 6 610

|
Цитата ^C - это скока? =3 Цитата Хочу еще попробовать навернуть конструкции типа X.S, т.е. обращение к другому девайсу Ох сдается мне, что для таких вещей лучше CAN. Девайсы флудят своим состоянием в шину, а кому надо - настраивает свои фильтры на интересующий ID - и гребет всегда свежие данные.
--------------------
"Практика выше (теоретического) познания, ибо она имеет не только достоинство всеобщности, но и непосредственной действительности." - В.И. Ленин
|
|
|
|
|
Feb 19 2009, 10:47
|
;
     
Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509

|
Цитата(Rst7 @ Feb 19 2009, 14:35)  Девайсы флудят своим состоянием в шину Тут немножко не так. Имхо, текстовый протокол служит двум целям. С одной стороны, обеспечить систему команд типа "подай-принеси" и какой-нить локальный контроллер может запросто гонять скрипты на этом уровне. Там не надо извратов с флудо-слейвами. С другой стороны - комфорт для юзера и почти язык для ручного управления, настройки, просмотра. В BIN-е фантазии кончаются, начинается скорость. Как только скорость оставляет желать и начинают хихикать сторонники 12мегабит, имеется еще более тупой и адекватный интерфейс - step/dir/an Простенько, и со вкусом... это только выглядит замороченно, в реале должно быть проще.
|
|
|
|
|
Feb 19 2009, 11:35
|

чукчхэшаражогрмонтажник
    
Группа: Участник
Сообщений: 1 852
Регистрация: 13-07-07
Из: Minsk
Пользователь №: 29 094

|
Продолжу про оптику. Упоминаемый уже Бекхоф, с интерфейсом Lightbus, он же Sercos, переходит на CoDeSys. Почитал немного из форума. Картинка из каталога.
--------------------
Quo vadis?
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|