Сетевое издание
Международный студенческий научный вестник
ISSN 2409-529X

SIMULATION MODEL OF DISTRIBUTED CONTROL SYSTEM WITH APPLICATION OF FUNCTIONAL BLOCKS

Antonova E.A. 1 Martyshkin A.I. 1
1 Penza state technological university
One of the developing and promising directions in the design of control systems today is the design method based on abstract functional blocks. The article discusses the option of creating a simulation model of a distributed control system using abstract function blocks, which are software modules that perform a certain algorithm when a certain event arrives at the appropriate input of this block. The application consists of several such blocks connected by data and event links. Consider an example of development of system of mass service with the use of function blocks and XML. The functional unit of the servicing device and the functional unit of the queue type are described in detail. All the described units are shown in the block diagram in General form. At the end of the work there are fragments of program codes in XML language.
queuing system
function block
simulation
algorithm
XML language
channel
application
serving device

Развивающимся перспективным направлением в проектировании систем управления является методика проектирования на основе абстрактных функциональных блоков (ФБ) [1]. ФБ служат основой для построения приложений, распределенных между отдельными узлами управляющей сети. Распределенная информационно-управляющая система представляет собой, в данном случае, совокупность ФБ, связанных управляющими и информационными связями. Каждый блок отвечает за выполнение какой-либо части управляющего алгоритма. Таким образом, здесь имеет место объектно-ориентированный подход к созданию приложений. Существует возможность создания своих блоков их последующего использования при проектировании, а также расширения функциональности уже существующих [2, 3].

ФБ представляет собой программный модуль, выполняющий определенный алгоритм при поступлении события на соответствующий вход этого блока. Приложение состоит из нескольких таких блоков соединенных связями по данным и событиям. Для описания типов ФБ используются языковые средства, описанные в стандарте IEC 61131, а также язык XML. Взаимодействие функциональных блоков основано на передаче управляющих сигналов – событий через соединение событий и передаче необходимых данных через соединение данных.

ФБ описывается объявлением внешнего интерфейса, диаграммой управления исполнением и алгоритмами, выполняемыми в соответствии с диаграммой. Алгоритмы могут быть написаны как на языках стандарта IEC 61131, так и обычных языках структурного программирования [1].

На сегодняшний день существует несколько программных продуктов поддерживающих стандарт IEC61499 среди них можно выделить среду Function Block Development Kit (FBDK) и программный продукт IsaGRAF 5 [4].

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

Рассмотрим конкретный пример разработки с использованием ФБ системы массового обслуживания, состоящей из очереди и обслуживающего прибора. Блок очереди (QUEUE) представлен на рис. 1.

ant1.tif

Рис. 1. Функциональный блок типа «ОЧЕРЕДЬ»

Он предназначен для сбора статистических данных и управления поступлением заявок извне, а также управляет загрузкой заявки из очереди в обслуживающий прибор [5, 6]. Для включения новой заявки в очередь используется событийный вход Z_IN, управляющий входом поступления заявок Z_NUM_IN. Этим же сигналом устанавливается количество каналов соответствующего обслуживающего прибора равное значению на входе NUM_CH. Событийный вход INIT используется для задания длины очереди MAX_LENGTH.

Событие на выходе Z_ENTER, предназначенном для уведомления блока статистики о появлении в очереди новой заявки. Выход данных LENGTH используется для выдачи, текущей длина очереди, а на выходе Z_NUM_OUT – значение номера заявки присвоенного ей на входе Z_NUM_IN. Событие на выходе Z_LEAVE появляется, когда обслуживающий прибор пуст и готов к обслуживанию новой заявки. Событие FREE_OP сообщает об освобождении обслуживающего прибора. Событие на выходе Q_FULL уведомляет блок статистики о достижении очередью состояния, когда очередь занята полностью. Выход события Z_REJEKT сигнализирует о том, что вновь поступившая заявка застигла очередь заполненной и была удалена из СМО без обслуживания.

Программа, описывающая функционирование ФБ QUEUE, представлена на языке XML

<FBType Name=»QUEUE» Comment=»Model for a Rotating Shaft» >

<Identification Standard=»61499–1» />

<InterfaceList>

<EventInputs>

