Работа 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 (один и тот же приоритет у всех задач). При необходимости для каждой целевой задачи это значение может быть своим.
Дальнейшие детали содержатся в разделе Отличительные особенности / Продолжительность цикла.
После того как установлены переменные среды, на заключительном шаге с помощью вызова 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")