Настоящая статья опубликована автором на правах ознакомления. Первоначально она опубликована научным издательством Вестник машиностроения, 2024: ссылка

Применение независимых вычислительных узлов с трёхзначной логикой для межмашинного взаимодействия гетерогенных устройств промышленной автоматизации в единой цифровой производственной экосистеме

УДК 62-5:519.685:519.17+681.58:004.2

Григорий Александрович Беднов1, Евгений Вячеславович Курнасов2, канд. техн. наук

МИРЭА – Российский технологический университет, gregorbednov@gmail.com1, kurnasov@mirea.ru2

Аннотация

В статье рассматривается новый подход к реализации исполнительных программ межмашинного взаимодействия гетерогенных устройств промышленной автоматизации, обеспечивающий их функционирование в единой цифровой производственной экосистеме. Предложен метод трансляции исполнительных программ на разнородные, используемые на производстве, промышленные устройства, посредством независимых вычислительных узлов – «нод», асинхронно взаимодействующих между собой и работающих на трёхзначной логике. Показано, что ноды могут эмулироваться, или реализованы физически и встроены в реальные устройства, не зависимо от типа этих устройств. Рассмотрен способ приведения циклических и иерархически вложенных алгоритмов межмашинного взаимодействия группы устройств к сетям нод. Приведён пример формирования топологии сети нод для управления и контроля пневмопривода.

Ключевые слова

цифровая производственная экосистема, устройства промышленной автоматизации, устройства интернета вещей, межмашинное взаимодействие, трёхзначная логика, компьютер «Сетунь», ПЛК, распределённые алгоритмы, машина состояний.

Для цитирования:

Original article

Grigory A. Bednov1, Evgeny. V. Kurnasov2🖂

Введение

Управление техническими системами при автоматизации технологических процессов, предполагает преобразование входных сигналов (от датчиков либо от оператора) в управляющие воздействия на исполнительных органах технологического оборудования. Традиционно, для этого, используется программируемый логический контроллер (ПЛК), который постоянно в одной и той же последовательности выполняет циклическую задачу: копирует в свою внутреннюю память (защищая от изменения) значения сигналов, с подключенных к нему полевых устройств, выполняет программу и полезные вычисления (определённые программистом автоматизированных систем управления), а затем "записывает" или обновляет управляющие сигналы и выводит их через выходные интерфейсы контроллера на исполнительные органы технологического оборудования. Такой принцип является классическим в автоматизации технологических процессов под управлением ПЛК.

Существующие потребности цифровизации производства не позволяют более использовать «классическую» централизованную архитектуру автоматизированной системы управления (АСУ), где единственным управляющим устройством является программируемый логический контроллер, и требуют перехода к распределённым системам управления, имеющих больший потенциал для эффективного использования современных технологий (промышленного интернета вещей, кибер-физических систем, и др.) и реализации единой цифровой производственной экосистемы.

Переход к распределению функций управления и их децентрализации при внедрении новых технологий и решений в области промышленной автоматизации затрудняется прежде всего невозможностью «механистически» перенести и распределить управляющую программу с классического ПЛК на «умное» оборудование и обратно. Так, например, строго регламентированная в ПЛК длина машинного слова, при переносе программы ПЛК на новое управляющее оборудование, имеющее другую компьютерную архитектуру, или распределении исполнительной части кода этой программы между различными гетерогенными устройствами, вследствие не совместимости, может привести не только к ошибке в исполнении кода программы, но и стать причиной поломки этого оборудования.

Кроме этого, необходимо решить проблемы синхронизации: межмашинное взаимодействие не предполагает одновременной работы – для этого требуется общий тактовый генератор. Существующие протоколы асинхронного взаимодействия, такие, как UART, решают задачу не алгоритмически, а физически – так, UART предлагает фиксировать скорость обмена информацией, например, в 9600 бит в секунду.

Вместе с этим, следует также обеспечить сохранение принципов структурированного, безопасного [1, 2] программирования АСУ, базирующихся на известном способе представления объектов и их поведения посредством “машин состояний” – моделей, использующих конечное количество состояний и переходов между ними для описания и управления поведением системы. Так, при моделировании нефункционального («сложного») поведения объекта автоматизации [3–6] целесообразно использовать конечный автомат, который достаточно хорошо структурирует программу на ПЛК [1, 7, 8].

1. Постановка задачи

