Codesys пример программы на языке st

Необходимо подключить нечто по модулю Owen (Master) и интерфейсу RS-485 со следующими параметрами: скорость соединения – 115200 бит/сек, длина данных – 8 бит, стоповый бит – 1, адрес подключаемого модуля – 17.
[Более подробно. ]

Пожарная сигнализация здания на CFC и ST

В здании есть 2 комнаты, в каждую из которых установлено 3 датчика пожарной сигнализации. Сигнализация в каждой комнате срабатывает только в том случае, если сработают 2 датчика из 3-х.
[Подробней. ]

Пожарная сигнализация помещения на LD

Есть помещение, в котором установлены 2 датчика пожарной сигнализации (см. рис. 1). Требуется контролировать состояние помещения, при этом при срабатывании одного из датчиков выдавать световое предупреждение, а при срабатывании 2-х датчиков – звуковой тревожный сигнал.
[Более подробно. ]

Пожарная сигнализация помещения на ST

Есть некое помещение, в котором установлены 2 датчика: один реагирует на открытый огонь «D1», другой – на задымление «D2». Требуется контролировать состояние данного помещения и в случае срабатывания одного из датчиков посылать на пульт предупреждение, а в случае срабатывании 2-х датчиков – тревожный сигнал.
[Полный текст. ]

Резервные насосы в группе на CFC и ST

В цеху есть две группы насосов по два насоса (n1, n2, n3, n4). В каждой группе первый насос работает в штатном режиме, а второй насос включается, если 2 из 3 аварийных датчиков включатся.
[Читать далее. ]

Сверлильный станок на языке SFC

Необходимо в системе CoDeSys эмулировать работу сверлильного станка на языке SFC с визуализацией процесса сверления.
[Более подробно. ]

Схема пуска электродвигателя на языке LD

Есть электродвигатель и 2 кнопки «Пуск» и «Стоп» (рис. 1). Нужно написать программу на я зыке LD по управлению работой электродвигателя.
[Читать далее. ]

Турникет на языке CFC

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

Турникет на языке ST

Нужно организовать работу турникета в здании, при этом на пульте охраны должна загораться лампа в том случае если в здании есть люди и гаснуть при выходе всех людей. Блок-схема примерного алгоритма программы показана на рис.1.
[Читать еще. ]

Управление бойлером на CFC

Есть бойлер, которым нужно управлять. Бойлер управляется 2 кнопками: Пуск и Стоп, в случае непредвиденных ситуаций (аварии или пожара) бойлер должен автоматически отключаться, при этом система управления подает тревожный сигнал на лампу.
[Читать полностью. ]

Управление бойлером на языке IL

Имеется некий бойлер, который нужно включить одной кнопкой и выключить другой. Перед включением и во время работы необходимо контролировать тревожные состояния (аварию, пожар) и при их возникновении незамедлительно вырубить ТЭН бойлера. Примерный алгоритм управления бойлером показан на рис. 1.
[Читать полностью. ]

Управление бойлером на языке ST

Сначала будет правильней привязать наши переменные к физическим входам/выходам ПЛК. Для этого нужно в Организаторе объектов выбрать закладку «Ресурсы», на которой расположен элемент «Конфигурация ПЛК». В нашей программе будет задействовано 4 дискретных входа и 2 дискретных выхода (рис. 1).
[Читать еще. ]

Управление задвижкой на CFC

Нужно реализовать плавное открытие и закрытие задвижки, при этом вывести степень ее закрытия/открытия в процентах и значение управляющего сигнала в диапазоне 4 – 20 мА.
[Читать далее. ]

Управление задвижкой на ST

Есть задвижка и необходимо реализовать ее плавное открытие и закрытие, при этом выводить на визуализацию степень ее закрытия/открытия в процентах и значение управляющего сигнала в диапазоне 4 – 20 мА. Управление задвижкой осуществляется двумя кнопками.
[Более подробно. ]

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

Есть котел/бойлер к которому через насос подводится вода. При нажатии на кнопку ПУСК происходит включение котла с задержкой 2 сек., а при нажатии на кнопку СТОП отключение котла и включение насоса с задержкой 3 сек.
[Читать еще. ]

