ISaGRAF. Version 3.4

         

Прыжки и метки


Прыжки и метки используются для управления выполнением диаграммы. К правому краю символа метки или прыжка не может быть присоединено никаких других объектов. Используются следующие обозначения:

>>LAB......................... прыжок на метку (имя метки "LAB")

LAB:............................ определение метки (имя метки "LAB")

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

(* Пример FBD программы с использованием меток и прыжков *)

(* IL эквивалент: *)

                                ld                manual

                                and             b1

                                jmpc           NOMODIF

                                ld                input1

                                or               input2

                                st                result

NOMODIF:               ld                result

                                or               valid

                                st                cmd10


ЊҐвЄЁ, гб«®ў­лҐ Ё ЎҐ§гб«®ў­лҐ Їал¦ЄЁ, ¬®Јгв Ўлвм ЁбЇ®«м§®ў ­л ¤«п гЇа ў«Ґ­Ёп ўлЇ®«­Ґ­ЁҐ¬ ¤Ё Ја ¬¬л. ЌЁЄ ЄЁе бЁ¬ў®«®ў Є Їа ў®¬г Є®­жг бЁ¬ў®«  ¬ҐвЄЁ Ё Їал¦Є  Ї®¤Є«оз вм ­Ґ«м§п. €бЇ®«м§говбп б«Ґ¤гойЁҐ ®Ў®§­ зҐ­Ёп:

>>LAB......................... Їа릮Є ­  ¬ҐвЄг "LAB"

LAB:............................ ®ЇаҐ¤Ґ«Ґ­ЁҐ ¬ҐвЄЁ "LAB"

…б«Ё «Ё­Ёп бўп§Ё б«Ґў  ®в бЁ¬ў®«  Їал¦Є  ­ е®¤Ёвбп ў б®бв®п­ЁЁ TRUE , ЁбЇ®«­Ґ­ЁҐ Їа®Ја ¬¬л ЇҐаҐе®¤Ёв ­  ᮮ⢥вбвўгойго ¬ҐвЄг.

(* IL ќЄўЁў «Ґ­в: *)

яяяяяяяяяяяяяяяяяяяяяяяя ldnяяяяяяяяяяяяя manual_mode

яяяяяяяяяяяяяяяяяяяяяяяя jmpcяяяяяяяяяя other

яяяяяяяяяяяяяяяяяяяяяяяя ldяяяяяяяяяяяяяяя input1

яяяяяяяяяяяяяяяяяяяяяяяя stяяяяяяяяяяяяяяя result

яяяяяяяяяяяяяяяяяяяяяяяя jmpяяяяяяяяяяяя END

OTHER:яяяяяяяяяяяя ldяяяяяяяяяяяяяяя input2

яяяяяяяяяяяяяяяяяяяяяяяя stяяяяяяяяяяяяяяя result

END:яяяяяяяяяяяяяяяяя (* Є®­Ґж Їа®Ја ¬¬л *)



Прыжок на шаг


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

Связь от шага к переходу нельзя представить с помощью символа прыжка. Следующие схемы эквивалентны:



R_TRIG


Аргументы:

CLK                                           BOO              любая булевская переменная

Q                                                BOO              TRUE, когда CLK поднимается с FALSE на TRUE

                                                                        FALSE во всех остальных случаях

Описание:

Определяет передний фронт булевской переменной.

(*FBD пример блоков R_TRIG*)

(* ST Эквивалент: Мы предполагаем, что R_TRIG1 - это экземпляр блока R_TRIG *)

R_TRIG1(cmd);

nb_edge := ANA(R_TRIG1.Q) + nb_edge;

(* ILЭквивалент: *)

LD                     cmd

ST                     R_TRIG1.clk

CAL                  R_TRIG1

LD                     R_TRIG1.Q

ANA

ADD                  nb_edge

ST                     nb_edge



Работа ISaGRAF


В реализации под NT целевая задача представляет собой отдельную программу WISAKER.EXE, причем может работать параллельно несколько ее экземпляров. Каждый экземпляр должен иметь свой номер подчиненного.

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

Программа WISAKER предназначена для работы с версией Windows NT 3.51 и выше.



Работа ISaGRAF: ISEXE


В реализации под MS-DOS целевая задача представляет собой отдельную программу ISA.EXE. При необходимости можно получить подсказку с помощью команды isa -? из каталога CMDS.

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

        Конфигурирование коммуникаций: -t ключ

Целевая задача ISaGRAF использует последовательный порт для связи с отладчиком. Название порта определяется при помощи ключа -t. Коммуникационный интерфейс учитывает особенности различных машин, поэтому можно использовать порты COM1, COM2 или COM3 в зависимости от версии BIOS.

Нет значения по умолчанию: Если эта опция не использована, то связь с целевой задачей невозможна. В таком случае может быть выдано сообщение об ошибке номер 7.

В DOS связь по ETHERNET не предусмотрена. Такая реализация может быть обеспечена вашим поставщиком.

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

Пример:

устанавливает следующие значения параметров порта:

скорость 9600 бит/с

нет контроля четности

данные 8 бит

1 стоп-бит

Заметим, что в некоторых версиях BIOS значение скорости 19200, принятое по умолчанию в системе разработки, не разрешено.

Для установки параметров порта CJ поставляет утилиту ISAMOD.EXE. Вызов

ISAMOD COM1

эквивалентен

MODE COM1:9600,N,8,1

        Номер подчиненного: -s ключ

Эта опция определяет номер подчиненного целевой задачи. Он может принимать значения от 1 до 255, исключая 13 ($0D). Этот номер используется в протоколе связи. Он нужен для того, чтобы отличать целевые задачи друг от друга, когда запущено несколько задач. Когда используется отладчик, убедитесь, что его подчиненный параметр соответствует номеру целевой задачи.

По умолчанию

номер подчиненного равен 1.

        Примеры:

isamod COM1         устанавливает на COM1: 19200 бод, без четности, данные 8 бит, 1 стоп бит

isa -t=COM1                         запуск целевой задачи ISaGRAF как подчиненный 1 с портом связи COM1

isa -s=3 -t=COM1    запуск целевой задачи ISaGRAF как подчиненный 3 с портом связи COM1



Работа ISaGRAF в однозадачном режиме: isa


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

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

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

        Конфигурирование коммуникаций: -t ключ

Однозадачная версия ISaGRAF использует последовательный порт для связи с отладчиком. Название порта определяется при помощи ключа -t.

Нет значения по умолчанию: Если эта опция не использована, то связь с целевой задачей невозможна. В таком случае может быть выдано сообщение об ошибке номер 7.

В однозадачной версии связь по ETHERNET не предусмотрена.

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

Пример:

xmode /t0 baud=19200

Установить скорость передачи 19200 бит/с. на устройстве /t0.

        Номер подчиненного: -s ключ

Эта опция определяет номер целевой задачи. Он может принимать значения от 1 до 255 за исключением 13 ($0D). Этот номер используется в протоколе связи. Он нужен для того, чтобы различать целевые задачи друг от друга, когда запущено несколько задач. Когда используется отладчик, убедитесь, что его подчиненный параметр соответствует номеру целевой задачи.

По умолчанию

номер подчиненного равен 1.

        Примеры:

isa -t=/t0             запуск однозадачного режима ISaGRAF как подчиненный 1 (по умолчанию) с портом связи /t0

isa -s=3 -t=/t1    запуск однозадачного режима ISaGRAF как подчиненный 3 с портом связи /t1

isa -t=/t0 &

isa -s=3 -t=/t1    запуск двух задач ISaGRAF в однозадачном режиме: первая - подчиненный 1, портом /t0,                                     вторая - подчиненный 3, порт /t1



Работа ISaGRAF в однозадачном режиме: iso


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

Однозадачная реализация в основном ориентирована на слабую аппаратуру (дешевые платы и ПК, ориентированные на MS-DOS) или на разработку первого прототипа системы при портировании на новую платформу. Многозадачная реализация более предпочтительна.

Задача ISaGRAF не нарушает работу фоновых процессов и программ обработки прерываний.

        Регистрация подчиненных

Целевая задача ISaGRAF характеризуется номером подчиненного. Он может принимать значения от 1 до 255 за исключением 13 ($0D). Этот номер используется в протоколе связи. Он нужен для того, чтобы различать целевые задачи друг от друга, когда запущено несколько задач. Поэтому перед запуском целевых задач следует их регистрировать. Для этого предназначена функция isa_register_slave()

uchar isa_register_slave 

(

uchar slave   /* /* Номер подчиненного */

)

Описание:

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

Возвращаемое значение:

0 в случае успеха, BAD_RET - в случае ошибок.

        Каталог для хранения резервных файлов приложения

Глобальная переменная TSK_FUNIT(char *) может содержать название каталога, в котором приложение будет хранить файлы резервных копий. Целевая задача ISaGRAF использует стандартные вызовы fopen, fread, fwrite, fclose для работы с файлами.

Значение по умолчанию - пустая строка (“”), указывающая, что каталог не назначен.

Пример:

TSK_FUNIT = "host name:/C:/ISaGRAF/target/apl/"

Назначает каталог ISaGRAF\target\apl в корне C: на хост-ПК с именем host_name для файлов резервных копий. Важно не забыть последний слеш, иначе файлы будут открываться в каталоге ISaGRAF\target и иметь в имени префикс apl.

При необходимости эта переменная может иметь различные значения для различных целевых задач.
Дальнейшие детали о файлах резервных копий содержатся в разделе Отличительные особенности / Резервирование приложения.

        Управление окончанием цикла

Переменная TSK_NBTCKSCHED (uint32) имеет значение задержки в тиках, которую целевая задача ISaGRAF использует в конце цикла. Значение по умолчанию - 0 (один и тот же приоритет у всех задач). При необходимости для каждой целевой задачи это значение может быть своим.

Дальнейшие детали содержатся в разделе Отличительные особенности / Продолжительность цикла.

           Запуск целевой задачи ISaGRAF

После того как установлены переменные среды, на заключительном шаге с помощью вызова isa_main запускается целевая задача ISaGRAF:

uchar isa_main

(

uchar slave,        /* Номер подчиненного*/

char *com            /* Имя последовательного устройства*/

)

Описание:

Стартует целевую задачу ISaGRAF.

Возвращаемое значение:

Возвращает ненулевое значение в случае возникновения ошибок.

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

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

        Пример

Данный пример показывает как запустить однозадачную реализацию целевой задачи ISaGRAF с номером подчиненного 1 и последовательным устройством связи /tyCo/1.

Текущим каталогом является тот, где установлена целевая задача.

Загрузить модуль isassr.o

ld < RELS/isassr.o

Загрузить модуль isa.o

ld < CMDS/isa.o

Конфигурирование последовательной связи

ISAMOD ("/tyCo/1", 19200)

Частота системных часов

CLKRATE = sysClkRateGet ()

Регистрация подчиненного

isa_register_slave (1)

Каталог для резервирования (можно опустить, ибо используется умолчание)

TSK_FUNIT = ""

Управление в конце цикла (можно опустить, ибо используется умолчание)

TSK_NBTCKSCHED = 0

Запуск целевой задачи ISaGRAF

sp (isa_main, 1, "/tyCo/1")


Работа с целевой задачей ISaGRAF OS


Для того чтобы начать работу с целевой задачей ISaGRAF, прежде всего, нужно переписать программы на целевую машину OS-9. Затем, для того чтобы начать работать, можно просто запустить команду помощи:

                isa -?

isaker -?

                isatst -?

                Isanet -?



Работа с несколькими группами проектов


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

"Default"............ в "\ISAWIN\APL":Ваша рабочая область

"Samples"......... в "\ISAWIN\SMP":примеры приложение поставляемые вместе с системой разработки ISaGRAF

Имя текущей группы проектов написано в панели инструментов, рядом с кнопкой выбора группы проектов:

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

Выберите группу в списке и нажмите "Выделить", чтобы активизировать список проектов. Вы можете дважды щелкнуть на имени, чтобы выбрать его. Используйте "Новая группа " для создания новой группы. Эта команда может быть использована либо для того, чтобы присвоить имя группы существующей директории, либо чтобы создать новую группу с новой директорией.

Замечание: Группа не может быть выбрана или создана, если открыты другие окна ISaGRAF (менеджер программ, редакторы...).



Работа с программами


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

        Создание новой программы

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

·  максимальная длина - 8 символов

·  Первый символ должен быть буквой

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

·  Имена программ не различают регистры

Далее, выберите язык, на котором будет создана новая программа :

SFC..................... Последовательные Функциональные Диаграммы

FC....................... Потоковые Диаграммы

FBD..................... Диаграммы Функциональных Блоков ( могут содержать части LD )

LD....................... Релейные схемы, создаваемые при помощи редактора Quick LD

ST....................... Структурный текст

IL......................... Список Инструкций

Теперь выберите режим выполнения программы :

Begin..................................... верхний уровень раздела «Begin».

Sequential.............................. верхний уровень раздела «Sequential».

End........................................ верхний уровень раздела «End».

Функции................................ в разделе «Функции».

Функциональный блок......... в разделе «Функциональные блоки».

Дочерняя программа.......... SFC или FC SFC-дочерняя или подпрограмма существующей программы.

При выборе одного из пяти возможных режимов программа размещается в верхнем уровне разделов Begin, End, Sequential, Функции. Выбор последнего указывает, что новая программа является SFC-дочерней или FC подпрограммой или подпрограммой. Следует помнить, что программы верхнего уровня должны быть написаны на SFC или FC и, что SFC и FC не может использоваться для циклических программ и их подпрограмм.


        Комментарии к программам

ISaGRAF позволяет присоединить к каждой программе проекта её описание. Этот комментарий изображён мелким шрифтом под её именем. Используйте команду «Файл / Текст комментария программы»  для ввода или изменения комментария, присоединённого к выделенной программе.

        Редактирование программы

Эта команда позволяет изменить содержание программы. Используемый редактор зависит от языка, выбранного для написания программы. Каждая программа редактируется в индивидуальном окне, т.о. возможно редактировать более одной программы в различных окнах. Нажатие клавиши ENTER позволяет редактировать выделенную программу. Кроме того, пользователь может щёлкнуть мышью на имени программы для её редактирования.

        Редактирование файла-дневника

Файл-дневник

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

        Словарь переменных

Команда  «Файл / Словарь» запускает редактор словаря, в котором объявлены переменные проекта. Переменные могут быть глобальными ( т.е. видимыми в любой программе проекта ) или локальными для выделенной программы. Редактор словаря также может быть использован для объявления макросов, которые используются для синонимичной подстановки имён и выражений в текст программы.

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

Команда  позволяет пользователю определить параметры, передаваемые и возвращаемые выделенной функцией, функциональным блоком или подпрограммой. Эта команда не имеет эффекта, если выделена главная программа разделов «Begin» или «End» или SFC-программа.

Функции, функциональные блоки или подпрограммы могут иметь до 32 параметров ( входных или выходных ).


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

Список в верхней левой части окна показывает параметры, в порядке способов вызова : сначала параметры вызова, затем - возврата. Нижняя часть окна показывает подробное описание параметра, выделенного в списке. В качестве параметра может быть использован любой тип данных ISaGRAF. Возвращаемый параметр должен располагаться в списке после параметров вызова. Имена параметров должны подчиняться следующим правилам :

·  максимальная длина - 8 символов

·  Первый символ должен быть буквой

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

·  Имена не различают регистры

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

        Перемещение программ в иерархическом дереве

Команда «Переименовать» меню «Файл»

используется для изменения имени программы или для перемещения её в другой раздел иерархического дерева. Однако язык, на котором написана программа, не может быть изменён. При выполнении этой команды открывается такое же окно, как при создании новой программы и все его поля установлены в соответствии с атрибутами выделенной программы. Имя программы может быть изменено. Также может быть выбран другой раздел дерева или другая родительская программа.

Команда «Упорядочить программы» меню «Файл» используется для установки корректного порядка программ с одинаковым  уровнем и родительской программой. Если выделенная программа - на верхнем уровне, то команда используется для сортировки программ верхнего уровня выделенной секции Если выделенная программа - на нижнем уровне, то команда используется для сортировки только SFC-программ и подпрограмм, относящихся к той же родительской программе, что и выделенная.


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

        Копирование программ

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

Команда  «Копировать в другой проект» меню «Файл»

копирует выделенную программу в другой проект с сохранением имени. SFC дочерние  и подпрограммы могут быть скопированы вместе с вместе с ней. Имена выделенной программы и её дочерних не должны использоваться в проекте, в который производится копирование. Все присоединённые объявления и макросы копируются вместе с программой.

        Удаление программ

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

        Импортирование из библиотек

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

        Экспортирование функций или функциональных блоков в библиотеку

Команда «Инструменты/Экспортировать в библиотеку» используется для того, чтобы перенести программу из раздела «Функции» или «Функциональные блоки» в подходящую библиотеку. Локальные переменные и макросы, присоединённые к экспортируемой функции или функциональному блоку, копируются вместе с ней. Экспортированную функцию или блок следует  перекомпилировать в Менеджере Библиотек ISaGRAF, чтобы убедиться в том, что она соответствует параметрам среды библиотеки. Библиотечные функции и функциональные блоки не могут использовать глобальные переменные.


Работа с существующей диаграммой


Команды меню «Редактор» используются для изменения или дополнения существующей диаграммы. Большинство этих команд имеют дело с выделенными элементами диаграммы.

        Исправление диаграммы

Клавиша DEL может быть использована для удаления выделенных элементов. Невозможно удалить виток, переход или символ возврата, если это единственный выход ступени. Используйте команду «Редактор / Отменить» для восстановления элементов, удалённых  командой DEL.  Команда DEL может быть применена, как к одному выделенному элементу, так и к их группе. Также этой командой можно удалять комментарии. При удалении заголовка ступени, вся ступень удаляется целиком.

        Копирование символов

Команды «Вырезать», «Копировать», «Вставить» меню «Редактор» используются при перемещении или копировании выделенных элементов. Эти команды не оперируют с комментариями. Команда «Редактор / Специальная вставка» даёт Вам выбор для вставки элементов :

·  слева от выделенного элемента

·  справа от выделенного элемента

·  параллельно выделенному элементу 

        Управление целой ступенью

Все команды редактирования ( Удалить, Копировать, Вырезать ) оперируют со ступенью целиком, если выделен её заголовок ( левая шина питания ). Это обеспечивает простоту перемещения ступеней в диаграмме, просто перемещением выделения на первую колонку. Кроме того, можно расширить область выделения по вертикали, чтобы она включала в себя несколько заголовков ступеней. В этом случае команды редактирования применимы к списку ступеней.

        Поиск и замена

Команды меню «Редактор / Найти», «Редактор / Заменить»

используются для нахождения и замены текста в диаграмме. Могут быть найдены только полные имена. Поиск производится по контактам, виткам, именам блоков, параметрам блоков и меткам ступеней. Он не может быть использован для нахождения строки в комментарии. Команда Заменить не может быть использована для изменения типа блока. Поиск может быть осуществлён вверх или вниз от выбранной позиции. Он заканчивается по достижении конца диаграммы. Для поиска доступны следующие горячие клавиши 

ALT+F2  найти следующий элемент с тем же именем переменной, что и выбранный. Этот поиск может быть применен только к функциональным блокам и меткам ступеней.

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


Если выбран режим "Ручной ввод с клавиатуры" в меню "Опции", символы переменных и имена вводятся прямо через прямоугольник редактирования текста. Введите новый текст и нажмите клавишу "Enter", чтобы установить его, или "Escape", чтобы отказаться от изменений и закрыть редактор. Прямоугольник редактирования текста в режиме "ручной ввод с клавиатуры" не может быть закрыт мышкой.

 Если в меню «Опции» установлен режим «Автоввод», то символ переменной должен вводиться непосредственно каждый раз при вставке нового контакта или витка.  При вставке переменной или метки необходимо вставить и их символ.

        Выбор типа функционального блока

Дважды щёлкните мышью на блоке для изменения его типа. Тип блока выбирается из списка доступных операторов, функций и функциональных блоков. Кроме того, команда позволяет изменить количество входных параметров в случае коммуникативного оператора ( т.е. AND, OR, ADD, MUL... )

        Получение свободного пространства

Когда вы нажимаете правую клавишу мышки в области чертежа FBD, появляется всплывающее меню. Оно содержит следующие команды, которые могут быть использованы для ввода и удаления свободного пространства в положении курсора мышки:

Вставить ряд:.. Эта команда вводит свободное пространство, состоящее из  4 рядов в соответствии с шагом решетки, начиная с позиции курсора мышки, где открылось всплывающее меню.

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

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


Работа с существующей диаграммой SFC


Для выбора прямоугольной области в схеме Вы можете использовать либо мышку, либо стрелки клавиатуры. Выбранная область помечается серым цветом. Тогда используются команды меню "Редактор":

 
 
Команды Вырезать / Копировать / Удалить

Следующие команды доступны в меню «Редактор»  при выборе кнопки «стрелка» в панели редактирования  :

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

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

Удалить............. Очистить (удалить) выделенный прямоугольник

Вставить........... Вставить содержимое буфера SFC в текущей позиции

«Редактор / Копировать» копирует буфер SFC на экран. Команда Копировать / Вставить как с диаграммами SFC, так и с шагами/переходами программ 2-уровня. Кроме того, можно скопировать диаграмму в программе и вставить её в другую SFC программу. Элементы вставляются перед текущей позицией.

        Сдвиг элементов

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

Область назначения должна быть свободна. Во время сдвига SFC символов ввод невозможен.

        Перенумерация шагов и переходов

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

        Прямой доступ к шагам или переходам

Команда "Редактор / Перейти " позволяет пользователю попадать на существующий шаг или переход. Позиция скроллирования автоматически адаптируется так, чтобы шаг или переход были видны.

        Найти и заменить текст

Команда Редактор/Заменить может быть использована для нахождения или замены текстовых строк в законченной программе (все шаги и переходы). Диалоговое окно Заменить используется для ввода искомого текста и открывает уровень 2, в котором находится текст.



Работа с существующей схемой


Команды меню "Редактор" используются для изменения или завершения существующей диаграммы. Большинство из этих команд действуют на элементы, выбранные в настоящее время на диаграмме.

        Исправление схемы

Клавиша DEL может быть использована для удаления выбранных элементов. Висячие связи удаляются вместе с выбранными элементами. Используйте команду "Редактор / Отменить" для восстановления элементов после команды DEL. Команда DEL может быть также применена к группе элементов выбранных в диаграмме. Команды "Вырезать", "Копировать", "Вставить" меню "Редактор" используются для перемещения или копирования выбранных элементов.

        Вставить и заменить

Команды "Редактор / Найти Заменить " могут быть использованы для поиска и замены текстовых строк во всей программе (все действия и тесты запрограммированные на ST, IL или Quick LD).Диалог Найти/Заменить используется для ввода текста поиска и для прямого открытия секции программы, где находится текст.

        Прямой доступ к элементу

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

        Перенумерация элементов

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



RAND


Аргументы:

base                   INT                 определяет допустимое множество чисел

Q                          INT                 случайная величина в диапазоне [0..base - 1]

Описание:

Дает случайную целую величину в заданном диапазоне.

(*FBD пример блока “RAND”*)

(* ST Эквивалент: *)

selected := MUX4 ( RAND (4), 1, 4, 8, 16 );

(*

случайный выбор одного из 4 предопределенных значений

RAND выдает значение в интервале [0..3],

так 'selected' выходящий из MUX4, получит случайное значение

1 если 0 выходит из RAND,

или 4 если 1 выходит из RAND,

или 8 если 2 выходит из RAND,

или 16 если 3 выходит из RAND,

*)

(* IL Эквивалент: *)

LD                     4

RAND

MUX4                1,4,8,16

ST                     selected



Расширения ST


Следующие функции являются расширениями языка ST:

TSTART-TSTOP :управление таймером

Следующие операторы и функции предназначены для управления исполнением программ наследников SFC:

GSTART                              запускает SFC программу

GKILL                                  убивает SFC программу

GFREEZE                             замораживает SFC программу

GRST                                   перезапускает замороженную SFC программу

GSTATUS                            получает текущее состояние SFC программы

Предупреждение:

эти функции не относятся к стандарту IEC 1131-3.

Простой эквивалент для GSTART и GKILL может быть получен путем использования синтаксиса SFC шагов:

                                            child_name(S); (* эквивалентно GSTART(child_name); *)

                                            child_name(R); (* эквивалентно GKILL(child_name); *)

Следующие поля могут быть использованы для доступа к состоянию SFC шага:

GSnnn.x                             булевская переменная, представляющая активность шага

GSnnn.t                              время прошедшее с момента последней активизации шага

                                               (“nnn” номер SFC шага)

Есть возможность, также проверить активность шага объявленного в другой SFC программе, используя следующий синтаксис:



REAL


Аргументы:

IN                         BOO-INT-TMR      любая недействительная аналоговая величина

                           

Q                          INT                       0.0 if IN = FALSE / 1 if IN = TRUE

                                                        число миллисекунд для таймера

                                                        число эквивалентное целому

                                                        аналоговому

Описание:

Превращает переменную в действительную.

(*FBD пример блоков REAL*)

(* ST эквивалент: *)

bres := REAL (true);                               (* bres равно 1.0 *)

