Давно пришла мысль, написать функцию определения Текущей выбранной передачи и функцию включения Целевой передачи.
Алгоритм простейший:
- получить значения с двух датчиков положения цилиндров управления валом выбора передач;
- выбрать 7 зон возможных положений для каждого цилиндра, например, для движения вперед/назад: крайнее переднее (0-10%), положение 2-4-5 передач (20-30%), мертвая зона(30-40%), положение трех нейтралей N12-N34-N5R (40-60%); мертвая зона (60-70%), положение 1-3-R передач (70-90%), крайнее заднее положение (90-100%). Ессно, хотелось, чтобы эти рамки могли легко перенастраиваться программно;
- по двум наборам зон выбрать номер включенной передачи.
Все это в первый раз было написано с помощью операторов условий (if-else) и программных переключателей (switch-case).
Выглядело ужасно даже на языке С. Закодировать это безобразие на языке релейных схем (LAD) я даже не пытался.
И вот, на очередном форуме по контроллерам Siemens люди посоветовали прочесть «Чистый код» Роберта Мартина. Весьма философская книжка, люблю такие. Автор против использования if-else’ов и switch-case’ов.
И вот меня посетила гениальная мысль, вместо условий, использовать положения цилиндров в качестве индексов двухмерного массива. Только не сразу 100*100 байт, а вначале 100 значений пропустить через одномерные массивы для получения 7 зон, а затем эти зоны использовать в двухмерном массиве 7*7 байт. Итого при точности в 1%, получается 2*100+7*7=249 байт в трёх табличках.

Для функции включения тоже неплохо получилось, но т.к. ей иногда нужна последовательность промежуточных состояний – там чуть веселее пришлось поступить.
Правда, после обсуждения с очень опытным программистом (от железа и Ассемблера, до Oracla и SQL) оказалось, что этому велосипеду уже лет 20 как исполнилось.
П.С. Т.к. использовать Pascal-подобный язык для Siemens совсем не охота, и делать мозги на Atmel с языком С, тоже не в ближайших планах, будем идти к первоначальной цели освоения промышленной автоматизации.
П.П.С. Из ближайших железных дел по робот-коробке – можно проверить, и даже отладить работу пневмоцилиндра сцепления, надо только прижать маховик свежеиспеченной переходной плитой, чтобы усилия были настоящими А для этого нужно прикупить большую гайку с какой-то мелкой резьбой, и три болта в оставшиеся отверстия коробки. Для двух остальных коробочных цилиндров надо точить детальки, примерять под капотом, пилить болгаркой, варить сваркой и т.п. А тут еще страхи наваливаются, что пневматика может крепко подмерзать зимой, но это скорее, как с ПК в машине – надо сделать и увидеть самому. А то обычные жёсткие диски тоже не должны были долго жить из-за тряски, а они оказались весьма на высоте.