Формирование ШИМ-сигнала

При изменении аналогового сигнала с датчика в диапазоне [0; 20] мА необходимо изменять скважность этого сигнала в диапазоне [20; 50] % от исходного, при этом задан период ШИМ-сигнала равный 1 сек.
[Полный текст. ]

Источник: mc-plc.ru

Новиков С.О. Лекции по CoDeSyS

графических языках порядок входных параметров определяется сверху – вниз.

(Вставить рисунок.)

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

Например: Y:=MAX(x1,x2) (*Возвращает наибольшее по значению входных параметров*)

Y:=MAX( x2,x1) (*Возвращает то же*)

Присваивание значений параметроам ф-ии.

Вторым способом вызова ф-ии предусмотрено непо средственное присвоение значний

параметрам ф-ии по именам. Пример: stHello:=concat(st:=’Добрый’, str2:=’День’); Тоже самое

можно записать так: stHellow := (‘Добрый’,_’день’); Возможны модификации

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

будет принимать значение день. Если в программе уже определена пе ременная с именем

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

нелогичным: stHellow:=concat(str1:=str1 , str2:=’День’) На самом деле здесь всё правильно т.к.

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

вызова функции предполагает возможность задав ать параметры в произвольном порядке и

опускать некоторые из них. (Данная вер сия 2.4 CoDeSys не обеспечивает ф-ям такой возможности.

С версией 3 всё работает)

Ф-ии с переменным числом параметров.

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

случае. Например для ф-ии AND можно ограничить ся двумя входами и использовать «лесенку

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

Данная конструкция не очень красивая, логи чней было бы иметь возможность расширить ф-ию:

Лекция CoDeSys (Новиков).

Так как показано на рисунке. МЭК предусматривает т акую возможность. В текстовых языках

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

языках щелчком на правой клавиши мы ши и выбор добавить параметр.

Операторы и ф-ии.

Операторы – это символы определённых операций . Их можно определить и как ф-ии наделённые

Читайте также:
Как назвать программу интервью

определёнными привилегиями. Во-первых вход для оператора т ранслятор задаёт сам и е требует

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

st например математич операторы (сложение, вы читание, умн., деление.) имеют традиционное

представление в символьных языках. Соответсвенно + — * / . В графич языках эти опер-ры выглядят

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

Y:=SUB(MUL(4,x),3); Но символьно представление проще и нагляднее Y:=4*x-3 , В математике ещё

проще Y=4x-3 Все записи равнозначны по смыслу. Символьное представление понятн ее и даёт

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

Перегрузка ф-ий и операторов.

Существует много ф-ий имеющ их смысл для переменных разного типа. Например ф-ия MAX

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

оперирующих с переменными типа Sin и Real, д олжен быть разным . Но с т. зрения МЭК – это одна

и та же ф-ия. Автоматическая генерация ра зного кода для одной ф-ии, в зависимости от типа

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

для транслятора. Перегрузка операторов прозрачна дл я компилятора только с т.зрения типов. В

пользовательских ф-ях это приводи т к сложно локализуемым ошибкам. Многие стандартные ф-ии

и операторы поддерживают перегрузку. Тип самой ф -ии определяется требованием

совместимости с входными параметрами. Так, если ф-ия MAX, с входными параметрами типа INT,

в этом случае выход будет типа INT.

Пример ф-ии.

Рассмотрим пример ф-ии целого типа с именем Near_by . Возвращающий ближайший к образцу

вариант обращения из двух входных переменных in1, in2, paM.

FUNKTION NEAR_by: INT

PaM, in1, in2: INT;

На языке ST тело ф-ии выглядит следующи м образом:

IF ABS(in1-paM)

NEAR_by:=Iin1;

NEAR_by:=Iin2;

Локальные переменные в этом примере не использованы, соотве тственно секция объявления

переменных VAR отсутствует. На языке IL данная прога б удет выглядеть так:

Лекция CoDeSys (Новиков).

JMPC ret_in2

ST NEAR_by

ST NEAR_by

