nickita startcev (nicka_startcev) wrote,
nickita startcev
nicka_startcev

апдейт про паровозики

Выспался, уточняю идею из той кучи, что вчера разношерстно излагал.

1. в паровозике сидит платка, которая вещает, например в рельсы, на 500+ кГц, промодулированных 115200
2. рельсы разбиты на кучу небольших участков. Для развязки можно брать дроссели, или независимые блоки питания, или еще какие системы контроля КЗ
3. есть многоканальный преобразователь, у которого много пронумерованных входов, понимающих 115200 и один выход, который, например, ACM-модем.
4. опционально, хабы верхних уровней, из АСМ в АСМ.

Логика работы, снизу вверх.
В паровозике метка. Преобразователь часто (например, 10 раз/с) опрашивает свой участок. метка в паровозике отвечает. В принципе, можно сделать финт ушами и общую команду "кто здесь", на которую отвечают все, выдав 1 байт (например свой адрес) но не сразу после запроса, а с задержкой в N байтовых промежутков. 256 байт = 2кбит = 1/25 секунды на 57600, вполне укладываемся.

Ограничение в 256 паровозиков+вагончиков, навскидку, не страшно. В принципе нижний уровень можно уширить до 16 бит номинально и, например, 12 бит реально (4к устройств. на 115200 цикл будет около 64кбит/115200 - примерно полсекунды)

Рельсовый путь разбит на участки длиннее паровоза, на каждом участке свой канал опроса с пуллингом. Итого, контроллер нижнего уровня имеет список паровозов на подотчетных интервалах.

Каждому контроллеру нижнего уровня можно приписать базовый адрес. Если закладываться на 16 бит, то можно сделать квазипересекающиеся интервалы. Например, 8-канальному контроллеру приписать адрес (точнее, оффсет) 0, второму 10-канальному адрес (оффсет) 8, третьему 8+10=18, итд. Итого, первый контроллер будет отдавать наверх тупо номер интервала, а второй контроллер прибавлять к номеру интервала 8.

Каждый контроллер нижнего уровня держит в своей памяти тупой список "паровозик номер А находится на участке Б" плюс "список ответов" (список ответов удаляем после отправки наверх)

Каждый контроллер верхнего уровня (хаб) имеет один вход (например, тот же самый АСМ) и кучу выходов. Контроллер - передаст с пуллингом. Например, 10раз/с опрашивает все нижележащие контроллеры и держит у себя табличку соответствий паровоз+участок плюс список ответов. Никакой хитрой логики в таком контроллере не нужно. Трансляция адресов уже проведена уровнем ниже. Контроллеры можно тупо каскадировать не заморачиваясь адресацией. Список ответов удаляем после отправки наверх.

Самый верхний хаб подключается к компу. Комп аналогично пуллит его, например 10раз/с и видит актуальный список.

А теперь про управление. Тут есть два варианта - хабовый и свичевый. В свичевом тупо кидаем команды всем нижестоящим, а в хабовом помним трансляцию адресов и храним таблицу соответствия.
Навскидку, если у нас до 4к устройств и 12 бит адреса, то таблица соответствия будет около 8-16к байт, что влезет практически в любой мелкий АРМ.

Навскидку, одному паровозику не нужно более 4096 команд (12 бит), а значит адрес+команда пакуются в 3 байта. плюс еще префикс "это команда" в дополнение к префиксу "дай мне все свои таблицы".

Итого, верхний хаб у нижнего хаба может попросить "дай таблицу плюс ответы" или "вот тебе команда". Команду для не-своих устройств можно тупо игнорировать, а для своих или послать всем вниз, или послать только на нужный линк на нижний уровень (опять же без всяких трансляций).

Контроллер нижнего уровня получает команду, без трансляции скармливает ее паровозику, получает ответ от паровозика. Если не получает ответ за, например, 1/10с, то повторяет до 3 раз.
Полученный ответ дописываем к табличке с списком паровозиков и удаляем после того, как его заберут наверх.

Логика работы самого-самого верха.
1. опрашиваем низ, имеем список паровозиков и список ответов. Отображаем их на экране или еще куда
2. если есть, берем у пользователя команду, пихаем ее вниз

Ориентировочный набор команд-А. 3 бита команда (плюс 1 бит r/w), до 8 бит данных. Набор не претендует на оптимальность
0х0хх - опрос скорости. в ответ 8 бит скорость+направление. хх игнорируется
0х1хх - задаем скорость хх
0х2хх - опрос дефолтных 8 лампочек, хх игнорируется
0х3хх - установка дефолтных 8 лампочек, хх - биты для них
0х5хх - установка бита номер хх, например до 256 лампочек
0х4хх - сброс бита номер хх, например до 256 лампочек

Ориентировочный набор команд-Б
1 бит r/w, 7 бит номер регистра, 8 бит данные
reg0 - скорость r/w
reg1 - 8 лампочек r/w
reg2..63 свободно под любую хрень
reg64..127 - 64 байта строка с названием устройства. r/o

адрес устройства перешивается при наличии джампера какой-нибудь тупой командой типа записи в регистр 7 и младшую половину регистра 8.



итого.

- система относительно ортогональна, быстра, расширяема
- система не требует оптодатчиков под каждый рельс, которые пылятся и сравнительно дороги
- система расширяема и мягко конфигурируема
- система относительно недорога - 500кгц легко отделяется от 0 или 50гц силового, легко детектируется и фильтруется буквально одним диодом и rc-цепочкой, тупо подается на аппаратный или программный UART любой 8..32 битки
- можно объединить нижний уровень с хабом и взять стандартные усб-хабы, но тогда софтинка в ПК будет намного развесистее, но номенклатура устройств сократится.
Subscribe

  • хедхантер и рядом

    а у вас было такое, что вас на собеседовании гоняли жестко про отличия стандартов K&R/С++89/С++20хх, почти завалили, сбили ваш пафос (а вы таки до…

  • купить майнкрафт бесплатно и бес смс

    у меня уже есть честно купленная копия, честно купленная у микрософта. задумался (по разным причинам) о покупке второй копии 1. при переносе на…

  • филоложное

    аналогия - это примерно как гинекология, но с другой стороны.

  • Post a new comment

    Error

    default userpic

    Your reply will be screened

    Your IP address will be recorded 

    When you submit the form an invisible reCAPTCHA check will be performed.
    You must follow the Privacy Policy and Google Terms of use.
  • 3 comments