Современная тенденция применения разнородных устройств промышленной автоматизации, в единой цифровой производственной экосистеме, требует прежде всего разработки нового подхода в реализации их межмашинного взаимодействия, отвечающего следующим требованиям:

Одним из решений, учитывающее данные требования, может быть применение асинхронно взаимодействующих между собой простых независимых вычислительных узлов нод, обеспечивающих не только вычисление логического значения (или иных значений, закодированных логически), но и передачу этого значения, причем как в форме передачи данных, так и в форме передачи управления (запросов и ответов). Ноды как цифровые устройства могут эмулироваться, или реализованы физически и встроены в «умное» оборудование промышленной автоматизации. Для их автоматической синхронизации может использоваться алгоритм передачи информации по трёхзначному каналу Null Convention Logic, не зависящий от физической реализации системы.

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

В связи с этим актуальной задачей является формализация принципа работы нод, как простых независимых вычислительных узлов, использующих трёхзначную логику. Поскольку связность нод при этом имеет важное значение, то целесообразно выработать подход к описанию топологии сети нод, которая формализует не только принцип взаимодействия нод, но и передачу данных и функций управления на различные физические устройства (ПЛК, контрольно-измерительные приборы, датчики, умные устройства, и др.).

2. Трёхзначная логика как логическая основа предлагаемого решения

Использование трёхзначной логики в качестве альтернативы или расширения двухзначной – давний предмет интереса и споров в информатике [9]. К примеру, сторонники трёхзначной логики утверждают, что устройства на трёхзначной логике производительнее двоичных аналогов [9, 10]. Однако аргумент производительности оспаривается их оппонентами хотя бы на том основании, что компьютеры на физически трёхзначной логике серийно никогда не производились, и даже знаменитый компьютер «Сетунь» на самом деле использовал двоично-троичное кодирование [11]. Так как одна из четырёх комбинаций бит систематически не использовалась, следовательно, имела место потеря производительности, а аргумент не имеет практических подтверждений.

Для разработки нового принципа межмашинного взаимодействия гетерогенных устройств интересным является иной аргумент той же дискуссии – утверждение, что на самом деле не на любой утвердительно-отрицательный вопрос можно дать определённый ответ («необходимо да» либо «необходимо нет») [12]. Практическим примером такого вопроса может быть, к примеру, «Ясно ли сейчас в Париже?» – скорее всего, житель любого города, кроме собственно французской столицы, не сможет без посторонней помощи ответить на этот вопрос.

Действительно, вместо третьего ответа можно задавать два утвердительно-отрицательных вопроса: вначале по готовности, например, «Вы готовы ответить на следующий вопрос?», затем вопрос по существу. Подобная в общем обязательная последовательность «вопросов» неявно использует двоично-троичное кодирование. Диалог людей, а если смотреть шире – всякое взаимодействие (в том числе межмашинное) так или иначе предполагает трёхзначную логику.

Аналогично качественным описаниям обстоит дело с количественными: чтобы описать, больше величина, меньше или равна в пределах допуска относительно эталонной, используется, по сути, троичная взвешенная система счисления. Формально это также снова можно описать несколькими связанными двоичными значениями, но содержательно это будет то же кодирование троичной информации набором бит.

Двоичное кодирование чисел со знаком в виде, например, дополнительного кода, предполагает использование машинного слова определенной длины. Это легко реализовать физически, однако влечёт ошибки времени исполнения (например, целочисленное переполнение). Троичная арифметика, в этом аспекте, может обойтись без понятия машинного слова.

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

3. Понятие ноды, особенности применения и основные команды

Для разработки нового принципа межмашинного взаимодействия, обеспечивающего переносимость исходного кода между гетерогенными устройствами и распределения между ними управляющих функций, было введено понятие ноды – крайне простого вычислительного устройства (узла), ширина машинного слова которого равна всего 1 триту. Нода исполняет одинаковую последовательность инструкций, и работает совместно с другими нодами и подключенными источниками троичных (или, в частном случае, двоичных) сигналов. На основе таких нод можно будет обеспечить работу гетерогенных устройств промышленной автоматизации в единой цифровой производственной экосистеме.

Набор логических операций нода унаследовала от компьютеров «Сетунь» и «Сетунь-70»: вместо дизъюнкции (конъюнкции) и инкремента (декремента) по модулю 3 используется сложение, умножение и константы. К такому набору функций в условиях трёхзначности, вероятно, пользователю будет проще адаптироваться [11, 13].

