Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ПРОГРАМММНО-ТЕХНИЧЕСКИЕ КОМПЛЕКСЫ МИКРОПРОЦЕССОРНЫХ СИСТЕМ АВТОМАТИЗАЦИИ И УПРАВЛЕНИЯ.doc
Скачиваний:
62
Добавлен:
01.05.2014
Размер:
10.03 Mб
Скачать

5. Многозадачность

5.1. Основные понятия

Вначале необходимо кратко рассмотреть несколько базовых структурных понятий. Объекты в ПКК взаимодействуют друг с другом определенным образом; проще всего описать это взаимодействие с помощью диаграммы (рис. 5.1):

Рис. 5.1

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

Объявление переменных - самостоятельный раздел программы, в котором определяются все переменные.

Задача состоит из двух описанных выше частей: программы и объявления переменных. Несколько задач могут выполняться одновременно; эти задачи могут передавать друг другу информацию (с помощью переменных).

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

Программа состоит из двух частей - инициализации и основной. Эти части не обязательно должны быть написаны на одном языке, но это - обычная практика. Если переменные легче установить в разделе инициализации, используя язык программирования высокого уровня PL2000, но программа - чисто логическая, то основную часть можно написать в терминах лестничной логической диаграммы (LAD). Единственное исключение заключается в том, что раздел инициализации не может быть написан в LAD.

Реальное различие между этими двумя частями состоит в том, что раздел инициализации выполняется только один раз, при запуске (или первом выполнении) программы. Обычно в нем устанавливаются константы и присваиваются начальные значения переменных. В этом разделе также выполняется инициализация других компонентов (например установка драйверов или интерфейсов, идентификация модулей данных и т.д.). Основной раздел программы выполняется многократно; его выполнение начинается только после того, как будет выполнен раздел инициализации. Это означает, что когда основная программа выполнена до последней строки, она сохраняет все имеющиеся значения, и ее выполнение начинается сначала. Раздел инициализации повторно не выполняется! Имеется также максимальный временной интервал, в который каждый раз должно уложиться выполнение основного раздела программы, от первой до последней строки. Если это время превышается, то генерируется ошибка. По этой причине нельзя вводить в программу цикл, ждущий некоторого события (например, нажатия клавиши или считывания какого-то датчика). Обычно имеется основной цикл, включающий всю программу и обеспечивающий ее повторное выполнение.

Поясним ситуацию, как выполняются части программы, с помощью рис. 5.2:

Рис. 5.2

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

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

- область применения. Этот параметр определяет, кто может работать с данной переменной - только конкретная задача, все задачи в данном классе задач, все задачи, и т.д.

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

- тип ввода/вывода. Этот параметр определяет, чем фактически является переменная- выходом на аналоговом модуле, входом на цифровом входном модуле или переменной оперативной памяти.

Область применения. Этот параметр ограничивает “видимость” или область применения переменной (рис. 5.3).

- local (локальная). Эту переменную “видит” только данная задача, то есть только эта задача может считывать или производить запись в данную переменную.

- tc global (глобальная класса задач). Эта переменная сохраняется в глобальной области класса задач, к которому принадлежит данная задача. Все задачи в этом классе могут иметь доступ к такой переменной.

- proc global (глобальная процессора). Переменная для всех задач на данном процессоре - ПКК или ИП или МПС. В базовой системе имеется только один процессор, так что эта опция области применения не используется.

- pcc global (глобальная ПКК). Все задачи на данном ПКК (в МПС, но без ИП) могут иметь доступ к этой переменной.

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

Область применения proc global используется только в том случае, если на ПКК имеется несколько процессоров. В большинстве случаев имеется только один процессор, так что этот уровень отсутствует.

Рис. 5.3

Необходимо заметить, что если имеются две локальные переменные с одинаковыми именами в двух различных задачах, то они являются полностью независимыми переменными. Если имеются две различные переменные типа “глобальные переменные класса задач” в двух различных классах задач, то они являются полностью независимыми переменными. Динамическая и локальная переменные не могут иметь одинаковое имя, поскольку фактически они являются локальными переменными. Если имеются две переменные с одинаковым именем и различными областями применения, то используется самая внутренняя область применения. Например, если имеются глобальная переменная ПКК и локальная переменная с одинаковым именем, то всегда используется локальная переменная. На рисунке 5.4 изображены уровни области применения.

Рис. 5.4

Начальное значение. Оно считывается специальной системной программой при загрузке, которая устанавливает значение переменной, равное соответствующему значению инициализации. Если значение повторно определено в подпрограмме инициализации, то значение, заданное в этой подпрограмме, имеет приоритет.

Для того чтобы передать переменные между задачами, надо лишь объявить их с правильной областью применения (например, tc global, если обе задачи находятся в одном классе задач) в обоих задачах, в результате формируется одинаковая переменная. Совместное использование переменных не ограничивается только двумя задачами; много задач могут использовать одинаковую переменную или переменные.

Тип ввода/вывода. Существует несколько типов:

  • INTERNAL. Внутренний. Переменные, которые находятся в оперативной памяти и не соединены с аппаратными средствами.

  • 2003-I/O. Модули ввода/вывода SYSTEM 2003. Пользователь может установить местонахождение модуля, канал на модуле и тип модуля (цифровой/аналоговый, входной/выходной/смешанный, и т.д.).

  • 2005-I/O. Модули ввода/вывода SYSTEM 2005.

  • 2010-I/O. Модули ввода/вывода SYSTEM 2010.

  • REMOTE I/O. Удаленный ввод/вывод ( SYSTEM 2005 или 2010). Пользователь устанавливает главный узел, подчиненный узел, модуль и номер канала переменной.

  • REFERENCE. Ссылочный. Специальный тип, зарезервированный для динамических переменных.

  • IP. Для использования с интеллектуальными периферийными устройствами.

  • PP/MP. Для использования с параллельными процессорами или в многопроцессорных системах.(с использованием сопроцессора).

Классы задач - это группа задач. Можно ограничить совместное использование переменных задачами в данном классе. Имеются 2 различных типа классов задач: стандартный и повышенного быстродействия. Можно иметь до 4 типов классов стандартных задач и до 4 (2010) или 1 (2005, 2003) классов повышенного быстродействия. Классы стандартных задач имеют названия TC1 - TC4, а классы повышенного быстродействия HS1 - HS4.

Существуют некоторые особенности совместной работы задач разных классов.

Рис. 5.5

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

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

Рис.5.6

Если имеются несколько процессоров, то существует еще один уровень, который помещается между классами задач и памятью ПКК (рис. 5.6).