В данном примере исп-ся промежуточная переменная tmp , кото рую необходимо объявить в

разделе объявления локальных переменных.

Аналогичная ф-ия на языке FBD может быть реализо вана с применением бинарного

мультиплексора.

Ограничение возможностей ф-ии.

Можно ли написать ф-ию с внутренней п амятью? Ответ – можно, если пойти на хитрость и

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

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

этом случае можо сделать ф-ию счётчик, подсчитывающ их число вызовов ф-ии в глобальной

переменной. Создать несколько независимых счётчиков на осно ве такой ф-ии невозможно. Кроме

того можно обратиться из ф-ии к неким аппа ратным средствам посредством прямоадресуемых

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

значения для одинаковых входных данных. Но на с амом деле глобальная переменная и

аппаратный ресурс ф-ии не при надлежат. В этом случае они для ф-ии являются формальными

параметрами. Разница в том, что законный параме тры для ф-ии готовят вызывающий код, а

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

заданные начальные значения, получают их всякий раз в на чале работы, если начальные значения

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

тратить на это время и возьмёт случайны е значения – это зависит от реализации системы.

Некоторые генераторы кода имеют специальный флажок в н астройках, который предоставляет

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

транслятор размещает локальные переменные и параметры ф -ии в стеке, но это не всегда так.

Возможно, что из соображений оптимизации и ли в силу аппаратных ограничений (некоторые

процессоры имеют очень маленький стек) для ф-ии отводи тся место в статической области памяти

данных. Тогда может получиться, что ф-ия может со хранять свои значения между вызовами – это

Лекция CoDeSys (Новиков).

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

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

состояния. Поэтому они и не используются в ф-ях. C экземплярами функциональных блоков

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

будут принимать начальные значения при каждом вы зове ф-ии. Иногда это не существенно.

CoDeSys не ограничивает такую возможность следуя з-ну К ейсара «Можно сделать защиту от

дурака, если дурак не изобретательный.» По определению ф-ия возвращает только одно

значение, но это можно обойти. Тип ф-ии може т быть составным, например структурой. Здесь

нужно иметь ввиду, что прежде чем использовать данные этой струк туры, её придётся присвоить

некоторой относительной переменной. Такое присвоение выполняет ся транслятором путём по-

байтного копирования. Фактически – это цикл скрытый от глаз программиста цикл за знаком

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

пропорциональное размеру. Ф-ия обязательно должна им еть хотя бы один входной параметр и

обязательно должна возвращать значение. Если во звращать нечего – возвращаем BOOL. Можно

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

Возврат BOOL имеет мизерные затраты кода д ля любого типа процессора. Если применение ф-ии

по каким-либо причинам затруднено или нецеле сообразно – используется ф-ый блок.

Функции в логических выражениях.

Они имеют одну тонкость, которая заключается в том, что логи ческие выражения не всегда

вычисляются целиком. Возможно, что по некоторой начальной части выра жения можно сделать

вывод об итоговом значении, т.е. если выраж ение содержит ф-ии, то нельзя гарантировать, что

все они будут вызваны. Пример

IF FUNC1(X) OR FUNC2(X) THEN

Если func1(x) возвращает True, то Func2(x) возвращать не будет.

В данном примере нельзя гарантировать, что ф-и я NORMA будет вызвана 2 раза. Если первый

вызов даст FAlse, то понятно, что дальше логическое выра жение можно не проверять. В ф-ях

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

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

успешно работает на 1-ом ПЛК, ошибка может проявит ься в другой версии компилятора или в

Читайте также:
Что может получить инвалид 1 группы по программе ипр

другой программной среде.

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

FB – это программный продукт(компонент), отображающи й множество значений входных

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

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

одними и теми же входными параметрами может выдав ать различные выходные значения. В нём

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

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

Возможность задания переменного числа входных значений заложе но по определению. Из вне

достпны только входы и выходы ф-ого блока. Получить д оступ к внутренним переменным блока

нельзя. С позиции ООП FB – объект.

Лекция CoDeSys (Новиков).

Создание экземпляров FB.

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

