APPLYING AUTOMATA-BASED PROGRAMMING TECHNOLOGY TO DEVELOP AN AUTOMATIC CONTROL SYSTEM OF A CHECKPOINT FOR PEOPLE AND VEHICLES WITH ONE ENTRY AND ONE EXIT
Abstract and keywords
Abstract (English):
An analysis of the access system, which can be installed and used for enterprises, buildings and territories, is carried out to find out how difficult it is to develop such control systems (barriers, gates and other control and security means) based on automatic programming models and tools for their implementation. The system has two barriers (designed for vehicles entering and exiting the territory) and one passage for people. Such access systems are used quite often, but, in the overwhelming majority, these control and security measures are rarely automated. Automation, due to the presence of smart devices, will reduce the time spent on vehicles and people’s passing, leaving the individual only to be an observer, with the right to intervene if it is necessary. When building a control system based on automatic programming, firstly, it is necessary to consider the technological process of the checkpoint, and secondly, to construct logic based on identifying the obvious states of the automatic system. With proper examination and detailed study of the technological process, there should be no problems with the construction of logic and the program code will work flawlessly, since it takes into account all possible behaviour options of the automated system.

Keywords:
access system, smart control, switch technology, automatic programming, control system, industry 4.0
Text
Text (PDF): Read Download

Введение

 

В работе рассмотрен процесс написания программы для автоматического управления пропускной системой. Эту систему можно успешно применять как на предприятиях, так и на частных охраняемых территориях, поскольку она существенно увеличивает пропускную способность контрольных пунктов для людей и автотранспорта [1].

 

Материалы, модели, эксперименты и методы

 

Рассмотрим пропускную систему из двух шлагбаумов, которые установлены напротив друг друга и перекрывают один участок дороги [2].

Дорога соответственно разделена на две полосы: для движения на въезд и выезд. Между шлагбаумами установлен столб, разделяющий две полосы для движения транспорта, а рядом с полосами находится дверь для пропуска людей [3]. В стойках оснований шлагбаумов установлены датчики движения для предотвращения закрывания шлагбаумов, если под ними находится какой-либо объект (человек или автомобиль). На подъездах к шлагбаумам расположены стойки, необходимые для прикладывания пропусков водителями [4]. Внешний вид данного пропускного пункта представлен на рис. 1.

 

Рис. 1. Схематическое изображение пропускного пункта с одним въездом и одним выездом:

1 – пропуск на выезд; 2 – считыватель пропуска на выезд для автомобилей; 3 – пропуск на въезд;

4 – считыватель пропуска на въезд для автомобилей; 5 – проход для пешеходов;

6 – считыватель пропуска для посетителей

Fig. 1. Schematic representation of a control point with one entry and one exit

1 – exit pass; 2 – car exit pass reader; 3 – entry pass; 4 – an entry pass reader for cars;

5 – walkway for pedestrians; 6 – pass reader for visitors

 

Программа написана на высокоуровневом языке программирования С#, далее рассмотрим основные фрагменты кода [5].

Рассмотрим, сколько всего состояний может быть для данной системы [6]:

– шлагбаумы и двери закрыты;

– шлагбаум на въезд открыт – осуществляется пропуск автомобиля, шлагбаум на выезд закрыт и двери для прохода тоже;

– шлагбаум на въезд открыт, шлагбаум на выезд открыт – осуществляется одновременный въезд и выезд автомобилей, двери для прохода закрыты;

– оба шлагбаума и двери для прохода открыты – осуществляется пропуск по всем путям сразу;

– шлагбаум на въезд закрыт, шлагбаум на выезд открыт, двери для прохода закрыты – осуществляется только выезд автомобиля;

– оба шлагбаума закрыты, а двери для прохода открыты – осуществляется только вход и выход посетителей;

– шлагбаум на въезд закрыт, шлагбаум на выезд открыт, двери для прохода открыты – осуществляется выезд автомобиля и пропуск посетителей;

– шлагбаум на въезд открыт, шлагбаум на выезд закрыт, двери для прохода открыты – осуществляется выезд автомобиля и пропуск посетителей.

