[an error occurred while processing this directive] [an error occurred while processing this directive]

[ 1 | 2 | 3 | >>> ]


Отсюда можно скачать полный текст статьи в формате pdf (224 кб)

© 2000 А. А. Шалыто

Федеральный научно-производственный центр ГУП "НПО "Аврора"",
Санкт-Петербургский государственный институт точной механики и оптики
(технический университет)

Опубликована в журнале: "Промышленные АСУ и контроллеры". 2000. №4. С.45-50.

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

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

Одним из языков программирования программируемых логических контроллеров (ПЛК) по стандарту IEC 1131-3 [1] является язык функциональных блоков (Function Block Diagram). Этот язык в входит в состав программного обеспечения ряда программируемых управляющих систем [2] и многих ПЛК [3,4], выпускаемых ведущими в области автоматизации фирмами мира.

Этот язык входит также в ряд программных продуктов, предназначенных для программирования на нем IBM PC совместимых компьютеров [5,6].

Подход, используемый в этих разработках, обладает, по мнению автора, одним недостатком - язык функциональных блоков применяется в них как исполняемый язык спецификаций [7]. При этом исполняемой является функциональная схема, построенная из библиотечных блоков.

Однако при таком подходе открытыми остаются ответы на вопросы: откуда "берутся" функциональные схемы и тесты для их проверки?

Так как известные подходы не отвечают на эти вопросы, то говорить о построении программ на этом языке с гарантированным качеством при применении указанных подходов не приходится.

Перечисленные выше недостатки могут быть устранены при использовании
SWITCH-технологии [8,9], в рамках которой предлагается использовать два уровня языков: алгоритмизации (спецификации) и программирования.

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

В [8] изложены различные методы построения функциональных схем по графу переходов, которые основаны на формальном получении по этому графу системы булевых формул (СБФ), по которой также формально строится искомая функциональная схема в выбранном базисе библиотечных элементов.

Однако и такой подход обладает недостатком, так как является двухэтапным. Но в рамках предложенной технологии может быть устранен, если функциональную схему строить формально непосредственно по графу переходов. Это можно осуществить, используя стандартные для логического синтеза элементы памяти - триггеры [8]. Соответствующий метод синтеза функциональных схем изложен в разд.2.

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

Это может быть обеспечено, если отказаться от триггеров и наряду с традиционными логическими элементами (например, И, ИЛИ, НЕ) применять также логические и цифровые мультиплексоры, охваченные обратной связью, а также преобразователи "десятичный код - двоичный код".

Указанные типы элементов разрешены стандартом [1] и входят в состав библиотеки [2], но, к сожалению, отсутствуют в других, известных автору, библиотеках. В открытые библиотеки такие элементы всегда могут быть введены. Соответствующий метод синтеза функциональных схем изложен в разд.3. Идея этого метода впервые описана в [10].

2. Построение функциональной схемы непосредственно по графу переходов

Для определенности выберем в качестве элементов памяти R-триггеры, для каждого из которых характерно, что если одновременно на вход сброса (вход "R") и на вход установки (вход "S") поданы единичные значения управляющих переменных, то он устанавливается в состояние "0".

Предлагаемый метод основан на фиксации в триггерах изменений значений выходных и внутренних переменных, происходящих при переходах в графе переходов автомата без выходного преобразователя, вершины которого закодированы полными двоичными кодами [8].

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

 

Рис. 1

 

Рис. 2

Эта схема строится следующим образом. Из рассмотрения графа переходов следует, что для состояния "z=1, y=0" при x=1 формирование значений переменных, определяющих следующее состояние "z=0, y=1" связано с изменением значений каждой из этих переменных: первая должна сбрасываться (R1 =1), а вторая устанавливаться (S2=1).

При переходе из состояния "z=0, y=0" в состояние "z=1, y=1", также происходящем при x=1, должны измениться значения обеих переменных, определяющих состояние - S1=1, S2=1.

При переходе из состояния "z=1, y=1" в состояние "z=1, y=0", происходящем при x=0, должно измениться значение только одной из переменных, определяющих состояние - R2=1.

При переходе из состояния "z=0, y=1" в состояние "z=0, y=0" , также происходящем при x=0, должно измениться значение только одной из переменных, определяющих состояние - R2=1.

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

 


[ 1 | 2 | 3 | >>> ]

[an error occurred while processing this directive]