Нода содержит три регистра с адресами «-», «0», «+», которые можно использовать как пины входа, выхода или как однотритовую переменную. При соединении регистров двух нод предполагается, что они ведут себя как общий регистр обеих нод. Также имеется магазинная память (стек) для промежуточных вычислений. Полный набор команд приведён в таблице.

Система команд

Обозначение команды Краткое описание
dup копирование вершины стека
swap обмен вершины и подвершины стека
- положить на стек значение «-1»
mul умножение тритов
add сложение тритов с переполнением
rot циклический сдвиг трёх верхних элементов стека направо
read чтение с регистра по адресу с вершины стека
write запись значения (предвершина) в регистр (адрес на вершине)
blockwhile остановка выполнения, пока значение в регистре (адрес на вершине) равно значению предвершины
blockuntil остановка выполнения, пока значение в регистре (адрес на вершине) отлично от значения предвершины

Большинство команд, за исключением блокировок, отсылают к языку программирования Форт и при дальнейшем описании также используют постфиксную форму записи.

Остальные «команды» являются процедурами – последовательностями элементарных команд. Например, команда «+» (положить константу «+1» на стек) может быть описана как «- dup mul», то есть как возведение «-1» в квадрат, а «0» определён как «+ - add».

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

В отличие от большинства аналогичных массово-параллельных вычислительных систем, с одной стороны, отдельная нода не самодостаточна, а с другой стороны не предполагается единого физического исполнения (например, системы на кристалле) – требуется лишь совместимость представления сигналов, правильное подключение и загруженные программы.

4. Принцип взаимодействия нод. Ноды, как простые независимые вычислительные узлы, общаются по троичным каналам, образованными общими регистрами. Во избежание состояний гонки (с англ. race condition) используется асинхронный алгоритм передачи информации по трёхзначному каналу, нередко обозначаемый в литературе как Null Convention Logic [14, 15].

Алгоритм Null Convention Logic позволяет осуществлять чтение и запись данных без состояний гонки, посредством трёх состояний общего канала, и работает следующим образом:

  1. нода-«писатель» вначале читает общий регистр;

  2. если нода-«писатель» обнаружил там нейтральное значение («0»), то записывается одно из двух значений («+» или «-»)

  3. если же нода-«писатель» обнаружил на канале не нейтральное значение, то он должен ожидать нейтрального;

  4. когда нода-«читатель» обнаружил не нейтральное значение («+» или «-»), оно кладётся на стек как результат чтения, после чего нода-«читатель» пишет своё нейтральное значение, тем самым освобождая канал.

В работе [16] доказывается практическая возможность использования однопроводного физически троичного канала вместо двоично-троичного кодирования.

Асинхронное одностороннее чтение в командах нод (см. таблицу) представляется последовательностью команд, например как в этом фрагменте программы «Определение read1»:

( read1: A−\>M\[A\] )
dup ( A A )
dup ( A A A )
0 swap ( A A 0 A )
blockwhile ( A A )
read ( AM\[A\] )
swap ( M\[A\] A )
0 swap ( M\[A\] 0 A )
write ( M\[A\] ).

Здесь, в скобках-комментариях, по традиции форт-подобных языков, прилагается состояние верхней части стека.

Асинхронная односторонняя запись может быть представлена так, как в данном фрагменте программы «Определение write1»:

( write1: X A−\> )
dup ( X A A )
0 ( XAA 0 )
swap ( X A 0 A )
blockuntil ( X A )
write ( ).

Двухстороннее чтение и запись сводятся к иной трактовке не-нейтральных значений: значение «+» понимается как сигнал в одном направлении, другое значение «-» – в обратном. Такая вариация алгоритма плохо пригодна к передаче данных, зато отлично подходит для передачи управления (запросов и ответов).

5. Принцип формирования сети нод. Топология организации сети нод предполагает работу, выражаемую в последовательных состояниях конечного автомата, которую необходимо выполнить полностью, и только в этом случае работа этого автомата может считаться завершенной.

Управляемый цикл состоит из: контроллера цикла, который по двунаправленной асинхронной связи принимает запрос активации извне сети и возвращает туда же ответ по факту отработки, и так называемых «маршрутизаторов состояний», каждый из которых при пробуждении вызывает свою ноду обработчика состояния, и, получив от неё ответ по двухсторонней асинхронной связи, вызывает следующий «маршрутизатор состояний». Таким образом, имеет место рекурсия: каждая текущая нода вызывает следующую, а сама временно останавливается, пока наконец вызовы не доходят до контроллера цикла. Контроллер цикла, будучи одновременно первой вызывающей и последней вызываемой нодой, наконец отправляет «волну ответов» в обратную сторону, возвращает управление через все ноды. Когда вся цепочка вернёт управление, цикл считается завершённым, контроллер может отослать завершающий ответ и ждать нового запроса.