Структурно программа будет представлять следующую конструкцию: ядром логики будет являться оператор множественного выбора switch, который будет переключать состояния в зависимости от условий. Условий в коде восемь: «0: шлагбаумы и двери закрыты»; «1: шлагбаум на въезд открыт» – осуществляется пропуск автомобиля, шлагбаум на выезд закрыт и двери тоже; «2: шлагбаум на въезд открыт, шлагбаум на выезд открыт» – осуществляется одновременный въезд и выезд автомобилей, двери закрыты; «3: оба шлагбаума и двери открыты» – осуществляется пропуск по всем путям сразу; «4: шлагбаум на въезд закрыт, шлагбаум на выезд открыт, двери закрыты» – осуществляется только выезд автомобиля; «5: оба шлагбаума закрыты, а двери открыты» – осуществляется только вход и выход посетителей; «6: шлагбаум на въезд закрыт, шлагбаум на выезд открыт, двери открыты» – осуществляется выезд автомобиля и пропуск посетителей; «7: шлагбаум на въезд открыт, шлагбаум на выезд закрыт, двери открыты» – осуществляется выезд автомобиля и пропуск посетителей. Программная логика обладает следующими условиями: «все закрыто», «въезд машины», «выезд машины», «въезд и выезд машины», «въезд и выезд машины и проход посетителей», «проход посетителей», «въезд машины и проход посетителей», «выезд машины и проход посетителей». Из каждого состояния возможен переход в другое при выполнении условии этого состояния. Выполнение условий состояния осуществляется при помощи срабатывания датчиков системы автоматического управления.

Условие «все закрыто» достигается при закрытии всех дверей. Об этом программа может узнать при наличии следующих сигналов от автоматической системы: если imputControl == false пропуск на въезд автомобиля не получен и outputControl == false пропуск на выезд автомобиля не получен и при этом doorInControl == false пропуск на вход посетителя не получен и doorOutControl == false пропуск на выход посетителя не получен.

Условие «въезд машины» достигается при закрытии всех дверей, кроме двери на въезд машины. Об этом программа может узнать при наличии следующих сигналов от автоматической системы: если imputControl == true пропуск на въезд автомобиля получен и outputControl == false пропуск на выезд автомобиля не получен и при этом doorInControl == false пропуск на вход посетителя не получен и doorOutControl == false пропуск на выход посетителя не получен.

Условие «въезд и выезд машины» достигается при закрытии дверей для пеших посетителей и открытии дверей на въезд и выезд машины. Об этом программа может узнать при наличии следующих сигналов от автоматической системы: если imputControl == true пропуск на въезд автомобиля получен и outputControl == true пропуск на выезд автомобиля получен и при этом doorInControl == false пропуск на вход посетителя не получен и doorOutControl == false пропуск на выход посетителя не получен.

Условие «проезд машин и проход посетителей» достигается при открытии всех дверей. Об этом программа может узнать при наличии следующих сигналов от автоматической системы: если imputControl == true пропуск на въезд автомобиля получен и outputControl == true пропуск на выезд автомобиля получен и при этом doorInControl == true пропуск на вход посетителя получен или doorOutControl == true пропуск на выход посетителя получен.

Условие «выезд машины» достигается при закрытии всех дверей, кроме двери на выезд машины. Об этом программа может узнать при наличии следующих сигналов от автоматической системы: если imputControl == false пропуск на въезд автомобиля не получен и outputControl == true пропуск на выезд автомобиля получен и при этом doorInControl == false пропуск на вход посетителя не получен и doorOutControl == false пропуск на выход посетителя не получен.

Условие «проход посетителей» достигается при закрытии всех дверей, кроме двери на вход и выход пеших посетителей. Об этом программа может узнать при наличии следующих сигналов от автоматической системы: если imputControl == false пропуск на въезд автомобиля не получен и outputControl == false пропуск на выезд автомобиля не получен и при этом doorInControl == true пропуск на вход посетителя получен или doorOutControl == true пропуск на выход посетителя получен.

Условие «выезд машины и проход посетителей» достигается при закрытии дверей для возможности въезда, открытии двери для возможности выезда и двери на вход и выход пеших посетителей. Об этом программа может узнать при наличии следующих сигналов от автоматической системы: если imputControl == false пропуск на въезд автомобиля не получен и outputControl == true пропуск на выезд автомобиля получен и при этом doorInControl == true пропуск на вход посетителя получен или doorOutControl == true пропуск на выход посетителя получен.