аналогична объявлению переменной. Описав новый блок мы, фактически создаём новый блок,

подобный структуре. Каждый FB может иметь любое количество эк земпляров. Так например

экземпляры блока ТАЙМЕР, совершенно не зависимы друг от друга. Каждый из них имеет

собственные настройки. Каждый блок имеет собственный ид ентификатор и свою область

значения в статической памяти. Объявление доп. Экземпляра FB при водит лишь, к ещё одной

области памяти данных, код остаётся общ им.

Экземпляр FB создаётся в разделе переменных или в разделе глоб альных переменных. Как и

переменная, получает уникальный идентификатор. Напри мер, создание стандартного экземпляра

FB – инкрементный счётчик с идентификатором ctuTIMEME TER: ctu; Из этого следует,что

создавать экземпляры можно только для известных системе блоков. Э то библиотечные блоки или

блоки созданные пользователем. С точки зрения транслятора со здание экземпляра означает

выделение необходимой памяти для реализации необходи мых блоков. Экземпляр FB можно не

только вызывать, но и использовать в качестве други х переменных других FB.

Доступ к переменным экземпляра.

После создании экземпляра FB можно начинать с его д анными, при это совсем не обязательно

вызывать блок. Обращение к переменным экземпляра то чно такое же как к элементам структуры

данных – через точку.

ctuTIMEMETER.RESET:=FALSE;

ctuTIMEMETER.pv:=100;

x1:= ctuTIMEMETER.cv;

Специальный индекс «=>» позволяет получить значения выхода сразу после выполнения блоков.

На языке IL можно написать CAL ctuTIMEMETER (RESET:=FAL SE, cu:=INP1, cv => x1); На языке ST

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

Лекция CoDeSys (Новиков).

параметры, причём в произвольном порядке. Входы экземп ляра доступны для записи и чтения.

Выходы только для чтения. Изменять значения выходов можно тол ько из тела блока из вне

нельзя. Транслятор отслеживает подобные действия и выдаё т соответствующие ошибки. Вызвать

экземпляр FB с перечислением параметров как ф-ию нельзя. Значения вход ных переменный

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

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

входы и выходы остаются неподключёнными.

На языке ST при отсутствии параметров после имени экземпляра скобки ставить не нужно. Т.е.

ПРИМЕР: ctuTIMEMETER(); — лишние пустые скобки

Использовать экземпляр FB в выражении нельзя, но можно использовать входы и выходы.

Например, X1:=ctuTIMEMETER.pv – ctuTIMEMETER. cv +1; Моджно определять значения входов

блока заранее и вызывать экземпляр ф-ого блока вообще без параметров. Пример на языке ST :

ctuTIMEMETER.RESET:=FALSE;

На языке IL:

LD ctuTIMEMETER.RESET;

ST ctuTIMEMETER.RESET;

Cal ctuTIMEMETER;

Инициализация данных экземпляров.

При описании FB в разделе объявления переменных, м ожно явно присвоить начальное значение

переменной. Например

FUNCTION BLOCK SyncSwich

Sync:BOOL:=FALSE;

При создании функционального блока пеменная Sync получит значение FALSE, если начальное

значение не заданно – используются нулевые значения. Экземп ляр FB может потребовать

индивидуальной инициализации, отличной от той , которая определена при реализации.

Установку начальных значений проще выполнить при создании экземпляра . Значения данных

при создании экземпляра сильнее значений, заданных при реализации блока.

SyncSw1:SyncSwich:=(sync:=TRUE) // Теперь переменная SyncSw1. Получит начальное значение

True, не смотря на значение, указанное при объявлении блока. Физические ч значения

переменная получает ещё до использования экземпляра. Возможны случаи, когд а экземпляру FB

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

процедурой инициализации в FB не преду смотрено, поэтому на инициализации придётся

потратить несколько первых циклов выполнения экземпляров. Окон чание инициализации обычно

индицируется выходом ENO – выходом готовности. Часто удобно применять для инициализаии

действия и сосредоточить контроль для инициализации в одном месте (обычно шаг InitSfc). Такой

