Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лаб.раб.3.doc
Скачиваний:
20
Добавлен:
09.09.2019
Размер:
638.46 Кб
Скачать

1. Структура памяти контроллера. Адресация памяти

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

  • входной регистр (I-память);

  • выходной регистр (Q-память);

  • область маркеров (М-память).

Запись данных в I-память происходит в начале цикла сканирования (фаза 1) в соответствии с сигналами на входах контроллера. Из I-памяти имеет смысл осуществлять только чтение данных.

В конце цикла сканирования по данным Q-памяти контроллер устанавливает состояния физических выходов (фаза 3). Q-память можно использовать для записи и для чтения данных.

M-память (область маркеров) не связана с физическими входами и выходами и предназначена для хранения промежуточных результатов логических вычислений. Под маркером понимается логическая переменная объемом 1 бит (принимающая значение 0 или 1). М-память можно использовать как для записи, так для чтения данных.

При адресации одного бита памяти используется следующая запись: буква (тип памяти), номер байта памяти (0,1,2…), точка, номер бита памяти в данном байте (0…7). Отметим, что нумерация битов и байтов памяти начинается с нуля. Например, I0.5 – пятый бит нулевого байта входного регистра; Q0.0 – нулевой бит нулевого байта выходного регистра; M2.6 – шестой бит второго байта M-памяти.

Программа контроллера описывает действия в фазе 2 цикла сканирования (см. рис.1), которые будут периодически повторяться. Программа на языке Step7Micro-STL состоит из последовательности текстовых команд. Каждая команда записывается в отдельной строке. Команды выполняются последовательно сверху вниз (за исключением случая, когда используются команды перехода).

Команды в программе группируются в блоки. Начало блока обозначается заголовком NETWORK с порядковым номером.

NETWORK 1

<команда первого блока 1>

<команда первого блока 2>

NETWORK 2

<команда второго блока 1>

<команда второго блока 2>

NETWORK 3

Для каждого блока используется отдельная область памяти – логический стек, с помощью которой организуется ввод, вывод и обработка данных. Стек состоит из 9 битовых ячеек. Каждая ячейка представляет собой определенный уровень стека; первый уровень называется вершиной стека, последний девятый уровень – дном стека. Принцип работы стека – «первым вошел, последним вышел». Записать данные можно только в вершину стека, остальные данные стека при этом сдвигаются вниз. Считать данные в другие области памяти возможно только из вершины стека. В стеке данного блока нельзя непосредственно использовать данные из стека другого блока.

2. Основные логические команды

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

  • Запись бита данных в стек

В стек можно записать бит данных, находящийся в любой ячейке оперативной памяти контроллера (I-памяти, Q-памяти или М-памяти) или инвертированное значение этого бита. Пусть в стеке уже находятся биты данных х1…х9. При записи в стек бита данных z из заданной ячейки оперативной памяти (рис.5,а), этот бит записывается в вершину стека, а все находящиеся в стеке данные сдвигаются на один уровень вниз. Бит данных х9, который был на дне стека, теряется. Бит данных z в ячейке оперативной памяти сохраняется. Запись в стек инвертированного значения (рис.5,б) происходит аналогично. Значение z в ячейке оперативной памяти не инвертируется.

Форматы соответствующих команд приведены в таблице 1.

Таблица 1

Формат команды

Описание команды

Схема

операции

LD v

Запись бита данных из ячейки памяти v в стек.

Рис.5,а

LDN v

Запись инверсного значения бита данных из ячейки

памяти v в стек.

Рис.5,б

Рис.5. Запись в стек бита данных.

Примеры команд:

LD I0.5

LDN Q1.3

LD M0.2

  • Запись бита данных из стека в память

Бит данных х1 из вершины стека записывается в заданную ячейку оперативной памяти (Q-память или М-память), при этом бит данных z, исходно находившийся в этой ячейке, теряется, содержимое стека не изменяется (рис.6).

Рис.6. Запись бита данных из стека в память.