Условие «въезд машины и проход посетителей» достигается при закрытии дверей для возможности выезда, открытии двери для возможности въезда и двери на вход и выход пеших посетителей. Об этом программа может узнать при наличии следующих сигналов от автоматической системы: если imputControl == true пропуск на въезд автомобиля получен и outputControl == false пропуск на выезд автомобиля не получен и при этом doorInControl == true пропуск на вход посетителя получен или doorOutControl == true пропуск на выход посетителя получен.

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

В коде программы присутсвует оператор do while и конструкция:

do

{

 gateInOpen = true; ( или gateOutOpen = true; )

}

 while ( inNoEmpty == false ) ( или while ( outNoEmpty == false ) )

Она необходима для предотвращения закрытия дверей при наличии людей или автомобилей в дверном проеме или шлагбауме, так как запрещает закрытие дверей на вход gateInOpen = true или на выход gateOutOpen = true пока на входе кто-то есть inNoEmpty == false или на выходе outNoEmpty == false.

Каждое состояние диктует свои команды исполнительным усутройствам.

Состояние 0: шлагбаумы и двери закрыты выдает директивы gateInOpen = false команда закрыть въездной шлагбаум gateOutOpen = false команда закрыть выездной шлагбаум doorOpen = false команда закрыть двери для посетителей.

Состояние 1: шлагбаум на въезд открыт выдает директивы gateInOpen = true команда открыть въездной шлагбаум gateOutOpen = false команда закрыть выездной шлагбаум doorOpen = false команда закрыть двери для посетителей.

Состояние 2: шлагбаум на въезд открыт, шлагбаум на выезд открыт выдает директивы gateInOpen = true команда открыть въездной шлагбаум gateOutOpen = true команда открыть выездной шлагбаум doorOpen = false команда закрыть двери для посетителей.

Состояние 3: оба шлагбаума и двери открыты выдает директивы gateInOpen = true команда открыть въездной шлагбаум gateOutOpen = true команда открыть выездной шлагбаум doorOpen = true команда открыть двери для посетителей.

Состояние 4: шлагбаум на въезд закрыт, шлагбаум на выезд открыт, двери закрыты выдает директивы gateInOpen = false команда закрыть въездной шлагбаум gateOutOpen = true команда открыть выездной шлагбаум doorOpen = false команда закрыть двери для посетителей.

Состояние 5: оба шлагбаума закрыты и двери открыты выдает директивы gateInOpen = false команда закрыть въездной шлагбаум gateOutOpen = false команда закрыть выездной шлагбаум doorOpen = true команда открыть двери для посетителей.

Состояние 6: шлагбаум на въезд закрыт, шлагбаум на выезд открыт, двери открыты выдает директивы gateInOpen = false команда закрыть въездной шлагбаум gateOutOpen = true команда открыть выездной шлагбаум doorOpen = true команда открыть двери для посетителей.

Состояние 7: шлагбаум на въезд открыт, шлагбаум на выезд закрыт, двери открыты выдает директивы gateInOpen = true команда открыть въездной шлагбаум gateOutOpen = false команда закрыть выездной шлагбаум doorOpen = true команда открыть двери для посетителей.

Ниже по тексту для наглядности представлен фрагмент кода с функцией goToCase и основной частью программы описывающий первое состояние автоматизированной системы управления.

С текстами программы можно ознакомиться в репозитории https://github.com/pavel–proger/AutomaticControl.

Определимся с переменными:

bool imputControl; // пропуск на въезд автомобиля получен.

bool outputControl; // пропуск на выезд автомобиля получен.

bool doorInControl; // пропуск на вход посетителя получен.

bool doorOutControl; // пропуск на выход посетителя получен.

bool inNoEmpty; // перед въездным шлагбаумом находится посторонний объект.

bool outNoEmpty; // перед выездным шлагбаумом находится посторонний объект.

bool gateInOpen; // команда открыть въездной шлагбаум, где true – открыть, а false – закрыть.