подход позволяет производить инициализацию данных, эк земпляров блок и программ в

необходимой последовательности и взаимосвязи. На пр актике для блоков требующих

определённой настройки достаточно ввести несколько дополни тельных блоков (уставов), так

делается во всех стандартных блоках.

Источник: www.studmed.ru

Язык непрерывных функциональных схем CFC. Часть 2

Язык непрерывных функциональных схем CFC. Часть 1

Свойства редактора CFC
Рабочая область редактора CFC имеет ряд полезных настроек. Можно настроить точки сетки (Инструменты – Опции – CFC-редактор – Вид) или оставить по умолчанию белый фон. Для задания фиксированного размера рабочей области должен присутствовать программный код редактора на рабочей области.

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

Общие свойства блоков
В первой части статьи [АиП, 2020, №2, стр.33-35] был рассмотрен способ добавления элемента программы на рабочую область редактора. Существует еще способ добавления не одного, а сразу нескольких однотипных элементов. Для этого, зажав клавишу , нужно кликнуть мышью по выбранному элементу на панели инструментов, переместить курсор мыши (в виде креста) на рабочую область редактора и добавить необходимое количество элементов нажатием ЛКМ.
При работе с большими проектами часто возникает необходимость перемещать группы блоков по рабочей области редактора. Для этого нужно обвести группу блоков. Обычно с первого раза сделать это не удается, так как какой-нибудь элемент не попадает в выделение, и операцию приходится повторять. Намного удобнее создать несколько групп блоков, которые будут перемещаться как одно целое.

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

Для этого выделяется группа блоков, на одном из них нажимается ПКМ и выбирается пункт Создать группу в меню Группа. Группу можно расформировать, выполнив команду Разгруппировать.
Редактор CFC предоставляет пользователям возможность кастомизации проектов. Для этого в меню Инструменты в разделе Опции переходим на вкладку CFC-редактор, Вид и устанавливаем галочку Иконка элемента. После этого у стандартных функций и ФБ появятся пиктограммы, и на вкладке Изображение в Свойствах элемента появится возможность добавить графическое изображение пользовательским функциям и ФБ (рис. 1).

Кастомизация программы

Условный оператор на языке CFC и работа с логическими переменными
Реализация условий на языке CFC – часто задаваемый вопрос пользователей. Данная задача решается средствами редактора CFC в два клика: необходимо нажать ПКМ на блоке и выбрать пункт EN/ENO. Блоку добавится «условный» вход EN и выход ENO типа BOOL. Когда на вход EN приходит значение TRUE, то блок становится активен, значение на выходе ENO устанавливается TRUE.

Если на вход EN пришло FALSE, то блок «замораживается», на выходе ENO – значение FALSE. «Заморозка» блока означает, что значения на выходе остаются постоянными и равными значениям в последнем цикле контроллера перед выключением блока. Об этом важном моменте нужно всегда помнить. Например, недостаточно отключить блок управления при работе с регуляторами (ПИД, гистерезис), его выходы необходимо обнулить, в противном случае есть вероятность подачи сигнала на открытие задвижки или на нагрев ТЭНа, что может привести к поломке оборудования.

Вход/выход EN/ENO

При работе с переменными типа BOOL возникают задачи инвертировать их значения. Для этого нажимаем ПКМ на входе или выходе блока, работающего с логической переменной, и выбираем пункт Инверсия. Примером инверсии «условного» входа EN/выхода ENO служит переключение режима работы двух блоков по сигналу от одной переменной (рис. 2).

Линии связи
Начиная с версии CODESYS V3.5 SP3, проблема с наложением линий связи друг на друга при их близком расположении или на элементы схемы осталась в прошлом. Чтобы не тратить время на перетаскивание элементов схемы и перестроение линий связи, введена функция трассировки. Если автоматическая трассировка не справилась, и возникла ситуация с наложением или некорректным построением линий связи, на помощь приходит ручная трассировка. Для этого потребуется нажать на кнопку трассировки и выбрать Установить все соединения (рис. 3).

Ручная трассировка

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