Обозначая посылку двухстороннего сигнала как процедуру send, а приёма как get, а посылку сигнала и ожидание ответа (то есть, инвертированного сигнала) как synccall (синхронный вызов), простой управляемый цикл будет выглядеть так, как показано на рис. 1.

Рис. 1. Схема топологии сети нод вида «Управляемый цикл»

На рис. 1 для наглядности используются стрелки с направлением. Эти направления показывают движение сигналов от ноды-«клиента» к ноде-«серверу», показывают взаимоподчинение нод между собой. Следует обратить внимание: стрелками показываются только запросы (обратное направление движения ответов скрыто). Следует обратить внимание, что сигнал передаётся в обоих направлениях (запросы в одну сторону, ответы в обратную).

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

Таким образом, можно представить любые циклические (возможно, иерархически вложенные) алгоритмы межмашинного взаимодействия группы устройств в виде сетей простых асинхронно взаимодействующих между собой нод, работающих на трёхзначной логике.

6. Пример формирования топологии сети нод для управления и контроля пневмопривода. Одними из самых востребованных и часто применяемых приводов в современной технике являются пневматические привода (пневмопривода). Они помогают решать сложнейшие задачи автоматизации производственных процессов и управления различным технологическим оборудованием. За последние несколько лет область их влияния расширилась и на решение различных логических задач.

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

Чтобы добавить подсеть нод «Управляемый цикл» из предыдущего пункта, выделяем набор состояний пневмопривода, последовательно сменяющих друг друга:

Если мы хотим, чтобы данные действия циклически сменяли друг друга на постоянной основе, то необходима дополнительная нода, постоянно вызывающая «Управляемый цикл» на каждой его итерации, а также сделать её управляемой по сигналам с кнопок «Старт» и «Стоп».

Эта нода, к которой подключается вся подсеть «Управляемый цикл», будет работать по аналогии с RS-триггером. Пусть все кнопки (включая кнопку «Стоп», которая обычно подключается инверсно) посылают «+» на пин при включении, в противном случае – «0». Нода «RS-триггер» использует два пина как строго входные и один как вход-выход (для сохранения текущего состояния), определяя накопляемое значение по алгоритму:

  1. сохранить значение, если не нажато больше ничего другого – требуется для повторения действий подсетью «Управляемый цикл»;

  2. включить цикл, если нажата только кнопка «Старт»;

  3. выключить цикл, если нажата кнопка «Стоп» без прочих исключений.

Возможны более экономичные с точки зрения производительности решения, но наиболее универсальной будет функция, которая определена как:

$f\left( x_{1},x_{2} \right) = \left\{ \begin{array}{r} x_{1}\left( x_{2} = 0 \right) \\ x_{2}\left( x_{2} \neq 0 \right) \end{array} \right.\ $ .

Данная функция реализуется как «неравное» голосование: осуществляется пороговое сложение (сложение без переполнения) второго аргумента с первым, после чего результат снова порогово складывается со вторым (предпочитаемым, «старшим») значением. На схеме (рис. 2) эта функция обозначена как eldervote. В свою очередь, пороговое сложение также реализуемо через предложенную выше систему команд. Таким образом, если мы умножим на «-1» значение, прочитанное с кнопки «Стоп», сразу после чтения, мы сможем записывать на «выход» нашего триггера два значения: «+», «-» (также вначале там может быть «0»).

И, наконец, приведение «-» к «0», сводится к вызову «+» функции SELECT, которая возвращает «+», только если значение равно «+», и «0» в остальных случаях, и которую также возможно реализовать в имеющейся системе команд. Здесь функция SELECT – это функция-индикатор равенства аргументов, которая реализуется в имеющемся наборе команд, например, как в следующем фрагменте программы «Определение функции SELECT»:

( SELECT: A B =\> A=B, иначе 0 )
-1 mul ( A-B )
\+ ( A-B )
dup mul ( /A-B/^2^ )
-1 + ( /A-B/^2^-1 )
dup mul ( //A-B/^2^-1/^2^ ).

Связь между нодой «RS-триггер» и управляемым циклом требует сигнала лишь в одном направлении. Именно поэтому мы удалим ненужное возвращение ответа («- 0 send») из ноды контроллера цикла.

Общая программа из двух состояний состоит из:

  1. подсети «управляемый цикл», с одним контроллером цикла и двумя «маршрутизаторами состояний», которые передают сигналы управления;

  2. двумя обработчиками состояний, которые изменяют направление движения штока пневмоцилиндра и обрабатывают условия перехода (сигнал с соответствующего состоянию концевого датчика);

  3. ноды-обработчика нажатия кнопок «Старт» и «Стоп», аналогичны RS-триггеру.

Переход между состояниями (т.е. окончание работы обработчика состояния) происходит по получении сигналов с концевых датчиков. Обработчик состояния работает в режиме синхронного «сервера», и его работа сводится к последовательности действий:

  1. ожидание запроса (от соответствующей состоянию ноды цикла);

  2. запись требуемого значения на пин движения штока (в зависимости от состояния и способа подключения, например, «+» для движения в одну сторону и «-» для возвратного движения);

  3. ожидание «запроса» (сигнала «+») от датчика положения (требуется для перехода к следующему состоянию);

  4. возвращение ответа управляющему циклу.

Таким образом, на основе описания алгоритма работы пневмопривода, была получена топология сети нод (рис 2), в которой связи между нодами распределены в виде машины состояний, в соответствии с описанием этого алгоритма.

Рис. 2. Сеть нод для решения задачи управления пневмоприводом, контролируемого двумя датчиками положения

Легко заметить, что ноды s1, b1 связаны не только с состоянием выдвижения, но и с одним из концевых датчиков. Ноды b2, s2 – с состоянием задвижения и соответствующим другим концевым датчиком. Наконец, ноды c, io могут быть физически локализованы в датчиках. С другой стороны, любые ноды могут быть эмулированы внутри ПЛК.

7. Анализ результатов работы экспериментального программного обеспечения. Для проверки работоспособности полученной топологии сети нод (рис. 2), были разработаны две программы – транслятор процедур в последовательности команд и среда исполнения на языке программирования Go (современного Си-подобного языка со встроенной поддержкой многозадачности), в которой каждая нода была представлена виртуальной машиной с независимым потоком исполнения.

Программа транслятора преобразует все процедуры алгоритма управления пневмоприводом в последовательности команд (таких как – суммировать триты, загрузить трит со стека или на стек, ожидать значения на пине, и т.д.), исполняемых нодами в ПЛК, или ином управляющем устройстве, для реализации им работы пневмопривода в соответствии с этим алгоритмом.

Среда исполнения на языке программирования Go [17], исполнила сформированную на нодах программу управления пневмоприводом, что проверено работой пневмоцилиндра в среде имитационного моделирования Factory I/O [18].

В результате было подтверждено, что наш алгоритм, учитывая введённые требования на управляемый цикл, работает как и предполагалось: циклическая полезная работа пневмопривода выполняется сразу после нажатия кнопки «Старт», шток моностабильного пневмоцилиндра совершает циклические движения, сменяя направление движения при срабатывании датчика положения, а при нажатии кнопки «Стоп» останавливается на старте следующего цикла, обязательно довершая уже начатый.

В настоящий момент идёт разработка исполнительной среды на языке C и некоторых языках стандарта МЭК, которые широко поддерживаются промышленными контроллерами, что позволит протестировать предложенное решение в промышленных распределенных устройствах и системах.

В заключении стоит отметить, что обеспечение переносимости исходного кода программ и распределение управляющих функций через сеть независимых вычислительных узлов – нод, асинхронно взаимодействующих между собой и работающих на трёхзначной логике, даёт возможность гетерогенным устройствам промышленной автоматизации взаимодействовать между собой в единой цифровой производственной экосистеме. При этом, информация от отдельных нод или их сетей распределяется на различные устройства не зависимо от их типа (например, на ПЛК – данные с нод 1…5, на «умное» оборудование – данные с нод 6…8, и т.д.).

СПИСОК ИСТОЧНИКОВ

1. Medvedı́k M., Ždánsky J. Safety PLC programming based on UML statechart // ELEKTRO. 2020. P. 1–5. DOI: 10.1109/ELEKTRO49696.2020.9130307.

2. Метод автоматизированного программирования ПЛК с использованием системы динамического моделирования Simintech // В. А. Холопов, М. А. Макаров, Д. В. Колонутов, А. М. Володина // Промышленные АСУ и контроллеры. 2021. № 4. С. 30–36. DOI: 10.25791/asu.4.2021.1273.

3. Voronkov A. D., Diane S. A. Continuous genetic algorithm for grasping an object of a priori unknown shape by a robotic manipulator // Russian Technological Journal. 2023. V. 11. N. 1. P. 18-30. DOI: 10.32362/2500-316X-2023-11-1-18-30.

4. Chizhikov V. I., Kurnasov E. V. Interaction of Two Robots in Synchronized Operation // Russian Engineering Research. 2020. V. 40. N. 10. P. 804–808. DOI: 10.3103/S1068798X20100081.

5. An intelligent monitoring system for execution of machine engineering processes / V. A. Kholopov, E. N. Kashirskaya, A. G. Shmeleva, E. V. Kurnasov // Journal of Machinery Manufacture and Reliability. 2019. V. 48. N. 5. P. 464–475. DOI: 10.3103/S1052618819020079.

6. Kurnasov E. V., Malyshkin A. B. Control of the selective hydrogenation of acetylene compounds // Russian Engineering Research. 2017. V. 37. N. 5. P. 393–396. DOI: 10.3103/s1068798x1705015x.

7. Zajac W., Andrzejewski G., Krzywicki K., Królikowski T. Finite state machine based modelling of discrete control algorithm in LAD diagram language with use of new generation engineering software // Procedia Computer Science. 2019. V. 159. P. 2560–2569. DOI: 10.1016/j.procs.2019.09.431.

8. McCarthy D., McMorrow D., O’Dowd, N. P., McCarthy C. T., Hinchy E. P. A Model-Based Approach to Automated Validation and Generation of PLC Code for Manufacturing Equipment in Regulated Environments // Applied Sciences. 2022. V. 12, N. 15. P. 7506. DOI: 10.3390/app12157506.

9. Cassee P. R., Strutt M. J. O. Is there any advantage of ternary logic as compared with binary? // IEEE Transactions on Computers. 1970. V. 19. N. 6. P. 559. DOI: 10.1109/T-C.1970.222976.

10. Wang X. Y., Dong C. T., Wu Z. R., Cheng Z. Q. A review on the design of ternary logic circuits // Chinese Physics B. 2021. V. 30. N. 12. P. 128402. DOI: 10.1088/1674-1056/ac248b.

11. Brusentsov N. P., Alvarez J. R. Ternary computers: the Setun and the Setun 70 // Perspectives on Soviet and Russian Computing: First IFIP WG 9.7 Conference, SoRuCom 2006, Petrozavodsk, Russia, July 3-7, 2006, Revised Selected Papers. Springer Berlin Heidelberg. 2011. P. 74–80. DOI: 10.1007/978-3-642-22816-2_10.

12. Sulem E., Hay J., Roth D. Yes, No or IDK: The Challenge of Unanswerable Yes/No Questions. // Proceedings of the 2022 Conference of the North American Chapter of the Association for Computational Linguistics: Human Language Technologies, Seattle, United States. 2022. P. 1075–1085. DOI: 10.18653/v1/2022.naacl-main.79.

13. Zhogolev Y. A. The order code and an interpretative system for the Setun’ computer // USSR Computational Mathematics and Mathematical Physics. 1962. V. 1. N. 3. P. 563-578. DOI: 10.1016/0041-5553(63)90153-8.

14. Felicijan T., Furber S. B. An asynchronous ternary logic signaling system // IEEE Transactions on Very Large Scale Integration (VLSI) Systems. 2003. V. 11. N. 6. P. 1114–1119. DOI: 10.1109/TVLSI.2003.819571.

15. Khodosevych D., Sakib A. A. Evolution of NULL convention logic based asynchronous paradigm: an overview and outlook // IEEE Access. 2022. V. 10. P. 78650–78666. DOI: 10.1109/ACCESS.2022.3194028

16. Andrawes S. S. R. Single rail ternary null convention logic architecture for digital signal processing applications: Dissertation. RMIT University. 2020.

17. Clark K. L., McCabe F. G. Ontology oriented programming in go! // Applied Intelligence. 2006. V. 24. P. 189–204. DOI: 10.1007/s10489-006-8511-x.

18. Vargas H., Heradio R., Donoso M., Farias G. Teaching automation with Factory I/O under a competency-based curriculum // Multimedia Tools and Applications. 2023. V. 82. P. 19221–19246. DOI: 10.1007/s11042-022-14047-9.