 Использование симулятора ISaGRAF

Симулятор ядра ISaGRAF запускается вместе с отладчиком, когда выполняется команда Симулировать из меню Отладка в окне Управления Программ. Симулятор ядра - это законченная целевая система ISaGRAF, поддерживающая стандартные свойства ISaGRAF и все функции C, и блоки функций стандартной библиотеки, поставляемой CJ International. Платы В/В графически симулируются в окне. Любой тип платы В/В может быть симулирован. Платы, определенные как Виртуальные платы во время соединения В/В, также появляются в окне симуляции.

Связи с отладчиком

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

Компоненты библиотеки

Опции

Симулятор ISaGRAF также включает средства для симуляции приложения и диагностики:

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

Циклический Профилер

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


Связи с отладчиком

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


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

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

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

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

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

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

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

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


Компоненты библиотеки

Симулятор ISaGRAF полностью поддерживает стандартные преобразования, функции и блоки функций, поставляемые CJ International. Ниже дан список поддерживаемых объектов:

 Функции преобразования:

bcd, scale

 Функции:

abs, acos, ArCreate, ArRead, ArWrite, ascii, asin, atan, char, cos, delete, expt, find, insert, left, limit, log, max, mid, min, mlen, mod, mux4, mux8, odd, rand, replace, right, rol, ror, sel, shl, shr, sin, sqrt, tan, trunc

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

average, blink, cmp, ctd, ctu, ctud, derivate, f_trig, hyster, integral, lim_alrm, r_trig, rs, sema, sr, stackint, tof, ton, tp

Преобразования, определенные пользователем, функции C и функциональные блоки  обычно не интегрированы в симулятор ISaGRAF. Обычно такие объекты разрабатываются для использования ресурсов программного обеспечения и оборудования целевой системы. Такие ресурсы, как правило, недоступны в Windows системе. Симулятор ISaGRAF обеспечивает следующее стандартное поведение для любого, определенного пользователем, преобразования, функции или функционального блока:

•	Когда новое преобразование совершается симулятором, оно замещается null преобразованием. Это означает, что физическое значение аналоговых переменных всегда равно электрическому значению (как введено или отображено на панели Симулятора).

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


Опции

Команды меню Опции позволяют пользователю управлять дисплеем В/В в панели симуляции. Пользователь может установить или удалить эти опции в любое время в течении отладки.

Когда установлена опция Цветной дисплей , каналы В/В отображаются как цветные bitmap картинки. Если цвета не различаются на некоторых LCD дисплеях, то пользователь должен убрать эту опцию, что бы получить чистую черно-белую графику ввода-вывода для каналов В/В.

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

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

Когда установлена опция Всегда наверху, окно симулятора всегда видно, даже если место ввода находится в другом окне.


Профилер цикла

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

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

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

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

Используйте команду "Вид / Копировать" чтобы копировать имена программ и проценты в клипборд Windows в ASCII формате. Затем данные могут быть вставлены в текстовый документ или электронную таблицу.

Важные замечания:

Это неточные измерения. Вычисление процентов основано на подсчете TIC инструкций, принимая во внимание различные времена выполнения инструкций. Вычисление не включает время потраченное на "C" функции и функциональные блоки.

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

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


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

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	tзаканчивает скрипт

Язык скрипта не различает заглавных и прописных букв. Комментарии могут быть введены в конце любой строки. Комментарии могут быть написаны либо в соответствии с соглашениями ST (между символами "(*" и "*)"), или с предшествующим символом ";".


":=" Присвоение

Значение:	Присвоить значение переменной ISaGRAF. Она может быть внутренней переменной, входным каналом или выходным каналом.

Синтаксис:	<varname> := <constant_expression>

<varname> = <constant_expression>

Аргументы:	<varname> символ объявленной переменной или непосредственно представленная переменная В/В использующая соглашения "%".

<constant_expression> константа, которая соответствует типу переменной. Для булевских, "0" и "1" могут использоваться "FALSE" и "TRUE". Для таймеров, префикс "T#" или "TIME#" может быть опущен.

Замечание:	Входная переменная устанавливаемая скриптом не требует блокировки. Чертеж соответствующего входного канала изменяется, когда входная переменная изменяется скриптом.

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

Пример:	MyBooVar := 1         (* то же, что и TRUE *)

MyIntVar := 1234

MyRealVar := 1.2345

MyMsgVar := 'Hello'

MyTmrVar := t#12s


Print

Значение:	Пишет строку или значение переменной в окно вывода. Текст выводится как одна новая строка в конце уже написанного текста в окне вывода.