Обратные связи
В первой части статьи была рассмотрена автоматическая нумерация блоков в соответствии с потоком данных, которая начала действовать с версии CODESYS V3.5 SP15. Рассмотрим частные случаи автоматической нумерации блоков, охваченных обратной связью (ОС). В первом примере (рис. 4) порядок элементов, охваченных ОС, совпадает с их расположением на рабочей области редактора и с порядком их выполнения: последовательно слева направо.

Пример 1: обратная связь

Во втором примере элементы, охваченные ОС, расположенные в шахматном порядке (рис. 5), нумеруются построчно: сначала элементы верхней строки, затем – нижней.

Пример 2: обратная связь

Аналогичная построчная нумерация элементов, охваченных ОС, показана на рис. 6. Данное свойство автоматической нумерации присуще только элементам, охваченным ОС. При ее отсутствии автоматическая нумерация происходит строго в соответствии с потоком данных.

Пример 3: обратная связь

В версии CODESYS V3.5 SP15 вместе с автоматической нумерацией элементов программы появилась возможность установить порядок выполнения элементов с обратной связью (рис. 7). По умолчанию порядок выполнения элементов с ОС осуществляется в соответствии с потоком данных – слева направо. Чтобы изменить порядок, следует нажать ПКМ на элементе, который должен являться начальным, в открывшемся меню выбрать Порядок выполнения, далее пункт Задать начало обратной связи, тогда над выбранным элементном появится значок Play.

Назначение порядка элементов в ОС

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

Функциональные блоки
Информация этой части статьи важна для многих пользователей. Речь пойдет о разделе VAR_INPUT CONSTANT в функциональных блоках. В раздел записываются пользовательские константы так же, как и в VAR CONSTANT, только с одним отличием: при запущенном приложении значения переменных из раздела VAR CONSTANT изменять нельзя, а из раздела VAR_INPUT CONSTANT – можно.
Важно отметить, что изменять значения констант из раздела VAR_INPUT CONSTANT можно только в программном комплексе CODESYS. Начальное значение переменных можно задать двумя способами: присвоить конкретное значение или привязать внешнюю переменную программы.
Значение внешней переменной записывается в переменную из раздела VAR_INPUT CONSTANT один раз при запуске приложения. На функциональных блоках в коде программы отображается кнопка Параметры, открывающая диалоговое окно, в котором можно задать значения переменных из раздела VAR_INPUT CONSTANT (рис. 8). Кнопка активна и при запущенном приложении. В процессе работы программы на контроллере переменные VAR_INPUT CONSTANT изменять нельзя.

Диалоговое окно параметры в ФБ

Конверсия данных на CFC
Рассмотрим разные подходы к выполнению арифметических и других операций на языках ST и CFC.
При операции сложения на языке ST складываются две переменные с типами USINT (usiVar1=100 и usiVar2=200), результат присваивается переменной типа UDINT (UINT), тогда операция сложения выполнена верно (uiVar=300) (рис. 9).

Сложение на ST

Если ту же операцию реализовать на языке CFC, то результат выполненной операции будет неверным (44 вместо 300) (рис. 10). Ошибка является следствием того, что к выходному контакту блока суммы внутри самого блока привязана неявная переменная, которая определяется «наибольшим» типом входных переменных.

Рис. 10. Сложение на CFC без конверсии типов данных

Таким образом, результат суммы переменных сначала формируется внутри самого блока (значение неявной переменной), а уже после присваивается переменной, стоящей на выходе блока. Следовательно, при сложении двух переменных типа USINT и ожидаемом результате типа UDINT (UINT) возможно переполнение внутренней неявной переменной, что в конечном итоге приводит к неверному результату. Это решается применением явной конверсии типов хотя бы для одной из входных переменных из типа USINT в UDINT (UINT), тогда тип внутренней неявной переменной установится UDINT (UINT) (рис. 11).

Сложение на CFC с конверсией типов данных

Издание зарегистрировано Федеральной службой по надзору в сфере связи, информационных технологий и массовых коммуникаций. Свидетельство о регистрации средств массовой информации ПИ № ФС77-68720.

Источник: aip.com.ru

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru