Подход, аналогичный с изложенным для программной реализации алгоритмов, широко используется в настоящее время для настройки схем программируемой логики [165], также называемой программированием [166]. При этом разработаны языки описания аппаратуры (Hardware Description Language (HDL) в англоязычной литературе), которые, в частности, позволяют конвертировать текст программы в функциональную схему и наоборот. Описание, выполненное на одном из таких языков, компилируется в схему [167]. Среди языков этого класса отметим языки VHDL [168] и AHDL [169].
Например, в языке AHDL для реализации условной логики (Conditional Logic) включены конструкции if then и case, последняя из которых является аналогом конструкции switch языка Си. При этом одно из "золотых" правил, приведенных в [169], состоит в применении везде, где это возможно, конструкции case вместо вложенных конструкций if then.
Это правило используется для реализации последовательностной логики (Sequential Logic), описываемой в терминах состояний с помощью конечных автоматов (State Machine). При этом автоматы с многозначным кодированием состояний (этот термин в [168] не применяется) задаются в виде диаграмм состояний (State Diagram). В [169] приводятся примеры реализации автоматов с синхронными выходами (State Machines with Synchronous Outputs), соответствующих автоматам Мура, и автоматов с асинхронными выходами (State Machines with Asynchronous Outputs), соответствующих автоматам Мили.
Дальнейшее развитие автоматного подхода для настройки схем программируемой логики состоит в визуализации диаграмм состояний, которая осуществляется с помощью пакетов типа "State CAD", один из которых описан в [170].
Таким образом, технология проектирования алгоритмического и программного обеспечения, изложенная в разд.2 и 5, дополняет известные подходы к настройке схем программируемой логики, что позволяет с единых позиций проводить аппаратную [171] и программную реализации алгоритмов логического управления, так же как это имеет место в технологии "Co-Design", предназначенной для совместной разработки аппаратных и программных средств с помощью формализованных методов, в которой в качестве языка описания высшего уровня абстракции применяются конечные автоматы [172].
После издания [8] автор познакомился с работами [173, 174]. Некоторые из особенностей излагаемого подхода, базирующегося на парадигме конечных автоматов, являющейся одной из парадигм программирования, рассмотренных Р.Флойдом [173], совпадают с предложениями, высказанными лауреатами премии Тьюринга, самим А.Тьюрингом [183] и Дж. фон Нейманом [184].
Так, А.Дж.Перлис в 1966 г. [173] предложил в описания языка, среды и правил вычислений включить состояния, которые могут подвергаться мониторингу во время исполнения, позволяя диагностировать программы, не нарушая их целостности. При этом под мониторингом он понимал распределенное управление, более известное в настоящее время под названием "объектно-ориентированное программирование".
В этом же году Э.Дейкстра [174] предложил ввести так называемые переменные состояния, с помощью которых можно описывать состояния системы в любой момент времени, и ввел для этих целей целочисленные переменные. При этом им были поставлены вопросы о том, какие состояния должны вводиться, как много значений должны иметь переменные состояния и что эти значения должны означать. Он предложил сначала определять набор подходящих состояний, а лишь затем строить программу. Он также предложил сопоставлять процессы с переменными состояния и связывать процессы через эти переменные. По мнению Э.Дейкстры, диаграммы состояний могут оказаться мощным средством для проверки программ. Все это обеспечивает поддержку его идеи, состоящей в том, что программы должны быть с самого начала составлены правильно, а не отлаживаться до тех пор, пока они не станут правильными.
В 1977 г. Дж.Бэкус [173] отметил, что в языках программирования для компьютера фон Неймана семантика тесно сплетается с переходами между состояниями и их недостатком является то, что "всякая подробность вычислений изменяет состояние. Вследствие такой тесной связи семантики с состояниями всякая деталь каждого свойства должна быть встроена в состояние и в его правила переходов". При этом он указал на необходимость того, чтобы вычислительные системы обладали свойством "исторической чувствительности", и отметил, что "система не может быть исторически чувствительной (допускать влияние выполнения одной программы на поведение следующей программы), если она не обладает некоторым состоянием, которое первая программа может изменять, а вторая воспринимать. Поэтому исторически чувствительная модель вычислительной системы должна обладать семантикой смены состояний". Он предложил рассматривать состояние в целом, а его изменение производить только после "большого" вычисления.
Автор надеется, что изложенный подход, использующий элементы бихевиоризма, когнитивной психологии [57] и гештальт-психологии [41], позволит повысить качество проектирования и реализации программ логического управления ответственными технологическими объектами, в том числе и за счет автопрограммирования, при котором человек, знающий объект, сам выполняет алгоритмизацию и программирование, так как для рассматриваемого класса задач предлагаемая система обозначений является "естественным продолжением образа мышления, а не чуждого ему формализма" (Н.Вирт в [173]). Графы переходов в качестве языка алгоритмизации, как и любой "язык, на котором записывается решение задачи, напрямую влияют на ход мыслей человека, заставляя его рассматривать задачу под определенным углом" [37], определяя "дисциплину мышления" [20]. В настоящее время считается [77], что графы переходов позволяют наиболее естественным образом описывать процессы, протекающие в реальном мире, дополняя объектный подход, являющийся "естественным способом размышления о мире" [175].
Если процедурное программирование ориентировано на выбор и действия, объектное программирование - на объекты [175], событийное программирование - на события, то предлагаемое в [8] автоматное программирование - на автоматы, включающие состояния и входные и выходные воздействия.
При этом отметим, что, по "данным Киевского представительства фирмы "Шнайдер Электрик", в настоящее время только 4% украинских пользователей ее ПЛК используют язык "Графсет", входящий в стандарт IEC 1131-3. Это, видимо, связано с инерцией мышления у программистов [187], которые в большинстве случаев автоматически переносят стиль программирования на языках для персональных компьютеров на программирование для ПЛК" [9].
Однако, по мнению автора, указанная ситуация связана не только с особенностями пользователей, но и с методическим обеспечением применения этого языка и его реализацией. Так, например, в [176] сформулирована одна из задач логического управления и для нее построена диаграмма "Графсет", которая, однако, является "картинкой", а не математической моделью. Это исключает возможность формального и изоморфного перехода от нее к программе и применение диаграммы в качестве сертификационного теста. Удивительным является то, что эта диаграмма в [176] не используется для написания программы на языке "Графсет", а по ее "мотивам" эвристически строятся лестничная схема и программа на языке инструкций. Кроме того, как было отмечено в [8], графы переходов в системах логического управления обычно имеют многочисленные возвраты назад, что делает реализующие их диаграммы "Графсет" ненаглядными. Небольшое число двоичных переменных, выделяемых в ПЛК для кодирования вершин в этих диаграммах, резко ограничивает допустимое число вершин в реализуемых таким образом графах переходов.
По мнению автора, в рамках рассмотренной технологии программирование ПЛК наиболее целесообразно выполнять на языке "структурированный текст" ("Structured Text") [1], особенно для тех ПЛК, в которых этот язык содержит конструкцию, аналогичную конструкции switch языка Си.
Таким образом, в настоящее время SWITCH-технология использована при построении систем управления применительно ко всем трем типам управляющих вычислительных устройств, перечисленных в начале работы, и показала свою эффективность.
Из изложенного следует, что для рассматриваемого класса задач SWITCH-технология обеспечивает построение "добротных" [177] программ, подтверждая тем самым высказывание: "то, что не специфицировано формально, не может быть проверено, а то, что не может быть проверено, не может быть безошибочным" [38].
"Сложность служит причиной трудности перечисления, а тем более понимания, всех возможных состояний программы, а отсюда возникает ее ненадежность. Сложность служит также источником невизуализируемых состояний, в которых нарушается система защит" [158].
Описанная технология основана на априорном задании состояний и их визуализации, и поэтому хочется надеяться, что она, обладая минимализмом [178], по крайней мере для систем логического управления и "реактивных" систем является приближением к "серебряной пуле" [158] в части создания качественных программ, тем более, что Ф.Брукс в этой работе отозвался благосклонно только о подходе Д.Харела, сравнение с которым выполнено выше.
Эта технология может рассматриваться как одно из направлений выхода из "кризиса линейного мышления" [179], другое из которых, например, связано с заменой линейного текста гипертекстом.
Применение изложенной технологии может быть особенно важным для обеспечения требований международного стандарта IEC 880 "Программное обеспечение ЭВМ, использующихся в системах эксплуатационной надежности атомных электростанций (АЭС)", который регламентирует в том числе и процесс разработки и контроля за созданием программного обеспечения для систем управления ядерными энергетическими установками, а также порядок внесения в него изменений [180].
Применение в предлагаемой парадигме понятия "автомат" в качестве центрального понятия соответствует его месту в теории управления, что принципиально отличает ее от других парадигм программирования.