ISaGRAF. Version 3.4

         

ISaGRAF в многозадачном режиме: isakerse, isakeret


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

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

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

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

Предлагается два модуля в зависимости от аппаратных возможностей:

- Для последовательной связи: isakerse.o

Этот модуль позволяет запустить ядра и последовательную связь.

- Для последовательной связи и/или через Ethernet: isakeret.o

Этот модуль позволяет запустить ядра и задачи для последовательной связи и/или для связи по Ethernet.

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

По отношению к ISaGRAF целевая задача VxWorks является сервером, а отладчик является клиентом, который подсоединяется к указываемому номеру порта.

        Регистрация ядра

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


uchar isa_register_slave

(



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

)

Описание:

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

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

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

        Регистрация коммуникационных задач


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

uchar isa_register_com

(

uchar com_id       /* Идентификатор комм. задачи */

)

Описание:

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

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

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


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

uchar tst_main_ex

(

char *com,           /* Имя коммуникационного устройства*/

uchar *slave,       Указатель на 4х байтовое поле с номерами подчиненных ядер*/

uchar com_id       /* Идентификатор коммуникационной задачи*/

)

Описание:

Стартует коммуникационную задачу ISaGRAF.

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

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

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

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

Можно запустить более одной коммуникационной задачи, при этом они должны иметь разные идентификаторы задач.

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

           Пример

Данный пример показывает как запустить:

Задачу ядра ISaGRAF с номером подчиненного 1.

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



Коммуникационную задачу ISaGRAF с идентификатором задачи 2, связанную с ядром 1 по Ethernet через порт 1100.

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

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

ld < RELS/isassr.o

Загрузить модуль isakeret.o (Его можно загрузить даже если связь по Ethernet не предполагается)

ld < CMDS/isakeret.o

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

ISAMOD ("/tyCo/1", 19200)

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

CLKRATE = sysClkRateGet ()

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

isa_register_slave (1)

Регистрация коммуникационных задач

isa_register_com (1)

isa_register_com (2)

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

TSK_FUNIT = ""

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

TSK_NBTCKSCHED = 0

Запуск задачи ядра ISaGRAF

sp (isa_main, 1, "")

Коммуникационная задача, связь со подчиненными

SlavesLink = 0x01000000

Запуск коммуникационных задач ISaGRAF

sp (tst_main_ex, "/tyCo/1", &SlavesLink, 1)

sp (tst_main_ex, "1100", &SlavesLink, 2)

Эта последовательность соответствует следующей схеме



Возможны также следующие конфигурации.



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



Эта конфигурация состоит из двух ядер, связанных с одной коммуникационной задачей, работающей через последовательный порт (Ethernet), SlavesLink=0x01020000.


Содержание раздела