bool gateOutOpen; // команда открыть выездной шлагбаум, где true – открыть, а false – закрыть.

bool doorOpen; // команда открыть двери для прохода посетителей, где true – открыть, а false – закрыть.

int gateControl; // состояние пропускной системы.

void goToCase ( )

{ if ( imputControl == false and outputControl == false and (doorInControl == false or doorOutControl == false) )

{

 gateControl = 0;

}

else if ( imputControl == true and outputControl == false and (doorInControl == false or doorOutControl == false) )

{

 gateControl = 1;

}

else if ( imputControl == true and outputControl == true and (doorInControl == false or doorOutControl == false) )

{

 gateControl = 2;

}

else if ( imputControl == true and outputControl == true and (doorInControl == true or doorOutControl == true) )

{

 gateControl = 3;

}

else if ( imputControl == false and outputControl == true and (doorInControl == true or doorOutControl == true) )

{

 gateControl = 4;

}

else if ( imputControl == false and outputControl == false and (doorInControl == true or doorOutControl == true) )

{

 gateControl = 5;

}

else if ( imputControl == false and outputControl == true and (doorInControl == true or doorOutControl == true) )

{

 gateControl = 6;

}

else if ( imputControl == true and outputControl == false and (doorInControl == true or doorOutControl == true) )

{

 gateControl = 7;

}

}

switch ( gateControl )

case 0: // шлагбаумы и двери для прохода закрыты.

gateInOpen = false;

gateOutOpen = false;

doorOpen = false;

goToCase ( );

break;

}

 

Результаты

 

В данном случае нельзя было обойтись четырьмя состояниями. Одно, когда всё закрыто и по одному открытому состоянию на каждое из пропускных устройств, потому что, в таком случае, при одном открытом устройстве возникают проблемы с регулированием других устройств, так как каждое определённое состояние системы управления требует в данном случае чёткого контроля всех устройств системы. Из-за этого код программы станет больше и сложнее, но при этом система будет работать надежнее [7]. Switch – технология является ещё одним названием технологии автоматного программирования. Это связано с тем, что данная методика использует оператора множественного выбора switch для выбора устойчивого состояния (в коде выше можно это увидеть) [8]. Программный код в виде блок-схемы представлен на рис. 2.

Рис. 2. Представление программного кода ввиде алгоритма (блок-схемы)

Fig. 2. Representation of program code in the form of an algorithm (block-diagram)

 

Заключение

 

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

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

References

1. Kanzhelev S.Yu., Shalyto A.A. The Use of Graph Diagrams and Transition Graphs in MSVisio Format Into Program Source Codes for Various Programming Languages (MetaAuto Tool). Saint Petersburg: National Research University Institute of Fine Mechanics and Optics; 2005.

2. Khairullina L.I., Khairullin I.R., Chizhova M.A. Digitalization in the Field of Occupational Safety and Industrial Safety: The Main Aspects of the Issue. Age of Quality. 2022:141-153.

3. Shalyto A.A. Methods for Hardware and Software Implementation of Algorithms. National Research University Institute of Precision Mechanics and Optics. Saint Petersburg: ITMO; 2005.

4. Normand V, Exertier D. Model-Driven Systems Engineering: SysML & the MDSysE Approach at Thales. In: Model Driven Engineering for Distributed Real-Time Embedded Systems. John Wiley & Sons; 2005.

5. INCOSE Systems Engineering Handbook: A Guide for System Life Cycle Processes and Activities, 4th ed. Wiley; 2015.

6. Tatarchevsky V.A. Switch - Technology in Logical Control Problems. Software Products and Systems. 2006;5:30-32.

7. Shalyto A.A., Tukkel N.I. Switch Technology - An Automated Approach to Developing Software for Reactive Systems. Programming. 2001;5:45-62.

8. Lipkin E. INDUSTRY 4.0: Smart Technologies are a Key Element in Industrial Competition. Moscow: Ostek-SMT; 2017.

9. Shalyto A.A. Algorithmization and Programming for Logic Control Tasks. Saint Petersburg State University ITMO; 1998.

10. Polikarpova N.I., Shalyto A.A. Automa-Based Programming. Saint Petersburg State University ITMO; 2007.

Login or Create
* Forgot password?