<Event Name=»INIT» Comment=»Запуск иициализации, установка максимальной длины очереди» >

<With Var=»NUM_CH» />

<With Var=»MAX_LENGTH» />

</Event>

<Event Name=»Z_IN» Comment=»Появление заявки» >

<With Var=»Z_NUM_IN» />

</Event>

<Event Name=»FREE_OP» Comment=»Обслуживающий прибор свободен» >

</Event>

</EventInputs>

<EventOutputs>

<Event Name=»Z_ENTER» Comment=»заявка вошла в очередь» >

<With Var=»LENGTH» />

<With Var=»Z_NUM_OUT» />

</Event>

<Event Name=»Z_LEAVE» Comment=»Заявка покинула очередь» >

<With Var=»Z_NUM_OUT» />

</Event>

<Event Name=»Q_FULL» Comment=»Очередь заполнена» >

<With Var=»LENGTH» />

</Event>

<Event Name=»Z_REJEKT» Comment=»Заявка отклонена» >

<With Var=»LENGTH» />

<With Var=»Z_NUM_OUT» />

</Event>

</EventOutputs>

<InputVars>

<VarDeclaration Name=»MAX_LENGTH» Type=»INT» Comment=»Максимальная длина очереди» />

<VarDeclaration Name=»Z_NUM_IN» Type=»INT» Comment=»Номер поступающей заявки» />

<VarDeclaration Name=»NUM_CH» Type=»INT» Comment=»Количество каналов в соответствующем обслуживающем приборе» />

</InputVars>

<OutputVars>

<VarDeclaration Name=»LENGTH» Type=»INT» Comment=»Текущая длина очереди»/>

<VarDeclaration Name=»Z_NUM_OUT» Type=»INT» Comment=»Номер заявки покидающей очередь» />

</OutputVars>

</InterfaceList>

</FBType>

Функциональный блок обслуживающего прибора представлен на рис. 2.

ant2.tif

Рис. 2. Функциональный блок обслуживающего прибора

Вход данных NUM_CH используется для задания количества каналов обслуживающего прибора [5, 6]. Для включения заявки в обслуживающий прибор используется вход Z_IN. При появлении события на данном входе считывается значение на входе данных Z_NUM_IN, которое содержит номер заявки, а также устанавливается время обработки заявки равное значению на входе данных GEN. Вход TIMER используется для реализации задержки подсчётом событий от таймера. После завершения обработки заявки выдаётся событие на выходе Z_LEAVE и выдается номер заявки на выходе Z_NUM_OUT, а также выдаётся текущее значение количества занятых каналов с выхода CUR_NUM.

Программа, описывающая функционирование ФБ SD, представлена на языке XML.

<FBType Name=»SD» Comment=»Блока обслуживающего прибора» >

<Identification Standard=»61499–1» />

<InterfaceList>

<EventInputs>

<Event Name=»INIT» Comment=»Запуск иициализации, установка максимальной длины очереди» >

<With Var=»NUM_CH» />

</Event>

<Event Name=»Z_IN» Comment=»Появление заявки» >

<With Var=»GEN» />

<With Var=»Z_NUM_IN» />

</Event>

<Event Name=»TIMER» Comment=»Обслуживающий прибор свободен» >

</Event>

</EventInputs>

<EventOutputs>

<Event Name=»Z_LEAVE» Comment=»заявка закончила обслуживание» >

<With Var=»Z_NUM_OUT» />

<With Var=»CUR_NUM» />

</Event>

</EventOutputs>

<InputVars>

<VarDeclaration Name=»NUM_CH» Type=»INT» Comment=»Количество каналов» />

<VarDeclaration Name=»GEN» Type=»INT» Comment=»Количество каналов»/>

<VarDeclaration Name=»Z_NUM_IN» Type=»INT» Comment=»Имя заявки поступившей на обслуживание» />

</InputVars>

<OutputVars>

<VarDeclaration Name=»CUR_NUM» Type=»INT» Comment=»Текущее количество занятых каналов» />

<VarDeclaration Name=»Z_NUM_OUT» Type=»INT» Comment=»Имя выходящей заявки» />

</OutputVars>

</InterfaceList>

</FBType>