Языки программирования, реализованные в ISaGRAF
В ISaGRAF заложена методология структурного программирования, позволяющая пользователю представить автоматизированный процесс в наиболее легкой и понятной форме. Стандартом IEC 61131-3 определяется пять языков: три графических (SFC, FBD, LD) и два текстовых (ST, IL) Помимо этих языков, ISaGRAF предлагает язык блок-схем (Flowchart). Все эти языки программирования интегрированы в единую инструментальную среду и работают с едиными объектами данных.
SFC - язык последовательных функциональных схем, с помощью которого программа представляется последовательностью шагов, разделяемых переходами. Язык хорошо приспособлен для программирования задач логического управления.
FBD - графический язык диаграмм релейной логики. Язык удобен для программирования задач, например, вычислительного характера, решение которых может быть представлено функциональной схемой, состоящей из таких блоков, как сложение, умножение, интегрирование и т. д.
LD - язык релейных (лестничных) диаграмм или релейной логики. Язык удобен для программирования несложных булевых операций и для решения задач в виде релейно-контактных схем автоматики.
ST - язык структурированного текста. Относится к классу языков высокого уровня, похожих на Паскаль, удобен для программирования сложных процедур, которые трудно описать графическими языками.
IL - язык инструкций - язык низкого уровня, похож на Ассемблер и является высокоэффективным для небольших программ и для оптимизации отдельных частей сложных программ, если требуется высокое быстродействие.
Из выше перечисленных языков выбираем язык FBD, так как он наиболее приемлем как по уровню, так и по синтаксису, и удобен для реализации сложных алгоритмов и процедур.
Программирование контроллера
Работа начинается с создания проекта в ISaGRAF (File - New). В описании проекта можно указать автора проекта, его название. В самом проекте создается программа, при этом надо указать, какой язык программирования будет использоваться (Languare - New Program), тип программы (начальная, последовательная, конечная).
Перед тем как вводить текст программы, необходимо объявить используемые в ней переменные (Dictionary - Global variables) (по типу: булевые, аналоговые, таймерные, сообщения, функциональные блоки; по виду: внутренние, входные, выходные).
После ввода текста необходимо проверить программу на наличие ошибок (Files - Verify). И только после этого производят присоединение переменных ввода/вывода к платам и подсоединение переменных для наблюдения за изменениями сигналов.
Программирование на языке ST
ST (Structured Text) - текстовый высокоуровневый язык общего назначеня, по синтаксису ориентированный на Паскаль. Язык по умолчанию используется для описания действий внутри шагов и переходов.
ST программа - это список ST операторов. Каждый оператор заканчивается точкой с запятой.
Имена, используемые в исходном коде (идентификаторы переменных, константы, ключевые слова) разделены неактивными разделителями (пробелами, символами окончания строки и табуляции) или активными разделителями, которые имеют определенное значение (например, разделитель «>» означает сравнение «больше чем»). В текст могут быть введены комментарии. Комментарий должен начинаться с «(» и заканчиваться «)». Каждый оператор заканчивается точкой с запятой («;»).
Основные операторы языка ST:
- оператор присвоения (variable:=expression);
- вызов подпрограммы или функции;
- вызов функционального блока оператор условия (IF, THEN, ELSE);
- оператор выбора (CASE);
- итеративные (циклические) операторы (FOR, WHILE, REPEAT);
- управляющие операторы (RETURN, EXIT);
- специальные операторы для связи с такими языками как SFC.
Оператор присвоения:
«:=» - присваивает переменной значение некоторого выражения или константы: <переменная>:= <любое выражение или константа>.
Булевые операторы:
NOT, AND, OR, XOR.
Операторы сравнения:
<, >, =, <=, >=.
Оператор RETURN
RETURN завершает выполнение текущей программы. В блоке операций на языке SFC оператор RETURN обеспечивает конец выполнения блока.
Оператор IF-THEN-ELSE
If <условие> then <список операторов 1>: end_if;