По просьбе наших посетителей, данный материал перенесен с сайта plc4good.org.ua, в связи с полной его потерей. Всё возражения принимаются через форму обратной связи.
plc4good.org.ua/view_post.php?id=34
В первой части рассмотрим 4-е простейших функции, включенные в состав пакета – SCALE, CRP_IN, CRP_OUT и SWITCH . Почти все функции пакета написаны на языке SCL . Как сказано в описании:
- S7-SCL (Standard Control Language) – это PASCAL-подобный язык высокого уровня, предназначенный для программирования систем автоматизации SIMATIC. S7-SCL используется для описания комплексных алгоритмов управления и обработки данных.
- Язык может быть использован для программирования систем автоматизации SIMATIC S7-300, SIMATIC S7-400, SIMATIC C7 и систем компьютерного управления SIMATIC WinAC.
- S7-SCL имеет сертификат PLCopen Base Level.
От себя могу добавить, что язык конечно хороший, особенно для обработки данных, но имеет все-таки некоторые ограничения, кстати, результатом которых явилось невозможность написания 100% функций пакета на SCL . Все SCL исходные файлы рабочие и компилируются без ошибок.
Чтобы не повторять подробное описание этих функций в разделе download вы можете загрузить официальную документацию на русском и английском языке.
SCALE
Итак, SCALE – очень, ОЧЕНЬ простая функция :), несмотря на то, что в документации говорится про какой-то угол наклона и приводятся три страницы сопроводительного текста с графиком…
Могу только посочувствовать человеку, который писал описание к этой функции, достаточно было написать, что входная переменная умножается на FACTOR и складывается с OFFSET .
FUNCTION_BLOCK FB123
TITLE =‘ linear scaling’
AUTHOR : AUT_1
FAMILY : MODCONT
NAME : SCALE
VERSION : ‘ 1.0’
// reverse by komatic
(*
Элемент масштабирования. Масштабирует входную величину.
Масштаб задается углом наклона линейной характеристики.
*)
VAR_INPUT
INV : REAL , //входная переменная
FACTOR : REAL := 1.000000e+000, //умножающий фактор
OFFSET : REAL , //сдвиг
END_VAR
VAR_OUTPUT
OUTV : REAL , //выходная переменная
END_VAR
BEGIN
OUTV:=INV * FACTOR + OFFSET,
END_FUNCTION_BLOCK
CRP_IN
Вторая функция предназначена для считывания сигналов с аналоговых модулей, ничем особенным не выделяется кроме того что, как бы совмещена с предыдущей функцией и это хорошо иначе часто пришлось бы их использовать вместе. Также внутри используется константа 27648, являющаяся магическим числом для всех программистов контроллеров Siemens 🙂
FUNCTION_BLOCK FB102
TITLE =‘ change range periphery input’
AUTHOR : AUT_1
FAMILY : MODCONT
NAME : CRP_IN
VERSION : ‘ 1.0’
// reverse by komatic
(*
Преобразование входной аналоговой величины.
Входная аналоговая величина
преобразуется в числовое значение с плавающей запятой,
которое используется ПИД-регулятором.
*)
VAR_INPUT
INV_PER : WORD , //входная переменная
FACTOR : REAL := 1.000000e+000, //умножающий фактор
OFFSET : REAL , //сдвиг
START_ON : BOOL := TRUE, //вывести стартовое значение
STARTVAL : REAL , //стартовое значение
END_VAR
VAR_OUTPUT
OUTV : REAL , //выходная переменная
END_VAR
BEGIN
IF START_ON
THEN
OUTV:=STARTVAL,
ELSE
OUTV:= INT_TO_REAL(WORD_TO_INT(INV_PER)) * FACTOR * 100.0 / 27648.0 + OFFSET,
END_IF,
END_FUNCTION_BLOCK
CRP_OUT
Еще одна функция, работающая с периферией, на это раз выводящая аналоговый сигнал из контроллера, никаких неожиданностей, можно отметить ограничение кода 32767 и -32768.
FUNCTION_BLOCK FB103
TITLE =‘ change range periphery output’
AUTHOR : AUT_1
FAMILY : MODCONT
NAME : CRP_OUT
VERSION : ‘ 1.0’
// reverse by komatic
(*
В блоке производится приведение значений сигнала в формате
чисел с плавающей точкой (формат внутреннего представления в
модульном регуляторе) в значение сигнала в формате периферии.
*)
VAR_INPUT
INV : REAL , //входная переменная
FACTOR : REAL := 1.000000e+000, //умножающий фактор
OFFSET : REAL , //сдвиг
END_VAR
VAR_OUTPUT
OUTV_PER : WORD , //выходная переменная (периферия)
END_VAR
VAR_TEMP
rTemp : REAL , //выходная переменная (переферия)
END_VAR
BEGIN
rTemp:=(FACTOR * INV + OFFSET) * 27648.0 / 100.0,
IF rTemp >, 32767.0 THEN rTemp:= 32767.0, END_IF,
IF rTemp <, –32768.0 THEN rTemp:=-32768.0, END_IF,
OUTV_PER:=INT_TO_WORD(REAL_TO_INT(rTemp)),
END_FUNCTION_BLOCK
SWITCH
Ну и в заключение этой части материала, функция, которая является аналоговым коммутатором. Честно говоря, посмотрев на принцип ее работы, так и не смог найти случаев массового применения, но может быть у кого-то они будут.
FUNCTION_BLOCK FB126
TITLE =‘ switch’
AUTHOR : AUT_1
FAMILY : MODCONT
NAME : SWITCH
VERSION : ‘ 1.0’
// reverse by dda
(*
Функциональный блок используется как мультиплексор с функцией
И/ИЛИ по входу для двух входных/выходных сигналов.
*)
VAR_INPUT
INV1 : REAL , //входная переменная 1
INV2 : REAL , //входная переменная 2
INV1_ON : BOOL , //соединить через INV 1
OUTV1_ON : BOOL , //соединить через OUTV 1
COM_RST : BOOL , //полный рестарт
END_VAR
VAR_OUTPUT
OUTV1 : REAL , //выходная переменная 1
OUTV2 : REAL , //выходная переменная 2
END_VAR
BEGIN
IF COM_RST
THEN
OUTV1:=0.0,
OUTV2:=0.0,
ELSE
IF INV1_ON
THEN
IF OUTV1_ON
THEN
OUTV1:=INV1,
ELSE
OUTV2:=INV1,
END_IF,
ELSE
IF OUTV1_ON
THEN
OUTV1:=INV2,
ELSE
OUTV2:=INV2,
END_IF,
END_IF,
END_IF,
END_FUNCTION_BLOCK
Итак, первая часть закончена, мы рассмотрели простейшие функции из пакета Modular PID control. В следующих частях мы продолжим, до встречи…
Комментарии к материалу
Добавлен: Artur Дата: 2011-01-05
где находится этот FB102?? как его добавит?
Добавлен: komatic Дата: 2011-01-05
Выделяете, вставляете в SCL source и компилируете… Или находите саму библиотеку и копируете из нее уже скомпилированный…
Добавлен: nuk Дата: 2014-11-03
можно ссылки на продолжение
Добавлен: komatic Дата: 2014-11-03
plc4good.org.ua/index.php?sub=4
Оцените статью!