Синтаксис:	Print '<text>'

Print <varname>

Аргументы:	<text> любая строка в одиночных кавычках

<varname> символ объявленной переменной или непосредственно представленная переменная В/В использующая соглашения "%".

Замечание:	Выходная переменная всегда форматируется в соответствии с соглашениями IEC.

Пример:	Print 'Hello'

Print MyBooVar

Выход:	Hello

MyBoovar = TRUE


PrintTime

Значение:	Пишет текущую временную отметку в выходное окно. Текст выводится как одна новая строка в конце уже написанного текста в окне вывода.

Синтаксис:	PrintTime

Замечание:	Временная отметка форматируется в соответствии с текущими установками Windows

Пример:	Print 'Time now is:'

PrintTime

Выход:	Time now is:

15:45:22


Cycle

Значение:	Подвешивает исполнение скрипта до выполнения следующего цикла ISaGRAF.

Синтаксис:	Cycle

Замечание:	Инструкции скрипта исполняются в начале цикла ISaGRAF. Если симулятор в пошаговом режиме, за инструкцией "cycle" следует сразу цикл. Следующие инструкции цикла будут выполнены на следующей команде отладчика "Execute one cycle".

Пример:	(* программа ISaGRAF копирует A в B *)

A := 0

Cycle

Print B

A := 1

Print B (* цикл не выполнен/B не установлено в 1 *)

Cycle

Print B

Выход:	B = 0

B = 0

B = 1


Wait

Значение:	Подвешивает исполнение цикла до истечения задержки

Синтаксис:	Wait <delay>

Аргументы:	<delay> задержка выраженная в соответствии с соглашениями IEC для временных констант. Префиксы "T#" или "TIME#" могут быть опущены. Величина задержки должна быть между 10 миллисекундами и  1 часом.

Замечание:	Точность инструкции "Wait" зависит от системы Windows. Также, задержка должна рассматриваться с точностью плюс минус один цикл ISaGRAF. Если инструкция "Wait" достигнута, циклы ISaGRAF выполняются до тех пор пока не истечет задержка и перед продолжением выполнения скрипта.

Пример:	PrintTime

Wait 2s

PrintTime

Выход:	15:45:27

15:45:29


Метки

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

Синтаксис:	<labelname>:

Аргументы:	<labelname> уникальное имя в соответствии с соглашениями ISaGRAF: ограничено 16 символами, начинается с буквы, далее идут буквы, цифры или подчерк. Если определена, то за именем метки должен следовать символ ":".

Замечание:	Нельзя помещать инструкции в строке, где определена метка. Имя метки не должно совпадать с именем объявленной переменной  ISaGRAF

Пример:	(* Пример скрипта с бесконечным циклом *)

loop:

PrintTime

Wait 1s

Goto loop


Goto

Значение:	Безусловный переход на метку

Синтаксис:	Goto <labelname>

Аргументы:	<labelname> имя метки определенное в скрипте

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

Пример:	Print 'Before Jump'

Goto MyLabel

Print 'Within Jump' (*никогда не выполняется *)

MyLabel:

Print 'After Jump'

Выход:	Before Jump

After Jump


If Goto

Значение:	Условный переход на метку. Условие  это либо сравнение двух переменных ISaGRAF, либо сравнение переменной и константы.

Синтаксис:	If <var1> test <var2> Goto <labelname>

If <var1> test <constant_expr> Goto <labelname>

Имеются тесты сравнения:

=	true если члены имеют одно значение

<>	true если члены имеют разные значения

<	true если первый член меньше второго

<=	true если первый член меньше или равен  второму

>	true если первый член больше второго

>=	true если первый член больше или равен второму

Аргументы:	<var1> <var2> символы объявленных переменных или непосредственно представленные переменные В/В использующие соглашения "%".

<constant_expr>  константа, которая соответствует типу переменной. Для булевских, "0" и "1" могут использоваться "FALSE" и "TRUE". Для таймеров, префикс "T#" или "TIME#" может быть опущен.

<labelname>  имя метки определенной в скрипте.

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

Пример:	(* Этот виток работает до тех пор пока MyVar не равно TRUE *)

Loop:

If MyVar = TRUE Goto TheEnd

Print MyVar

Goto Loop

TheEnd:


End

Значение:	Заканчивает скрипт

Синтаксис:	End

Замечание:	Инструкция "End" должна быть в последней строке скрипта

Пример:	(* Этот виток работает до тех пор пока MyVar не равно TRUE *)

Loop:

If MyVar = FALSE Goto Continue

End

Continue:

Print MyVar

Goto Loop


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

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

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

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

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