Язык CFD

Общие сведения

В интегрированной среде разработки CannyLab, для программирования ПЛК CANNY используется язык программирования CANNY Function Diagram (CFD). Данный язык имеет много общего с языком диаграмм функциональных блоков Function Block Diagram (FBD), используемым в промышленной автоматике, но имеет и ряд отличий.

Функциональная диаграмма

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

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

Процесс выполнения программы на языке CFD.

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

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

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

Пример правильной организации цикла в функциональной диаграмме - порядок выполнения блоков определен.

ВНИМАНИЕ! В случае если цикл организован так, что однозначно определить какой из блоков учавствующих в цикле находится правее остальных невозможно, результат работы диаграммы может оказаться неопределенным.

Пример неправильной организации цикла в функциональной диаграмме - порядок выполнения блоков не определен.

Функциональный блок

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

Функциональный блок.

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

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

Примечание: Идентификационный номер блока не влияет на порядок его выполнения при работе диаграммы и служит только для его идентификации на поле функциональной диаграммы.

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

При необходимости вручную задать номер функционального блока кликните правой кнопкой мыши по любой точке в границах функционального блока и в контекстном меню выберите команду «Изменить номер»:

Команда контекстного меню для изменения номера функционального блока.

В открывшемся диалоговом окне выберите новый номер для функционального блока.

Диалоговое окно «Изменить номер».

В результате функциональному блоку будет задан новый номер.

Результат изменения номера функционального блока.

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

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

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

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

Взаимодействие функциональных блоков.

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

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

Сеть

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

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

Сегменты сети.

Данные

В языке CFD все использующиеся данные являются 16-битными целыми неотрицательными числами в диапазоне от 0 до 65535. Результатом арифметических операций будет числовое значение из указанного диапазона, а результаты логических операций представляются значениями «1» (истина) и «0» (ложь).

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

  • При преобразовании числа к логическому значению, ноль преобразуется в значение «ложь», любое число отличное от нуля – в значение «истина».
  • В арифметических операциях логические значения «ложь» и «истина» представляются как числа 0 и 1 соответственно.
  • Инверсия на входе или выходе любого блока, автоматически преобразует его данные к логическому типу.
Преобразование данных.

Результаты арифметических операций берутся по модулю 65535. Это означает, что если результат операции превысил 65535, то из него автоматически вычитается 65536. А если результат оказался меньше нуля, то к нему прибавляется 65535 и еще единица.

Например:

\[\ 65535 + 1 = 0\]

\[\ 65535 + 2 = 1\]

\[\ 65500 + 122 = 86\]

\[\ 1 – 2 = 65535\]

\[\ 1 – 3 = 65534\]

\[\ 117 – 259 = 65294\]

Управление ресурсами контроллера

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

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

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

Так будет выглядеть диаграмма уже полностью пригодная для записи в ПЛК и управления реальным оборудованием.

Диаграмма управления светофором железнодорожного переезда, после привязки к ресурсам контроллера.

Список регистров всех доступных пользователю ресурсов контроллера находится в справочнике регистров CannyLab, который доступен пользователю в контестном меню регистра через пункт «Выбрать из списка» и через в контекстном меню входов и выходов функциональных блоков через пункт «Задать регистр».

Конфигурация определенных ресурсов контроллера требует использования специальных констант, все они поименованы и собраны в списке именованных констант CannyLab, который доступен пользователю в контестном меню константы через пункт «Выбрать из списка».

Подробное описание ресурсов контроллеров CANNY и порядка доступа к ним, рассматривается в справочном руководстве для каждого контроллера.

СМОТРИ ТАКЖЕ