Формат соответствующей команды приведен в таблице 2.

Таблица 2

Формат команды

Описание команды

Схема

операции

= v

Записать в ячейку памяти v бит данных из вершины стека

Рис.6

Пример команды:

= Q1.1

  • Вычисление логической функции двух аргументов (вариант 1)

Аргументами логической функции f (функция И или функция ИЛИ) являются бит данных в вершине стека x1 и бит данных z ячейки оперативной памяти (рис.7,а) либо бит данных в вершине стека x1 и инвертированное значение бита данных ячейки оперативной памяти (рис.7,б). Результат логической функции f(x1,z) или f(x1, ) записывается в вершину стека, но сдвига данных в стеке не происходит. Исходное значение вершины стека x1 теряется, данные остальных уровней стека (х2…х9) не изменяются.

Форматы соответствующих команд приведены в таблице 3.

(а)

(б)

Рис.7. Вычисление логической функции двух аргументов (вариант 1).

Таблица 3

Формат

команды

Описание команды

Схема

операции

A v

Логическое умножение (функция И) бита данных ячейки памяти v и бита данных вершины стека.

Рис.7,a

O v

Логическое сложение (функция ИЛИ) бита данных ячейки памяти v и бита данных вершины стека.

AN v

Логическое умножение (функция И) инверсного значения бита данных ячейки памяти v и бита данных вершины стека.

Рис.7,б

ON v

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

Примеры команд:

А I0.2

O Q0.1

AN M4.5

ON I1.5

  • Вычисление логической функции двух аргументов (вариант 2)

Аргументами логической функции f (функция И или функция ИЛИ) являются бит данных в вершине стека x1 и бит данных второго уровня стека х2 (рис.8). Результат логической функции f(x1,х2) записывается в вершину стека, исходные значения вершины стека x1 и второго уровня стека x2 теряются, остальные данные стека x3…x9 сдвигаются на один уровень вверх. Данные на дне стека становятся неопределенными.

Рис.8. Вычисление логической функции двух аргументов (вариант 2).

Форматы соответствующих команд приведены в таблице 4.

  • Инверсия бита данных в вершине стека

Бит данных в вершине стека х1 заменяется на инвертированное значение , остальные данные в стеке не изменяются (рис.9).

Формат соответствующей команды приведен в таблице 4.

Рис.9. Инверсия бита данных в вершине стека.

Таблица 4

Формат команды

Описание команды

Схема

операции

ALD

Логическое умножение (функция И) битов данных

первого и второго уровней стека.

Рис.8

OLD

Логическое сложение (функция ИЛИ) битов данных

первого и второго уровней стека.

NOT

Инверсия бита данных вершины стека.

Рис.9

  • Дублирование бита данных вершины стека

Бит данных вершины стека x1 повторно записывается в стек (рис.10). Все находившиеся в стеке данные, включая x1, сдвигаются на один уровень вниз. Таким образом, x1 оказывается на первом и на втором уровне стека. Бит данных х9, который был на дне стека, теряется.

Рис.10. Дублирование бита данных вершины стека.

Формат соответствующей команды приведен в таблице 5.

  • Копирование бита данных второго уровня стека в вершину

Бит данных второго уровня стека х2 записывается в вершину стека (рис.11). При этом сдвига данных в стеке не происходит, данные x2…x9 сохраняются. Таким образом, x2 оказывается на первом и на втором уровне стека.

Формат соответствующей команды приведен в таблице 5.

Рис.11. Копирование бита данных второго уровня стека в вершину.

Извлечение данных вершины стека

Бит данных вершины стека х1 выталкивается из стека и теряется (рис.12). Остальные данные стека сдвигаются на один уровень вверх, данные на дне стека становятся неопределенными.

Формат соответствующей команды приведен в таблице 5.

Рис.12. Извлечение данных вершины стека.

Таблица 5

Формат команды

Описание команды

Схема

операции

LPS

Дублирование бита данных вершины стека.

Рис.10.