tres := REAL (t#1s46ms);                      (* tres равно 1046.0 *)

ares := REAL (198);                               (* ares равно 198.0 *)

(* IL эквивалент: *)

LD                     true

REAL

ST                     bres

LD                     t#1s46ms

REAL

ST                     tres

LD                     198

REAL

ST                     ares



Реализация ISaGRAF


           Доступ к прикладным переменным

Коммуникационное соединение ISaGRAF распознает пять функциональных кодов Modbus:

1

читать N бит

3

читать N слов

5

писать 1 бит

6

писать 1 слово

16

писать N слов

Доступ к переменным приложения ISaGRAF может осуществляться через их “сетевой адрес ”, если конечно они были определены в библиотеке инструментальных средств.

Эти переменные могут быть:

-       Булевыми или Аналоговыми переменными

-       Входными, выходными или терминальными переменными

-       Локальными или глобальными переменными.

Для записи Булевой переменной могут использоваться функции 5, 6 или 16. Значение TRUE для записи является любым ненулевым значением.

Для чтения Булевой переменной могут использоваться функции 1 или 3. Функция 1 возвращает значение в битовое поле, а функция 3 - в байтовое (значение TRUE соответствует значению 0xFFFF).

Для записи Аналоговой переменной могут использованы функции 6 и 16. Значение является 16-ти битовым целым в диапазоне от -32768 до +32768 (целевые переменные ISaGRAF являются 32-х битовыми).

Для чтения Аналоговой переменной может использоваться функция 3. .

Переменные типа Real не доступны по запросам Modbus.

Предупреждение:

Реализация ISaFRAF не управляет такими кодами ошибки как ‘неизвестный адрес modbus’.

Обозначения:

slv

номер подчиненного

nbw

число слов

nbb

число байт

nbi

число бит

addH

Сетевой адрес (старший байт)

addL

сетевой адрес (младший байт)

vH

значение (старший байт)

vL

значение (младший байт)

V

байтовое значение

bfd

битовое поле (nbb байт)

crcH

контрольная сумма (старший байт)

crcL

контрольная сумма (младший байт)

Функция 1: читать n бит

Читает nbi бит (булевских значений), начиная с сетевого адреса addH/addL

Запрос

slv

01

addH

addL

00

nbi

crcH

crcL

<
Ответ

slv

01

nbb

bfd

...

crcH

crcL

                                                               Byte 1               Byte nbb

где bfd является битовым полем длиной nbb байт следующего формата



Бит 1 соответствует значению переменной с сетевым адресом addH/addL.

Бит nbi соответствует значению переменной с сетевым адресом addH/addL+nbi-1.

X означает, что значение не используется

Функция 3: читать n слов

Читает nbw слов, начиная с сетевого адреса addH/addL

Запрос

slv

03

addH

addL

00

nbw

crcH

crcL

Ответ

slv

03

nbb

vH

vL

...

crcH

crcL

где nbb соответствует числу байт во всех парах vH,vL.

Функция 5: записать 1 бит

Записать бит (булевскую переменную) по сетевому адресу addH/addL

Запрос

slv

05

addH

addL

vH

00

crcH

crcL

Ответ

slv

05

addH

addL

vH

00

crcH

crcL

Функция 6: записать 1 слово

Записать слово по сетевому адресу addH/addL

Запрос

slv

06

addH

addL

vH

vL

crcH

crcL

Ответ

slv

06

addH

addL

vH

vL

crcH

crcL

Функция 16: записать N слов

Записать nbw слов, начиная с сетевого адреса addH/addL (nbb=2nbw)

Запрос

slv

10

addH

addL

00

nbw

nbb

vH

vL

...

crcH

crcL

Ответ

slv

10

addH

addL

00

nbw

crcH

crcL

Примеры:

-  Функция 1: прочитать 15 бит, начиная с сетевого адреса 0x1020 на подчиненном 1

Запрос

01

01

10

20

00

0F

79

04

Ответ

01

01

02

00

12

39

F1

считанное значение - 0x0012, что в битовом представлении эквивалентно 00000000 000100101.

В этом примере переменные 0x1029 и 0x102C имеют значение TRUE, остальные - FALSE.

-  Функция 16: записывает 2 слова по адресу 0x2100 на slave 1, записанные значения равняются: 0x1234 и 0x5678.

Запрос

01

10

21

00

00

02

04

12

34

56

78

1C

CA

<


Ответ

01

10

21

00

00

02

4B

F4

        Перенос файлов

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

В нашей ситуации при запуске ISaGRAF имеется два ограничения на протокол Modbus

-   Доступны только переменные ISaGRAF

-   Невозможна быстрая передача больших объемов данных

Имеются причины, по которым ISaGRAF поддерживает набор ‘Modbus-подобных’ запросов для переноса файлов или протокол ‘управления удаленными файлами’:

-  Дистанционная загрузка ASCII и бинарных файлов

-  Подгрузка ASCII и бинарных файлов

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

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

Протокол базируется на следующих понятиях:

-  Файл со стороны целевой задачи ISaGRAF называется удаленным файлом

-  Файл на мастер-компьютере называется локальным файлом

-  Каждый байт в файле имеет 32-битовый базовый адрес

и 16-битовый адрес байта

Имеются запросы выбора имени удаленного файла, выбора базового адреса, считать или записать данные в удаленный файл, используя 16-битовый адрес байта.

Функция 17: записать байты

nbb соответствует числу байт во всех парах vH,vL

Запрос

slv

11

addH

addL

00

nbb

nbb

vH

vL

...

crcH

crcL

Ответ

slv

11

addH

addL

00

nbb

crcH

crcL

Значение этого запроса различается в зависимости от значения адреса addH/addL:

-       0xF000: Инициализировать имя удаленного файла

nbb соответствует числу символов в имени файла, располагающегося в полях vH, vL и т.д. (в этом случае понятия ‘старший’ и ‘младший’ лишены смысла), включая символ \0 окончания строки. Если файл не существует, то он создается с атрибутами writable+readable+executable.



-       0xF002: Изменить базовый адрес на указанное значение

nbb должно равняться 4. Первая пара vH,vL есть значение старшего слова значения адреса. Возможно любое 32-битное значение. Все последующие запросы чтения и записи будут использовать этот базовый адрес. Если запроса изменения базового адреса не делалось, по умолчанию будет использоваться нулевое значение.

-       0xF004: Уничтожить файл

nbb должно равняться 0. Файл будет уничтожен если он существует и если это возможно.

-       Больше 0xF004:

Зарезервировано

-       Меньше 0xF000: Записать байты

Адрес байта, по которому нужно произвести запись указывается в addH/addL. Он должен быть меньше 0xF000. Записываются значения nbb байт, указываемые в полях vH,vL и т.д., в заданном порядке (слева - направо) в удаленный файл, имя которого ранее было выбрано. Запись производится по адресу, который получается сложением ранее установленного базового адреса с указываемым адресом байта. Если результирующий адрес выходит за границу файла, размер файла увеличивается. Невозможно уменьшить размер файла.

Функция 18: читать данные

Запрос

slv

12

addH

addL

00

nbb

crcH

crcL

Ответ

slv

12

nbb

V

V

...

crcH

crcL

Адрес для чтения указывается в addH/addL. Он должен быть меньше F000. Происходит считывание nbb байт из удаленного файла, чье имя ранее было выбрано, начиная с адреса, получаемого добавлением адреса байта addH/addL к ранее установленному базовому адресу. Значения переносятся в порядке как они лежат в файле (слева - направо).

Пример:

Выбрать имя удаленного файла: target.fil.

Запрос

01

11

F0

00

00

0B

0B

74

...

00

25

9F

Ответ

01

11

F0

00

00

0B

8F

0E

Выбрать базовый адрес 0x10000.

Запрос

01

11

F0

02

00

04

04

00

01

00

00

76

11

<


Ответ

01

11

F0

02

00

04

6E

CA

Записать 4 байта: абсолютный адрес - 0x107D0, значения - 01, 02, 03, 04.

Запрос

01

11

07

D0

00

04

04

01

02

03

04

28

6F

Ответ

01

11

07

D0

00

04

FC

87

Считать 4 байта: абсолютный адрес - 0x107D0.

Запрос

01

12

07

D0

00

04

B8

87

Ответ

01

12

04

01

02

03

04

58

7D


REPLACE


Аргументы:

IN                         MSG              любая строка

Str                       MSG              строка, которую нужно вставить

NbC                     INT                 Количество символов, которые должны быть  удалены

Pos                     INT                 Позиция первого измененного символа

                                                  (первая правильная позиция 1)

Q                          MSG              измененная строка:

                                                  -NbC символов удаляются начиная с позиции Pos

                                                  -затем строка Str вводится начиная с этой позиции

                                                  возвращает пустую строку если Pos <= 0

                                                  возвращает соединение строк (IN+Str) если Pos больше, чем длина строки IN

                                                  возвращает начальную строку IN если NbC <= 0

Описание:

Заменяет часть строки новым набором символов.

(*FBD пример блока “REPLACE”*)

(* ST Эквивалент: *)

MyName := REPLACE ('Mr X JONES, 'Frank', 1, 4);

(* MyName - это 'Mr Frank JONES' *)

(* IL Эквивалент: *)

LD                     'Mr X JONES'

REPLACE          'Frank',1,4

ST                     MyName



RIGHT


Аргументы:

IN                         MSG              любая непустая строка

NbC                     INT                 не может быть больше, чем длина строки IN

Q                          MSG              правая часть строки IN (ее длина = NbC)

                                                  пустая строка если NbC < 0

                                                  вся строка IN если NbC >  длина IN

Описание:

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

(*FBD пример блоков “LEFT” и “RIGHT”*)

(* ST Эквивалент: *)

complete_string := RIGHT ('12345678', 4) + LEFT ('12345678', 4);

(* полная строка - это '56781234'

значение выходящее из RIGHT - это '5678'

значение выходящее из LEFT  - это '1234'

*)

(* IL Эквивалент: Сначала вызывается LEFT *)

LD                     '12345678'

LEFT                 4

ST                     sub_string (* промежуточный результат *)

LD                     '12345678'

RIGHT               4

ADD                  sub_string

ST                     complete_string



ROL


Аргументы:

IN                         INT                 любая целая аналоговая величина

NbR                     INT                 количества вращаемых бит (в диапазоне [1..31])

Q                          INT                 провернутая влево величина

                                                        если NbR <= 0, то нет никакого эффекта

Описание:

Вращает биты влево. Вращаются 32 бита.

(*FBD пример блока “ROL”*)

(* ST Эквивалент: *)

result := ROL (register, 1);

(* register = 2#0100_1101_0011_0101*)

(* result    = 2#1001_1010_0110_1010*)

(* IL Эквивалент: *)

LD                     register

ROL                  1

ST                     result



ROR


Аргументы:

IN                         INT                 любая целая аналоговая величина

NbR                     INT                 количества вращаемых бит (в диапазоне [1..31])

Q                          INT                 провернутая вправо величина

                                                        если NbR <= 0, то нет никакого эффекта

Описание:

Вращает биты вправо. Вращаются 32 бита:

(*FBD пример блока “ROR”*)

(* ST Эквивалент: *)

result := ROR (register, 1);

(* register = 2#0100_1101_0011_0101 *)

(* result    = 2#1010_0110_1001_1010 *)

(* IL : *)

LD                     register

ROR                  1

ST                     result



RS


Аргументы:

SET                                            BOO              если TRUE, установить Q1 в TRUE

RESET1                                     BOO              если TRUE, установить Q1 в FALSE

                                                                        (доминанта)

Q1                                              BOO              булевское состояние в памяти

Описание:

Сбрасывает доминанту. См. Таблицу:

Set

Reset1

Q1

result Q1

0

0

0

0

0

0

1

1

0

1

0

0

0

1

1

0

1

0

0

1

1

0

1

1

1

1

0

0

1

1

1

0

(*FBD пример блоков RS*)

(* ST Эквивалент: Мы предполагаем, что RS1 - это экземпляр блока RS *)

RS1(start_cmd, (stop_cmd OR alarm));

command := RS1.Q1;

(* IL Эквивалент: *)

LD                     start_cmd

ST                     RS1.set

LD                     stop_cmd

OR                    alarm

ST                     RS1.reset1

CAL                  RS1

LD                     RS1.Q1

ST                     command



“С” функции и функциональные блоки


“С” функции и функциональные блоки - это компьютерные функции, вызываемые из приложения автоматизации, в соответствии с интерфейсом вызова функций языка ST.

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

           Окно определения параметров используется для определения имени и типа каждого вызываемого или возвращаемого параметра функции или функционального блока. Меню команд “Редактировать” используется для определения параметров выбранной функции или функционального блока. Функция может иметь до 31 вызываемого параметра и всегда один возвращаемый параметр. Функциональный блок может иметь до 32 параметров с любым соотношением вызываемых и возвращаемых параметров. Ниже дано соответствие между типами ISaGRAF и типами “С”:

BOOLEAN     unsigned long         беззнаковое 32 битное слово: 1=true / 0=false

ANALOG       long                         знаковое целое 32 битное слово

REAL             float                         простой точности плавающее значение

TIMER           unsigned long         беззнаковое целое 32 битное слово (блок - 1 ms)

MESSAGE     char *                      строка символов

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

Обратитесь к ISaGRAF Target User’s Guide для получения дальнейшей информации по тому, как управлять исходным кодом “С” функции или функционального блока, и как интегрировать новый элемент в целевую систему ISaGRAF.



SEL


Аргументы

SEL                      BOO              определяет выбранную величину

IN1, IN2                INT                 любая целая аналоговая величина

Q                          INT                 = value1 если SEL = FALSE

                                                  = value2 если SEL = TRUE

Описание:

Двоичный селектор: выбирает значение из двух целых чисел.

(*FBD пример блока “”*)

(* ST Эквивалент: *)

ProCmd := SEL (AutoMode, ManuCmd, InpCmd);

(* выбор команды *)

                         IN                                  MSG        любая непустая строка

LD                     AutoMode

SEL                   ManuCmd,InpCmd

ST                     ProCmd



SEMA


Аргументы:

CLAIM                BOOLEAN     команда “проверить и установить”

RELEASE             BOOLEAN     освободить семафор

BUSY                   BOOLEAN     состояние семафора

Описание:

(* "x" - это булевская переменная проинициализированная значением FALSE *)

busy := x;

If claim Then

                x := True;

Else

                If release Then

                               busy := False;

                               x := False;

                End_if;

End_if;



Сеть MODBUS и протокол


Сеть Modbus состоит только из одной мастер станции (обычно система визуализации процесса)  и одной или более подчиненных станций (обычно PLC).

Мастер каждый раз посылает один запрос одному подчиненному (используя номер подчиненного) и ждет ответа от подчиненного прежде чем послать второй запрос. Другой свободный подчиненный не отвечает.

Каждый фрейм содержит номер подчиненного, номер запроса и соответствующие данные, а также 16-и битный код контрольной суммы(CRC).

Если за время тайм-аута ответ не приходит, запрос может быть повторен некоторое число раз до того, как мастер объявит подчиненный “отсоединенным”.

Значение тайм-аута и число переповторов устанавливается на мастер станции для  установки запросов к подчиненному (в зависимости от приложения, и т.д.).

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

Modbus является протоколом Modicon, а не международным стандартом, который имеет много различных реализаций Modbus совместимых протоколов, с большим числом возможных вариантов, например:

- Список поддерживаемых функциональных кодов

- Отображение адресов

- RTU (двоичный код) или ASCII протокол и т.д.



и и начальные шаги


Шаг представляется одиночным квадратом. Каждому шагу присваивается номер, написанный внутри квадрата. Основное описание шага пишется внутри прямоугольника , присоединенного к символу шага. Это свободный комментарий (который не является частью языка). Вышеприведенная информация называется Уровнем 1 шага:

Во время работы активный шаг помечается маркером:

Активный шаг:                                         Неактивный шаг:

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

начальный шаг:

 

SFC программа должна содержать, по крайней мере, один начальный шаг.

У шага есть атрибуты. Они могут быть использованы в любом другом языке:

GSnnn.x........................активность шага (логическая переменная)

GSnnn.t........................продолжительность активного состояния шага (таймер)

(где nnn - номер начального шага)



Схема списка


           В любой момент Вы можете переключаться между графической схемой и схемой списка. Вы можете также использовать команду “Опции / Список - Графическая схема”.

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

 
     Вы можете переупорядочить символы в списке используя команду “Редактор/ Двигать в списке”. Символы, которые надо сдвинуть должны быть выбраны в списке.



SHL


Аргументы:

IN                         INT                 любая целая аналоговая величина

NbR                     INT                 количества сдвигаемых бит (в диапазоне [1..31])

Q                          INT                 провернутая вправо величина

                                                        если NbR <= 0, то нет никакого эффекта

                                                        младший бит заменяет нулем

Описание:

Сдвигает биты влево. Сдвигаются 32 бита.

(*FBD пример блока “SHL”*)

(* ST Эквивалент: *)

result := SHL (register,1);

(* register = 2#0100_1101_0011_0101 *)

(* result    = 2#1001_1010_0110_1010 *)

(* IL Эквивалент: *)

LD                     register

SHL                   1

ST                     result



Схождения и расхождения


Расхождения - это множественные связи от одного символа SFC (шага или перехода) ко многим. Схождение - это множественные связи от более чем одного символа SFC к одному другому символу. Схождения и расхождения могут быть одиночными или двойными.



SHR


Аргументы:

IN                         INT                 любая целая аналоговая величина

NbR                     INT                 количества сдвигаемых бит (в диапазоне [1..31])

Q                          INT                 провернутая вправо величина

                                                        если NbR <= 0, то нет никакого эффекта

                                                        младший бит заменяет нулем

Описание:

Сдвигает биты влево. Сдвигаются 32 бита.

(*FBD пример блока “SHR”*)

(* ST Эквивалент: *)

result := SHR (register,1);

(* register = 2#1100_1101_0011_0101 *)

(* result    = 2#1110_0110_1001_1010 *)

(* IL Эквивалент: *)

LD                     register

SHR                  1

ST                     result



SIG_GEN


Аргументы:

RUN                     BOO                     режим : TRUE=работать/FALSE=сброс выхода в  FALSE

PERIOD                TMR                     период образца

MAXIMUM          INT                       максимальное значение

PULSE                 BOO                    инвертируется после каждого образца

UP                        INT                       счетчик, увеличивающийся на каждом образце

END                      BOO                    TRUE, когда заканчивается счет вверх

SINE                     REAL                   синусоидальный сигнал (период = время счета)

Описание:

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

Когда счетчик достигает максимума, он перезапускается с нуля. Так что END удерживает TRUE в течении одного периода.

Временная диаграмма:



Силовые рельсы и соединительные линии


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

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

Каждый отрезок линии имеет состояние TRUE

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

имеет состояние TRUE.



Симуляция и отладка работы приложения


Команды меню  используются для запуска графического редактора ISaGRAF как в режиме симуляции, так и в режиме реального соединения.

        Симуляция

Команда «Симулировать» открывает отладчик в режиме симуляции. В этом режиме появляется другое окно, называемое симулятором. Эта программа очень полезна для проверки любой программы, когда целевая машина не доступна. Запуск симулятора закрывает окно Менеджера Программ. Оно снова открывается в режиме отладки, когда открыты одновременно окна отладчика и симулятора. Симулятор. Симулятор не может быть запущен, если открыты дочерние окна ( редактора, генератора кодов, соединения ввода-вывода...). Каждое из них должно быть закрыто до выполнения этой команды. Кроме того, эта команда доступна из меню редакторов ISaGRAF.

        Реальный отладчик

Команда «Отладка» открывает главное окно отладчика и закрывает окно Менеджера Программ. Оно снова открывается после установления связи между отладчиком и целевым приложением. Отладчик не может быть запущен, если целевой код не сгенерирован. Отладчик не может быть запущен, если открыты дочерние окна ( редактора, генератора кодов, соединения ввода-вывода...). Каждое из них должно быть закрыто до выполнения этой команды. Кроме того, эта команда доступна из меню редакторов ISaGRAF.

        Подготовка рабочего пространства отладки

Команда "Отладка / Рабочее пространство" позволяет Вам определить список документов для начального рабочего пространства. Такими документами могут быть программы, графика Прожектора, списки переменных. Графики и списки временных диаграмм из предыдущих версий  ISaGRAF также записываются документами проекта. Документы, определенные в начальном рабочем пространстве автоматически открываются при запуске симуляции или отладки.

Диалог показывает существующие документы проекта слева и документы, выбранные для начального рабочего пространства. Используйте ">>" и "<<" клавиши для продвижения документов из одного списка в другой.
Каждый проект имеет свой собственный список документов для начального рабочего пространства.

        Установка связей

Команда «Установление связи» открывает следующее окно диалога. Она позволяет пользователю определить параметры связи, используемые для коммуникации между отладчиком на главном компьютере и целевой системой ISaGRAF.

«Номер подчиненного» определяет целевую систему или задачу ISaGRAF. Он должен находиться в диапазоне от 1 до 255. Обратитесь к Руководству Пользователя цели для определения используемого номера.

«Коммуникационный порт» идентифицирует аппаратное сообщение между инструментарием ISaGRAF и целью. Это может быть имя последовательного порта, или «Ethernet», зарезервированное средство сообщения, использующее «Winsock» версии 1.1.

«Таймаут» это время, оставшееся целевой системе для выполнения операций связи между концом запроса отладчик и началом ответа. Оно устанавливается в миллисекундах. Поле

«Переповторы» - это количество автоматических попыток отладчика установить связь перед установлением коммуникационной ошибки.

        Установка последовательной связи

При выборе последовательного порта ( COM1..4) кнопка «Установка» используется для доступа к другим параметрам последовательной связи.

Могут быть выбраны скорость передачи данных, вид контроля и формат. При выборе режима «аппаратура» для «Контроль» ISaGRAF контролирует линии CTS и DSR для установления подтверждения связи в процессе обмена данными.

        Установка связи Ethernet

При выборе в качестве последовательного порта «Ethernet», кнопка «Установка» для ввода «Адрес интернет» и номера «Номер порта» для связи по протоколу TCP-IP.

Инструментарий использует библиотеку WINSOCK.DLL версии 1.1 для  коммуникации по TCP-IP. Этот файл должен быть корректно установлен на жёсткий диск. «1100» это номер порта, используемый ISaGRAF по умолчанию.


Симуляция В/В


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

 
  

Логические входы: Логический вход представлен квадратной зеленой кнопкой. Номер канала отображается вместе с кнопкой. Входное значение - TRUE, когда кнопка нажата. Щелчок мышкой по кнопке изменяет соответствующее значение В/В. Используйте правую кнопку мышки для установки входа только тогда, когда кнопка нажата.

 
       Логические выходы: Логический выход представлен маленьким кругом. Номер канала отображается вместе с В/В. Выходное значение - TRUE, когда графический символ высвечен..

 
       Аналоговые входы: Канал аналогового входа - это простое числовое поле, где может быть введено значение соответствующего входа. Щелчок мышкой на прямоугольнике отобразит знак вставки. Тогда может быть введено новое значение для канала. Нет необходимости использовать клавишу ENTER после ввода. Аналоговые значения могут введены либо в десятичном, либо шестнадцатеричном виде. Используйте кнопки вверх/вниз для увеличения или уменьшения текущего значения.

 
       Аналоговые выходы: Канал аналогового выхода - это цифровое поле вывода. Выходное значение может быть отображено либо как десятичное, либо как шестнадцатеричное число. Пользователь не может выполнить ни одного действия на выходном канале.

 
       Входы сообщений: Канал входа сообщения - это простое текстовое поле, где вводится значение соответствующего входа. Щелчок мышкой на прямоугольнике отобразит знак вставки. Тогда может быть введено новое значение для канала. Нет необходимости использовать клавишу ENTER

после ввода.

 
       Выходы сообщений: Канал выхода сообщения - это текстовое поле вывода. Пользователь не может выполнить ни одного действия на выходном канале.



Символы приложения


К каждому объекту приложения ISaGRAF ссылаются по имени (введенному во время объявления переменной           ) и по внутреннему виртуальному адресу, вычисленному генератором кодов. Виртуальный адрес переменной - это не ее сетевой адрес, введенный во время объявления переменной. Виртуальные адреса используются для связной работы, и специальных “С” приложений, использующих опцию IO development tool. Когда генератор кодов ISaGRAF запущен, он создает ASCII файл с логическим соответствием между именами и виртуальными адресами для всех объектов (переменные, программы, шаги…) проекта. Этот файл может быть легко запрошен из любого приложения пользователя для получения информации о статической базе данных ISaGRAF. Файл называется “APPLI.TST” и располагается в каталоге проекта ISaGRAF: “\ISAWIN\APL\proname” (proname - имя проекта). Этот раздел описывает детальный формат файла “APPLI.TST”. Основные нотации, используемые для последующего описания, показаны ниже:

VA                 виртуальный адрес

ATTR            атрибут переменной

USR               “С” функция

Возможные значения для атрибутов переменной показаны ниже. Такие значения содержатся в полях “атрибутов” (“attributes”):

+X                  внутренняя переменная

+C                 внутренняя переменная только на чтение

+I                   входная переменная

+O                 выходная переменная

Все числа, исключая виртуальные адреса, выражаются как десятичные целые. Виртуальные адреса (VA) выражаются как шестнадцатеричные числа их 4 цифр, и предваряются символом “!”. Например:

123                это десятичное значение

!А003             это шестнадцатеричный виртуальный адрес

Основная структура файла “APPLI.TST” показана ниже. Файл структурирован как список блоков. Блок - это список записей. Каждая запись описывается на одной строке текста. Каждый блок начинается с заголовка, помещенного на одной строке текста.

начало блока

описание блока

конец блока

Основной синтаксис одного блока показан ниже:


@ <block_name> <arguments>

#record...

#record...

...

Структура первого блока, содержащего главную информацию о приложении, показана ниже:

@ISA_SYMBOLS,<appli_crc>

#NAME,<appli_name>,<version>

#DATE,<creation_date>

#SIZE,G=<nbprg>,S=<nbstep>,T=<nbtra>,L=0,P=<nbpro>,V=<nbvar>

#COMMENT,cj international

appli_crc........... контрольная сумма символов приложения

appli_name...... имя приложения

version............. номер версии ISaGRAF

creation_date.. дата генерации приложения

nbprg................ число программ

nbstep.............. число шагов SFC

nbtra.................. число транзакций SFC

nbpro................ число используемых функций "C"

nbvar................. общее число переменных

Структура последнего блока, который указывает конец файла, показана ниже:

@END_SYMBOLS

Структура блока, используемого для описания программ приложения, показана ниже:

@PROGRAMS,<nbprg>

#<va>,<name>

#...

nbprg................ число программ, определенных в этом блоке

va....................... виртуальный адрес программы

name................. имя программы

Структура блока, используемого для описания шагов SFC приложения, показана ниже. Заметьте, здесь один виртуальный шаг, определенный для каждой не SFC программы:

@STEPS,<nbsteps>

#<va>,<name>,<father>

#...

nbsteps............ число шагов, определенных в этом блоке

va....................... виртуальный адрес шага

name................. имя шага

father................ виртуальный адрес родителя

Структура блока, используемого для описания SFC транзакций приложения, показана ниже:

@TRANSITIONS,<nbtrans>

#<va>,<name>,<father>

#...

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

va....................... виртуальный адрес транзакции

name................. имя транзакции

father................


виртуальный адрес родителя

Структура блока, используемого для описания логических переменных приложения, показана ниже:

@BOOLEANS,<nb_boo>

#<va>,<name>,<attr>,<program>,<eq_false>,<eq_true>

#...

и если число переменных превосходит 4095:

X#(1.<varno>),<name>,<attr>,<program>,<eq_false>,<eq_true>

 

nb_boo.............. число переменных в этом блоке

va....................... виртуальный адрес переменной

varno................. диапазон адреса

name................. имя переменной

attr..................... атрибут переменной

program........... виртуальный адрес программы родителя

........................... или “!0000” для глобальной переменной

eq_false............ строка, используемая для значения ложь (false)

eq_true............. строка, используемая для значения истина (true)

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

@ANALOGS,<nb_ana>

#<va>,<name>,<attr>,<program>,<format>,<unit>

#...

и если число переменных превосходит 4095:

X#(2.<varno>),<name>,<attr>,<program>,<eq_false>,<eq_true>

nb_ana.............. число переменных в этом блоке

va....................... виртуальный адрес переменной

varno................. диапазон адреса

name................. имя переменной

attr..................... атрибут переменной

program........... виртуальный адрес программы родителя

........................... или “!0000” для глобальной переменной

format............... = "I" для целой переменной

........................... = "F" для вещественной переменной

unit.................... строка блока

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

@TIMERS,<nb_tmr>

#<va>,<name>,<attr>,<program>

#...

и если число переменных превосходит 4095:



X#(3.<varno>),<name>,<attr>,<program>,<eq_false>,<eq_true>

nb_tmr.............. количество переменных в этом блоке

va....................... виртуальный адрес переменной

varno................. диапазон адреса

name................. имя переменной

attr..................... атрибут переменной (всегда +Х: внутренняя)

program........... виртуальный адрес программы родителя

........................... или “!0000” для глобальной переменной

Структура блока, используемого для описания переменных сообщения приложения, показана ниже:

@MESSAGES,<nb_msg>

#<va>,<name>,<attr>,<program>,< max_len>

#...

и если число переменных превосходит 4095:

X#(4.<varno>),<name>,<attr>,<program>,<eq_false>,<eq_true>

nb_msg............ число переменных в этом блоке

va....................... виртуальный адрес переменной

varno................. диапазон адреса

name................. имя переменной

attr..................... атрибут переменной

program........... виртуальный адрес программы родителя

........................... или “!0000” для глобальной переменной

max_len............ максимальная длина (объявленный диапазон)

Структура блока, используемого для описания “С” функций, примененных в приложении, показана ниже:

@USP,<nb_usp>

#<va>,<name>

#...

nb_usp.............. число С функций в этом блоке

va....................... виртуальный адрес С функции

name................. имя С функции

Структура блока, используемого для описания экземпляров функционального блока “С”, примененных в приложении, показана ниже:

@FBINSTANCES,<nb_fb>

#<va>,<inst_name>,<fb_name>

#...

nb_fb................. число экземпляров функционального блока “С” в этом   блоке

va....................... виртуальный адрес экземпляра функционального блока                “С”

inst_name........ имя экземпляра функционального блока “С”

fb_name........... имя ссылки функционального блока “С”


SIN


Аргументы:

IN                         REAL             любая действительная аналоговая

Q                          REAL             синус входа в диапазоне [-1.0..+1.0]

Описание:

Вычисляет синус действительной величины.

(*FBD пример блока “SIN” и “ASIN”*)

(* ST Эквивалент: *)

sine := SIN (angle);

result := ASIN (sine); (*результат равен углу *)

(* IL Эквивалент: *)

LD                     angle

SIN

ST                     sine

ASIN

ST                     result



Скрипты симуляции


ISaGRAF симулятор включает средство для построения и запуска скриптов симуляции. Скрипт описывается на простом языке типа ST, и используется для тестирования с помощью симулятора ISaGRAF.

Редактор скрипта симуляции запускается командой "Инструменты / Скрипты симуляции " окна Симулятора. Ниже дана рамка редактора скрипта:

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

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

        Редактирование скриптов

Используйте команды меню  "Файл" для управления файлами скриптов:

Новый............... создает новый скрипт без заголовка

Открыть............ загружает существующий скрипт из файла

Сохранить........ сохраняет текст скрипта и содержание выходного окна на диске директории проекта

Сохранить как. сохраняет скрипт под другим именем

Для каждого скрипта в директории проекта ISaGRAF создаются два файла:

<имяскрипта>.SCC....... текст скрипта (инструкции)

<имяскрипта>.SCO...... содержание выходного окна

где <имяскрипта> - имя скрипта. Оба файла – стандартные текстовые файлы и могут быть открыты любым текстовым редактором.

           Во время редактирования скрипта, вы можете использовать команду "Редактор/ Вставить символ" чтобы выбрать объявленное имя переменной и ввести его в позиции курсора.

        Запуск скриптов

Перед запуском скрипт должен быть проверен и скомпилирован. Если нужно, синтаксис проверяется автоматически по команде "Запустить".
Используйте следующие команды меню "Скрипт":

... Проверить............. проверить синтаксис и компилировать скрипт
... Запустить скрипт.. запустить выполнение текущего скрипта
                В случае нового скрипта без заголовка он должен быть сохранен (и имя должно быть введено) перед проверкой. В случае именованного скрипта, скрипт автоматически сохраняется на диск перед проверкой синтаксиса.
Если скрипт запущен, его содержание не может быть изменено. Когда достигается конец скрипта, появляется сообщение. Вы можете также прервать работу скрипта используя следующую команду меню "Скрипт":
... Прервать скрипт.. завершает работу скрипта
Исполнение скрипта происходит между целевыми циклами. В случае бесконечного витка в программном цикле, симулятор ISaGRAF обеспечивает, что этот виток всегда прерывается так, что циклы ISaGRAF выполняются и другие приложения ISaGRAF не блокируются. Интерпретатор скрипта  ISaGRAF решает прервать скрипт, если та же "метка" встречается более одного раза в одном целевом цикле. Исполнение скрипта может быть прервано инструкциями "Cycle" или "Wait".
        Язык описания скрипта
Язык описания скрипта – очень простой текстовый язык похожий на ST, но где каждая инструкция вводится в отдельной строке, и не требует точки с запятой в конце. Используйте следующую кнопку панели инструментов для вызова списка имеющихся инструкций и ввода ключевого слова в позиции курсора:
... вставить инструкцию (ключевое слово и помощь как комментарий)
Существуют различные типы инструкций. Во-первых присвоение переменной:
:=........................ присвоение
Другие инструкции позволяют выводить сообщения в окно вывода:
Print................... выводит текстовую строку или значение переменной
PrintTime......... выводит текущую временную отметку
Другие инструкции используются для синхронизации инструкций скрипта с циклом ISaGRAF:
Cycle................. пусть симулятор ISaGRAF выполнит один цикл
Wait.................... ждать в течении определенного времени
Другие инструкции используются для управления потоком в скрипте:
Labels............... может быть помещена в любое место скрипта
Goto................... безусловный переход на метку
If goto................ условный переход на метку
End..................... заканчивается скрипт
Язык скрипта не различает заглавных и прописных букв. Комментарии могут быть введены в конце любой строки. Комментарии могут быть написаны либо в соответствии с соглашениями ST (между символами "(*" и "*)"), или с предшествующим символом ";".

Сложное оборудование В/В


Все каналы одиночной платы имеют тот же самый тип (логический, аналоговый или сообщение) и направление (ввод или вывод). Сложное оборудование В/В представляет устройство В/В с каналами различных типов или направлений. Сложное оборудование В/В представляется как список одиночных плат В/В. Оно использует только один разъем в списке шасси соединений В/В.

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

Нажатие кнопки “Добавить” позволяет пользователю добавить одиночную плату в конец текущего списка. Кнопка “Вставить” используется для вставки новой одиночной платы перед текущей выбранной платой в списке. Кнопка “Удалить” удаляет выбранную одиночную плату из списка. Кнопки “Переименовать” и “Параметры” используются для изменения имени и параметров выбранной одиночной платы. Обратитесь к соответствующему разделу для полного объяснения параметров одиночной платы. Сложное оборудование В/В может группировать до 16 одиночных плат В/В. Имя одиночной платы (внутри оборудования В/В) не может превышать 8

символов.



Сложные структуры FC


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

IF / THEN / ELSE

(1) место для ввода действий по "THEN"

(2) место для ввода действий по "ELSE"

REPEAT / UNTIL

(3) место для ввода повторяемых действий

WHILE / DO

(3) место для ввода повторяемых действий



Соглашения языка IL


Текст на языке IL  может быть непосредственно введен в блок действия SFC, на основе следующего синтаксиса:

             ACTION (P) :                (* или N *)

             #info=IL

                  <инструкция>

                  <инструкция>

                  ....

             #endinfo

             END_ACTION;

Специальные ключевые слова “#info=IL” и “#endinfo” должны быть введены именно так, прописными буквами. Пробелы и символы табуляции вводить нельзя до или после ключевых слов. Пример:

(* SFC программ с последовательностью IL в блоке действия *)


Язык Список Инструкций (IL) можно использовать для описания SFC переходов, согласно следующему синтаксису:

             #info=IL

                         <инструкция>

                         <инструкция>

                         ....

Значение, которое содержит текущий результат

(IL регистр) в конце IL последовательности, будет являться условием присоединенным к переходу:

             текущий результат = 0                              условие FALSE

             текущий результат <> 0                             условие TRUE

Специальные ключевые слова “#info=IL” и “#endinfo” должны быть введены именно так, прописными буквами. Пробелы и символы табуляции вводить нельзя до или после ключевых слов. Пример:

(* SFC программа с IL программой для переходов *)

 



Соглашения языка LD


Язык Релейных Диаграмм (LD) можно использовать для описания условий, присоединенных к переходам. Диаграмма состоит из штанги с витком. Значение витка представляет значение перехода. Пример:



Соглашения языка ST


Язык Структурный Текст (ST) можно использовать для описания условий, присоединенных к переходам. Выражение должно иметь логический

тип и заканчиваться точкой с запятой:

             < boolean_expression > ;

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

(* Программа SFC с программой ST для переходов *)

 



Сохранение и восстановление состояний входов


Используя симулятор ISaGRAF, входными каналами можно управлять , действуя на кнопки и управление редактирования панели симулятора. Вы можете в любое время использовать следующие команды меню "Инструменты" чтобы сохранять и восстанавливать состояние всех входных каналов:

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

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

 

Замечаниe:           Только именованные входные каналы (имеющие присоединенные переменные) сохраняются на диске.



Сохранение состояния программы


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

-  Некоторые процессы требуют определенных предварительных действий перед рестартом

-  Очень нудно возиться со всеми многочисленными статусными характеристиками состояния процесса

-  Некоторые внешние ресурсы, такие как периферийные устройства или программы C не могут быть автоматически перезапущены

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

Затем можно из незавершенного, но интеллектуального 'образа' процесса запускать, убивать или замораживать программы SFC и инициализировать переменные, чтобы привести приложение в адекватное состояние. Но процедура автоматического запуска не может быть обеспечена ISaGRAF.

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

Пример:

                                              



Совместимость


Выгрузка поддерживается в целевой задаче и системе разработки в версиях 3.22 и старше.

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



Создание диаграмм SFC


Для того, чтобы изобразить диаграмму SFC, пользователю просто нужно ввести основные  компоненты диаграммы. Все одиночные линии, соединяющие два элемента ( горизонтальные или вертикальные ) рисуются редактором SFC автоматически. Для вставки символа выберите в редакторе панель инструментов и щёлкните мышью в области диаграммы, в которую нужно произвести вставку. Символы вводятся в текущей позиции. Могут использоваться следующие горячие клавиши:

................. Ввести начальный шаг

................. Ввести одиночный шаг

................. Ввести переход

................. Ввести прыжок на шаг

 
...... Ввести OR расхождение или схождение / Добавить ветви 

 
...... Ввести AND расхождение или схождение / Добавить ветви

................. Ввести макрошаг

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

(Символ "

" определяет комбинацию с клавишей SHIFT)

Сетка редактирования

показывает центр каждой ячейки редактируемой матрицы. Опции редактора позволяют изображать и убирать сетку во время ввода диаграммы. Сетка очень полезна для изначального расположения диаграммы SFC или выбора её части. Используйте команду «Опции / Настройки» для того, чтобы изобразить или убрать сетку.

Редактор SFC ISaGRAF всегда показывает текущую позицию в матрице. Текущая ячейка отмечена серым. Маленький квадрат в нижнем правом углу может быть использован для свободного изменения размеров ячеек. Отношение X/Y может быть, также изменено.

        Создание Схождения или Расхождения

Схождение или Расхождение всегда изображается слева направо. Для изображения Схождения или Расхождения его левый угол должен быть помещён в область диаграммы. Тип изображения (одиночный или двойной) устанавливается выбором одной из этих кнопок на панели.

 
...... Ввести OR расхождение или схождение / Добавить ветви

 
...... Ввести AND расхождение или схождение / Добавить ветви

        Добавление ветви Схождения

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

 
...... Ввести OR расхождение или схождение / Добавить ветви

 
...... Ввести OR расхождение или схождение / Добавить ветви

    Вставка макро шага

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

        Тело макрошага

Макро шаг должен быть описан в той же SFC программе, что и главная диаграмма. Макро шаг должен начинаться начальным шагом и кончаться завершающим шагом. Часть диаграммы, реализованная как макро, должна быть автономна. Начальный шаг макро должен иметь ту же ссылку, что и символ макро на главной ветви.


Создание проектов и работа с ними


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

        Создание нового проекта

Для создания нового проекта, введите его имя. В результате  этого будет создан пустой проект, который не содержит объектов. Конфигурация ввода-вывода может быть присоединена к созданному проекту. Эта конфигурация должна быть определена в библиотеках. Если конфигурация выбрана, то ISaGRAF автоматически установит соединение ввода-вывода и объявит соответствующие переменные  ввода-вывода в словаре нового проекта. Если Вы создаёте или переименовываете проект, то необходимо придерживаться следующих правил относительно его имени :

·  Длина имени не должна превышать 8

символов

·  Первый символ должен быть буквой

·  Следующие символы могут быть буквой, цифрой или символом подчёркивания

·  В имени проекта прописной и строчный регистры не различаются

После создания проекта, пользуйтесь командой «Редактор / Текст комментария» для ввода описания проекта для отображения в списке.

        Редактирование описания проекта

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

        Редактирование проекта

Команда «Файл / Редактор» открывает окно менеджера программ для выбранного проекта. Из этого окна можно управлять содержимым проекта ( программами, параметрами приложения и т.д. ). Для редактирования проекта также можно дважды щёлкнуть мышью на его имени.

        Предыстория изменений

Система ISaGRAF сохраняет все изменения, относящиеся к компонентам проекта, в файле предыстории. Каждое изменение снабжено именем, датой и временем, когда оно было произведено. Файл предыстории содержит последние 500 изменений. Для каждого проекта существует свой файл предыстории. Файл предыстории - это дополнение к файлу-дневнику данного проекта.
Команда «Проект / История» позволяет пользователю просмотреть или напечатать предысторию изменений выбранного проекта. Пользователь может выбрать один или несколько элементов в главном списке, нажав соответствующие кнопки :

Принять......................................... закрыть окно

Печать........................................... распечатать содержимое списка

Помощь.......................................... вывести справку об этом окне диалога

[Удалить] Отмеченные................ удалить все выделенные линии из списка

[Удалить] Все................................ очистить список полностью

Поиск.............................................. найти шаблон в списке

Строка ввода над кнопкой «Поиск» служит для ввода шаблона поиска. Эта функция не различает регистры. Когда поиск доходит до конца списка, он возобновляется с начала и проходит до  начальной позиции.

        Печать завершённого документа

Команда «Проект / Печать» позволяет пользователю создать и напечатать готовый документ о выбранном проекте.  Этот документ может группировать любые компоненты ( программы, переменные, параметры... ) о выбранном проекте. Для создания специального ( не завершённого ) документа, пользователь должен просто определить его содержание.

        Защита при помощи паролей

Команда  «Проект / Установить пароль» позволяет пользователю определить пароль для инструментов и данных выбранного пароля. Обратитесь к разделу «Защитный пароль»

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


Создание таблиц преобразования


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

Таблицы преобразований редактируются с помощью диалога команды "Инструменты / Таблицы преобразований" словаря ISaGRAF.

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



Специфические булевские операторы языка ST


Следующие логические операторы являются специфическими для языка ST:

- REDGE                              определение восходящего фронта

- FEDGE                               определение падающего фронта

Могут быть использованы другие логические операторы, такие, как:

- NOT                                      логическое отрицание

- AND(&)                                логическое И (AND)

- OR                                        логическое ИЛИ (OR)

- XOR                                     логическое исключающее ИЛИ (OR)

Их описание можно найти в главе ‘Стандартные операторы функциональные блоки и функции’.

        “REDGE” оператор

Имя:                              REDGE

Значение:                   определяет передний фронт булевского выражения

Синтаксис:                 <edge> := REDGE ( <boo_expression>,<memo_variable> );

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

                                     

Возвращаемое значение:                TRUE если значение выражения меняется с FALSE на TRUE. FALSE во всех остальных случаях.

                                     

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

Предупреждение:

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

Если выражение - это булевская переменная с именем “xxx”, то нужно объявить уникальное имя внутренней переменной “EDGE_xxx” и использовать его в выражении REDGE для этой переменной. Этот метод гарантирует, что эта переменная не будет изменена во время других вычислений REDGE.

Пример:

(*ST программа, использующая REDGE оператор*)

(*Эта программа считает передние фронты булевского входа*)



Специфические особенности


        Запуск ISaGRAF

В начале работы ISaGRAF выполняется следующий алгоритм:

·       Определения

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

Таблица символов - это ASCII база данных, которая генерируется и загружается подсистемой разработки. Эта таблица обеспечивает связь символьных объектов и внутренних объектов целевой задачи. Она требуется в целевой задаче только в случаях специфического управления символами. Подробнее о таблице символов можно узнать в руководстве пользователя: Продвинутые средства программирования.

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

ISAx1            резервная копия файла кода приложения ISaGRAF (x - номер подчиненного)

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

ISAx6            резервная копия файла таблицы символов приложения (x - номер подчиненного)

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

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

Если система разработки ISaGRAF установлена в стандартном каталоге \ISAWIN, то:

файл кода приложения проекта MYPROJ будет называться

                \ISAWIN\APL\MYPROJ\appli.x8m

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

                \ISAWIN\APL\MYPROJ\appli.tst

Пример:

Если из каталога, где находится isa.exe, выдать команду


                copy \ISAWIN\APL\MYPROJ\appli.x8m  isa11

то isa.exe найдет и выполнит приложение ‘myproj’.

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

        Обработка ошибок и выдача сообщений

Целевая задача ISaGRAF включает в себя обработчик ошибок. Список ошибок приводится в приложении.

Обработка ошибок происходит по следующим правилам:

-       Ошибка состоит из номера и аргумента, посылаемых обработчику ошибок ISaGRAF.

-       Если в системе разработки установлен флаг обнаружения ошибок, то ошибка обрабатывается. Если нет - информация теряется и обработка заканчивается.

Если обрабатывается:

-       Номер (десятичное число) и аргумент (шестнадцатеричное число) выводятся в stdout.

-       Номер ошибки и аргумент помещаются в кольцевой буфер FIFO, а позднее переносятся оттуда. Размер буфера определяется в опциях Make системы разработки. Когда буфер полон, сообщение о новой ошибке вытесняет самое старое сообщение.

-       Ошибки извлекаются из буфера либо отладчиком, либо приложением, используя вызов SYSTEM (см. Руководство пользователя).

Когда отладчик фиксирует ошибку, сообщение о ней появляется в окне отображения ошибок. В зависимости от ситуации (работает приложение или нет) отладчик отображает имя объекта (переменной или программы) откуда пришла ошибка или аргумент ошибки (десятичное число) в квадратных скобках [x], который имеет различное значение для разных ошибок.

Сообщение об ошибке и ее значение по умолчанию выдаются в stdout. Если отображение в stdout нежелательно, можно использовать команду перенаправления следующего вида

                isa -t=COM1 -s=1 >NUL

        Системные часы

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



Следовательно, разрешение таймера не может быть лучше 55 мсек. По этой же причине при попытке установить продолжительность цикла менее 55 мсек. (но отличную от 0) будет выдаваться ошибка переполнения продолжительности цикла (error 66).

Невозможность модифицировать системный тик имеет и положительную сторону: исполнение ISaGRAF не может помешать никаким системным приложениям, а также функциям C или функциональным блокам, интегрированным в приложение.

Обратитесь к поставщику, если требуется специальная реализация, требующая лучшего разрешения.

        Выход из системы

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

                shift + ctrl + alt

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

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

остановка приложения из отладчика (при этом интерфейс с платами в/в закрывается)

остановки целевой задачи ISaFRAF с клавиатуры

Размер приложения

Поскольку целевая задача ISaGRAF под MSDOS предназначена для работы в реальном режиме, размер структуры данных не может превышать 64К. Поэтому код приложения, загружаемый системой разработки, не должен превышать этот предел. Вся доступная память ограничена стандартными 640 килобайтами.

Если требования по памяти Вашего приложения превышают эти пределы - обратитесь к поставщику для специальной реализации.



Если отображение в stdout нежелательно, можно использовать команду перенаправления следующего вида

                prog_name [Опции] >>>/nil

        Длительность цикла, поведение задач и их приоритеты

-       В конце каждого цикла ISaGRAF, перед тем как начать новый цикл, выполняет следующий алгоритм:

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

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

Временное разрешение соответствует установленному в OS-9 размеру тика.

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

-       Коммуникационная задача находится в спящем состоянии пока нет данных для передачи. В случае необходимости эта задача получает информацию о работающем приложении  по протоколу вопрос/ответ от ядра. Коммуникационная задача запрашивает ядро. В конце цикла (чтобы успеть получить синхронный образ приложения) ядро дает ответ коммуникационной задаче.

Задачи ISaGRAF не модифицируют приоритет, который им присвоен. Пользователь волен сам регулировать приоритеты в соответствии с поведением задачи ISaGRAF и ее требованиями к системе. Например, чтобы ISaGRAF не прерывался задачами более низкого приоритета можно модифицировать такие управляющие параметры OS-9 как MIN_AGE или MAX_AGE.

        Режим терминала

Целевой последовательный протокол распознает последовательность из 3х символов возврата каретки ($0D) и стартует задачу shell OS-9, если она доступна, на устройстве последовательной связи. Это позволяет получить строку приглашения shell на любом терминале, используя последовательную связь целевой задачи ISaGRAF.

Пример:

На хост ПК

-       Закрыть отладчик ISaGRAF.

-       Запустить сессию Windows Terminal (в группе accessories) с корректными коммуникационными параметрами

-       Трижды нажать возврат каретки

Теперь Вы зарегистрированы в shell OS-9

-       Напечатайте logout, чтобы выйти из режима терминала.

ПРЕДУПРЕЖДЕНИЕ:

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


Списки переменных


Команда “Списки переменных” в меню “Списки шпиона” окна Отладчика позволяет пользователю строить раздельные списки переменных, которые обновляются их текущими значениями. Списки строятся во время отладки приложения. Списки могут быть сохранены на диске и открыты снова во время другой сессии отладки. Список может содержать до 32 переменных. Переменные разного типа могут быть смешаны в одном и том же списке. Глобальные и локальные переменные могут быть вставлены в список. Список переменных предназначен для одного проекта. Списки переменных очень полезны для функционального тестирования приложения. Они позволяют пользователю наблюдать изменения ограниченной части контролируемого процесса, независимого от соответствующих исходных кодов в программах приложения. Списки переменных также полезны во время отладки текстовых ST и IL программ. Пользователь может легко сгруппировать в список набор переменных, используемых в программе, для того чтобы контролировать или отображать выполнение запрограммированных инструкций.

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

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

Команды меню “Файл” используются для создания, открытия и сохранения списков переменных. ISaGRAF не ограничивает число списков для одного проекта. Правила, показанные ниже, должны выполняться при наименовании списков переменных, которые будут сохраняться на диск:

·  имя не должно превышать 8 символов

·  первый символ должен быть буквой

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

·  Верхний и нижний регистры в наименовании списков не различаются

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

        Вставка переменных в список


Команда “Редактор/ Вставить” вставляет другую переменную в список. Имя переменной выбирается в списке объектов, определенных в словаре проекта. В этом случае пользователь не должен вводить вручную идентификатор. Переменная вставляется перед переменной, выбранной в данный момент в списке. Список не может содержать более 32

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

        Изменение выбранной переменной

Команда “Редактор/ Модифицировать” замещает выбранную переменную другой переменной. Вы можете также использовать команду “Вырезать” для удаления выбранной переменной из списка.

        Показать Дамп

В любой момент вы можете изменить режим просмотра между списком и просмотром "Дампа". Нажмите кнопку  "увеличение" на панели инструментов или используйте команду "Опции / Дамп" для изменения режима просмотра.

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



Экран "Дамп" полезен для просмотра сообщений содержащих печатные символы.


SQRT


Аргументы:

IN                         REAL                   аналоговая величина должна быть больше нуля

Q                          REAL                   квадратный корень входа

Описание:

Вычисляет квадратный корень действительной величины.

(*FBD пример блока “SQRT”*)

(* ST Эквивалент: *)

xpos := ABS (xval);

xroot := SQRT (xpos);

(* IL Эквивалент: *)

LD                     xval

ABS

ST                     xpos

SQRT

ST                     xrout



SR


Аргументы:

SET1                    BOO              если TRUE, установить Q1 в TRUE (доминанта)

RESET                 BOO              если TRUE, сбросить Q1 в FALSE

Q1                        BOO              булевское состояние в памяти

Описание:

Устанавливает доминанту. См. Таблицу:

Set1

Reset

Q1

result Q1

0

0

0

0

0

0

1

1

0

1

0

0

0

1

1

0

1

0

0

1

1

0

1

1

1

1

0

1

1

1

1

1

(*FBD пример блоков SR*)

(* ST эквивалент: Мы предполагаем, что SR1 - это экземпляр блока SR *)

SR1((auto_mode & start_cmd), stop_cmd);

command := SR1.Q1;

(* IL Эквивалент: *)

LD                     auto_mode

AND                  start_cmd

ST                     SR1.set1

LD                     stop_cmd

ST                     SR1.reset

CAL                  SR1

LD                     SR1.Q1

ST                     command



STACK


INT

Аргументы:

PUSH                   BOO              команда “PUSH” (на переднем фронте)

                                                  добавить значение IN в верхушку стека

POP                     BOO              команда “POP” (на переднем фронте)

                                                  удалить из верхушки стека последнее сохраненное значение

R1                        BOO              сбросить стек в пустое состояние

IN                         INT                 сохраняемое значение

N                          INT                 размер стека определенный приложением

EMPTY                BOO              TRUE если стек пустой

OFLO                   BOO              переполнение: TRUE если стек переполнен

OUT                     INT                 значение в верхушке стека

Описание:

Управляет стеком целых значений.

Функциональный блок “STACKINT” включает определение переднего фронта для команд PUSH и POP. Максимальный размер стека 128. Размер стека определенный приложением - N не может быть меньше 1 и больше 128.

Заметим, что значение OFLO действительно только после сброса (R1 было установлено в TRUE, по крайней мере, однажды и обратно в FALSE)

(*FBD пример блоков “STACKINT” : управление ошибками*)

(* ST Эквивалент: Мы предполагаем, что STACKINT1 - это экземпляр блока STACKINT *)

STACKINT1(err_detect, acknoledge, manual_mode, err_code, max_err);

appli_alarm := auto_mode AND NOT(STACKINT1.EMPTY);

err_alarm := STACKINT1.OFLO;

last_error := STACKINT1.OUT;

(* IL Эквивалент: *)

LD                     err_detect

ST                     STACKINT1.push

LD                     acknoledge

ST                     STACKINT1.pop

LD                     manual_mode

ST                     STACKINT1.r1

LD                     err_code

ST                     STACKINT1.IN

LD                     max_err

ST                     STACKINT1.N

CAL                  STACKINT1

LD                     auto_mode

ANDN                STACKINT1.empty

ST                     appli_alarm

LD                     STACKINT1.OFLO

ST                     err_alarm

LD                     STACKINT1.OUT

ST                     last_error