LRD

Копирование бита данных второго уровня стека

в вершину.

Рис.11.

LPP

Извлечение бита данных из вершины стека.

Рис.12.

  • Команды сброса и установки битов памяти

Эти команды позволяют установить заданное число битов оперативной памяти (т.е. присвоить им значение логической единицы) или сбросить заданное число битов памяти (т.е. присвоить им значение логического нуля). Выполнение команд сброса и установки зависит от состояния вершины стека: если в вершине стека единица, то команда выполняется, если в вершине стека ноль – не выполняется. Команды применимы только для Q-памяти или М-памяти. Формат команд сброса и установки приведен в таблице 6.

Таблица 6

Формат

команды

Описание команды

S v,n

Установка n битов оперативной памяти, начиная с ячейки v, если в вершине стека 1.

R v,n

Сброс n битов оперативной памяти, начиная с ячейки v, если в вершине стека 1.

Например, команда

S M0.6, 4

устанавливает 4 бита М-памяти M0.6, M0.7, М1.0 и М1.1 при условии единицы в вершине стека.

Следующая команда:

R Q0.2, 1

сбрасывает 1 бит выходного регистра Q0.2 при условии единицы в вершине стека.

Отметим, что команда S не выполняет сброс, а команда R – установку битов независимо от состояния вершины стека.

С помощью команд S и R программируется RS-триггер, например:

Network 1

LD I0.1

S Q0.0, 1

LD I0.2

R Q0.0, 1

3. Таймерные команды

Таймер – это программный элемент, обеспечивающий при выполнении программы задержки времени заданной длительности. Рассмотрим два вида таймеров: таймер с задержкой включения (таймер типа TON) и таймер с задержкой отключения (таймер типа TOF).

С таймерами связывается два понятия: текущее значение таймера (целое число в диапазоне 0…32767) и бит таймера (логическая переменная). Биты таймеров размещаются в Т-памяти. Для их адресации указывается буква Т и порядковый номер таймера в диапазоне 0…255, например, Т45, Т58, Т110, Т255. Биты таймеров можно загружать в стек и использовать в логических операциях, например:

LD T102

AN T187

O T45 и т.д.

Будем рассматривать только таймеры типа TON и TOF, у которых отсчет времени происходит с шагом 100 мс. Таким таймерам соответствуют номера 37…63 и 101…255. Когда таймер отсчитывает время, его текущее значение увеличивается, причем единица текущего значения соответствует одному шагу (в нашем случае 100 мс).

Таймерная команда имеет формат

TON Tn, PT

или

TOF Tn, PT

где n – номер таймера (число 0…255), PT – предустановленное значение таймера (1…32767). Предустановленное значение является константой, задаваемой программистом, которая определяет величину выдержки времени в шагах. Например, для обеспечения временной задержки 5,5 с при шаге 100 мс необходимо задать PT=55.

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

Примеры таймерных команд:

TON T105, 400

TOF T38, 25

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

При изменении (в некотором цикле) состояния вершины стека с 0 на 1 таймер типа ТON активизируется и начинает отсчет времени. Текущее значение изменяется в каждом новом цикле сканирования. В том цикле, когда текущее значение достигнет предустановленного значения, бит таймера устанавливается в единицу. При изменении состояния вершины стека с 1 на 0 таймер типа TON сбрасывает свой бит и обнуляет текущее значение без временной задержки. Работу таймера типа TON поясняет рис.13,а.

При изменении состояния вершины стека с 0 на 1 таймер типа ТOF устанавливает в единицу свой бит без временной задержки, а текущее значение таймера (если оно не равно нулю) обнуляется. При изменении состояния вершины стека с 1 на 0 таймер типа TOF активизируется и начинает отсчет времени. В том цикле, когда текущее значение достигнет предустановленного значения, бит таймера сбрасывается в ноль. Работу таймера типа TOF поясняет рис.13,б.

(а)

(б)

Рис.13. Временные диаграммы работы таймера.

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