Вы находитесь на странице: 1из 224

МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ

РОССИЙСКОЙ ФЕДЕРАЦИИ
ФЕДЕРАЛЬНОЕ АГЕНТСТВО ПО ОБРАЗОВАНИЮ
Технологический институт
Федерального государственного образовательного
учреждения высшего профессионального образования
«Южный федеральный университет»

ПРИОРИТЕТНЫЙ НАЦИОНАЛЬНЫЙ ПРОЕКТ


«ОБРАЗОВАНИЕ»

М.Ю. Медведев, В.Х. Пшихопов

ПРАКТИКУМ ПО ИЗУЧЕНИЮ
STL-ПРОГРАММИРУЕМЫХ
ПРОМЫШЛЕННЫХ КОНТРОЛЛЕРОВ SIEMENS

Учебное пособие

Таганрог 2007
УДК 681.326.3(07)

Рецензенты:

д-р техн. наук, профессор Донского государственного техниче-


ского университета Р.А. Нейдорф;
канд. техн наук, инженер-программист 2-й категории ТНТК
им. Бериева М.Е. Погорелов.

Медведев М.Ю., Пшихопов В.Х.


Практикум по изучению STL-программируемых промыш-
ленных контроллеров SIEMENS: Учебное пособие. – Таганрог:
Изд-во ТТИ ЮФУ, 2007. – 224 с.

Учебное пособие включает описание пакета STEP 7 языка


программирования STL для автоматизированного проектирова-
ния микроконтроллерных систем управления. Рассмотрены ос-
новы работы в STEP 7 и функции языка STL, позволяющие реа-
лизовывать алгоритмы автоматического или автоматизированно-
го управления технологическими процессами на базе контролле-
ро2в S 300/400. Приводятся примеры проектирования систем.
Пособие предназначено для студентов, изучающих совре-
менную микропроцесс2орную и микроконтроллерную технику
промышленного применения.
Печатается по решению редакционно-издательского совета
Технологического института Южного федерального университе-
та.

Табл. 33. Ил. 62. Библ иогр.:2 назв.

2
1. ИЗУЧЕНИЕ БАЗОВОГО ПРОГРАММНОГО
ОБЕСПЕЧЕНИЯ ПРОМЫШЛЕННЫХ КОНТРОЛЛЕРОВ
SIEMENS

Базовый пакет STEP 7 предназначен для создания проектов,


решающих задачи автоматизации отдельных станков, участков,
технологических процессов. Рассматриваемый пакет позволяет
проводить разработку как программных, так и аппаратных
средств в пределах одного проекта, в результате чего на основе
требований к программной и аппаратной частям происходит со-
здание и конфигурирование необходимых средств и сетей, рабо-
чих программ и блоков данных для решения задач автоматиза-
ции.
Основными данными при создании аппаратной части проек-
та в STEP 7 являются:
а) число и типы входов и выходов;
б) число и типы модулей;
в) число используемых стоек;
г) производительность и тип центрального процессора;
д) человекомашинный интерфейс;
е) сетевая система.
Для создания программного обеспечения требуется разрабо-
тать:
а) структуру программы;
б) управление данными автоматического процесса;
в) структуру данных;
г) передачу данных;
д) документацию программы и проекта.
Общая структура системы, работающей под управлением
STEP 7, показана на рис. 1.1.
Целью настоящего занятия является освоение основных ути-
лит программы STEP 7 и приемов работы, позволяющих научить-
ся создавать проект, конфигурировать его аппаратную часть, со-

3
здавать программное обеспечение и проводить тестирование про-
екта.

STEP 7 УПРАВЛЕНИЕ ПРОЕКТОМ

ОБОРУДОВАНИЕ

ТЕХНОЛОГИЧЕСКИЙ
ПРОЦЕСС

ПРОГРАММЫ

Рис. 1.1. Структура системы автоматизации

1.1. ОСНОВНЫЕ УТИЛИТЫ STEP 7


Основными утилитами пакета STEP 7, которые доступны из
папки SIMATIC->STEP 7, являются:
а) SIMATIC Manager;
б) LAD, STL, FDB – Programming S7;
в) Memory Card Parameter Assignment;
г) NetPro – Configuring Networks;
д) PID Control Parameter Assignment;
е) S7 SCL – Programming S7 Blocks;
ж) S7-GRAPH – Programming Sequential Control System;
з) S7-PDIAG – Configuring Process Diagnostic;
и) S7-PLCSIM Simulating Modules;
к) Setting the PG-PC Interface;
л) Configure SIMATIC Workspace.
Основной программой STEP 7 является SIMATIC Manager,
который позволяет производить основные операции с проектом,

4
такие как создание, сохранение, открытие, а также управлять ра-
ботой проекта, запускать различные утилиты, связывать их меж-
ду собой и т.д.
Программа LAD, STL, FDB – Programming S7 Blocks – ре-
дактор, позволяющий программировать блоки, основываясь на
одном из трех представлений языка программирования. Язык
LAD – Ladder Diagram (контактный план) – использует пред-
ставление программы в виде коммутационной схемы, состоящей
из переключателей, линий связи, ключей и т.п. STL – Statement
List (список операторов) – язык, подобный ассемблеру. FDB –
Function Block Diagram – функциональная схема, основанная на
логических элементах, триггерах и т.п.
Утилита Memory Card Parameter Assignment позволяет со-
хранять пользовательскую программу в память EPROM (элек-
трически программируемая постоянная память), используя про-
грамматор или, в случае персональной ЭВМ, на внешнее
устройство.
Программа NetPro – Configuring Networks позволяет конфи-
гурировать промышленные сети, такие как MPI, PROFIBUS или
Industrial Ethernet.
Утилита PID Control Parameter Assignment позволяет автома-
тизировать процедуру расчета и настройки параметров ПИД-
регуляторов, используемых в системах управления.
С базовым пакетом обычно поставляются специальные ути-
литы, позволяющие проводить создание программ различными
способами, такими как: написание программ на языке програм-
мирования высокого уровня SCL, который похож на Паскаль, с
помощью программы S7 SCL; графическая разработка программ
в виде последовательности шагов и переходов между ними по-
средством утилиты S7-GRAPH. Могут также поставляться до-
полнительные пакеты.
S7-PDIAG – Configuring Process Diagnostic – это программа,
используемая для диагностики проектов.

5
Утилита S7-PLCSIM Simulating Modules предназначена для
программной имитации работы контроллера, что позволяет раз-
рабатывать проекты, а также проверять и отлаживать работу
программ без подключения реального оборудования.
Программа Setting the PG-PC Interface применяется для
установки параметров локальных станций, подключенных к
многоточечному интерфейсу MPI.
Configure SIMATIC Workspace позволяет конфигурировать
проекты, создаваемые с использованием нескольких терминалов.
1.2. ЭЛЕМЕНТЫ ПРОЕКТА В SIMATIC MANAGER
SIMATIC Manager – это графический интерфейс для редак-
тирования объектов S7 (проектов, файлов пользовательских про-
грамм, блоков, оборудования станций и инструментов). Основ-
ное окно утилиты показано на рис. 1.2.
Основными элементами панели главного меню программы
SIMATIC Manager являются разделы File, PLC, View, Options,
Window и Help, содержание которых зависит от текущего окна.
На панели инструментов вынесены наиболее часто исполь-
зуемые кнопки.
Вначале рассмотрим структуру проекта в SIMATIC Manager,
которая показа на рис. 1.3.
Данные хранятся в проекте в виде объектов. Объекты в про-
екте размещаются в древовидной структуре, которая показана в
левой части рис. 1.3. Она подобна структуре, используемой в
Windows Explorer. Различаются только иконки объектов.
Содержимое правой части окна SIMATIC Manager зависит от
выбранного в левой части объекта.
На самом верхнем уровне, который (см. рис. 1.3) называется
zavod, расположен сам проект. Каждый проект представляет ба-
зу, в которой хранятся все относящиеся к нему данные. Элемен-
тами проекта являются сети и их элементы – станции и другие
узлы. В данном примере проект zavod содержит многоточечный

6
интерфейс MPI(1), к которому подключена одна станция
SIMATIC 300 Station.

Рис. 1.2. Меню и панель инструментов SIMATIC Мan-


ager
На втором уровне, который показан на рис. 1.4, нахо-
дятся станции, которые являются исходными объектами
для конфигурирования аппаратуры. Здесь хранится ин-
формация о конфигурации аппаратуры и параметрах моду-
лей.
На рис. 1.4 уровень станций содержит один элемент –
SIMATIC 300 Station, который в свою очередь содержит
контроллер CPU314(1). Другое оборудование можно про-
сматривать утилитой Hardware.
В свою очередь, процессор CPU314(1) содержит поль-
зовательские программы, в данном случае S7 Program(1),
которые могут быть написаны в виде блоков Blocks или
исходных кодов Sources. Последующие уровни зависят от
содержимого предыдущих уровней.

7
Рис. 1.3. Структура проекта в SIMATIC Manager
На рис. 1.5 показан один из примеров проекта, содержащего
на уровне Blocks несколько элементов. Каждый элемент являет-
ся исполняемым блоком.

Рис. 1.4. Уровень станции в SIMATIC Manager

8
Основными блоками, которые используются в STEP 7, яв-
ляются:
а) организационный блок, например OB1, который является
основной циклически исполняемой программой;
б) функция, например FC1, применяемая для замены типо-
вых или часто повторяющихся блоков;
в) функциональный блок, например FB1, в отличие от функ-
ции имеет отдельную память в глобальном пространстве, назы-
ваемую блоком данных, за счет чего функциональный блок мо-
жет сохранять свои переменные в общем адресном простран-
стве;
г) блоки данных, например DB1, наличие которых обуслов-
лено гарвардской архитектурой контроллеров.

Рис. 1.5. Уровень блоков


1.3. СОЗДАНИЕ ПРОЕКТА В SIMATIC MANAGER
Рассмотрим основные этапы создания проекта с помощью
мастера «New Project Wizard», который находится в разделе
«File» главного меню утилиты SIMATIC Manager. Создание про-

9
екта состоит из четырех шагов, которые демонстрируются на
рис. 1.6 – 1.9.
В первом окне, показанном на рис. 1.6, пользователю пред-
лагается выбрать структуру проекта по умолчанию, показанную
в двух окнах, нажав кнопку «Finish», или продолжить пошаговое
создание проекта, нажав кнопку «Next».

Рис. 1.6. Первый шаг создания проекта


При выборе пошагового режима появляется второе окно,
демонстрируемое на рис. 1.7, в котором предлагается выбрать
тип процессора (процессоров) из списка и установить его MPI-
адрес – адрес подключения к многоточечному интерфейсу (Multi
Point Interface).
Нажав кнопку «Next», можно перейти к третьему шагу, ко-
торый поясняется на рис. 1.8.
10
На третьем этапе можно выбрать тип организационных бло-
ков, которые планируется использовать в программе, например:
блок OB1 «Cycle Execution» – означает циклически исполняе-
мую программу; блок OB10«Time of Day Interrupt» – означает
прерывание, вызываемое по времени суток; блок OB20 «Time
Delay Interrupt» – означает прерывание, вызываемое по истече-
нии заданного временного интервала; блок OB30 «Cycle

Рис. 1.7. Второй шаг при создании проекта


Interrupt» – это циклически вызываемое прерывание; блок
OB40 «Hardware Interrupt 1» – программа, выполняемая по при-
ходу прерывания от внешней аппаратуры; блок OB60 «Multi-
computing Interrupt» – предназначен для прерываний, вызывае-
мых различными способами. Кроме того, существует ряд бло-
ков, предназначенных для обработки ошибок, таких как ошибка
таймера (OB80 «Cycle Time Fault»), ошибка системы питания
(OB81 «Power Supply Fault»), ошибка ввода-вывода (OB82 «I/O

11
Point Fault»), ошибка процессора (OB84 «CPU Fault»), ошибка
загрузки организационного блока (OB85 «OB Not Loaded Fault»),
отсутствие контакта в соединительном разъеме (OB86 «Loss of
Rack Fault»), ошибка соединения (OB87 «Communication Fault»).

Рис. 1.8. Третий шаг при создании проекта


Также существует три блока для перезапуска: полный пере-
запуск (OB100 «Complete Restart»); обычный перезапуск (OB101
«Restart»); холодный перезапуск (OB102 «Cold Restart»). По-
следние два блока – ошибка программирования контроллера
(OB121 «Programming Error») и ошибка доступа к блоку (OB122
«Module Access Error»).
Кроме того, в окне, показанном на рис. 1.8, имеется возмож-
ность установить язык программирования, наиболее удобный
для пользователя – STL (список операторов), LAD (контактный
план) или FBD (функциональный оператор).

12
В последнем окне, показанном на рис. 1.9, предлагается за-
дать имя проекта. Результатом работы «New Project Wizard» яв-
ляется созданный проект, который появляется после нажатия
кнопки Finish в последнем диалоговом окне.
Добавление новых элементов в проект осуществляется через
меню «Insert». Сохранение проекта, копирование блоков проис-
ходит стандартным способом через буфер или с помощью мани-
пулятора.

Рис. 1.9. Присвоение имени проекту


1.4. КОНФИГУРИРОВАНИЕ АППАРАТНЫХ СРЕДСТВ
Конфигурирование аппаратных средств проекта осуществ-
ляется посредством утилиты «Hardware Configuration». Чтобы
запустить указанную программу, необходимо перейти на уро-
вень станций, который показан на рис. 1.4, и двойным щелчком
нажать кнопку «Hardware», в результате чего появится окно, по-
казанное на рис. 1.10.
13
Рис. 1.10. Окно конфигурации аппаратной части
Рабочее поле утилиты Hardware Configuration разбито на три
основные части. В левой верхней части показаны стойки с от-
дельными слотами. Они расположены на шинах. В левой нижней
части находится таблица с адресами входов-выходов, различных
блоков и контроллеров. В правой части окна расположена биб-
лиотека элементов, из которых можно собирать стойки.
Создание аппаратной части начинается с добавления стойки
(Rack), которая находится в соответствующем каталоге. Напри-
мер, при создании станции SIMATIC 300 необходимо открыть
каталог элементов SIMATIC 300 и из папки Rack-300 добавить
элемент Rail. Добавление можно производить либо двойным
щелчком, либо перетаскиванием по технологии «drag & drop».
Если требуется установить блок питания, то необходимо
вставлять его в слот 1 стойки. Соответствующий модуль станции
SIMATIC 300 находится в группе PS-300.
CPU контроллера можно найти в каталоге CPU-300, он
вставляется в слот 2.

14
В контроллере S7-300 cлот 3 зарезервирован для интер-
фейсного модуля IM, необходимого для многоуровневых конфи-
гураций, поэтому на рис. 1.10 этот слот пустой.
Если эта позиция должна быть резервирована для последу-
ющей фактической установки интерфейсного модуля, то необ-
ходимо вставить в фактическую конфигурацию холостой модуль
DM370 DUMMY из каталога SM-300\Special-300.
Начиная с четвертого слота, можно вставлять сигнальные
модули. Можно добавить на выбор до 8 сигнальных блоков
(SM), коммуникационных процессоров (CP) или функциональ-
ных модулей (FM). Необходимо отыскивать нужный модуль в
папке и вставлять его, выбирая слот в стойке.
В стандартной конфигурации в стойку может входить про-
цессор, блок питания и модули ввода и вывода, которые бывают
аналоговые или дискретные.
Чтобы просмотреть адресное пространство, образованное
модулями стойки, необходимо войти в меню «View»->«Address
Overview», в результате чего появится окно, показанное на рис.
1.11.
В этом окне отражаются те блоки, которые имеют входы или
выходы, в данном случае модуль дискретного ввода
DI32 x DC24V и блок дискретного вывода DO32 x DC24V/0.5A.
В первом столбце Type указывается тип адресного про-
странства: I – для входов, Q – для выходов.
Во втором и третьем столбцах Addr.from и Addr.to указыва-
ется диапазон адресов в байтах, который занимает данное
устройство. В данном случае модуль дискретного ввода
DI32 x DC24V имеет 32 входа, поэтому он занимает 4 байта с
номерами от 0 до 3. Следующие 4 байта с номерами от 4 до 7
занимает блок дискретного вывода DO32 x DC24V/0.5A, кото-
рый имеет 32 выхода.

15
Рис. 1.11. Адресное пространство аппаратуры станции
В следующих двух столбцах указываются названия блоков и
организационный блок, который осуществляет опрос входов и
назначение выходов. В данном случае оба модуля принадлежат
одному блоку OB1.
Столбец R отображает номер стойки, а столбец S – номер
слота для модуля. В данном случае модуль D132 x DC24V зани-
мает слот 4, а модуль DO32 x DC24 V/0,5 A – слот 5.
Столбец DP используется для системы распределенных вы-
ходов, а IF в тех случаях, когда используется специальный ин-
терфейсный модуль при программировании системы на C++.
Чтобы получить доступ к свойствам блока, достаточно от-
крыть его пиктограмму с помощью двойного щелчка мышью.
Основные параметры сосредоточены в контроллере, поэтому
рассмотрим его свойства. Свойства контроллера отображаются в
окне, которое содержит девять раскрывающихся вкладок.
Вкладка «General», показанная на рис. 1.12, содержит информа-
цию о типе модуля, его название и, если он программируемый,
MPI-адрес. Чтобы назначить адрес многоточечного интерфейса,
например в случае создания многоконтроллерной конфигура-

16
ции, достаточно нажать кнопку «Properties, в которой имеется
возможность задать параметр «Adress».

Рис. 1.12. Общие параметры контроллера S7-300


На рис. 1.13 показана вкладка «Startup», которая позволяет
задавать характеристики запуска. Для S7-300 единственным воз-
можным типом запуска является «Warm restart». Только некото-
рые варианты имеют вариант «Cold restart».
Параметр «Finished Message by Modules (ms)» означает мак-
симальное время на получение сигнала готовности модулей. Если
модули не подтверждают приема параметров в пределах установ-
ленного времени, то реальная конфигурация не соответствует про-
ектной.
Параметр «Transfer of Parameters to Modules» – максималь-
ное время для передачи параметров в настраиваемые модули,
после того как получен сигнал готовности.
Параметр «Startup when expected/actual configuration differ»
позволяет для контроллеров со встроенным интерфейсом рас-
пределенных входов-выходов DP и для S7-400 запретить или
разрешить запуск, если реальная конфигурация оборудования
отличается от проектной. Остальные контроллеры запускаются в
любом случае.

17
Рис. 1.13. Параметры запуска контроллера S7-300
Также для контроллеров S7-400 можно указать сбрасывать
выходы при горячем перезапуске – «Reset outputs at hot restart» и
запретить перезапуск от другой станции или оператора.
Закладка «Retentive Memory» (сохраняемая память) исполь-
зуется для определения областей памяти, которые должны со-
храняться после пропадания питания или переходе процессора
из режима STOP в RUN. В обоих случаях в S7-300 выполняется
полный перезапуск, при котором блоки (OB, FC, FB, DB), хра-
нимые в памяти с батарейной подпиткой, а также меркеры, тай-
меры и счетчики, определенные как сохраняемые, не изменяют-
ся. Только несохраняемые меркеры, таймеры и счетчики сбра-
сываются при запуске CPU. На рис. 1.14 показана вкладка
«Cycle/Clock Memory».

18
Закладка «Cycle/Clock Memory» позволяет с помощью пара-
метра «Scan Cycle Monitoring Time (ms)» задавать время кон-
троля цикла. Если это время превышено, то контроллер перехо-
дит в режим STOP. Возможными причинами превышения вре-
мени могут быть коммуникационные процессы, часто от собы-
тий прерываний, ошибки в программе.

Рис. 1.14. Временные параметры контроллера S7 - 300


Параметр «Cycle Load from Communication (%)» задает вре-
мя связи, например время передачи данных в другой контроллер
через многоточечный интерфейс. Это время ограничивается зна-
чением, выраженным в процентах от текущего времени цикла.
Например, ограничение связи до 20 % приведет к тому, что
для времени цикла сканирования 100 мс максимальное время
для связи составит 20 мс.
Для синхронизации работы программы используется син-
хробайт «Clock Memory», который является байтом из области
19
меркеров. Его биты периодически изменяют свое значение, при-
чем каждый бит в синхробайте связан с конкретной частотой.
Во вкладке «Protection», показанной на рис. 1.15, можно из-
менять параметры защиты.

Рис. 1.15. Параметры защиты контроллера S7-300


Вкладка «Protection» позволяет задать три уровня защиты.
На первом уровне «Keyswitch setting» можно работать без огра-
ничений. Если назначен пароль, то он определяет следующие
ограничения: для уровня 1 – в режиме останова (STOP) возмо-
жен полный доступ, а в режиме работы (RUN) только чтение;
для уровня защиты 2 – существует доступ только для чтения, а
для уровня 3 – невозможно ни чтение, ни запись независимо от
режима работы. Чтобы ввести пароль, необходимо либо задать
уровень 2 или 3, либо выбрать режим «Removable with password»
на первом уровне.

20
Рис. 1.16. Параметры диагностики и синхронизации
контроллера S7-300
Вкладка «Diagnostic/Clock», показанная на рис. 1.16, позво-
ляет с помощью флага «Report cause of stop» обнаруживать при-
чину останова, а также синхронизировать часы нескольких кон-
троллеров (раздел «Synchronization») и вводить коррекцию для
часов (раздел «Correction factor»). Например, если часы отстают
на 5 с в сутки, то можно ввести параметр «Correction factor»
+5000 ms.
Кроме перечисленных, также имеются вкладки, определяю-
щие параметры прерываний «Interrupts», «Cyclic Interrupts»,
«Time-of-Day Interrupts».
Вкладка «Interrupts» показана на рис. 1.17.

21
Рис. 1.17. Вкладка «Interrupts»
Приоритеты программ задаются по возрастанию, т.е. чем
выше номер, тем более высокий приоритет. Значения приорите-
тов по умолчанию и диапазоны из возможных изменений пока-
заны в табл. 1.1.
Для циклических прерываний имеется возможность указать
интервал выполнения через параметр «Execution», а для преры-
ваний, вызываемых по времени суток, указываются параметры
«Start Date» и «Time of Day».
Чтобы сохранить конфигурацию, нужно войти в меню «Sta-
tion» и выбрать вкладку «Save». При выборе вкладки «Save and
Compile» конфигурация загружается в блоки данных DB проек-
та. Чтобы проверить правильность конфигурации, можно вос-
пользоваться меню «Sta-tion» -> «Consistency Check». Загрузка
конфигурации в контроллер или его эмулятор возможна через

22
меню, «PLC» -> «Download», при этом контроллер должен нахо-
диться в режиме STOP.
Таблица 1.1
Приоритеты прерываний
Организаци- Приоритет
онный блок Условия вызова по изменения
умолча-
нию
OB1 Вызывается операци- 1 Нет
онной системой
OB10 – OB17 В заданное время 2 2 … 24
OB20 – OB23 По истечении времени 3…6 2 … 24
OB30 – OB38 Через заданный 7 … 15 2 … 24
интервал
OB40 – OB47 От входов и выходов 16 … 23 2 … 24
OB60 Мультипроцессорное 25 Нет
прерывание
OB70, OB72, Ошибки резервирова- 25, 28, 2 … 28
OB73 ния 25
OB80 – OB85 Асинхронные ошибки 26 2 … 26
OB90 Фоновая обработка 29 Нет
OB100 При запуске 27 Нет
OB121, Ошибки выполнения Приоритет блока,
OB122 программы вызвавшего програм-
му
Для входных и выходных модулей можно задавать их адре-
са, однако необходимо помнить, что после перезапуска контрол-
лера снова применяется адресация по умолчанию.
1.5. РЕДАКТИРОВАНИЕ БЛОКОВ
При программировании блоков в STEP 7 можно применять
три языка программирования: LAD (контактный план), STL
(список операторов), FBD (функциональный план).

23
Отличия языков показаны на рис. 1.18, где демонстрируется
логическая функция И. Язык LAD удобен для инженеров -
электриков, STL – для программистов, А FBD – для инжене-
ров - схемотехников. Отметим, что переход от одного языка к
другому в SIMATIC Manager может осуществляться автоматиче-
ски.
“key_1” “key_2” “light”

LAD

A “key_1”
STL
A “key_2”
= “light”

“key_1”

& “light” FBD


“key_2”
=

Рис. 1.18. Функция И в STEP 7


Графический язык программирования Ladder Logic (LAD)
основан на представлении коммутационных схем. Элементы
коммутационной схемы, такие как нормально открытые контак-
ты и нормально замкнутые контакты, группируются в сегменты.
Один или несколько сегментов образуют раздел кодов логиче-
ского блока. Язык программирования LAD включен в стандарт-
ный пакет программного обеспечения STEP 7. На рис. 1.18 при-
мер реализации на языке LAD логической функции И показан в
верхней части. Сегмент содержит два нормально замкнутых
контакта и катушку. В катушке течет ток только при замыкании

24
двух контактов «key_1» и «key_1», что соответствует логической
функции И.
Язык программирования Функциональный план (FBD) ис-
пользует для представления логики графические логические
символы, известные из булевой алгебры. Сложные функции, та-
кие как математические, также могут быть представлены непо-
средственно в соединении с логическими блоками. Язык про-
граммирования FBD включен в стандартный пакет программно-
го обеспечения STEP 7. На рис. 1.18 видно, что схема в FBD,
кроме логического элемента И, содержит еще оператор присваи-
вания.
Представление языка программирования Список команд
(STL) – это текстовый язык, подобный машинному коду. Каждая
команда соответствует шагу работы CPU при обработке про-
граммы. Несколько команд могут быть связаны друг с другом,
образуя сегменты. Язык программирования Список команд
включен в пакет программного обеспечения STEP 7. Из рис. 1.18
видно, что операция И обозначается через букву А.
Чтобы начать редактировать существующий блок, необхо-
димо перейти на уровень блоков и в окне, показанном на
рис. 1.5, дважды щелкнуть левой кнопкой мыши по нужному
блоку. При создании нового блока в том же окне нужно войти в
меню «Insert» -> «S7 Block» и выбрать соответствующий орга-
низационный блок. При этом на экране появится окно редактора
LAD/STL/FBD, показанное на рис. 1.19.
Основными элементами редактора являются: таблица декла-
раций; раздел кода; элементы.
Таблица деклараций – часть программного блока. Она ис-
пользуется для объявления переменных и параметров блока.
Раздел кода содержит саму программу, разделенную, если
это необходимо, на отдельные сегменты, называемые networks.

25
Рис. 1.19. Окно редактора LAD/STL/FBD
Содержимое окна элементов зависит от выбранного языка
программирования. Элементы представляют собой функции,
функциональные блоки или библиотеки как часто используемые,
так и специальные. Чтобы добавить элемент в программу, мож-
но дважды щелкнуть левой кнопкой мыши по нему или перета-
щить его указателем в нужное место цепи.
Выбор языка программирования осуществляется через меню
«View» окна, показанного на рис. 1.19. В этом меню можно вы-
брать одно из трех представлений программы: LAD, STL или
FBD. Замена языка программирования возможна для синтакси-
чески законченной программы.
Можно писать программы или сегменты на LAD или FBD и
затем автоматически преобразовывать сегменты программы в
STL. Однако результат этого преобразования не всегда является
наиболее эффективным решением для STL (программа, создан-
ная непосредственно на STL, может быть короче).

26
Обратное преобразование из STL в LAD или FBD не всегда
возможно. Сегменты программы, которые не могут быть преоб-
разованы, остаются в STL. При преобразованиях никакие сег-
менты программы не теряются.
При редактировании блоков в FBD или LAD часто исполь-
зуемые элементы представлены кнопками в панели инструмен-
тов. Можно щелкать по ним мышью, чтобы установить эти эле-
менты на выбранную в программе позицию. Другие элементы
можно вставить в программу из списка в любую позицию пере-
таскиванием или в выделенную позицию – дважды щелкнув
мышью по элементу из списка. Соединять элементы можно по-
средством мыши, захватывая выход и перетаскивая его к нуж-
ному выходу.
Для добавления нового сегмента достаточно нажать на
кнопку «New Network» в панели инструментов, после текущего
сегмента добавляется новый сегмент.
При программировании на STL нужно знать инструкции для
записи программы. Проектировщик Может получить информа-
цию о синтаксисе и функциональном назначении через подсказ-
ку: «Help»->«HelponSTL». В справке доступна следующая ин-
формация: «Statement List Instru-ctions» – описывает все инструк-
ции, которые имеются в этом языке программирования;
«Working with Statement List» (работа с списком команд) – опи-
сывает список команд и основы синтаксиса, ввод и наблюдение
констант, типы блоков, контакты и состояния сигнала.
При программировании на STL окно элементов содержит
только список существующих блоков, которые могут быть вы-
званы из текущего блока. Сегменты вставляются в программу
так же, как в редакторе LAD/FBD.
После редактирования блока его необходимо сохранить, что
возможно только в случае отсутствия синтаксических ошибок.
Часто удобно писать программы в виде отдельных функций.
В этом случае основная программа, например блок OB1, будет
содержать список вызовов. Например, на языке STL:

27
CALL FC 1
CALL FC 2
Чтобы загрузить блоки в контроллер, нужно выделить их в
окне на рис. 1.5 и воспользоваться меню «PLC» -
> «Download».При этом нужно, чтобы был предварительно под-
ключен контроллер или его программный эмулятор.
1.6. СИМВОЛЬНЫЕ ПЕРЕМЕННЫЕ
При написании программ в STEP 7 можно применять пря-
мую адресацию. Например, если входной дискретный модуль
занимает адреса от 0 до 3, то входы могут обозначаться как I 0.0,
I 0.1 и т.д. Аналогично выходы для цифрового модуля вывода,
который занимает адреса с 4 по 7, обозначаются как Q 4.0, Q 4.1
и т.д. Однако при большом числе переменных такая адресация
неудобна, поэтому для придания смысловой нагрузки перемен-
ных вводятся их символьные обозначения. Для хранения сим-
вольных обозначений используется специальная табл. 1.2, со-
держащая четыре столбца, с названием, адресом, типом данных
и комментарием.
Символьное имя Symbol содержит до 24 символов, начина-
ется с буквы, может содержать подчеркивания. Адресом Address
может являться вход, выход, таймер, счетчик, меркер или блок.
Таблица 1.2
Символьные переменные

Data
Symbol Address Type Comment

On I 0.0 BOOL Включение


Indicator Q 4.0 BOOL Индикация работы
Stop I 0.1 BOOL Останов
В разделе Data Type указывается тип данных, например
BOOL, для дискретного входа или выхода. Для функционально-
го блока тип данных и его адрес совпадают.

28
Комментарий Comment содержит произвольную информа-
цию до 80 символов.
Таблицу символов можно вызвать либо из окна SIMATIC
Manager, находясь на уровне программ и выбрав значок «Sym-
bols», либо непосредственно из редактора LAD/STL/FBD, вос-
пользовавшись меню «Options» -> «Symbol Table» . При этом
появляется окно, показанное на рис. 1.20.
Каждое символическое имя занимает одну строку в таблице.
Пустая строка автоматически добавляется в конце таблицы для
ввода нового символа. Символьная таблица является общей ба-
зой данных и может быть использована различными утилитами.

Рис. 1.20. Окно таблицы символов


В меню Edit окна (рис. 1.20) для поиска и замены текста до-
ступны такие элементы, как: «Search For» – ввод текста для по-
иска; «Replace With» – ввод текста для замены; «Search Only» –
поиск и выделение указанного текста; «From Cursor Down» –

29
поиск вниз от курсора до последней строки символьной табли-
цы; «From Cursor Up» – поиск вверх от курсора до первой строки
символьной таблицы;
«Match Case» – поиск только указанного текста с анализом
строчных и прописных букв; «Whole Word Only» – поиск ука-
занного текста как отдельного слова; «All» – поиск по всей таб-
лице, начиная с текущей позиции курсора; «Selection» – поиск
текста только для выделенных строк таблицы.
При поиске адресов необходимо вводить звездочку «*» по-
сле идентификатора адреса, иначе адрес не будет найден.
Полезной функцией меню «View» окна таблицы символов
является вкладка «Filter», показанная на рис. 1.21, с помощью
которой отображаются только символы, которые отвечают кри-
терию, указанному в фильтре («symbol properties»).
Можно применять различные критерии одновременно. Кри-
терии, указанные в фильтре, объединяются. Также можно вы-
брать различные фильтры и объединить их согласно следующим
свойствам: Name (имя), Address (адрес), Data type (тип данных),
Comment (комментарий), Operator control and monitoring (управ-
ление и просмотр операторов), Communication (связь), Message
(сообщение).
Допустимы сокращения символов: «*» и «?».
Например, если задать имя M*, то в таблице символов будут
отображаться только те имена, которые начинаются с «M» и со-
держат любое число любых последующих символов.
Если задать имя SENSOR_?, то в таблице символов будут
отображаться только те имена, которые начинаются с
«SENSOR_» и содержат один любой символ в конце.

30
Рис. 1.21. Окно Filter
Метки «Valid» и «Invalid» позволяют отображать только
уникальные или повторяющиеся символы. Если таблица симво-
лов длинная, то можно найти неоднозначные символы или адре-
са более быстро, воспользовавшись меню «View» -> «Filter» и
установив атрибут «Invalid».
С помощью меню «View» -> «Sort» можно расположить
данные в символьной таблице в алфавитном порядке. При этом
можно задавать возрастание или убывание как по именам, так и
по адресам.
Команда меню «Symbol Table» -> «Export» позволяет преоб-
разовать символьную таблицу в другой файловый формат, чтобы
можно было работать с ней в других программах. Можно зада-
вать следующие файловые форматы:
а) ASCII Format (*.ASC) – текстовый формат для Notepad и
Word;

31
б) Data Interchange Format (*.DIF) – формат электронных
таблиц для EXCEL;
в) System Data Format (*.SDF) – формат баз данных для
ACCESS;
г) Assignment List (*.SEQ) – формат для STEP 5.
Аналогично с помощью команды меню «Symbol Table» ->
«Import» можно импортировать символьные таблицы, подготов-
ленные в других программах. Для этого необходимо выбрать
меню «Symbol Table» -> «Import», затем выбрать файловый
формат в диалоговом окне «Import», задать маршрут к директо-
рии в списке «Find in», ввести имя файла в поле «File Name» и
нажать «OK».
С помощью команды меню «Options» -> «Edit Symbols» или
щелчком правой кнопки мыши по адресу с последующим выбо-
ром пункта выпадающего меню «Edit Symbol» можно назначать
символические имена для абсолютных адресов непосредственно
при редактировании программы. Имена автоматически вводятся
в символьную таблицу. Имена, которые уже есть в символьной
таблице, отображаются другим цветом. Они не могут снова
быть использованы в таблице.
При необходимости изменить присвоение в символьной
таблице уже существующей программы нужно выбрать, что
важнее – абсолютный или символический адрес. Чтобы сделать
выбор в SIMATIC Manager нужно выбрать правой кнопкой мы-
ши папку «Blocks», а затем выбрать пункт меню «Properties» и
закладку «Blocks». Здесь можно выбрать «Absolute Value» (аб-
солютное значение) или «Symbol» (имя) в поле «Priority» (прио-
ритет).
Пусть, например, старая запись в таблице символов была
On = I 0.1, а новая On = I 1.0.
Если выбран приоритет по адресу, то при изменении в сим-
вольной таблице абсолютный адрес операнда в программе не
изменяется. В примере абсолютное имя I 0.0 было изменено на
абсолютное имя I 1.0 в таблице символов. С установленным

32
приоритетом по абсолютному значению программа продолжает
использовать вход I 0.0.
Если задан приоритет по имени, то при смене абсолютного
адреса операнда в символьной таблице, он изменяется во всей
программе.
В примере, приведенном выше, выход I 0.0 (имя символа
«On») изменен на выход I 1.0 в символьной таблице. Если уста-
новлен приоритет по имени, то адрес I 0.0 изменяется на I 1.0 во
всей программе. Измененный адрес также сохраняется в сим-
вольной таблице. Таким способом можно изменять абсолютные
адреса в программе пользователя, использующей символьные
имена.
1.7. СИМУЛЯТОР КОНТРОЛЛЕРА PLCSIM
Проверку программной части без подключения реального
оборудования можно проводить с помощью дополнительного
пакета S7-PLCSIM. После того как проект готов, симулятор
можно вызвать из главного окна SIMATIC Manager. Для этого в
меню «Options» необходимо выбрать пункт «Simulate Modules»,
что приведет к запуску S7-PLCSIM, основное окно которого по-
казано на рис. 1.22.
С помощью значков, расположенных на панели инструмен-
тов симулятора S7-PLCSIM, можно добавлять для просмотра
различные блоки и элементы контроллера:
а) IB – входная переменная;
б) QB – выходная переменная;
в) MB – биты памяти;
г) T – таймер;
д) C – счетчик;
е) Variable – переменная;
ж) Stacks – стек логических операций;
з) ACCUs – аккумуляторы и слово состояния;
и) Block Regs – блок регистров.

33
Рис. 1.22. Симулятор PLCSIM
В блоках а) – е) можно вводить свои адреса. Для того чтобы
можно было использовать символьную адресацию, нужно войти в
меню «Tools» - > «Options» -> «Attach Symbols», в результате чего
появится окно, показанное на рис. 1.23.
В этом окне нужно в разделе «Entry Point» указать вид блока,
например проект или библиотека, имя проекта, в проекте выйти на
уровень S7 Program и выбрать значок с именем Symbols.
После загрузки в эмулятор контроллера таблицы символов
все переменные отображаются со своими именами, как показано
на рис. 1.24.
Прежде чем проверять работу программы, ее необходимо
загрузить в контроллер. Это можно сделать либо из основного
окна SIMATIC Manager, либо из редактора LAD/STL/FBD. В
первом случае нужно выделить необходимые блоки, выбрать
пункт меню «PLC» -> «Download». Во втором случае также ис-
пользуется меню «PLC» -> «Download», но загружается только
текущий открытый блок. После этого нужно перейти в окно S7-
PLCSIM и убедиться, что в его меню «PLC» установлен флажок

34
«Power on». При загрузке блоком процессор симулятора должен
находиться в режиме STOP.

Рис. 1.23. Чтение таблицы символов в PLCSIM


Для того чтобы запустить программу на выполнение, доста-
точно установить флажок RUN (циклическое выполнение) или
RUN-P (однократное выполнение). При этом можно «мышкой»
менять входы и смотреть, как изменяются выходы, отлаживая
программу, записанную в контроллер.
1.8. ПРИМЕР СОЗДАНИЯ ПРОЕКТА
Рассмотрим пример создания проекта. Последовательность
действий можно представить в следующем виде.
1. В основном окне SIMATIC Manager, показанном на рис.
1.2, входим в меню «File» -> «New Project Wizard».
2. Нажимаем кнопку «Next».
3. Выбираем из списка процессор CPU314, устанавливаем
MPI-адрес, равный 2, и нажимаем «Next».
4. Устанавливаем язык программирования STL, задаем тип
организационного блока OB1 и нажимаем «Next».

35
Рис. 1.24. Результат загрузки таблицы символов в PLCSIM
5. Вводим имя проекта и нажимаем кнопку «Finish».
6. Переходим на уровень SIMATIC 300 STATION и запуска-
ем программу Hardware двойным щелчком левой кнопкой мы-
ши.
7. В появившемся окне в стойке будет один процессор
CPU314. Открываем справа библиотеку SIMATIC 300 и помеща-
ем в стойку следующие элементы: блок питания PS 307 2A из
папки PS-300; модуль цифрового ввода DI32xDC24V из папки
SM-300\DI-300; модуль цифрового вывода DO32xDC24V/05A из
папки SM-300\\DO300.
8. Входим в меню «Station» - > «Save and Compile». При от-
сутствии ошибок в папке блоков появляется объект «System
Data».
9. Возвращаемся в SIMATIC Manager, переходим на уровень
S7 Program (1) и запускаем редактор символов двойным щелч-
ком левой кнопкой мыши по значку Symbols.
10. В окне Symbol Editor вносим в таблицу переменные, по-
казанные в табл. 1.3. Сохраняем таблицу.
36
11. Переходим в окно SIMATIC Manager на уровень Blocks и
через меню «Insert» - > «S7 Block» -> «Function» добавляем
функцию с именем FC1 в список блоков, установив язык STL и
нажав OK в появившемся окне.
12. Переходим в окно SIMATIC Manager на уровень Blocks и
двойным щелчком на OB 1 запускаем редактор LAD/STL/FBD.
Таблица 1.3
Переменные программы
Symbol Address Data Type Comment
Main Program OB 1 OB 1
X1 I 0.0 BOOL
X2 I 0.1 BOOL
X3 I 0.2 BOOL
X4 I 0.3 BOOL
Y Q 4.0 BOOL
13. Набираем программу CALL FC 1 и сохраняем ее.
14. Переходим в окно SIMATIC Manager на уровень Blocks
и двойным щелчком на FC1 открываем ее в редакторе
LAD/STL/FBD.
15. Набираем в редакторе программу, реализующую функ-
цию (X1 ИЛИ X2) И (X3 Исключающее ИЛИ X4):
A(
O "X1"
O "X2"
)
A(
X "X3"
X "X4"
)
= "Y"
и сохраняем ее.

37
Отметим, что логические операции обозначаются следую-
щим образом: A – И; O – ИЛИ; X – Исключающее ИЛИ, NOT –
инверсия. Можно комбинировать логические операции с инвер-
сией, например AN – И-НЕ.
16. Запускаем симулятор S7-PLCSIM. Для этого в меню
«Options» основного окна SIMATIC Manager выбираем пункт
«Simulate Modules», что приводит к запуску S7-PLCSIM.
17. В основном окне SIMATIC Manager выделяем блоки
OB1 и FC1 и выбираем в меню «PLC» вкладку «Download».
18. В окне утилиты Hadware входим в меню «PLC» ->
«Download» и загружаем текущую конфигурацию в симулятор.
19. Переходим в окно S7-PLCSIM, в меню «PLC» устанав-
ливаем флаг «Power on». Загружаем таблицу символов в S7-
PLCSIM, выбрав меню «Tools–>Options–>Attach Symbols». В по-
явившемся окне нужно выбрать свой проект, перейти на уровень
Program, выбрать Symbols и нажать OK.
20. В окне S7-PLCSIM добавляем пять окон: четыре входа
и один выход. В редактируемых заголовках указываем имена
переменных: X1, X2, X3, X4, Y или их абсолютные адреса. Во
втором случае символьные имена добавятся автоматически. Ес-
ли таблица символов не загружена, то процессор будет работать
с той лишь разницей, что символьные адреса не будут отобра-
жаться.
21. Запускаем программу, записанную в симулятор, на вы-
полнение, установив флажок CPU в положение RUN. Это озна-
чает, что наша программа будет выполняться циклически.
22. Изменяя значения входов, измеряем значения выхода,
заполняя табл. 1.4 (таблица истинности логической функции).
1.9. РАБОТА В ЛАБОРАТОРИИ
Работа в лаборатории состоит в следующем.
1. Создать проект в STEP 7 на основе контроллера CPU314.

38
2. Сконфигурировать аппаратуру, добавив в проект модули
блока питания PS 307 2A, цифрового ввода DI32xDC24V и циф-
рового вывода DO32xDC24V/05A.
3. Создать символьную таблицу с используемыми пере-
менными.
4. Написать функцию, реализующую заданный в табл. 1.5
вариант, и в циклически исполняемом организационном блоке
организовать вызов данной функции.
5. С помощью симулятора PLCSIM измерить таблицу ис-
тинности запрограммированной функции.
Варианты выдаются индивидуально преподавателем.

Таблица 1.4

Таблица истинности
X1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1
X2 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1
X3 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
X4 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1
Y 0 0 0 0 0 1 1 1 0 1 1 1 0 0 0 0

1.10. ДОМАШНЕЕ ЗАДАНИЕ И ТРЕБОВАНИЯ К ОТЧЕТУ


Допуском к выполнению лабораторной работы является
выполненная самостоятельная работа, которая заключается в
выполнении следующих пунктов:
1. Изучить методическое описание.
2. Подготовить программу на STL, реализующую заданную
в табл. 1.5 логическую функцию.
3. Записать таблицу истинности логической функции.
4. Подготовиться к ответам на контрольные вопросы.

39
Таблица 1.5
Варианты заданий
Вариант 0 1
x1 x1
& 1
x2 x2
y y
1 &

Схема x3
1
x3
1

Вариант 2 3
x1 x1
=1 &
x2 x2
y y
& =1

Схема x3
1
x3
1

Вариант 4 5
x1 x1
=1 1
x2 x2
y y
1 =1

Схема x3
1
x3
1

Вариант 6 7
x1 x1
1 &
x2 x2
y y
=1 1

Схема x3
1
x3
1

Вариант 8 9
x1 x1
& =1
x2 x2
y y
1 1

Схема x3
1
x3
1

40
Отчет по работе должен содержать:
1. Название и цель работы.
2. Номер варианта и соответствующую логическую схему.
3. Список используемых входов и выходов, их символьные
обозначения и абсолютные адреса.
4. Программу на языке STL, реализующую заданную
функцию.
5. Список аппаратуры в стойке.
6. Таблицу истинности логической схемы.
КОНТРОЛЬНЫЕ ВОПРОСЫ
1. Перечислите основные утилиты STEP 7, которые ис-
пользованы в работе для создания проекта. Для чего они предна-
значены?
2. Какие уровни содержит иерархическая структура проек-
та в SIMATIC Manager? Какие элементы они содержат?
3. Опишите этапы создания проекта с помощью мастера
«New Project Wizard».
4. Какие типы организационных блоков могут быть реали-
зованы в проекте SIMATIC Manager?
5. Опишите процесс конфигурации оборудования посред-
ством утилиты Hardware Configuration. Каким образом распреде-
лены слоты станции S7-300?
6. Опишите систему приоритетов прерываний, используе-
мую в контроллерах S7-300 и S7-400.
7. Какие языки программирования существуют в STEP 7?
Чем они отличаются и каковы их особенности?
8. Что такое абсолютная и символьная адресация? Пере-
числите элементы таблицы символов.
9. Расскажите, какие настройки делаются при тестировании
программы в программе S7-PLCSIM.
10. Какие типы переменных можно просматривать в про-
граммном симуляторе S7-PLCSIM?

41
2. ПРОГРАММИРОВАНИЕ ЛОГИЧЕСКИХ СХЕМ НА
БАЗЕ ПРОМЫШЛЕННЫХ КОНТРОЛЛЕРОВ SIEMENS

В языке STL реализованы основные логические операции


такие, как функция И, ИЛИ, ИСКЛЮЧАЮЩЕЕ ИЛИ, НЕ, ком-
бинируя которые можно получать различные сложные логиче-
ские схемы без необходимости хранения промежуточного ре-
зультата.
Целью настоящей лабораторной работы является изучение
основных логических операторов языка STL и получение навы-
ков для разработки программ, реализующих сложные схемы ло-
гического управления различным технологическим оборудова-
нием.
2.1. ОСНОВНЫЕ ЛОГИЧЕСКИЕ ОПЕРАТОРЫ STL
На рис. 2.1 показана схема выполнения двоичной логиче-
ской операции. Входной модуль выбирает датчик посредством
адреса, например, датчик на входе I 1.2. CPU проверяет состоя-
ние сигнала (статус) датчика и связывает его на входе блока ло-
гической операции с результатом логической операции, сохра-
ненным после выполнения логической операции в предыдущий
раз. Результат текущей логической операции (RLO) запоминает-
ся и хранится как новый результат логической операции.
Состояние бита эквивалентно состоянию его сигнала и мо-
жет иметь значения «0» или «1». В SIMATIC S7 состояние сиг-
нала равно «1» для высокого напряжения, а «0» соответствует
низкому потенциалу. Выполняемая логическая операция опре-
деляет правило, по которому вычисляется RLO. Например, вы-
ражение
A I 17.1 (2.1)
проверяет вход I 17.1 на состояние «1» и связывает значение
сигнала с RLO по логике И.

42
«0» «1»

Входной модуль

CPU

Проверка входа

Двоичная логическая операция

Ячейка (меркер) хранение RLO

Функция установки/сброса

Выходной модуль
«0» «1»

Рис. 2.1. Структура системы автоматизации

Аналогично выражение
ON M 20.5 (2.2)
проверяет меркер (ячейку памяти) M 20.5 на состояние «0» и
связывает с RLO по правилу ИЛИ.
Как видно из рис. 2.1, входной модуль можно представить в
виде ключа, который может быть подключен к одному из источ-

43
ников – к «0» или к «1». Соответственно на выходе блока
«Входной модуль» присутствует «0» или «1».
Выполнение логической операции в центральном процессо-
ре начинается с проверки входа, в результате чего значение сиг-
нала выходного модуля поступает на первый вход модуля «Дво-
ичная логическая операция». На второй вход последнего модуля
подается результат логической операции (RLO).
Результат выполнения блока «Двоичная логическая опера-
ция» поступает в специальную область памяти, где он хранится
до выполнения следующей логической операции. На основе зна-
чения, хранящегося в меркере RLO, блок «Функция установ-
ки/сброса» переключает выходной модуль в состояние «0» или
«1».
Таким образом, в процессе выполнения логической опера-
ции можно выделить два основных этапа – проверку входа и
собственно выполнение логической операции. На выходе блока
«Проверка входа» находится сигнал «Результат проверки».
Можно проверять вход на состояние «1» или «0». Если вход
проверяется на состояние «1», то результат проверки равен со-
стоянию входного сигнала. В случае проверки на состояние «0»
результат проверки инвертируется относительно входного сиг-
нала.
Например, в формуле (2.1), если вход I 17.1 равен «1», то ре-
зультат проверки тоже равен «1», а если вход I 17.1 равен «0», то
результат проверки равен «0». Напротив, в формуле (2.2), если
ячейка памяти M 20.5 имеет значение «1», то результат проверки
равен «0», и если ячейка M 20.5 имеет значение «0», то резуль-
тат проверки равен «1».
Результат логической операции – это состояние сигнала в
CPU, которое процессор в дальнейшем использует для обработ-
ки двоичных сигналов. Если RLO имеет значение «1», то усло-
вие двоичной логической операции выполнено, если «0» – не
выполнено.

44
Каждый логический оператор начинается после условного
оператора, в качестве которого наиболее часто выступает при-
своение. Следующий за ним логический оператор принято назы-
вать первичным опросом, затем может следовать один или не-
сколько операторов проверки. Логический оператор может за-
канчиваться условным оператором. Например:
= Q 4.0// условный оператор
A I 2.0 //первичный опрос
A I 2.1 // оператор проверки
= Q 5.1 // условный оператор
В результате выполнения первичного опроса старое значение
RLO теряется. Первичный опрос всегда соответствует началу ло-
гической операции, а ее тип И, ИЛИ, ИСКЛЮЧАЮЩЕЕ ИЛИ не
играет при этом никакой роли. Новый результат логической опе-
рации RLO формируется с помощью операторов проверки. Эти
операторы проверяют сигнал бита на состояние «1» или «0» и
формируют результат в соответствии с правилом. Затем CPU со-
храняет результат данной логической операции как новый резуль-
тат логической операции RLO.
Условные операторы – это такие операторы, выполнение ко-
торых зависит от результата логической операции RLO. Эти
операторы включают операции присвоения, установки и сброса
двоичных разрядов, а также запуск таймеров и счетчиков и т.п.
Условные операторы выполняются, когда RLO имеет состояние
«1», и не выполняются, когда RLO имеет состояние «0». Услов-
ные операторы не влияют на RLO.
Правило первичного опроса не имеет значения, т.е. логиче-
ская функция, используемая в первой строке логической опера-
ции, только опрашивает вход. Сама логическая операция задает-
ся во второй строке. Тем не менее в целях наглядности програм-
мирования правило опроса должно быть идентично выполняе-
мой логической функции. Например, обе последовательности
операторов, представленные ниже, реализуют функцию И, одна-
ко второй способ более предпочтителен:

45
O I 18.5 A I 18.4
A I 21.7 A I 21.6
= Q 15.4 = Q 15.5

В языке STL используются двоичные функции И, ИЛИ,


ИСКЛЮЧАЮЩЕЕ ИЛИ и НЕ.
Функция И:
A адрес бита//проверка на состояние «1»
AN адрес бита//проверка на состояние «0»
Функция ИЛИ:
O адрес бита//проверка на состояние «1»
ON адрес бита//проверка на состояние «0»
Функция ИСКЛЮЧАЮЩЕЕ ИЛИ
X адрес бита //проверка на состояние «1»
XN адрес бита //проверка на состояние «0»
CPU комбинирует результат проверки бита с текущим RLO
в соответствии с определенной функцией и формирует новое
значение RLO. Если двоичная логическая операция следует сра-
зу же за операцией с памятью, результат проверки вводится в
RLO-буфер без выполнения логической операции. Число двоич-
ных функций и диапазон их действия теоретически произволь-
ны. Ограничения на использование этих функций накладывают-
ся из-за конечных размеров блока и рабочей памяти CPU.
Напомним, что функция И – логическое умножение, равна
«1» только если оба входа равны «1», ИЛИ – логическое сложе-
ние, равна «1», если хотя бы один вход равен «1», и
ИСКЛЮЧАЮЩЕЕ ИЛИ – неравнозначность, равная «1», если
сигналы имеют разные значения.
При программировании логических операций необходимо
учитывать, что датчики, от которых поступают сигналы, могут
быть двух типов – с нормально разомкнутыми и нормально за-
мкнутыми контактами.
Для инвертирования RLO существует команда NOT.

46
Двоичные логические функции в программе могут объеди-
няться и стоять в произвольном порядке. STL рассматривает
операторы ИЛИ и ИСКЛЮЧАЮЩЕЕ ИЛИ как операторы с
одинаковым приоритетом. Оператор И имеет более высокий
приоритет.
Чтобы функции выполнялись в требуемом порядке, могут
использоваться вложенные выражения, которые обеспечивают
выполнение одних функций раньше других. Вложенные опера-
торы могут также включать в себя функцию ИЛИ.
Язык STL позволяет использование следующих двоичных
вложенных операторов:
O – функция ИЛИ для функций И;
A( – открывающая скобка с функцией И;
O( – открывающая скобка с функцией ИЛИ;
X( – открывающая скобка с функцией ИСКЛЮЧАЮЩЕЕ ИЛИ;
AN( – открывающая скобка с функцией НЕ-И;
ON( – открывающая скобка с функцией НЕ-ИЛИ;
XN( – открывающая скобка с функцией НЕ-
ИСКЛЮЧАЮЩЕЕ ИЛИ;
) – закрывающая скобка.
Правило логики для выражения с открывающей скобкой по-
казывает, как результат вложенного выражения должен быть
связан с текущим значением RLO в момент обработки закрыва-
ющей скобки. До этой логической операции результат выполне-
ния вложенного выражения инвертируется, если присутствует
символ операции инвертирования.
В STL двоичные вложенные выражения используются для
определения порядка выполнения логических операций. CPU
первым обрабатывает выражения, заключенные в скобки, т.е. до
выполнения выражений, находящихся за скобками.
Когда CPU встречает открывающую скобку, он запоминает
текущее значение RLO и затем обрабатывает выражение в скоб-
ках, когда CPU встречает закрывающую скобку, он связывает
значение RLO для вложенного выражения с ранее запомненным

47
значением RLO в соответствии с функцией, определенной при
открывающей скобке (рис. 2.2).

Логическая операция 1 RLO1

Функция вложения(
Логическая операция 2 RLO2
)

После выполнения вложенной функции:


RLO3 = RLO1 (Функция вложения) RLO2

Рис. 2.2. Обработка вложенных выражений


Оператор проверки, следующий за открытой скобкой, всегда
является первичным опросом, так как CPU всегда создает новый
результат логической операции RLO для вложенного выраже-
ния. Оператор проверки, следующий за закрытой скобкой, нико-
гда не является первичным опросом, так как первой инструкцией
является вложенное выражение. CPU обрабатывает значение
RLO для вложенного выражения как результат первичного
опроса.
Вложенные выражения могут включать в себя другие вло-
женные выражения (рис. 2.3). Глубина вложения равна 7.
При обработке вложенных выражений в CPU заполняется
стек вложения в порядке обработки вложенных функций. В дан-
ном стеке хранится следующая информация:
– результат логической операции (RLO) предыдущих ско-
бок;
– двоичный результат (BR) предыдущих скобок;
– бит состояния OR, показывающий, было ли уже выпол-
нено условие функции ИЛИ;
– функция вложения.

48
I 0.0 X( // XOR (6)
(1)
1 A( // AND (4)
I 0.1 O I 0.0 // OR (1)
O I 0.1
& )
(4)
I 0.2 A(
(2)
1 O I 0.2 // OR (2)
I 0.3 O I 0.3
)
=1 A I 0.4
I 0.4 (6)
)
Q 4.0 X( // XOR (6)
A I 0.5 // AND (5)
I 0.5 A(
O I 0.6 // OR (3)
& (5) O I 0.7
I 0.6 )
(3)
1 )
= Q 4.0
I 0.7

Рис. 2.3. Пример вложенных выражений


CPU устанавливает двоичный результат после закрывающей
скобки в состояние, которое имело место к началу обработки
вложенного выражения. Во вложенных выражениях можно ис-
пользовать не только двоичные логические операторы, но и все
остальные выражения STL. Таким способом возможно, напри-
мер, во вложенном выражении запрограммировать несколько
логических шагов или операций с памятью, или функций срав-
нения.
Рассмотрим различные комбинации логических функций.
Объединение функций И в операторе ИЛИ
Для этой комбинации не нужно использовать вложенные
выражения, так как функции И выполняются в первую очередь.
Пример:
A Input0
A Input1
O
A Input2

49
A Input3
= Output8
В данном примере единственный оператор O находится
между двумя функциями A. Output8 устанавливается, если
{Input0 И Input1} ИЛИ {Input2 И Input3} имеют значение «1».
Объединение ИЛИ и Исключающее ИЛИ в операторе И
Эти логические операции должны быть записаны с исполь-
зованием скобок, с помощью которых указывается, что функции
ИЛИ выполняются в первую очередь.
Пример:
A(
O Input0
O Input1
)
A(
O Input2
O Input3
)
= Output10
В данном примере оператор открытой скобки объединен с
функцией И. Функция ИЛИ находится во вложенном выраже-
нии. Output10 устанавливается, если {Input0 ИЛИ Input1} И {
Input2 ИЛИ Input3} имеют значение «1».
Обработка функций Исключающее ИЛИ в операторе И про-
изводится и записывается точно таким же образом.
Объединение функций И в операторе Исключающее ИЛИ
Функции И, выполняющиеся перед функцией Исключающее
ИЛИ, должны быть записаны в скобках.
Пример:
X(
A Input0
A Input1
)
X(
50
A Input2
A Input3
)
= Output12
В данном примере первая функция И не нуждается в скоб-
ках, так как функция И имеет более высокий приоритет, чем Ис-
ключающее ИЛИ. Тем не менее, при наличии скобок программа
лучше читается. В примере Output12 устанавливается, если
только в одной из скобок {Input0 И Input1}и { Input2 И Input3}
выполнено условие функции И.
Объединение функций ИЛИ в операторе Исключающее ИЛИ
Функции ИЛИ и Исключающее ИЛИ имеют одинаковый
приоритет, поэтому необходимо использовать скобки.
Пример:
X(
O Input0
O Input1
)
X(
O Input2
O Input3
)
= Output14
В примере Output14 устанавливается, если только в одной из
скобок {Input0 ИЛИ Input1} и { Input2 ИЛИ Input3} выполнено
условие функции ИЛИ.
Обработка функций Исключающее ИЛИ в операторе ИЛИ
производится и записывается точно таким же образом.
Во вложенных выражениях можно использовать инверсии и
также можно инвертировать результат вложенных выражений.
Признаком инвертирования результата операции является нали-
чие дополнительного символа N в выражении открывающей
скобки.
Пример:

51
AN(
O Input0
O Input1
)
AN(
X Input2
X Input3
)
= Output16
В примере Output16 устанавливается, если ни в одной из
скобок – ни в {Input0 ИЛИ Input1}, ни в {Input2 Исключающее
ИЛИ Input3} не выполняется условие.
Второй способ инвертирования вложенных выражений воз-
можен с помощью использования оператора NOT, который бу-
дучи записан перед закрывающей скобкой, инвертирует резуль-
тат вложенного выражения перед последующей обработкой.
Пример:
A(
O Input0
O Input1
NOT
)
A(
X Input2
X Input3
NOT
)
= Output17
2.2. ОПЕРАЦИИ С ПАМЯТЬЮ
Среди операций с памятью можно различить следующие:
– присвоение;
– установка и сброс бита;
– установка и сброс триггера;

52
– обнаружение фронта.
Синтаксис операции присвоения имеет вид
= Bit
Функция присваивает биту результат логической операции.
Выражение, содержащее символ присвоения =, назначает RLO
биту, указанному в выражении. Если необходимо установить
бит, в то время когда RLO имеет значение «0», то значение RLO
должно быть сначала инвертировано с помощью оператора NOT
до момента выполнения присвоения. Допускается выполнять
одновременное присваивание RLO различным битам, запро-
граммировав подряд несколько операторов присваивания соот-
ветствующим битам.
Примеры применения операции присвоения приведены на
рис. 2.4.
Оператор установки бита в «1» имеет синтаксис
S Bit
Функция устанавливает бит в случае если, результат логиче-
ской операции равен «1». Аналогично сброс бита в «0» произво-
дится оператором
R Bit
Функция R сбрасывает бит в случае, если результат логиче-
ской операции равен «1». Если RLO имеет значение «0», то ин-
струкции Set и Reset не изменяют состояния бита.
Допускается использование нескольких операций с памятью
одновременно и в любой комбинации, а также совместно с
функциями присвоения с использованием одного и того же ре-
зультата логической операции. Пример фрагмента такой про-
граммы показан на рис. 2.5.

Код на Временная диаграмма

53
STL
A I 0.0 I 0.0
= Q 4.0

Q 4.0

A I 0.0 I 0.0
NOT
= Q 4.0
Q 4.0

A I 0.0 I 0.0
= Q 4.0
= Q 4.1
Q 4.0

Q 4.1

Рис. 2.4. Операция присвоения


Для реализации RS-триггера в STL нет специальных опера-
торов. Указанный триггер реализуется на основе операторов S и
R. При этом важно соблюдать последо тельность записи выра-
жений для установки и сброса бита.

Код на Временная диаграмма

54
STL
A I 0.0 I 0.0

S Q 4.0

Q 4.0

A I 0.0 I 0.0

R Q 4.0

Q 4.0

A I 0.0 I 0.0

A I 0.1
S Q 4.0
R Q 4.1 I 0.1
= Q 4.2

Q 4.0

Q 4.1

Q 4.2

Рис. 2.5. Операция установки и сброса


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

55
При необходимости задать приоритет установки порядок следо-
вания операторов меняется (рис. 2.7).

A I 0.0 I 0.0
S Q 4.0
A I 0.1
R Q 4.0 I 0.1

Q 4.0

Рис. 2.6. Триггер с приоритетом сброса


A I 0.0 I 0.0
R Q 4.0
A I 0.1
S Q 4.0 I 0.1

Q 4.0

Рис. 2.7. Триггер с приоритетом установки


Фактически приоритет функции Reset является стандартной
формой использования данной функции, так как состояние «0»
является, как правило, более безопасным.
Для обнаружения фронта сигнала применяются операторы
FP и FN, которые позволяют обнаружить положительный и от-
рицательный фронты и имеют синтаксис
FP Bit
FN Bit

56
Эти функции проверяют переход сигнала из «0» в «1» и из
«1» в «0». Бит Bit, указанный как операнд в функциях FP и FN,
называют «меркером фронта». Он изменяется, если результат
RLO и текущее состояние меркера разные.
Результат логической операции сразу после выполнения
функций FP и FN называют меркером импульса, который фор-
мирует импульс в течении одного цикла работы после обнару-
жения фронта сигнала. Меркер импульса является удобным бу-
фером для хранения сигнала о наличии фронта, особенно если
его нужно обрабатывать в другом месте программы.
Примеры обнаружения положительного и отрицательного
фронтов сигнала показаны на рис. 2.8. и 2.9. Для положительно-
го фронта при обнаружении перехода из «0» в «1» меркер фрон-
та устанавливается в «1» и сохраняет свое значение до тех пор,
пока входной сигнал не станет равным нулю. Его неудобно ис-
пользовать, если нужно отреагировать на фронт только один раз
в текущем цикле. Как только CPU обнаруживает, что меркер
фронта и RLO разные, он переводит меркер импульса в состоя-
ние «1», в противном случае меркер импульса переходит в со-
стояние «0».
A I 0.0 1 2 3 4 5 6
I 0.0
FP M 0.0
= M 0.1

M 0.0

M 0.1

Рис. 2.8. Обнаружение положительного фронта

57
Аналогично работает оператор FN, с тем отличием, что мер-
кер импульса обращается в «1» при обращении меркера фронта
в состояние «0». При этом на следующем цикле меркер импуль-
са также обратится в «0». Использование меркера импульса
удобно для однократной реакции на положительный или отри-
цательный фронт.
A I 0.0 1 2 3 4 5 6
I 0.0
FP M 0.0
= M 0.1

M 0.0

M 0.1

Рис. 2.9. Обнаружение отрицательного фронта

2.3. ПРИМЕР ПРОГРАММИРОВАНИЯ ЛОГИЧЕСКОЙ


УПРАВЛЯЮЩЕЙ СХЕМЫ
Рассмотрим программирование схемы логического управле-
ния, входы и выходы которой показаны на рис. 2.10. Схема
предназначена для управления двигателем в зависимости от
входных сигналов.
Пусть Входы «Включено-выключено» и «Автоматический-
ручной режимы» являются переключателями: логическая «1»
первого соответствует состоянию включено, а логический «0» –
выключено. У второго переключателя логическая «1» –
автоматический режим, а логический «0» – ручной режим. Вхо-
ды «Вперед» и «Назад» применяются в ручном режиме, а датчи-
ки «Датчик 1» и «Датчик 2» в автоматическом. При включении

58
установки должен загораться индикатор включения. Индикато-
ры автоматического и ручного режима отображают текущий ре-
жим работы. Сигналы «Двигатель вперед» и «Двигатель назад»
отрабатывают задающие сигналы в ручном режиме. В автомати-
ческом режиме, если «Датчик 1» выдает «1», то включается сиг-
нал «Двигатель вперед», если «Датчик 2» выдает «1», то вклю-
чается сигнал «Двигатель назад», если оба датчика выдают «0»,
то сигналы «Двигатель вперед» и «Двигатель назад» нулевые.
Если оба датчика равны «1» или в ручном режиме одновременно
нажаты кнопки «Вперед» и «Назад», то выдается ошибка.
Включено - Индикатор
выключено включения

Индикатор
авт.
Автоматический режима
- ручной режим

Индикатор
ручного
Вперед
режима

Двигатель
Назад вперед

Двигатель
Датчик 1
назад

Датчик 2 Ошибка

Рис. 2.10. Входы и выходы схемы логического


управления
На основе приведенного выше описания составим алгоритм,
который необходимо реализовать.
Алгоритм работы установки

59
1.1. Опрос состояния входа «Включено-выключено», кото-
рый обозначим через On_Off.
1.2. Если On_Off равен «0», то индикатор включения, кото-
рый обозначим как Ind_On_Off, тоже равен нулю и переход на
конец программы, который обозначим через end.
1.3. Если On_Off равен «1», то присваиваем в Ind_On_Off
«1».
2.1. Опрос состояния переключателя «Автоматический -
ручной режим», который обозначим через Aut_Man.
2.2. Если Aut_Man равен «1», то переход на п. 3, который
отмечается меткой aut1 и осуществляет работу установки в ав-
томатическом режиме.
2.3. Если Aut_Man равен «0», то зажигаем индикатор ручно-
го режима работы Ind_Man, гасим индикатор автоматического
режима работы Ind_Aut и переходим на п. 4, который обозначен
меткой man1 и выполняет работу установки в ручном режиме.
3. (метка aut1) Автоматический режим работы.
3.1. Зажигаем индикатор Ind_Aut.
3.2. Гасим индикатор Ind_Man.
3.3. Если оба датчика Sensor1 и Sensor2 равны «1», то заго-
рается индикатор ошибки Error и переход на конец программы
end.
3.4. Если датчик Sensor1 равен «1», то присваиваем выходу
Go_Forward значение «1».
3.5. Если датчик Sensor2 равен «1», то присваиваем выходу
Go_Back значение «1».
3.6. Переход на конец программы end.
4. (метка man1) Ручной режим работы.
4.1. Если входы Forward и Back оба равны «1», то включаем
сигнал Error и переход на конец программы end.
4.2. Если вход Forward равен «1», то присваиваем выходу
Go_Forward значение «1».
4.3. Если вход Back равен «1», то присваиваем выходу
Go_Back значение «1».

60
5. (метка end) Конец программы.
Приведем программу, реализующую описанный выше сло-
весный алгоритм работы управляющего логического блока.
A "On_Off"// 1
= "Ind_On_Off"// 2
JCN end// 3
A "Aut_Man"// 4
JC aut1// 5
AN "Aut_Man"// 6
= "Ind_Man"// 7
NOT // 8
= "Ind_Aut"// 9
JU man1// 10
aut1: = "Ind_Aut"// 11
NOT // 12
= "Ind_Man"// 13
A "Sensor_1"// 14
A "Sensor_2"// 15
= "Error" // 16
JC end// 17
A "Sensor_1"// 18
= "Go_Forward"// 19
A "Sensor_2"// 20
= "Go_Back"// 21
JU end// 22
man1: A "Forward"// 23
A "Back" // 24
= "Error" // 25
JC end// 26
A "Forward"// 27
= "Go_Forward"// 28
A "Back" // 29
= "Go_Back"// 30
end: NOP 0// 31
61
Эта программа имеет особенности, связанные с использова-
нием логических операций.
В первой строке осуществляется опрос входа On_Off, в ре-
зультате чего его значение, «0» или «1», заносится в специаль-
ную переменную, именуемую RLO. В строке 2 выходу
Ind_On_Off присваивается «1», если RLO равен «1», в против-
ном случае выход Ind_On_Off остается равен «0». В строке 3
происходит переход на метку end, если RLO равен «0». Таким
образом, строки 1 – 3 реализуют пп. 1.1 – 1.3 алгоритма.
В строке 4 опрашивается вход Aut_Man. Если Aut_Man ра-
вен «0», то и RLO равен «0». Если Aut_Man равен «1», то и RLO
равен «1». В строке 5 происходит переход на метку aut1, если
RLO равен «1».
В строках 6 и 7 происходит опрос переключателя Aut_Man
на состояние «0», т.е. если Aut_Man равен «0», то RLO равен «1»
и загорается индикатор Ind_Man.
В строке 8 RLO инвертируется и в строке 9 выходу Ind_Aut
присваивается «0». В строке 10 осуществляется безусловный пе-
реход на метку man1.
Подпрограмма автоматического режима начинается со стро-
ки 11, в которой RLO присваивается выходу Ind_Aut. Так как
переход на эту метку осуществляется только при RLO, равном
«1», то эта операция присвоения аналогична установке выхода
Ind_Aut в состояние «1».
В строках 12 и 13 выходу Ind_Man присваивается «0».
Строки 14, 15 и 16 реализуют операцию И, результат кото-
рой присваивается переменной Error. В соответствие с таблицей
истинности переменная Error будет равна «1», если оба входа
Sensor1 и Sensor2 равны «1». Далее осуществляется переход на
конец программы, если RLO равен «1».
Строки 18 – 22 выполняются только если RLO после опера-
ции И равен «0», т.е. оба входа Sensor1 и Sensor2 одновременно
не равны «1».

62
В строках 18, 19 происходит опрос датчика Sensor1 и если
он равен «1», то RLO равен «1», поэтому выходу Go_Forward
присваивается «1».
Аналогично в строках 20 и 21 происходит опрос датчика
Sensor2 и если он равен «1», то RLO равен «1», поэтому выходу
Go_Back присваивается «1».
В строке 22 осуществляется безусловный переход на конец
программы.
Строки 23 – 30 осуществляют работу установки в ручном
режиме. Программа полностью аналогична строкам 14 – 21, если
заменить входы Sensor1 и Sensor2 на Forward и Back.
В строке 31 выполняется пустой оператор, так как наличие
метки требует наличие оператора, поэтому чтобы не нарушать
требования синтаксиса, используется пустой оператор NOP.
Существует более формальный подход к построению логи-
ческих управляющих схем. Рассмотрим его на примере системы
управления двигателем, которая имеет три входа и четыре выхо-
да. Обозначим входы через x1 (вперед), x2 (назад) и x3 (стоп).
Соответственно выходы обозначим как y1 (подать положитель-
ное напряжение), y2 (подать отрицательное напряжение), y3
(подать нулевое напряжение) и y4 (ошибка).
Пусть при появлении «1» на входе x1 необходимо включить
выход y1, при появлении «1» на входе x2 – выход y2, при появ-
лении «1» на входе x3 – выход y3, а при появлении нескольких
единиц – включить выход y3, а все остальные выходы погасить.
Для получения управляющей программы составим таблицу
истинности, которая будет содержать восемь строк (табл. 2.1).
Таблица истинности заполняется следующим образом. Вна-
чале заполняются первые три столбца. Они содержат все воз-
можные комбинации входов.

Таблица 2.1
Символьные переменные

63
x1 x2 x3 y1 y2 y3 y4
0 0 0 0 0 0 0
0 0 1 0 0 1 0
0 1 0 0 1 0 0
0 1 1 0 0 0 1
1 0 0 1 0 0 0
1 0 1 0 0 0 1
1 1 0 0 0 0 1
1 1 1 0 0 0 1
Затем заполняются выходы в соответствии с логикой работы
устройства. Например, в первой строке все входы равны нулю,
поэтому выходы тоже равны нулю.
Во второй строке вход x3 равен «1», а остальные входы рав-
ны «0», поэтому на выходе y3 появляется «1».
В третьей строке вход x2 равен «1», а остальные входы рав-
ны «0», поэтому на выходе y2 появляется «1».
В четвертой строке на входах x2 и x3 одновременно появля-
ются «1», поэтому выход y4 равен «1», а остальные выходы об-
нуляются.
Аналогичным образом заполняются остальные 4 строки.
Далее по табл. 2.1 строятся выражения для выходных пере-
менных y1, y2, y3 и y4.
В четвертом столбце, относящемся к выходу y1, имеется од-
на «1» (в пятой строке), поэтому логическое выражение для y1
будет иметь одно слагаемое вида
y1 = x1 x 2 x3 . (2.3)
Те входные переменные, которые в пятой строке таблицы
истинности имеют значение «1», входят в выражение (2.3) без
инверсии, а те переменные, которые имеют значение «0» – с ин-
версией.
Аналогичным образом вычисляются переменные y2, y3 и y4:
y 2 = x1 x 2 x3 , (2.4)

64
y 3 = x1 x 2 x3 , (2.5)
y 4 = x1 x 2 x3 + x1 x 2 x3 + x1 x 2 x3 + x1 x 2 x3 . (2.6)
По выражениям (2.3) – (2.6) запишем программу:
A x1
AN x2
AN x3
= y1
AN x1
A x2
AN x3
= y2
AN x1
AN x2
A x3
= y3
O(
A x1
A x2
AN x3
)
O(
A x1
AN x2
A x3
)
O(
AN x1
A x2
A x3
)
O(
A x1
A x2

65
A x3
)
= y4
Получаемая с помощью формальной процедуры программа
будет достаточно громоздкой, особенно в случае большого чис-
ла входов и выходов. В общем случае необходимо проводить
процедуру минимизации логических функций. Сегодня эту про-
цедуру позволяют эффективно решать многие системы проекти-
рования.
2.4. РАБОТА В ЛАБОРАТОРИИ
Работа в лаборатории состоит в следующем.
1. Создать проект в STEP 7 на основе контроллера CPU314.
Создание проекта описано в работах [1 – 3].
2. Сконфигурировать аппаратуру, добавив в проект модули
блока питания PS 307 2A, цифрового ввода DI32xDC24V и циф-
рового вывода DO32xDC24V/05A.
3. Создать символьную таблицу с используемыми перемен-
ными.
4. Написать функцию, реализующую заданный вариант, и в
циклически исполняемом организационном блоке организовать
вызов данной функции.
5. С помощью симулятора PLCSIM проверить работу реали-
зованного алгоритма.
Варианты выдаются индивидуально преподавателем.
2.5. ДОМАШНЕЕ ЗАДАНИЕ И ТРЕБОВАНИЯ К ОТЧЕТУ
Допуском к выполнению лабораторной работы является вы-
полненная самостоятельная работа, которая заключается в вы-
полнении следующих пунктов:
1. Изучить методическое описание.
2. Подготовить алгоритм, реализующий заданный вариант.
3. Написать программу на STL, реализующую подготовлен-
ный алгоритм.
4. Подготовиться к ответам на контрольные вопросы.
66
Отчет по работе должен содержать:
1. Название и цель работы.
2. Задание в соответствии со своим вариантом.
3. Алгоритм работы установки.
4. Программу на языке STL, реализующую заданный алго-
ритм.
2.6. ЗАДАНИЯ ДЛЯ ЛАБОРАТОРНОЙ РАБОТЫ
Вариант 0
Управление режимами работы дизель-генераторов гребной
электрической установки корабля.
Управляющий блок имеет 5 входов: «Режим 1», «Режим 2»,
«Режим 3», «Ток цепи» и «Включен». Кроме того, имеется 10
выходов «Носовой винт 1», «Отключено 1», «Кормовой винт 1»,
«Носовой винт 2», «Отключено 2», «Кормовой винт 2», «Генера-
тор включен», «Генератор выключен», «Индикатор включения»
и «Ошибка». Гребная электрическая установка имеет три ди-
зель-генератора, которые могут работать в трех режимах. Выхо-
ды «Носовой винт 1», «Отключено 1», «Кормовой винт 1», «Но-
совой винт 2», «Отключено 2», «Кормовой винт 2» управляют
включением первого и второго генераторов, а выходы «Генера-
тор включен», «Генератор выключен» – третьим.
Любые переключения выходов возможны, только если цепь
обесточена, т.е. сигнал «Ток цепи» равен «0» и вход «Включен»
активен.
В режиме 1 выходы «Кормовой винт 1» и «Кормовой винт
2» должны быть включены, а «Носовой винт 1», «Отключено 1»,
«Носовой винт 2», «Отключено 2» – отключены. Третий генера-
тор работает в режиме «Генератор включен».
Во втором режиме первый генератор работает в режиме
«Носовой винт 1», а второй в режиме «Кормовой винт 2». Тре-
тий генератор работает в режиме «Генератор включен».

67
В третьем режиме первый генератор работает в режиме
«Кормовой винт 1», второй – в режиме «Носовой винт 2», а тре-
тий отключен – режим «Генератор выключен».
Ошибка должна выдаваться в тех случаях,когда на двух из
трех входов «Режим 1», «Режим 2», «Режим 3» одновременно
присутствуют «1» или если сигналы на этих входах изменяются
при наличии «1» на входе «Ток цепи».
Вариант 1
Управление фасовочной установкой.
Блок управления содержит 5 входов: «Резервуар пол-
ный/пустой», «Заслонка открыта/закрыта», «Датчик наличия
контейнера», «Датчик массы контейнера» и «Включено». Также
имеется шесть выходов: «Двигатель вперед», «Двигатель стоп»,
«Заслонку открыть», «Заслонку закрыть», «Индикатор пустого
резервуара», «Ошибка».
Установка начинает работу при высоком напряжении на
входе «Включено». Если контейнер отсутствует, заслонка за-
крыта, датчик массы показывает «0» и резервуар не пустой, то
необходимо запустить двигатель вперед. При появлении сигнала
наличия контейнера, если датчик массы показывает ноль, двига-
тель нужно остановить. Далее если резервуар не пустой, то нуж-
но открыть заслонку и держать ее открытой до тех пор, пока не
появится сигнал от датчика массы о том, что контейнер запол-
нен. При появлении последнего сигнала необходимо закрыть за-
слонку и включить двигатель вперед.
Сигнал пустого резервуара говорит о том, что необходимо
остановить двигатель, закрыть заслонку и выдать сигнал «Инди-
катор пустого резервуара».
Сигнал ошибки появляется в том случае, если контейнер от-
сутствует и заслонка открыта или если контейнер отсутствует а
датчик массы выдает «1».
Вариант 2
Управление возбуждением генератора.

68
Схема имеет 7 входов: «Включено», «Основной/резервный»,
«Левый/правый генератор», «Ручное включение», «Частота ди-
зель-генератора», «Ток больше», «Ток меньше». Также имеются
5 выходов: «Возбуждение левого генератора», «Возбуждение
правого генератора», «Увеличить нагрузку», «Уменьшить
нагрузку».
Установка начинает работу по сигналу «Включено». Вход
«Основной/резервный» задает режим работы генератора. В ре-
жиме основного генератора, когда вход «Основной/резервный»
равен «0», схема возбуждения работает только с левым генера-
тором и вход «Левый/правый генератор» игнорируется. В про-
тивном случае необходимо просматривать состояние входа «Ле-
вый/правый генератор»: при наличии на нем «0» используется
выход «Возбуждение левого генератора», а при «1» – «Возбуж-
дение правого генератора». Сигналы возбуждения «Возбужде-
ние левого генератора», «Возбуждение правого генератора» мо-
гут подаваться либо при наличии «1» на входе «Ручное включе-
ние», либо на входе «Частота дизель-генератора», либо при еди-
ницах на обоих входах. При наличии сигнала «Ток больше»
нужно выдать высокий потенциал на выход «Увеличить нагруз-
ку», а при наличии сигнала «Ток меньше» – на выход «Умень-
шить нагрузку».
Ошибка появляется в том случае, если сигналы «Ток боль-
ше» и «Ток меньше» оба равны «1».
Вариант 3
Управление асинхронным ветрогенератором.
Управляющий блок имеет 5 входов: «Скорость ветра»,
«Скорость вала», «Нагрузка», «Заряд аккумулятора», «Включе-
но». Также имеются 6 выходов: «Индикатор», «Включить гене-
ратор», «Добавить емкость», «Отключить емкость», «Подклю-
чить нагрузку», «Подключить сеть».
Генератор включается при появлении сигналов на входах
«Включено» и «Скорость вала». При появлении сигнала «Ско-
рость вала» выдается сигнал «Включить генератор». Сигнал

69
«Нагрузка» позволяет задать работу либо прямо на локального
потребителя (выход «Подключить нагрузку»), либо при появле-
нии высокого напряжения – на энергосеть (выход «Подключить
сеть»). Если аккумулятор полностью заряжен (появился сигнал
«Заряд аккумулятора»), то автоматически генератор переходит
на работу с сетью. При работе с нагрузкой дополнительная ем-
кость отключается, а при работе с сетью – добавляется. Появле-
ние сигнала на входе «Скорость ветра» говорит о том, что ско-
рость ветра достигла критической отметки и необходимо вы-
ключить генератор и выдать сигнал на выход «Индикатор».
Вариант 4
Схема защиты электропривода.
Схема защиты электропривода имеет 5 входов: «Короткое
замыкание», «Перегрузка», «Перенапряжение», «Превышение
частоты вращения», «Разблокировка защиты». Кроме того, име-
ются выходы: «Разомкнуть контактор защиты», «Снять напря-
жение с генератора», «Индикатор короткого замыкания», «Ин-
дикатор перегрузки», «Индикатор превышения частоты», «Раз-
блокировка».
При появлении сигнала «Короткое замыкание», осуществля-
ется выдача сигналов «Разомкнуть контактор защиты» и вклю-
чение «Индикатор короткого замыкания». При появлении сигна-
ла «Перегрузка» включается «Индикатор перегрузки». Если по-
является сигнал «Перегрузка», а затем «Короткое замыкание»,
то отрабатываются оба сигнала. При появлении в обратном по-
рядке сигнал «Перегрузка» игнорируется. При появлении сигна-
ла «Перенапряжение» осуществляется выдача сигнала «Разо-
мкнуть контактор защиты». При получении сигнала «Превыше-
ние частоты вращения» необходимо выдать выходы «Индикатор
превышения частоты» и «Разомкнуть контактор защиты». Вход
«Разблокировка защиты» отрабатывается только если все
остальные входы равны нулю. При этом на выход «Разблоки-
ровка» выдается сигнал высокого уровня.
Вариант 5

70
Панель управления автомобиля.
Блок управления имеет следующие входы: «Датчик откры-
той двери», «Зажигание», «Свет», «Открыть левое окно», «От-
крыть правое окно», «Закрыть левое окно», «Закрыть правое ок-
но». Кроме того, имеются выходы: «Блокировка зажигания»,
«Включить/выключить свет», «Поднять левое окно», «Поднять
правое окно», «Опустить левое окно», «Опустить правое окно»,
«Ошибка».
При поступлении «1» на вход «Открыть левое окно» или
«Открыть правое окно» необходимо выдать «1» на выход «Опу-
стить левое окно» или «Опустить правое окно». Аналогично при
появлении «1» на входах «Закрыть левое окно» или «Закрыть
правое окно» появляется «1» на выходах «Поднять левое окно»
или «Поднять правое окно». Если одновременно появляется ко-
манда открыть и закрыть одно и то же окно, то необходимо вы-
дать ошибку.
Появление сигнала на входе «Датчик открытой двери» при
включенном зажигании приводит к выдаче «1» на выход «Бло-
кировка зажигания» и выдаче сигнала «Ошибка». Если зажига-
ние выключено, то сигнал от входа «Датчик открытой двери»
игнорируется. Сигнал на входе «Свет» приводит к появлению
«1» на выходе «Включить/выключить свет». Кроме того, на этом
выходе появляется единица при наличии «1» на входе «Датчик
открытой двери».
Вариант 6
Система теплоснабжения.
Блок имеет 6 входов: «Температура на выходе котла», «Тем-
пература на выходе дома», «Давление на выходе котла», «Дав-
ление на выходе дома», «Расход на выходе котла», «Расход на
выходе дома». Кроме того, имеется 6 входов: «Увеличить пода-
чу топлива», «Уменьшить подачу топлива», «Увеличить подачу
воды», «Уменьшить подачу воды», «Утечка воды», «Утечка теп-
ла».

71
При появлении «1» на входах «Температура на выходе кот-
ла» или «Температура на выходе дома» необходимо выдать сиг-
нал «Уменьшить подачу топлива». В противном случае выдается
сигнал на выход «Увеличить подачу топлива». Если на входе
«Температура на выходе котла» появляется «1», а на входе
«Температура на выходе дома» – «0», то выдается сигнал «Утеч-
ка тепла».
Если появляется «1» на входах «Давление на выходе котла»
или «Давление на выходе дома», то необходимо уменьшить по-
дачу воды. Если оба входа равны нулю, то выдается сигнал
«Увеличить подачу воды». Если «Давление на выходе котла»
равно «1», а «Давление на выходе дома» – «0», то выдается сиг-
нал «Утечка воды».
Если сигналы на входах «Расход на выходе котла» и «Расход
на выходе дома» разные, то выдается сигнал «Утечка воды». В
противном случае, если входы «Расход на выходе котла» и «Рас-
ход на выходе дома» одинаковые, то они игнорируются.
Вариант 7
Система резки трубы.
Управляющий блок имеет 5 входов: «Скорость меньше»,
«Скорость больше», «Наличие трубы», «Резак готов», «Труба
отрезана». Кроме того, имеется 5 выходов: «Увеличить скорость
трубы», «Уменьшить скорость трубы», «Опустить резак», «Под-
нять резак», «Стоп-труба».
При появлении сигнала на входе «Скорость больше», если
сигнал «Наличие трубы» равен «0», нужно выдать сигнал
«Уменьшить скорость трубы». При появлении сигнала на входе
«Скорость меньше», если сигнал «Наличие трубы» равен «0»,
нужно выдать сигнал «Увеличить скорость трубы». Если на вхо-
де «Резак готов» появляется «0», то необходимо выдать сигнал
«Стоп-труба». Если при этом на входе «Труба отрезана» «1», то
необходимо подать команду «Поднять резак». Если на входе
«Резак готов» появляется «1», сигнал «Наличие трубы» равен
«1», и вход «Труба отрезана» равен «0», то необходимо дать ко-

72
манду «Опустить резак». При наличии «1» на входе «Наличие
трубы», если вход «Труба отрезана» равен «0», должна появ-
ляться «1» на входе «Стоп труба», а входы «Скорость меньше»,
«Скорость больше» игнорируются.
Вариант 8
Система управления движением
Управляющий блок содержит 6 входов: «Полный/малый
ход», «Скорость мала», «Скорость велика», «Поворот направо»,
«Поворот налево», «Стоп». Также имеются 6 выходов: «Стоп
двигатель 1», «Стоп двигатель 2», «Увеличить скорость двигате-
ля 1», «Увеличить скорость двигателя 2», «Уменьшить скорость
двигателя 1», «Уменьшить скорость двигателя 2».
Если появляется сигнал «Стоп», то все остальные сигналы
игнорируются и включаются выходы «Стоп двигатель 1», «Стоп
двигатель 2». Если сигнал на входе «Полный/малый ход» равен
«0», то желаемая скорость маленькая, поэтому если вход «Ско-
рость мала» равен «1», то все выходы равны нулю. Если же сиг-
нал «Полный/малый ход» равен «1», то желаемая скорость
большая, поэтому если вход «Скорость мала» равен «1», то нуж-
но увеличить скорость обоих двигателей. Аналогично, если сиг-
нал на входе «Полный/малый ход» равен «0», а сигнал «Ско-
рость велика» равен «1», то нужно уменьшить скорости обоих
двигателей. Эти действия выполняются, если сигналы на входах
«Поворот направо», «Поворот налево» равны «0».
При появлении сигнала «Поворот направо» или «Поворот
налево» увеличивается или уменьшается скорость первого или
второго двигателя. При этом при большой фактической скорости
(вход «Скорость велика» равен «1») и малой желаемой скорости
(вход «Полный/малый ход» равен «0») при повороте нужно
уменьшать скорость одного из двигателей. Если же желаемая
скорость большая, а реальная маленькая, то для того же самого
поворота нужно увеличить скорость другого двигателя. При
совпадении реальной и желаемой скоростей поворот осуществ-
ляется уменьшением скорости одного из двигателей. Ситуации,

73
когда сигналы «Скорость мала» и «Скорость велика» одновре-
менно равны «1» или «Поворот направо» и «Поворот налево»
равны «1», игнорируются.
Вариант 9
Система регулирования котлом.
Управляющий блок имеет 7 входов: «Режим до себя / после
себя», «Мощность мала», «Мощность велика», «Скорость мала»,
«Скорость велика», «Предельная скорость», «Предельная мощ-
ность». Также имеются 4 выхода: «Поднять заслонку», «Опу-
стить заслонку», «Увеличить подачу топлива», «Уменьшить по-
дачу топлива».
Если вход «Режим до себя / после себя» равен «0», то регу-
лировка происходит за счет выходов «Поднять заслонку», «Опу-
стить заслонку». Если мощность мала, а скорость велика, то за-
слонка поднимается. Если мощность велика, а скорость мала, то
заслонка опускается. Если мощность и скорость велика, то за-
слонка опускается. Если мощность и скорость малы, то заслонка
поднимается.
Если вход «Режим до себя / после себя» равен «1», то регу-
лировка происходит за счет выходов «Увеличить подачу топли-
ва», «Уменьшить подачу топлива». Если мощность мала, а ско-
рость велика, то подача топлива увеличивается. Если мощность
велика, а скорость мала, то подача топлива уменьшается. Если
мощность и скорость велика, то подача топлива уменьшается.
Если мощность и скорость малы, то подача топлива увеличива-
ется.
Сигналы «Предельная скорость» и «Предельная мощность»
проверяются только если имеются соответствующие сигналы
«Мощность мала», «Мощность велика» или «Скорость мала»,
«Скорость велика». При этом при появлении сигналов на входе
«Предельная скорость» и/или «Предельная мощность» вход
«Режим до себя / после себя» игнорируется и регулирование
происходит за счет всех каналов «Поднять заслонку», «Опустить
заслонку», «Увеличить подачу топлива», «Уменьшить подачу

74
топлива». Если мощность мала, а скорость велика, то подача
топлива увеличивается и заслонка открывается. Если мощность
велика, а скорость мала, то подача топлива уменьшается и за-
слонка закрывается. Если мощность и скорость велики, то пода-
ча топлива уменьшается и заслонка закрывается. Если мощность
и скорость малы, то подача топлива увеличивается и заслонка
открывается.
КОНТРОЛЬНЫЕ ВОПРОСЫ
1. Приведите синтаксис основных логических операций на
STL: И, ИЛИ, Исключающее ИЛИ.
2. Приведите общую структуру логического оператора на
STL.
3. Как выполняются первичный опрос и оператор провер-
ки?
4. Как сделать инверсию сигнала на STL?
5. Приведите синтаксис операторов присвоения, установки
и сброса бита на STL.
6. Запишите на STL реализацию выражения (x1 v x2) & (x3
v x4).
7. Напишите на STL реализацию RS-триггера.
8. Опишите оператор обнаружения положительного фронта
сигнала. Приведите временную диаграмму.
9. Опишите оператор обнаружения отрицательного фронта
сигнала. Приведите временную диаграмму.

75
3. ОБМЕН ДАННЫМИ В STL-ПРОГРАММИРУЕМЫХ
КОНТРОЛЛЕРАХ SIEMENS

В данной работе рассматриваются функции языка програм-


мирования STL, с помощью которых выполняются операции
обмена данными посредством аккумуляторов. К ним относятся
следующие функции.
1. Load – загрузка данных в аккумулятор, которая использу-
ется для передачи данных в аккумуляторы с целью их обработ-
ки. Посредством функции Load также можно задавать начальные
значения или обрабатывать текущие значения таймеров и счет-
чиков.
2. Transfer – функция выгрузки данных из аккумулятора, ко-
торая используется для передачи результатов выполнения опе-
рации из аккумулятора в память CPU.
3. Accumulator functions – функции аккумуляторов, которые
позволяют передавать информацию из одного аккумулятора в
другой.
4. Системные функции SFC 20 BLKMOV, SFC 81
UBLKMOV и SFC 21 FILL – используются для копирования
больших объемов информации в памяти или в заданные области
данных.
Функции Load и Transfer позволяют производить обмен между
различными областями памяти, который не может производиться
непосредственно, а только с использованием аккумулятора 1.
Направление обмена информацией указывается в используемой
для передачи инструкции. Передача данных из памяти в аккумуля-
тор 1 называется загрузкой, а передача данных из аккумулятора 1 в
пямять – выгрузкой. Операции загрузки и выгрузки всегда необхо-
димы для выполнения функций обработки чисел.
Для одновременной обработки двух чисел в контроллерах
SIEMENS используются два аккумулятора: 1 и 2. Кроме того,
S7-400 CPU имеют еще два аккумулятора – 3 и 4.

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

77
Рис. 3.1. Функции пересылки данных
Функции загрузки пересылают информацию из системной и
рабочей памяти и периферии в аккумулятор 1, смещая при этом
его текущее содержимое в аккумулятор 2.
Операции обработки чисел производятся либо непосред-
ственно над содержимым аккумулятора 1, либо над содержимым
аккумуляторов 1 и 2 с записью результата в аккумулятор 1.
Функции аккумуляторов позволяют получить доступ к со-
держимому всех аккумуляторов. Источником для пересылки
информации в системную память, рабочую память и в перифе-
рию может служить только лишь аккумулятор 1.
Каждый аккумулятор содержит 32 разряда, тогда как все об-
ласти памяти имеют байтовую структуру. Обмен информацией
между областями памяти и аккумулятором 1 может происходить
побайтно, по два или по четыре байта. При однобайтном и двух-
байтном обмене используются младшие разряды аккумулято-
ра 1.
3.1. ФУНКЦИИ ЗАГРУЗКИ ДАННЫХ В АККУМУЛЯТОР
Функция загрузки состоит из оператора L и константы, пе-
ременной или адреса с идентификатором, содержимое которого
функция будет загружать в аккумулятор 1.
Например:
L +500 // Прямая загрузка константы
L IW 11 // Загрузка из таблицы входов 11 и 12 байт
L X1 // Загрузка переменной X1
CPU выполняет функцию загрузки независимо от результата
логической операции RLO и битов состояния. Функция загрузки
не влияет на результат логической операции и не влияет на биты
состояния.
Функция L не только загружает данные в аккумулятор 1, но
и полностью загружает текущее содержимое аккумулятора 1 в
аккумулятор 2. Предыдущее содержимое аккумулятора 2 теря-

78
ется. В S7-400 CPU функция L не влияет на содержимое аккуму-
ляторов 3 и 4.
Адрес числа, определенный в функции загрузки L, может
иметь размер байта, слова или двойного слова (рис. 3.2).

Рис. 3.2. Загрузка и выгрузка данных различной длины


При загрузке байта его содержимое считывается в младший
(правый) байт аккумулятора 1. Неиспользуемые байты заполня-
ются нулями. При загрузке слова старший байт слова располага-
ется в младшем байте аккумулятора, а младший байт слова –
вплотную слева от старшего байта. Неиспользуемые байты за-
полняются нулями. При загрузке двойного слова младший байт
(байт 1) занимает крайний левый байт аккумулятора, а старший
байт занимает крайний правый байт (байт 4) аккумулятора.
Приведем примеры загрузки данных из разных областей.

79
Загрузка данных из области входов:
L IB n // Загрузка данных из входного байта
L IW n // Загрузка данных из входного слова
L ID n // Загрузка данных из входного двойного слова
Загрузка данных из области выходов:
L QB n // Загрузка данных из выходного байта
L QW n // Загрузка данных из выходного слова
L QD n // Загрузка данных из выходного двойного слова
Загрузка данных из периферии:
L PIB n // Загрузка из периферийного входного байта
L PIW n // Загрузка из периферийного входного слова
L PID n // Загрузка из периферийного двойного слова
При загрузке данных от области I/O входные модули адре-
суются как периферийные входы (PI). При этом доступны толь-
ко существующие входные модули. Надо отметить, что при
непосредственной загрузке данных из модуля периферии I/O пе-
ресылаемое значение может отличаться от значения, загружае-
мого из области образа входов с тем же адресом, так как эти зна-
чения одинаковы лишь в начале цикла сканирования программы
(когда CPU обновляет отображение процесса). Непосредствен-
ная же загрузка данных от модулей I/O позволяет записать в ак-
кумулятор текущие значения входов.
Загрузка данных из меркеров:
L MB n // Загрузка данных из байта меркеров
L MW n // Загрузка данных из слова меркеров
L MD n // Загрузка данных из двойного слова меркеров
Загрузка данных из области меркеров всегда разрешена, так
как такая область целиком расположена в CPU.
Загрузка констант:
L B#16#F1 // Загрузка двухразрядного шестнадцатеричного
// числа
L -1000 // Загрузка целого числа
L 5.0 // Загрузка действительного числа
L S5T#2s // Загрузка данных таймера формата S5

80
L C#250 // Загрузка значения счетчика
L TOD#8:30:00 // Загрузка времени суток
В аккумулятор можно загружать константы. При этом мож-
но использовать различные форматы. Все константы, загружае-
мые в аккумулятор, являются константами простых типов:
Загрузка указателей
L P#1.0 // Загрузка внутризонного счетчика
L P#M2.1 //Загрузка межзонного счетчика
L P#name //Загрузка адреса локальной переменной
Указатели – это целое число, которое применяется для ука-
зания места хранения переменной.
В аккумулятор нельзя загрузить указатель DB или ANY, так
как длина этих указателей превышает 32 бита.
3.2. ФУНКЦИИ ВЫГРУЗКИ ДАННЫХ ИЗ АККУМУЛЯТОРА
Функция выгрузки состоит из оператора T и адреса, по кото-
рому должны быть отправлены данные из аккумулятора 1.
T адрес // Переносит содержимое аккумулятора по
// определенному адресу в память
T имя переменной // Переносит содержимое аккумулятора в
// переменную
CPU выполняет функцию выгрузки независимо от результа-
та логической операции и битов состояния. Функция выгрузки
не влияет на результат логической операции и не влияет на биты
состояния. Функция выгрузки пересылает содержимое аккуму-
лятора 1 по одному байту, слову или двойному слову в заданный
адрес. При этом содержимое аккумулятора 1 остается неизмен-
ным.
Операция выгрузки выполняется только с помощью аккуму-
лятора 1. Если необходимо передать данные из другого аккуму-
лятора, сначала нужно передать эти данные в аккумулятор 1.
При выгрузке байта содержимое крайнего правого байта ак-
кумулятора 1 пересылается в байт по указанному адресу. При
выгрузке слова пересылаются два младших байта аккумулято-

81
ра 1. При этом байт 2 заполняет старший байт слова назначения,
а байт 1 – младший байт.
При выгрузке двойного слова содержимое аккумулятора 1
пересылается в двойное слово по указанному адресу. При этом
байт 1 занимает младший байт, а байт 4 – старший байт.
Выгрузка данных во входы:
T IB n // Выгрузка данных во входной байт
T IW n // Выгрузка данных во входное слово
T ID n // Выгрузка данных во входное двойное слово
Пересылка во входы влияет только на область отображения
процесса. Эта операция применяется для задания начальных
значений входов и для отладки.
Выгрузка данных в область выходов:
T QB n // Выгрузка данных в выходной байт
T QW n // Выгрузка данных в выходное слово
T QD n //Выгрузка данных в выходное двойное слово
Выгрузка данных в периферийные выходы:
T PQB n //Выгрузка данных в периферийный выходной
// байт
T PQW n //Выгрузка данных в периферийное выходное
//слово
T PQD n // Выгрузка в периферийное выходное двойное
// слово
При выгрузке данных в область I/O выходные модули адре-
суются как периферийные выходы (PQ). При этом доступны
только существующие выходные модули. При непосредственной
выгрузке данных в область I/O выходных модулей, связанных с
таблицей выходов образа процесса, данные в этой таблице об-
новляются, ибо нет никакой разницы (в рассматриваемом кон-
тексте) между выходом (из области отображения процесса) и
периферийным выходом с одинаковым адресом.
Выгрузка данных в область меркеров:
T MB n //Выгрузка данных в байт меркеров
T MW n //Выгрузка данных в слово меркеров

82
T MD n //Выгрузка данных в двойное слово меркеров
Выгрузка данных в область меркеров всегда разрешена, по-
скольку такая область целиком расположена в CPU.
3.3. ФУНКЦИИ АККУМУЛЯТОРОВ
Функции аккумуляторов позволяют пересылать значения из
одного аккумулятора в другой или перемещать байты внутри
аккумулятора 1. На выполнение функций аккумуляторов не вли-
яют ни результат логической операции RLO, ни биты состояния.
Результат выполнения этих функций не оказывает влияния на
RLO и биты состояния.
Список операторов прямой пересылки следующий:
PUSH // Сдвиг содержимого аккумуляторов вперед
POP // Сдвиг содержимого аккумуляторов назад
TAK // Обмен содержимым между аккумуляторами 1 и 2
ENT // Сдвиг аккумуляторов вперед без аккумулятора 1
LEAVE // Сдвиг аккумуляторов назад без аккумулятора 1
В процессорах S7-300 CPU, имеющих только 2 аккумулято-
ра, доступны первые три функции PUSH, POP и TAK.
Схематически выполнение перечисленных выше функций
показано на рис. 3.3.

Рис. 3.3. Прямая пересылка между аккумуляторами

83
Функция PUSH вызывает сдвиг содержимого аккумуляторов
1, 2, 3 и 4 вдоль их цепочки. Содержимое аккумулятора 1 оста-
ется неизменным, а содержимое аккумулятора 4 пропадает.
Функция POP вызывает сдвиг содержимого аккумуляторов
4, 3, 2 и 1 вдоль их цепочки. Содержимое аккумулятора 4 оста-
ется неизменным, а содержимое аккумулятора 1 пропадает.
Команды PUSH и POP организуют стек из аккумуляторов.
Функция TAK вызывает обмен содержимым между аккуму-
ляторами 1 и 2.
Функция ENT вызывает сдвиг содержимого аккумуляторов
2, 3, 4 вдоль их цепочки. Содержимое аккумуляторов 1 и 2 оста-
ется неизменным, а содержимое аккумулятора 4 пропадает.
Функция LEAVE вызывает сдвиг содержимого аккумулято-
ров 4, 3 вдоль их цепочки. Содержимое аккумуляторов 4 и 1
остается неизменным, а содержимое аккумулятора 2 пропадает.
Кроме перечисленных операций для аккумулятора 1 имеют-
ся 2 оператора, позволяющие менять местами байты:
CAW // Обмен местами между байтами младшего слова в
// аккумуляторе 1
CAD // Обмен местами между всеми байтами в аккумулято-
//ре 1
Функция CAW меняет местами два байта в младшем слове в
аккумуляторе 1. При этом байты старшего слова аккумулятора
остаются неизменными. Функция CAD меняет местами все бай-
ты в аккумуляторе 1. При этом самый старший байт становится
самым младшим по номеру, а средние два байта меняются ме-
стами.
Выполнение перечисленных выше функций показано на
рис. 3.4.

84
Рис. 3.4. Команды обмена байтами в аккумуляторе 1
Кроме перечисленных функций имеется ряд команд низкого
уровня, таких как:
1) INC <const> // Прибавление к младшему байту аккумулято-
ра
// 8-битной константы
2) DEC <const> // Вычитание из младшего байта аккумулятора
// 8-битной константы
Инструкции INC и DEC – это так называемые "инструкции
низкого уровня", т.е. в случае переполнения процессор не уста-
навливает бит переполнения в слове состояния;
3) INVI // Дополнение для 2-х младших байтов аккумулятора 1
Эта команда заменяет нули на единицы, а единицы – на нули
в аккумуляторе 1. Два старших байта остаются неизменными.
Инструкция INVI не изменяет никакие биты слова состояния;
4) INVD // Дополнение всего аккумулятора 1
Эта команда заменяет «1» на «0» и наоборот для всего акку-
мулятора 1. Инструкция INVD не изменяет никакие биты слова
состояния;
5) NEGI // Умножение целого числа (16 разрядов) на –1
// Старшие байты аккумулятора 1 не изменяются
6) NEGD // Умножение содержимого аккумулятора 1 на –1
7) RLDA // Сдвигает содержимое аккумулятора 1 на 1 бит
// влево

85
В содержимое бита (бит 0), который становится свободным
во время сдвига, записывается значение бита CC1 слова состоя-
ния. Бит CC1 слова состояния получает значение вытолкнутого
бита (бит 31).
Например, в аккумуляторе 1 содержится число 0100 0100
1100 0100, а бит CC1 равен «1». Тогда после выполнения опера-
ции RLDA содержимое аккумулятора 1 будет равно 1000 1001
1000 1001, а в бит CC1 будет записан 0;
8) RRDA // Сдвиг аккумулятора 1 на 1 бит вправо.
В содержимое бита (бит 31), который становится свободным
во время сдвига, записывается значение бита CC1. Бит CC1 по-
лучает значение вытолкнутого бита (бит 0).
Например, аккумулятор 1 содержит число 0100 0100 1100
0100, а бит CC1 равен «1». Тогда после команды RRDA аккуму-
лятор 1 будет содержать число 1010 0010 0110 0010, а содержи-
мое бита CC1 равно «0».
3.4. СИСТЕМНЫЕ ФУНКЦИИ ДЛЯ ПЕРЕСЫЛКИ ДАННЫХ
Контроллеры SIMATIC предоставляют следующие систем-
ные функции, позволяющие осуществлять функции пересылки
данных:
SFC 20 BLKMOV // Копирование области данных
SFC 21 FILL // Вставка данных в область назначения
SFC 81 UBLKMOV // Непрерывное копирования области
//данных
Каждая из этих системных функций имеет два параметра ти-
па ANY (табл. 3.1), которые определяют произвольный адрес,
переменную или абсолютный адрес в памяти.
Системная функция SFC 20 BLKMOV выполняет копирова-
ние области данных в направлении возрастания их адресов в об-
ласть назначения. При этом могут быть определены следующие
параметры:
1) любые переменные из области входов (I), выходов (Q),
меркеров (M) и блоков данных;

86
2) переменные из области временных локальных данных;
3) области данных с абсолютной адресацией посредством
указателя ANY.
Таблица 3.1
Параметры системных функций пересылки данных
SFC Параметр Назначение Тип Описание
SRKBLK Вход ANY Область-источник
Информация об
SFC 20 RET_VAL Выход INT
ошибках
DSTBLK Выход ANY Область-приемник
SVAL Вход ANY Область-источник
Информация об
SFC 21 RET_VAL Выход INT
ошибках
BLK Выход ANY Область-приемник
SRKBLK Вход ANY Область-источник
Информация об
SFC 81 RET_VAL Выход INT
ошибках
DSTBLK Выход ANY Область-приемник

Используя функцию SFC 20 BLKMOV, нельзя копировать


значения таймеров и счетчиков или передавать информацию из
модулей и в модули входов и выходов.
При использовании функции SFC 20 BLKMOV область-
источник и область-приемник не должны перекрываться. Если
источник и приемник имеют разную длину, то наименьшая из
них по размеру будет определять объем данных, переданных в
приемник.
Пример: Переменная Var1 в блоке данных Input1 должна
быть скопирована в переменную Var2 в блоке данных Outpit1.

87
Информацию об ошибках (значение, возвращаемое функцией)
нужно скопировать в переменную Error1 блока данных Errors.
CALL BLKMOV (
SRCBLK := Input1.Var1,
RET_VAL := Errors.Error1,
DSTBLK := Output1.Var2);
Системная функция SFC 81 UBLKMOV копирует содержи-
мое исходной области данных в область назначения в направле-
нии возрастания адресов данных. Операция копирования не мо-
жет прерываться. Объем копируемых данных может достигать
512 байт.
Для этой функции могут быть определены те же параметры,
что и для функции SFC 20 BLKMOV. Функция SFC 81
BLKMOV также не может копировать значения таймеров и
счетчиков или передавать информацию из модулей и в модули
входов-выходов. Область-источник и область-приемник не
должны перекрываться. Если источник и приемник имеют раз-
ные длины, то наименьшая из них будет определять объем дан-
ных, переданный в область- приемник.
Пример: Из блока данных BLOCK1 первый компонент мас-
сива Data должен быть скопирован в переменную Var блока
данных BLOCK2. Значение функции должно быть сохранено в
переменной Error1 блока данных Errors.
CALL UBLKMOV (
SRCBLK := BLOCK1.Data[1],
RET_VAL := Errors.Error1,
DSTBLK := BLOCK2.Var);
Системная функция SFC 21 FILL позволяет копировать со-
держимое исходной области данных в область назначения в
направлении возрастания адресов данных. Операция копирова-
ния продолжается до полного заполнения области назначения
(при условии превышения размера области назначения над раз-
мерами области-источника возможно многократное копирование
исходных данных).

88
Для этой функции могут быть определены те же параметры,
что и для предыдущих функций. Как и ранее, нельзя копировать
значения таймеров и счетчиков или передавать информацию из
модулей и в модули входов-выходов. Кроме того, с помощью
этой функции нельзя обмениваться информацией с системными
блоками данных.
При использовании функции SFC 21 FILL область-источник
и область-приемник не должны перекрываться. Если источник
больше приемника, то объем данных, переданный в область-
приемник, будет соответствовать размеру последнего; если же
источник меньше приемника, то в область-приемник будут запи-
сываться (многократно) копируемые данные до её полного за-
полнения (даже если размеры рассматриваемых областей не
кратны друг другу).
Пример: Блок данных DB 13 содержит 128 байт. Необходи-
мо скопировать во все эти байты содержимое байта меркеров
MB 80.
CALL SFC 21 (
BVAL := MB 80,
RET_VAL := MW 32,
BLK := P#DB13.DBX0.0 BYTE 128);
В первой строке вызывается функция. Далее указывается об-
ласть входных данных MB 80 – область памяти, начиная с 80
байта. Для кода ошибок выделяется слово в памяти по адресу 32.
В последней строке описывается область назначения – перемен-
ная типа ANY: P означает указатель, DB13.DBX0.0 – область в
блоке данных,
С помощью системных функций SFC 20 BLKMOV и SFC 81
UBLKMOV можно копировать переменные типа STRING и
BYTE .
Редактор STL-программ обрабатывает переменную типа
STRING как массив байтов, так что системная функция SFC пе-
редает отдельные байты один к одному (включая два первых
байта со спецификацией размера). Поэтому при передаче масси-

89
ва байтов в переменную типа STRING нужно задать длину пере-
даваемых данных в первых двух байтах STRING-переменной в
соответствии с передаваемым массивом.
3.5. ПРИМЕР ПРОГРАММИРОВАНИЯ ОБМЕНА ДАННЫМИ
Упражнение 1. Вычисление степени целого числа.
Рассмотрим пример вычисления третьей степени целого
числа. Для этого можно воспользоваться следующим простым
алгоритмом.
1. Загрузить в аккумулятор 1 целое число из входного байта.
2. Копировать содержимое аккумулятора 1 в аккумулятор 2.
3. Перемножить содержимое аккумуляторов 1 и 2.
4. Копировать результат в аккумулятор 2.
5. Загрузить в аккумулятор 1 целое число из входного байта.
6. Умножить содержимое аккумулятора 1 на содержимое ак-
кумулятора 2.
7. Переслать результат в выходное слово.
8. Отобразить результат в окне PLCSIM.
Приведем пример функции, выполняющей данный алгоритм.
L IB 0 // Загрузка входного байта IB 0
PUSH // Копируем содержимое аккумулятора 1 в 2
*I // Целочисленное умножение
PUSH // Копируем результат в аккумулятор 2
L IB 0 // Загрузка входного байта IB 0
*I // Целочисленное умножение
T QW 0 // Передача результата в выходное слово
Примечание. Данную программу можно написать более ра-
ционально. Сделайте это самостоятельно.
Упражнение 2. Обмен данными и операции сдвига.
Создадим программу, реализующую следующие функции.
1. Загрузка слова из таблицы входов в область меркеров.
2. Циклический сдвиг загруженного слова на 3 разряда вле-
во.

90
3. Пересылка результата в следующее слово области мерке-
ров.
4. Формирование дополнительного кода относительно по-
следнего результата.
5. Пересылка последнего результата в следующее слово об-
ласти меркеров.
6. Отобразить работу программы в PLCSIM.
Приведем пример программы, реализующей указанный ал-
горитм.
L IW 0 // Загрузка в аккумулятор 1 из первых двух
// байтов таблицы входов
T MW 0 // Передача двух младших байтов аккумулятора
// в слово области меркеров по адресу 0
RLD 3 // Сдвиг двух младших байтов аккумулятора 1
// на 3 бита
T MW 2 // Передача результата в область меркеров по
// адресу 2
NEGI // Формирование дополнительного кода
// (инверсия и прибавление 1)
T MW 4 // Передача результата в область меркеров
// по адресу 4
Упражнение 3. Обмен данными с помощью системных
функций.
С помощью системных функций удобно копировать число-
вые и строковые данные, хранящиеся в блоках данных. Более
подробно этот вопрос будет рассмотрен при изучении блоков
данных в STL.
Ниже приведены примеры программ, реализующих копиро-
вание входного байта в байт области меркеров и заполнение об-
ласти памяти входным байтом.
CALL "BLKMOV" // Вызов функции SFC 20 LKMOV
BVAL:=IB0 // Копируемая область – входной байт
// по адресу 0
RET_VAL:=MW0 //Область памяти для кода ошибок

91
BLK:=P#M 2.0 BYTE 1 // Область назначения начинается с
// бита 0 байта 2 области памяти M,
// тип данных BYTE, число байтов 1,
// P – указатель на область памяти
CALL "FILL" // Вызов функции SFC 21 FILL
BVAL:=IB1 // Копируемая область – входной
байт
// по адресу 1
RET_VAL:=MW3 // Область памяти для кода ошибок
BLK:=P#M 5.0 BYTE 2 // Область назначения начинается с
// бита 0 байта 5 области памяти M,
// тип данных BYTE, число байтов 2,
// P – указатель на область памяти
Первая функция просто копирует входной байт в область
меркеров, а вторая заполняет два байта одним входным.
3.6. РАБОТА В ЛАБОРАТОРИИ
1. Набрать и отладить программу вычисления степени цело-
го числа в соответствии с вариантом по табл. 3.2. Программу
оформить в виде функции в проекте, созданном в предыдущих
работах.
2. Набрать и отладить программу пересылки данных и опе-
раций сдвига. Варианты заданий приведены в табл. 3.3. Про-
грамму оформить в виде функции в проекте, созданном в
предыдущих работах.
3. Набрать и отладить программу обмена данными с помо-
щью системных функций. Варианты заданий приведены в табл.
3.4. Программу оформить в виде функции в проекте, созданном
в предыдущих работах.
4. Результаты выполнения программы продемонстрировать в
PLCSIM, где нужно просмотреть состояние всех используемых
входных, выходных байтов, областей памяти и аккумуляторов.

92
3.7. ДОМАШНЕЕ ЗАДАНИЕ
Допуском к выполнению лабораторной работы является вы-
полненная самостоятельная работа, заключающаяся в следую-
щем:
1. Изучить методическое описание.
2. Подготовить алгоритмы, реализующие заданные вариан-
ты.
3. Написать программу на STL, реализующую заданные алго-
ритмы.
4. Подготовиться к ответам на контрольные вопросы.

Отчет по работе должен содержать:


1. Название и цель работы.
2. Задание в соответствии со своим вариантом.
3. Алгоритмы.
4. Функции на языке STL, результаты выполнения программ.
5.Выводы по работе.

3.8. ЗАДАНИЯ ДЛЯ ЛАБОРАТОРНОЙ РАБОТЫ


Варианты для лабораторной работы представлены в табл.3.2
– 3.4 (примеры выполнения см. выше).
Все задания выдаются преподавателем для каждой подгруп-
пы или каждого студента индивидуально. Результаты выполне-
ния программы необходимо показать преподавателю.

КОНТРОЛЬНЫЕ ВОПРОСЫ
1. Опишите операцию загрузки данных в аккумулятор 1.
2. Опишите операцию выгрузки данных из аккумулятора 1.

93
3. Чем отличается загрузка из таблицы входов от загрузки из пе-
риферийных входов?
4. Опишите операции обмена данными между аккумуляторами.
5. Опишите функции обмена байтами аккумулятора 1.
6. Чем отличаются команды INVD и NEGD?
7. Каким образом работают команды циклического сдвига?
8. Опишите действия, выполняемые системными функциями SFC
20 и SFC 21. Чем они отличаются?
9. Почему в упражнении 1 входные данные имеют размер 1 байт, а
выходные передаются в слово (2 байта)?
10. Почему в упражнении 2 адресация памяти идет через один ад-
рес: MW0, MW2, MW4?

Таблица 3.2
Варианты заданий к упражнению 1
Вар. Степень Входные данные Выходные данные
Двойное слово в таблице
0 4 Слово из таблицы входов
выходов
Двойное слово в области
1 5 Слово из памяти
памяти
Двойное слово в таблице
2 6 Байт из таблицы входов
выходов
Двойное слово в области
3 7 Байт из области памяти
памяти
4 4 Слово из памяти Слово в таблице выходов

5 5 Слово из таблицы входов Слово в области памяти

6 6 Байт из области памяти Слово в таблице выходов

7 7 Байт из таблицы входов Слово в области памяти

8 4 Байт из области памяти Байт в области памяти

9 5 Байт из таблицы входов Байт в таблице выходов

94
Таблица 3.3
Варианты заданий к упражнению 2

Вар. Вх. данные Операция 1 Операция 2 Вых. данные


Слово из Сдвиг вправо Слово
0 Инверсия
входов на 2 бита в памяти
Слово из Сдвиг влево Дополнитель- Выходное
1
памяти на 4 бита ный код слово
Два вход- Сдвиг вправо Инкремент ак- Два слова в
2
ных слова на 3 бита кумулятора памяти
Два слова Сдвиг влево Обмен между Два выход-
3
из памяти на 5 битов байтами ных слова
Слово из Сдвиг влево Декремент ак- Выходное
4
входов на 6 битов кумулятора слово
Слово из Сдвиг вправо Обмен между Слово
5
памяти на 4 бита мл. байтами в памяти
Два вход- Сдвиг влево Два выход-
6 Инверсия
ных слова на 3 бита ных слова
Два слова Сдвиг вправо Дополнитель- Два слова в
7
из памяти на 6 битов ный код памяти
Слово из Сдвиг влево Инкремент ак- Слово
8
входов на 2 бита кумулятора в памяти
Слово из Сдвиг вправо Декремент ак- Выходное
9
памяти на 7 битов кумулятора слово

95
Таблица 3.4
Варианты заданий к упражнению 3
Функция BLKMOV Функция FILL
Вар. Входные Выходные Входные дан- Выходные
данные данные ные данные
0 Вх. слово Вых. слово Байт памяти 2 байта памяти

1 Слово памяти Слово памяти Вх. байт 3 вых. байта

2 Вх. байт Байт памяти Слово памяти 2 вых. слова

3 Байт памяти Вых. байт Вх. слово 3 слова памяти


Двойное вх. Двойное вых. Двойное сло- 8 байтов па-
4
слово слово во памяти мяти
Двойное сло- Двойное сло- Двойное вх. Двойное вых.
5
во памяти во памяти слово слово
6 Вх. слово Слово памяти Байт памяти 4 вых. байта

7 Слово памяти Вых. слово Вх. байт 3 байта памяти

8 Вх. байт Вых. байт Слово памяти 2 слова памяти

9 Байт памяти Байт памяти Вх. слово Вых. слово

4. ИЗУЧЕНИЕ ТАЙМЕРОВ В STL-


ПРОГРАММИРУЕМЫХ КОНТРОЛЛЕРАХ SIEMENS
Функции таймеров используются для управления по време-
ни, например, для обеспечения заданного времени ожидания или
мониторинга, для измерения отрезков времени или для генера-
ции импульсов. В данной работе рассматриваются функции тай-
меров для использования в языке программирования STL.

96
Пользователю доступны следующие типы таймеров:
1. Таймер с управляемым импульсом.
2. Таймер с расширенным импульсом.
3. Таймер с задержкой включения.
4. Таймер с задержкой включения с памятью.
5. Таймер с задержкой выключения.
При запуске таймера можно задавать динамические характе-
ристики, длительность работы, длительность задержки запус-
ка/выключения таймера. Также можете выключить или вклю-
чить функцию перезапуска таймеров. Для опроса таймеров ис-
пользуются двоичные логические операции. Функции загрузки
Load используются для пересылки текущего значения времени в
двоичном или BCD-коде в аккумулятор 1.
4.1. ПРОГРАММИРОВАНИЕ ФУНКЦИЙ ТАЙМЕРОВ
Запуск таймера
Таймер запускается, если перед переходом CPU к инструк-
ции запуска таймера произошло изменение значения результата
логической операции RLO. При этом для таймера с задержкой
выключения RLO должен изменить свое состояние со значения
«1» на «0», а для всех остальных типов таймеров RLO должен
изменить свое состояние со значения «0» на «1».
Пользователь имеет возможность запустить на выполнение
любой из пяти возможных таймеров, показанных в табл. 4.1.
Задание временных параметров таймера
При запуске таймера из аккумулятора 1 выбирается время
запуска или длительность работы. Как и когда в аккумулятор 1
поступают временные параметры таймера не имеет значения.
Для обеспечения лучшей читаемости программы лучше всего
загружать эти параметры непосредственно перед запуском тай-
мера в виде константы или в виде символьной переменной.
Примечание. аккумулятор 1 должен содержать корректное
значение, даже если отсчет времени не начинается при выполне-
нии инструкции запуска.

97
Пример 1. Определение длительности работы таймера с по-
мощью константы:
L S5TIME#5s // Длительность 5 с
L S5T#2m10ms // Длительность 2 мин 10 мс
Таблица 4.1
Инструкции для запуска таймеров

Сигнал запуска

Таймер с управляемым
импульсом: SP
Таймер с расширенным
импульсом: SE
Таймер с задержкой
включения:SD
Таймер с задержкой
включения с
памятью:SS
Таймер с задержкой
выключения:SF

В базовых языках STL, LAD и FBD параметры «время за-


пуска» и «длительность работы» могут быть определены в часах,
минутах, секундах и миллисекундах. Диапазон задания времен-
ных параметров простирается от S5TIME#10ms до
S5TIME#2h46m30s (что соответствует диапазону времени, рав-
ному 9990 с). При этом можно вместо формата S5TIME# исполь-
зовать сокращение S5T# для определения временных парамет-
ров с помощью константы.
Пример 2. Определение длительности работы таймера с по-
мощью переменной:
L S5T#10m // Длительность равна 10 мин

98
T MW20 // Сохранить длительность работы
L MW20 // Загрузить длительность работы
Внутренняя структура временного параметра «длительность
работы» состоит из значения времени и временной базы. Дли-
тельность работы таймера равна произведению этих величин:
ДР = ЗВ ⋅ ВБ , (4.1)
где ДР – длительность работы; ЗВ – значение времени;
ВБ – временная база.
Длительность работы таймера – это период времени, в тече-
ние которого таймер находится в активном состоянии. Значение
времени – целое число, которое показывает сколько временных
баз составляет требуемый отрезок времени. Величина такого
временной базы является величиной шага по времени, которая
используется операционной системой CPU для декрементирова-
ния таймера. Структура параметра «длительность работы» пока-
зана на рис. 4.1.

Рис. 4.1. Структура параметра «длительность работы»


таймера
Также можно непосредственно задавать параметр длитель-
ность работы в машинном слове. Наименьшее возможное зна-
чение для временной базы обеспечивает более точное исчисле-
ние промежутков времени с помощью таймера. Например, если
необходимо задать для таймера отрезок времени, равный 1 с, то
можно при этом использовать одно из трех значений для вре-
99
менной базы и, соответственно, для каждого из этих значений
получится свое значение длительности работы функции тайме-
ра:
1) временная база равна 1 с, значение времени равно 1, сле-
довательно длительность работы равна 2001 в двоично-
десятичном коде;
2) временная база равна 100 мс, значение времени равно 10,
значит длительность работы равна 1010 в двоично-десятичном
коде;
3) временная база равна 10 мс, значение времени равно 100,
поэтому длительность работы равна 0100.
Очевидно, что последний из трех вариантов наиболее пред-
почтителен для данного случая.
При запуске таймера CPU использует заданное значение
времени как период времени, в течение которого таймер нахо-
дится в активном состоянии. Операционная система обновляет
таймеры через заданное временной базой время независимо от
процесса сканирования программы пользователя. При достиже-
нии таймером значения 0 CPU изменяет состояние таймера, при
этом функция таймера перестает быть активной до следующего
запуска таймера.
Если для функции таймера было задано значение времени,
равное нулю, то таймер остается активным, пока при обработке
функции таймера CPU не обнаружит, что время, заданное для
таймера истекло. Таймеры обновляются асинхронно по отноше-
нию к процессу сканирования программы пользователя. Следо-
вательно, возможно, что состояние таймера в начале цикла ска-
нирования отличается от его состояния в конце цикла. В связи с
этим из-за асинхронного обновления таймера могут возникать
ошибки, которые обсуждаются ниже.
Сброс таймера
Инструкция R T n вызывает сброс таймера под номером n.
Таймер сбрасывается, при результате логической операции
RLO, равной «1» и при появлении вышеуказанной инструкции.
100
Пока RLO равен «1», проверки таймера на состояние «1» воз-
вращают «0»; проверки таймера на состояние «0» возвращают
«1».
Сброс таймера устанавливает для значения времени и для
временной базы нулевые значения.
Примечание. Сброс функции таймера не сбрасывает внут-
ренний меркер фронта для запуска. Для повторного запуска CPU
должен обработать инструкцию запуска таймера при RLO, рав-
ном «0», и только после этого, при появлении фронта запускаю-
щего сигнала, функция таймера сможет стартовать.
Разблокировка таймера
Инструкция FR T n позволяет произвести перезапуск тайме-
ра.
Инструкция FR используется для перезапуска таймера,
находящегося в активном состоянии. Таймер перезапускается,
если инструкция FR обрабатывается при положительном фронте
сигнала. При этом внутренний меркер фронта сбрасывается для
обеспечения возможности запуска таймера. Если после этого ре-
зультат логической операции RLO становится равным «1» перед
появлением вышеуказанной инструкции, то таймер запускается,
даже если при этом не определяется фронт сигнала. Разблоки-
ровка таймера вызывает изменение значения времени и времен-
ной базы на нулевые значения.
Примечание. Данная инструкция разблокировки таймера не
требуется для запуска или сброса таймера, т.е. инструкция не
является необходимой для обычных условий работы с таймером.
Опрос таймера
A Tn // проверка сигнала на «1» и вычисление
// функции И с RLO
O Tn // проверка сигнала на «1» и вычисление
// функции ИЛИ с RLO
X Tn // проверка сигнала на «1» и вычисление
// функции Исключающее ИЛИ с RLO
AN T n // проверка сигнала на «0» и вычисление

101
// функции И с RLO
ON T n // проверка сигнала на «0» и вычисление
// функции ИЛИ с RLO
XN T n // проверка сигнала на «0» и вычисление
// функции Исключающее ИЛИ с RLO
Таймер можно опрашивать, как если бы это был вход, и в
дальнейшем использовать результат этой проверки. В зависимо-
сти от типа таймера опрос сигнала на состояние «1» вызывает
разное поведение сигнала таймера во времени.
Как и в случае с опросом входа проверка сигнала на состоя-
ние «0» возвращает результат проверки таймера с точностью до
наоборот по сравнению с опросом на состояние «1» – результат
проверки инвертируется.
Проверка значения таймера
L Tn // загружает двоичное значение времени таймера
LC T n // загружает значение времени таймера в
// двоично-десятичном формате (BCD)
Функции загрузки L T и LC T считывают значение текущего
времени таймера и пересылают его в аккумулятор 1.
Значение времени, определенное с помощью инструкции
таймера, имеет двоичный формат, и может быть переслано в ак-
кумулятор 1 в этом же формате. В этом случае временная база
будет потеряна и на ее месте в аккумуляторе 1 будут записаны
нули. Следовательно, в аккумуляторе будет значение, которое
соответствует положительному целому числу и может быть об-
работано в дальнейшем с помощью, например, функций сравне-
ния.. Это значение таймера не является заданной длительностью
работы.
Пример 3. Чтение значения таймера.
L T 15 // загрузка текущего значения времени таймера
T MW 34 // сохранение текущего значения времени

Загрузка значения таймера в формате BCD

102
Существует также инструкция для т.н. кодированной пере-
сылки в аккумулятор двоичного значения времени таймера. В
этом случае и значение времени и временная база будут иметь
двоично-десятичный формат. При этом так же как и в предыду-
щем случае в содержимом аккумулятора 1 в старшее слово бу-
дут записаны «0».
Пример 4. Чтение таймера в формате BCD.
LC T 16 // загрузка текущего значения времени таймера
// в BCD-формате
T MW 12 // сохранение текущего значения времени
Последовательность инструкций при использовании
функций таймера
Обычно используется таймер с заданной длительностью им-
пульса и двоичный опрос состояния таймера. Чтобы выполнить
функцию таймера в соответствии с описанием в предыдущих
разделах, необходимо соблюдать определенный порядок при
программировании соответствующих операторов. В табл. 4.2
показан оптимальный порядок для всех операторов при про-
граммировании функций таймера.
При использовании операторов необязательно выбирать все.
Если таймер запускается и сбрасывается одновременно, как в
показанной последовательности операторов, то функция таймера
сначала будет запущена на выполнение, а следующее выражение
немедленно сбросит таймер. Следовательно, если после этого
таймер будет опрошен, то запуск таймера останется незамечен-
ным.
Пример 5.
Приведем пример программы, формирующей с помощью
таймера импульс заданной длительности, если на определенном
входе появляется «1» и гасящий этот импульс, если «1» появля-
ется на другом входе.
A I 1.0 // считывание первого входа
L S5T#10S // загрузка длительности импульса в ячейку
// таймера, если RLO=1

103
SP T 3 // запуск таймера с управляемым импуль-
сом
A I 1.1 // считывание второго входа
R T 3 // сброс таймера, если RLO=0
A T 3 // считывание состояния таймера
= Q 4.0 // ввод состояния таймера на индикатор
Таблица 4.2
Последовательность операторов для таймера

Функция таймера Примеры


A I 0.1
Разблокировка таймера
FR T 1
A I 0.2
Запуск таймера LS 5T#2s
SP T 5
A I 0.3
Сброс таймера
R T3
L T2
Опрос численного значения T MW 0
таймера LC T2
T MW 4
A T1
Двоичный опрос таймера
= Q 4.0
4.2. ТАЙМЕР С УПРАВЛЯЕМЫМ ИМПУЛЬСОМ
Ниже представлен пример законченной программы на STL
для запуска таймера в режиме управляемого импульса:
A Enable_input
FR Timer
A Start_input
L Duration
SP Timer
A Reset_input
R Timer
104
L Timer
T Binary_time_value
LC Timer
T BCD_time_value
A Timer
= Timer_status
В программе приняты символьные обозначения:
Enable_input – вход разрешения таймера; Timer – имя таймера;
Start_input – вход запуска; Duration – переменная, хранящая дли-
тельность импульса; Reset_input – вход сброса;
Binary_time_value – переменная для хранения содержимого тай-
мера в двоичном виде; BCD_time_value – переменная для хране-
ния содержимого таймера в двоично-десятичном виде;
Timer_status – переменная для хранения состояния таймера.
На рис. 4.2 показаны динамические характеристики таймера,
запускаемого в режиме управляемого импульса, и его реакция на
сброс. Показанное поведение таймера будет соответствовать
действительности, если придерживаться рекомендованной выше
последовательности операторов для STL (сначала запуск, затем
сброс, затем опрос таймера). Обычно операция разблокирования
(Enabling a timer) не требуется.
На рис. 4.2 можно выделить ряд временных интервалов.
1. Функция таймера запускается, когда сигнал запуска меня-
ется от состояния «0» к «1». Таймер работает, пока состояние
сигнала на входе запуска остается равным «1». Опросы таймера
на состояние «1» возвращают результат проверки «1», пока
функция таймера активна. Убывающее значение времени отсчи-
тывается от заданного начального с заданным шагом, равным
заданной величине временной базы.
2. Функция таймера перестает быть активной, когда состоя-
ние сигнала запуска меняется с «1» на «0», если даже это проис-
ходит до момента истечения заданного времени работы. После
этого опросы таймера на состояние «1» возвращают «0». Значе-
ние времени таймера показывает время, оставшееся до оконча-

105
ния заданного периода работы, обозначая момент времени, в ко-
торый произошло преждевременное прерывание работы тайме-
ра.

Рис. 4.2. Реакция таймера с управляемым импульсом


Операция сброса имеет статический эффект и имеет приори-
тет перед запуском таймера.
3. Состояние сигнала сброса, равное «1», вызывает сброс
таймера, если он был до этого активен. После этого проверки
таймера на состояние «1» возвращают «0». Значение времени и
значение временной базы также сбрасываются в «0». Отрица-
тельный фронт сигнала сброса в то время пока на входе запуска
присутствует состояние «1», никак не сказывается на режиме
таймера.
4. Если функция таймера не активна, то присутствие состоя-
ния «1» на входе сброса также никак не сказывается на режиме
таймера.
5. Если сигнал на входе запуска изменяет свое состояние с
«0» на «1», в то время как на входе сброса присутствует состоя-
ние «1», то таймер запускается, но последующая инструкция
сброса немедленно его сбрасывает (на рис.4.2 это показано жир-

106
ной вертикальной чертой). Если опросы таймера на состояние
«1» следуют по времени после сброса таймера, то работа тайме-
ра после его запуска не скажется на результатах проверки – ре-
зультат проверки будет равен «0».
На рис. 4.3 показана функция разблокировки таймера, запус-
каемого в режиме управляемого импульса. Функция разблоки-
ровки таймера позволяет вновь запускать (в том числе и уже ак-
тивный таймер) посредством приложения ко входу разблокиров-
ки положительного фронта сигнала. Функция разблокировки
таймера доступна для использования только в языке программи-
рования STL.

Рис. 4.3. Разблокировка таймера с управляемым импульсом


1. Если таймер активен и сигнал разблокировки меняется от
«0» к «1», то таймер будет перезапущен, если состояние сигнала
запуска равно «1». Заданное значение длительности работы бу-
дет взято как исходное значение в момент перезапуска таймера.
Последующее изменение сигнала разблокировки от «1» к «0» не
изменяет режима таймера.
2. Если состояние сигнала запуска равно «1», а функция тай-
мера пассивна, то в момент изменения сигнала разблокировки от

107
«0» к «1» таймер будет вновь запущен в режиме управляемого им-
пульса. При этом заданное значение длительности работы будет
взято как исходное значение.
3. Если состояние сигнала запуска равно «0», то изменение
сигнала разблокировки от «0» к «1» не будет иметь никакого
эффекта.
4.3. ТАЙМЕР С РАСШИРЕННЫМ ИМПУЛЬСОМ
Ниже представлен пример законченной программы на STL
для запуска таймера в режиме расширенного импульса:
A Enable_input
FR Timer
A Start_input
L Duration
SE Timer
A Reset_input
R Timer
L Timer
T Binary_time_value
LC Timer
T BCD_time_value
A Timer
= Timer_status
Видим, что программа запуска таймера в режиме расширен-
ного импульса отличается от программы запуска таймера с
управляемым импульсом только в пятой строке.
На рис. 4.4 показаны динамические характеристики таймера,
запускаемого в режиме расширенного импульса, и его реакция
на сигнал сброса. Показанное на рис. 4..4 поведение таймера бу-
дет соответствовать действительности, если придерживаться ре-
комендованной выше последовательности операторов для STL
(сначала запуск, затем сброс, затем опрос таймера).
Обычно операция разблокирования не требуется для работы
таймера в программе STL.

108
Рис. 4.4. Реакция таймера с расширенным импульсом
1 и 2. Функция таймера запускается по положительному
фронту сигнала запуска. Таймер работает до момента истечения
заданного времени работы, даже если до этого момента сигнал
запуска стал нулевым. Опросы таймера на состояние «1» воз-
вращают «1», пока функция таймера активна.
3. Если положительный фронт сигнала запуска появляется в
то время, пока таймер активен, то он будет перезапущен. При
этом заданное значение длительности работы будет вновь взято
как исходное значение в момент перезапуска таймера. Таким об-
разом, таймер может быть перезапущен столько раз, сколько
требуется для нормальной работы программы, невзирая на вре-
мя, оставшееся в предыдущем рабочем периоде таймера.
Операция сброса таймера с режимом расширенного импуль-
са имеет приоритет перед запуском.
4 и 5. Единица на входе сброса вызывает сброс таймера, если
он был до этого активен. После этого опросы таймера на состоя-
ние «1» возвращают «0». Значения времени и временной базы
также обнуляются. Отрицательный фронт сигнала сброса никак
не сказывается на режиме таймера.
6. Если таймер не активен, то присутствие «1» на входе
сброса также никак не сказывается на режиме таймера.
7. Если на входе запуска появляется положительный фронт,
в то время, как на входе сброса присутствует «1», то таймер за-

109
пускается, но последующая инструкция сброса немедленно его
сбрасывает (на рис. 4.4 это показано жирной вертикальной чер-
той). Если опросы таймера на состояние «1» следуют по времени
после сброса таймера, то запуск таймера не будет обнаружен –
результат проверки будет равен «0».
На рис. 4.5 показана функция разблокировки таймера, запус-
каемого в режиме расширенного импульса. Функция разблоки-
ровки таймера позволяет вновь запускать (в том числе и уже ак-
тивный таймер) посредством приложения ко входу разблокиров-
ки положительного фронта сигнала. Функция разблокировки
таймера доступна для использования только в языке программи-
рования STL.

Рис. 4.5. Разблокировка таймера с расширенным импульсом


1. Если таймер активен и на входе разблокировки появляется
положительный фронт, то таймер будет перезапущен, если сиг-
нал запуска равен «1». При этом заданное значение длительно-
сти работы будет вновь взято как исходное значение в момент
перезапуска таймера. Отрицательный фронт на входе разблоки-
ровки не влияет на таймер.
2. Если сигнал на входе запуска равен «1», а таймер пасси-
вен, то положительный фронт сигнала разблокировки запускает

110
таймер в режиме расширенного импульса. При этом заданное
значение длительности работы будет взято как исходное значе-
ние.
3 и 4. Если сигнала запуска равен «0», то изменение сигнала
разблокировки не имеет никакого эффекта.
4.4. ТАЙМЕР С ЗАДЕРЖКОЙ ВКЛЮЧЕНИЯ
Ниже представлен пример законченной программы на STL
для запуска таймера с задержкой включения:
A Enable_input
FR Timer
A Start_input
L Duration
SD Timer
A Reset_input
R Timer
L Timer
T Binary_time_value
LC Timer
T BCD_time_value
A Timer
= Timer_status
На рис. 4.6 показаны динамические характеристики таймера,
запускаемого в режиме с задержкой включения, и его реакция на
сброс. Показанное на рис. 4.6 поведение таймера будет соответ-
ствовать действительности, если придерживаться рекомендован-
ной выше последовательности операторов для STL (сначала за-
пуск, затем сброс, затем опрос таймера). Обычно операция раз-
блокирования не требуется для работы таймера в программе
STL.

111
Рис. 4.6. Работа таймера с задержкой импульса
1. Функция таймера запускается положительным фронтом
сигнала запуска. Таймер отсчитывает заданный интервал време-
ни, на котором результат его опроса равен «0». По истечении
этого времени опрос таймера дает «1» до тех пор, пока сигнал на
входе запуска равен «1» или до тех пор, пока он не будет сбро-
шен.
2. Таймер перестает быть активным по отрицательному
фронту сигнала запуска, если даже это происходит до момента
истечения заданной временной задержки. После этого опрос
таймера возвращает «0». Значение, хранящееся в таймере, пока-
зывает время, оставшееся до окончания заданного периода рабо-
ты таймера.
3 и 4. Состояние сигнала сброса, равное «1», вызывает сброс
таймера, кончился ли отсчет заданного времени таймера или нет.
После этого опрос статуса таймера на состояние «1» возвращает
«0», даже если отсчет заданной задержки времени закончился и
на входе запуска присутствует «1». Значения времени и времен-
ной базы также обнуляются. Отрицательный фронт сигнала
сброса, пока на входе запуска присутствует состояние «1», никак
не сказывается на режиме таймера. Единица на входе сброса
сбрасывает таймер, даже если отсчет заданного времени таймера

112
закончился. После этого проверки опрос состояния таймера на
«1» возвращает «0».
5. Если на входе запуска имеется положительный фронт, в то
время как на входе сброса присутствует «1», то таймер запуска-
ется, но последующая инструкция сброса немедленно его сбра-
сывает, что на рис. 6 показано жирной вертикальной чертой. Ес-
ли опрос таймера на состояние «1» следуют после сброса тайме-
ра, то короткое время работы таймера после его запуска не бедет
обнаружено – результат проверки будет равен «0».
Функция разблокировки таймера как и в предыдущих случа-
ях, позволяет вновь запускать отсчет времени (или перезапус-
кать сначала отсчет времени уже активного таймера) посред-
ством приложения ко входу разблокировки положительного
фронта сигнала. На рис. 4.7 показана функция разблокировки
таймера, запускаемого в режиме с задержкой включения.

Рис. 4.7. Разблокировка таймера с задержкой включения


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

113
если сигнала запуска остается равным «1». При этом заданное
значение длительности работы будет взято как исходное значе-
ние в момент перезапуска таймера. Отрицательный фронт сиг-
нала разблокировки не изменяет режима работы таймера.
2. Если положительный фронт на входе разблокировки появ-
ляется после того как отсчет времени таймера закончился, то он
не влияет на режим работы таймера.
3 и 4. Если сигнал запуска все еще равен «1», а таймер был
деактивирован сигналом на входе сброса, то положительный
фронт сигнала разблокировки вновь запускает таймер. При этом
заданное значение длительности работы берется как исходное
значение. Если сигнал на входе запуска равен «0», то положи-
тельный фронт сигнала разблокировки не будет иметь никакого
эффекта.
4.5. ТАЙМЕР С ЗАДЕРЖКОЙ ВКЛЮЧЕНИЯ С ПАМЯТЬЮ
Программа на STL для запуска таймера с задержкой вклю-
чения с памятью отличается от предыдущих только пятой стро-
кой, которая имеет следующий вид:
SS Timer
На рис. 4.8 показаны динамические характеристики таймера,
запускаемого в режиме с задержкой включения с памятью, и его
реакция на сброс. Показанное на рис. 4.8 поведение таймера со-
ответствует действительности, если придерживаться рекомендо-
ванной выше последовательности операторов для STL (сначала
запуск, затем сброс, затем опрос таймера).
1 и 2. Таймер запускается АО положительному фронту на
входе запуска. Отсчет таймера происходит до истечения задан-
ного времени работы, даже если до этого момента сигнал запус-
ка станет равным нулю. Если отсчет времени завершился без
прерывания, то в дальнейшем опрос состояния таймера на «1»
возвращает «1» вне зависимости от сигнала запуска до момента
сброса таймера входом сброса.

114
Рис. 4.8. Запуск и сброс таймера с задержкой включения с
памятью
3. Если положительный фронт на входе запуска появляется в
то время, пока функция таймера активна, то таймер будет пере-
запущен. При этом заданное значение длительности работы бу-
дет вновь взято как исходное значение в момент перезапуска
таймера. Таким образом, таймер может быть перезапущен
столько раз, сколько требуется, невзирая на время отсчета,
оставшееся в предыдущем рабочем периоде.
Операция сброса таймера с задержкой включения с памятью
имеет статический эффект, а также приоритет по сравнению с
запуском.
4. Единица на входе сброса вызывает сброс таймера, если он
был до этого активен и вне зависимости от состояния сигнала на
входе запуска. После этого опрос таймера на состояние «1» воз-
вращает результат «0». Значение времени и временной базы
также сбрасываются.
5. Если положительный фронт на входе запуска появляется в
то время как на входе сброса присутствует «1», то таймер запус-
кается, но последующая инструкция сброса немедленно его
сбрасывает (на рис. 8 это показано жирной вертикальной чер-
той). Если опрос таймера на состояние «1» следует после сброса
таймера, то короткое время работы таймера после его запуска не
обнаруживается – результат проверки будет равен «0».

115
Функция разблокировки таймера позволяет вновь запускать
отсчет времени или перезапускать сначала отсчет времени уже
активного таймера посредством приложения ко входу разблоки-
ровки положительного фронта сигнала. Функция разблокировки
таймера доступна для использования только в языке программи-
рования STL. На рис. 4.9 показана функция разблокировки тай-
мера, запускаемого в режиме с задержкой включения с памятью.

Рис. 4.9. Разблокировка таймера с задержкой включения с


памятью
1. Если таймер активен и на входе разблокировки появляет-
ся положительный фронт, то таймер перезапускается, если сиг-
нал запуска остается равным «1». При этом заданное значение
длительности работы будет вновь взято как исходное значение в
момент перезапуска таймера. Последующий отрицательный
фронт сигнала разблокировки не изменяет режима таймера.
2. Если положительный фронт сигнала разблокировки появ-
ляется после того как отсчет времени таймера закончился, то
этот положительный фронт не окажет никакого влияния.
3. Если сигнала запуска равен «0», то положительный фронт
на входе разблокировки не будет иметь никакого эффекта.
4 и 5. Если сигнала на входе запуска равен «1», а таймер был
деактивирован сигналом на входе сброса, то по приходу поло-
жительного фронта сигнала разблокировки таймер будет запу-

116
щен вновь. При этом заданное значение длительности работы
будет взято как исходное значение.
4.6. ТАЙМЕР С ЗАДЕРЖКОЙ ВЫКЛЮЧЕНИЯ
Программа запуска таймера с задержкой выключения на STL
отличается от предыдущих только пятой строкой, которая в дан-
ном случае имеет вид
SF Timer
На рис. 4.10 показаны динамические характеристики тайме-
ра, запускаемого в режиме с задержкой выключения, и его реак-
ция на сброс. Показанное на рис. 4.10 поведение таймера будет
соответствовать действительности, если придерживаться реко-
мендованной выше последовательности операторов для STL
(сначала запуск, затем сброс, затем опрос таймера).
1 и 2. Таймер запускается отрицательным фронтом сигнала
запуска и работает до истечения заданного времени работы.
Опрос таймера на состояние «1» возвращает «1», если до момен-
та истечения заданного времени работы таймера на входе сброса
не появлялась «1», вызывающая сброс, и если сигнал запуска
остается равным «1».

Рис. 4.10. Запуск и сброс таймера с задержкой выключения


3. Таймер перестает быть активным, когда на входе запуска
появляется положительный фронт, если это происходит до мо-
мента истечения заданного времени работы. При этом таймер

117
сбрасывается в «0». Таймер не запускается до появления нового
отрицательного фронта на входе запуска.
4. Единица на входе сброса вызывает сброс таймера. После
этого таймер обнуляется. Значения времени и временной базы
также сбрасываются и становятся равными «0».
5 и 6. Если имеется положительный фронт сигнала сброса, в
то время как на входе запуска присутствует «1», то выход тай-
мера сбрасывается. Отрицательный фронт сигнала сброса в то
время пока на входе запуска присутствует «1», возвращает вы-
ход таймера в состояние «1». Если имеется отрицательный
фронт на входе запуска, в то время как на входе сброса присут-
ствует «1», то таймер запускается, но затем немедленно сбрасы-
вается, что показано на рис. 4.10 жирной вертикальной чертой.
Если опрос таймера следует после его сброса, то короткое время
работы таймера не обнаруживается – результат проверки «0».
На рис. 4.11 показана функция разблокировки таймера, за-
пускаемого в режиме с задержкой выключения.

Рис. 4.11. Разблокировка таймера с задержкой выключения


1. Если таймер неактивен (нет отсчета времени таймера),
сигнал запуска равен «1» и имеется положительный фронт на
входе разблокировки, то на работу таймера ни положительный,

118
ни последующий отрицательный фронт сигнала разблокировки
не оказывают влияния.
2. Если на входе разблокировки имеется положительный
фронт в то время, когда таймер активен, отсчет времени таймера
будет перезапущен сначала.
3. Если на входе разблокировки имеется положительный или
отрицательный фронт, когда таймер неактивен и сигнал запуска
равен «0», то фронты не влияют на работу таймера.
4.7. IEC-ФУНКЦИИ ТАЙМЕРОВ
IEC-функции таймеров встроены в операционную систему
CPU как системные функциональные блоки. В соответствующем
образом оснащенных CPU могут быть доступны следующие
функции таймеров:
SFB 3 TP // Генератор импульсов
SFB 4 TON // Генератор импульса с задержкой включения
SFB 5 TOF // Генератор импульса с задержкой выключения
На рис. 4.12 представлены динамические характеристики
этих таймеров. Можно вызывать эти функции с экземплярными
блоками данных или использовать их как локальные экземпляры
в функциональном блоке.

Рис. 4.12. Динамические характеристики IEC-таймеров

119
Рассмотрим IEC-таймер SFB 3 TP. Если RLO на входе запус-
ка IN таймера изменяет свое состояние с «0» на «1», то таймер
активизируется, при этом отчет заданного периода времени не
зависит от изменений состояния RLO на входе запуска. Выход Q
таймера возвращает «1» все время, пока идет отсчет. Выход ET
возвращает длительность времени, в течение которого выход Q
находится в установленном состоянии. Этот интервал времени
начинается в момент T0 и заканчивается в заданное пользовате-
лем время PT. Если время PT истекло, то ET сохраняет это зна-
чение, пока состояние сигнала IN не станет равным «0». Если
состояние сигнала IN станет равным «0» до того, как истекло
заданное значение времени PT, то на выходе ET значение изме-
нится на T0 сразу же после того, как закончится отсчет времени
PT. Если необходимо снова инициализировать таймер, нужно
запустить его с величиной PT = T0. IEC-таймер SFB 3 TP рабо-
тает в рабочих режимах RESTART и RUN. IEC-таймер SFB 3 TP
сбрасывается при «холодном» перезапуске.
В табл. 4.3 находятся параметры IEC-таймеров.
Таблица 4.3
Параметры IEC-таймеров
Название Объявление Тип Описание
IN INPUT BOOL Вход запуска
Длина импульса и интерва-
PT INPUT TIME
ла задержки включения
Q INPUT BOOL Состояние
ET INPUT TIME Истекшее время
IEC-таймер с задержкой включения SFB 4 TON активизиру-
ется, если RLO на входе IN изменяется с «0» на «1». При этом
выход Q возвращает «1» после того как отсчет времени завер-
шился без досрочного прерывания. Если до истечения заданного
интервала времени RLO на входе запуска изменяется с «1» на
«0», то таймер сбрасывается. Отсчет времени запускается снова,

120
если на входе запуска вновь появляется положительный фронт.
Выход ET возвращает длительность времени, в течение которого
функция таймера активна. Этот интервал времени начинается в
момент T0 и заканчивается в заданное пользователем время PT.
Если время PT истекло, то ET сохраняет это значение, пока со-
стояние сигнала IN вновь не станет равным «0». Если сигнал IN
станет равным «0» до того как истекло заданное значение PT, то
на выходе ET значение изменится на T0 немедленно. Если необ-
ходимо снова инициализировать таймер, то нужно запустить его
с заданной величиной PT = T0. IEC-таймер SFB 4 TON работает
в рабочих режимах RESTART и RUN. IEC-таймер SFB 4 TON
сбрасывается (инициализируется) при «холодном» перезапуске.
IEC-таймер с задержкой выключения SFB 5 TOF возвращает
на выходе Q «1», как только RLO на входе IN изменяет состоя-
ние с «0» на «1». После того как RLO на входе запуска изменяет
состояние с «1» на «0», таймер активизируется, т.е. запускается
отсчет времени. При этом выход Q возвращает «1», пока отсчет
времени не завершится без досрочного прерывания. Если до ис-
течения заданного интервала времени RLO на входе запуска
опять изменяется с «0» на «1», то таймер сбрасывается, при этом
выход Q сохраняет «1». Отсчет времени запускается снова, если
на входе запуска вновь появляется отрицательный фронт. Выход
ET возвращает длительность времени, в течение которого тай-
мер активен. Этот период времени начинается в момент T0 и за-
канчивается в заданное пользователем время PT. Если время PT
истекло, то ET сохраняет это значение, пока состояние сигнала
IN не станет равным «1». Если сигнал IN станет равным «1» до
того как истекло заданное значение времени PT, то на выходе ET
значение изменится на T0 немедленно. Если необходимо снова
инициализировать функцию таймера, то нужно запустить ее с
величиной PT = T0. IEC-таймер SFB 5 TOF работает в рабочих
режимах RESTART и RUN. IEC-таймер SFB 5 TOF сбрасывается
(инициализируется) при «холодном» перезапуске.
4.8. ПРИМЕР ПРОГРАММИРОВАНИЯ ТАЙМЕРА

121
Рассмотрим следующую задачу. Пусть необходимо запол-
нять контейнеры по их появлению под бункером, содержащим
некоторое вещество. Бункер имеет заслонку, которая может
иметь два положения: «открыто» и «закрыто». Имеются датчик
наличия контейнера, датчик полной загрузки контейнера и дат-
чик наличия вещества в бункере. По заполнению контейнер пе-
ремещается далее под управлением своей системы управления.
При опустошении бункера подсистема управления автоматиче-
ски заполняет его.
В общем виде управляющее устройство такой системы пока-
зано на рис. 4.13.
Приведем словесный алгоритм работы устройства управле-
ния.
1. Если приходит контейнер, т.е. появляется положительный
фронт на входе «Наличие контейнера», то открывается заслонка
на 10 с – на выходе «Положение заслонки» появляется «1». За-
слонка открывается только при наличии контейнера.

Рис. 4.13. Управляющий блок фасовки


2. Если контейнер полный, то заслонка закрывается в любом
случае. Этот вход имеет приоритет.
3. Если сигнал «Бункер пустой» появляется, когда контейне-
ра нет, то заслонка не открывается.

122
4. Если сигнал «Бункер пустой» появляется, когда имеется
контейнер, то заслонка открывается на 10 с.
Предполагается, что время заполнения контейнера равно
10 с. Приведенный алгоритм работы обеспечивает полное за-
полнение контейнера в любых ситуациях. Действительно, если
бункер станет пустой в то время пока контейнер еще не запол-
нен, то заслонка открывается заново на 10 с. При этом подразу-
мевается, что бункер имеет собственную систему управления,
которая начинает заполнять контейнер при появлении сигнала
«пустой». Переполнение контейнера исключается из-за наивыс-
шего приоритета сигнала «Контейнер полный».
Этот алгоритм работы полностью реализуется таймером с
управляемым импульсом. Программа работы таймера имеет вид
A "Empty_bunker"
FR T 1
A "Buk_on"
L S5T#10S
SP T 1
A "Buk_filled"
R T 1
L T 1
T MW 0
LC T 1
T MW 4
A T 1
= "Zasl_position"
В программе вход «Empty_bunker» (пустой бункер) является
входом разблокировки таймера. Вход «Buk_on» (наличие кон-
тейра) является входом запуска. Вход «Buk_filled» (контейнер
полный) является входом сброса. Выход таймера подается на
выход управления положением заслонки «Zasl_position».
Последовательность операторов полностью совпадает с при-
водившимися выше примерами запуска таймеров. В первой
строке опрашивается вход «Empty_bunker». Если на нем будет

123
обнаружен положительный фронт, то таймер будет перезапу-
щен, но только в том случае, если сигнал запуска «Buk_on»
(наличие контейнера) равен «1». Далее опрашивается сигнал
«Buk_on», если он равен «1», то загружается длительность рабо-
ты и таймер запускается в режиме с управляемым импульсом.
После этого следует опрос сигнала «Buk_filled», который вы-
полняет для таймера роль сигнала сброса. Этот опрос располо-
жен последним, поэтому имеет наивысший приоритет. После-
дующая операция сброса таймера будет произведена, если на
входе сброса появилась «1». Далее следует чтение содержимого
таймера, вначале в двоичном формате, а затем в двоично-
десятичном. Каждое значение пересылается в область меркеров.
Предпоследний оператор осуществляет чтение состояния тайме-
ра. Результат – «1» или «0» пересылаются на выход
«Zasl_position», который управляет положением заслонки.
4.9. РАБОТА В ЛАБОРАТОРИИ
Работа в лаборатории состоит в следующем.
1. Набрать и отладить программу, реализующую заданный
вариант с использованием таймера. Программу оформить в виде
функции в проекте, созданном в предыдущих работах.
2. Проверить работу программы при тестовых изменениях
сигналов на входе управляющего устройства. Изменение сигна-
лов на входах должно моделировать установку в различных ре-
жимах.
3. Результаты выполнения программы продемонстрировать в
PLCSIM, где нужно просмотреть состояние всех используемых
входных, выходных байтов, областей памяти и аккумуляторов.
4.10. ДОМАШНЕЕ ЗАДАНИЕ И ТРЕБОВАНИЯ К ОТЧЕТУ
Допуском к выполнению лабораторной работы является вы-
полненная самостоятельная работа, заключающаяся в следую-
щем:
1. Изучить методическое описание.

124
2. Подготовить алгоритм, реализующий заданный вариант.
Обосновать применение того или иного таймера.
3. Написать программу на STL, реализующую заданный алго-
ритм.
4. Подготовиться к ответам на контрольные вопросы.
Отчет по работе должен содержать:
1. Название и цель работы.
2. Задание в соответствии со своим вариантом.
3. Словесный алгоритм работы управляющего устройства и
обоснование выбора таймера.
4. Функцию на языке STL, результаты выполнения про-
грамм.
4.11. ЗАДАНИЯ ДЛЯ ЛАБОРАТОРНОЙ РАБОТЫ
Данное задание выполняется на основе лабораторная работы
«Программирование логических схем на базе промышленных
контроллеров SIEMENS». Написанную ранее программу необ-
ходимо изменить таким образом, чтобы изменения соответство-
вали варианту, приведенному выше. Изменения программы про-
изводить в новой функции. Номер варианта совпадает с вариан-
том указанной выше лабораторной работы. Для удобства вари-
анты приведены полностью, но отличия выделены полужирным
курсивом.
Вариант 0
Управление режимами работы дизель-генераторов гребной
электрической установки корабля.
Управляющий блок имеет 5 входов: «Режим 1», «Режим
2», «Режим 3», «Ток цепи» и «Включен». Кроме того, имеется 10
выходов: «Носовой винт 1», «Отключено 1», «Кормовой винт 1»,
«Носовой винт 2», «Отключено 2», «Кормовой винт 2», «Генера-
тор включен», «Генератор выключен», «Индикатор включения»
и «Ошибка». Гребная электрическая установка имеет три ди-
зель-генератора, которые могут работать в трех режимах. Выхо-
ды «Носовой винт 1», «Отключено 1», «Кормовой винт 1», «Но-

125
совой винт 2», «Отключено 2», «Кормовой винт 2» управляют
включением первого и второго генераторов, а выходы «Генера-
тор включен», «Генератор выключен» – третьим.
Любые переключения выходов возможны, только если
цепь обесточена, т.е. сигнал «Ток цепи» равен «0». Для устра-
нения импульсных помех «1» на входе «Ток цепи» длительно-
стью менее 1 с игнорируется. Для удобства моделирования в
PLSSIM можно увеличить этот интервал времени.
В режиме 1 выходы «Кормовой винт 1» и «Кормовой винт
2» должны быть включены, а «Носовой винт 1», «Отключено 1»
а «Носовой винт 2», «Отключено 2» – отключены. Третий гене-
ратор работает в режиме «Генератор включен».
В режиме 2 первый генератор работает в режиме «Носовой
винт 1», а второй в режиме «Кормовой винт 2». Третий генера-
тор работает в режиме «Генератор включен».
В режиме 3 первый генератор работает в режиме «Кормо-
вой винт 1», второй – «Носовой винт 2», а третий отключен –
режим «Генератор выключен».
Ошибка должна выдаваться в тех случаях, когда на двух из
трех входах «Режим 1», «Режим 2», «Режим 3», одновременно
присутствуют «1» или если сигналы на этих входах изменяются
при наличии «1» на входе «Ток цепи».
Вариант 1
Управление фасовочной установкой.
Блок управления содержит 5 входов: «Резервуар пол-
ный/пустой», «Заслонка открыта/закрыта», «Датчик наличия
контейнера», «Датчик массы контейнера» и «Включено». Также
имеется шесть выходов: «Двигатель вперед», «Двигатель стоп»,
«Заслонку открыть», «Заслонку закрыть», «Индикатор пустого
резервуара», «Ошибка».
Установка начинает работу при высоком напряжении на
входе «Включено». Если контейнер отсутствует, заслонка за-
крыта, датчик массы показывает ноль и резервуар не пустой, то
необходимо запустить двигатель вперед. При появлении сигнала

126
наличия контейнера, если датчик массы показывает ноль, то
двигатель нужно остановить через 3 с. Данную задержку
учесть в работе остальных элементов. Далее если резервуар
не пустой то нужно открыть заслонку и держать ее открытой до
тех пор, пока не появится сигнал от датчика массы о том, что
контейнер заполнен. При появлении последнего сигнала необхо-
димо закрыть заслонку и включить двигатель вперед.
Сигнал пустого резервуара говорит о том, что необходимо
остановить двигатель, закрыть заслонку и выдать сигнал «Инди-
катор пустого резервуара».
Сигнал ошибки появляется в том случае, если контейнер
отсутствует и заслонка открыта или если контейнер отсутствует,
а датчик массы выдает «1».
Вариант 2
Управление возбуждением генератора.
Схема имеет 7 входов: «Включено», «Основной/ре-
зервный», «Левый/правый генератор», «Ручное включение»,
«Частота дизель-генератора», «Ток больше», «Ток меньше».
Также имеются 5 выходов: «Возбуждение левого генератора»,
«Возбуждение правого генератора», «Увеличить нагрузку»,
«Уменьшить нагрузку».
Установка начинает работу по сигналу «Включено». Вход
«Основной/резервный» задает режим работы генератора. В ре-
жиме основного генератора, когда вход «Основной/резервный»
равен «0», схема возбуждения работает только с левым генера-
тором и вход «Левый/правый генератор» игнорируется. В про-
тивном случае необходимо просматривать состояние входа «Ле-
вый/правый генератор»: при наличии на нем «0» используется
выход Возбуждение левого генератора», а при «1» – «Возбужде-
ние правого генератора». Сигналы возбуждения «Возбуждение
левого генератора», «Возбуждение правого генератора» могут
подаваться либо при наличии «1» на входе «Ручное включение»,
либо на входе «Частота дизель-генератора», либо при единицах
на обоих входах. При наличии сигнала «Ток больше» нужно вы-

127
дать высокий потенциал на выход «Увеличить нагрузку», а при
наличии сигнала «Ток меньше» – на выход «Уменьшить нагруз-
ку». Между сигналами «Увеличить нагрузку» и «Уменьшить
нагрузку» должна обеспечиваться пауза не менее 5 с. Т.е. если
по сигналу «Ток больше» включили сигнал «Увеличить
нагрузку» и прошло менее 5 с, а в это время появился сигнал
«Ток меньше», то нужно выключить сигнал «Увеличить
нагрузку» и выждать 5 с до включения сигнала «Уменьшить
нагрузку».
Ошибка появляется в том случае, если сигналы «Ток
больше» и «Ток меньше» оба равны «1».
Вариант 3
Управление асинхронным ветрогенератором.
Управляющий блок имеет 5 входов: «Скорость ветра»,
«Скорость вала», «Нагрузка», «Заряд аккумулятора», «Включе-
но». Также имеются 6 выходов: «Индикатор», «Включить гене-
ратор», «Добавить емкость», «Отключить емкость», «Подклю-
чить нагрузку», «Подключить сеть».
Генератор включается при появлении сигналов на входах
«Включено» и «Скорость вала». При появлении сигнала «Ско-
рость вала» выдается сигнал «Включить генератор». При этом
пропадание сигнала «Скорость вала» на время менее 3 с не
влияет на работу установки. Сигнал «Нагрузка» позволяет
задать работу либо прямо на локального потребителя (выход
«Подключить нагрузку»), либо при появлении высокого напря-
жения – на энергосеть (выход «Подключить сеть»). Если акку-
мулятор полностью заряжен (появился сигнал «Заряд аккумуля-
тора»), то автоматически генератор переходит на работу с сетью.
При работе с нагрузкой дополнительная емкость отключается, а
при работе с сетью – добавляется. Появление сигнала на входе
«Скорость ветра» говорит о том, что скорость ветра достигла
критической отметки и необходимо выключить генератор и вы-
дать сигнал на выход «Индикатор».

128
Вариант 4
Схема защиты электропривода.
Схема защиты электропривода имеет 5 входов: «Короткое
замыкание», «Перегрузка», «Перенапряжение», «Превышение
частоты вращения», «Разблокировка защиты». Кроме того, име-
ются выходы: «Разомкнуть контактор защиты», «Снять напря-
жение с генератора», «Индикатор короткого замыкания», «Ин-
дикатор перегрузки», «Индикатор превышения частоты», «Раз-
блокировка».
При появлении сигнала «Короткое замыкание» осуществ-
ляется выдача сигналов «Разомкнуть контактор защиты» и
включение «Индикатор короткого замыкания». При появлении
сигнала «Перегрузка» включается «Индикатор перегрузки». Ес-
ли появляется сигнал «Перегрузка», а затем «Короткое замыка-
ние», то отрабатываются оба сигнала. При появлении в обратном
порядке сигнал «Перегрузка» игнорируется. При появлении сиг-
нала «Перенапряжение», если он длится более 5 с, осуществля-
ется выдача сигнала «Разомкнуть контактор защиты». При полу-
чении сигнала «Превышение частоты вращения» необходимо
выдать выходы «Индикатор превышения частоты» и «Разо-
мкнуть контактор защиты». Вход «Разблокировка защиты» от-
рабатывается только если все остальные входы равны нулю. При
этом на выход «Разблокировка» выдается сигнал высокого уров-
ня.
Вариант 5
Панель управления автомобиля.
Блок управления имеет следующие входы: «Датчик откры-
той двери», «Зажигание», «Свет», «Открыть левое окно», «От-
крыть правое окно», «Закрыть левое окно», «Закрыть правое ок-
но». Кроме того имеются выходы: «Блокировка зажигания»,
«Включить/выключить свет», «Поднять левое окно», «Поднять
правое окно», «Опустить левое окно», «Опустить правое окно»,
«Ошибка».

129
При поступлении «1» на вход «Открыть левое окно» или
«Открыть правое окно» необходимо выдать «1» на выход «Опу-
стить левое окно» или «Опустить правое окно». Аналогично при
появлении «1» на входах «Закрыть левое окно» или «Закрыть
правое окно» «1» появляется на выходах «Поднять левое окно»
или «Поднять правое окно». Если одновременно появляется ко-
манда открыть и закрыть одно и то же окно, то необходимо вы-
дать ошибку.
Появление сигнала на входе «Датчик открытой двери» при
включенном зажигании в течении более 10 с приводит к выдаче
«1» на выход «Блокировка зажигания» и выдаче сигнала «Ошиб-
ка». Если в течение этих 10 с зажигание выключено, то по-
является сигнал «Ошибка отсутствует». Если зажигание вы-
ключено, то сигнал от входа «Датчик открытой двери» игнори-
руется. Сигнал на входе «Свет» приводит к появлению «1» на
выходе «Включить/выключить свет». Кроме того, на этом выхо-
де появляется «1» при наличии «1» на входе «Датчик открытой
двери».
Вариант 6
Система теплоснабжения.
Блок имеет 6 входов: «Температура на выходе котла»,
«Температура на выходе дома», «Давление на выходе котла»,
«Давление на выходе дома», «Расход на выходе котла», «Расход
на выходе дома». Кроме того имеется 6 входов: «Увеличить по-
дачу топлива», «Уменьшить подачу топлива», «Увеличить пода-
чу воды», «Уменьшить подачу воды», «Утечка воды», «Утечка
тепла».
При появлении «1» на входах: «Температура на выходе
котла» или «Температура на выходе дома» необходимо выдать
сигнал «Уменьшить подачу топлива». В противном случае выда-
ется сигнал на выход «Увеличить подачу топлива». Если на вхо-
де «Температура на выходе котла» появляется «1», а на входе
«Температура на выходе дома» – «0», и эта ситуация длится
более 10 с, то выдается сигнал «Утечка тепла».

130
Если появляется «1» на входах «Давление на выходе кот-
ла» или «Давление на выходе дома», то необходимо уменьшить
подачу воды. Если сигналы на входах «Давление на выходе кот-
ла» и «Давление на выходе дома» равны «0», то выдается сигнал
«Увеличить подачу воды». Если «Давление на выходе котла»
«1», а «Давление на выходе дома» – «0», то выдается сигнал
«Утечка воды».
Если сигналы на входах «Расход на выходе котла» и «Рас-
ход на выходе дома» разные, то выдается сигнал «Утечка воды».
В противном случае, если входы «Расход на выходе котла» и
«Расход на выходе дома» одинаковые, то они игнорируются.
Вариант 7
Система резки трубы.
Управляющий блок имеет 5 входов: «Скорость меньше»,
«Скорость больше», «Наличие трубы», «Резак готов», «Труба
отрезана». Также имеется 5 выходов: «Увеличить скорость тру-
бы», «Уменьшить скорость трубы», «Опустить резак», «Поднять
резак», «Стоп-труба».
При появлении сигнала на входе «Скорость больше», если
сигнал «Наличие трубы» равен «0», нужно выдать сигнал
«Уменьшить скорость трубы». При появлении сигнала на входе
«Скорость меньше», если сигнал «Наличие трубы» равен «0», то
нужно выдать сигнал «Увеличить скорость трубы». Если на вхо-
де «Резак готов» появляется «0», то необходимо выдать сигнал
«Стоп-труба». Если при этом на входе «Труба отрезана» присут-
ствует «1», то необходимо подать команду «Поднять резак». Ес-
ли на входе «Резак готов» появляется «1», «Наличие трубы» –
«1» и Труба отрезана» – «0», то необходимо дать команду «Опу-
стить резак». После команд «Поднять резак» и «Опустить ре-
зак» необходимо сделать паузу 2 с. При наличии сигнала
«Наличие трубы», а Труба отрезана» «0», должен появляться
сигнал «Стоп-труба», а входы «Скорость меньше», «Скорость
больше» игнорируются.
Вариант 8

131
Система управления движением.
Управляющий блок содержит 6 входов: «Полный/малый
ход», «Скорость мала», «Скорость велика», «Поворот направо»,
«Поворот налево», «Стоп». Также имеются 6 выходов: «Стоп-
двигатель 1», «Стоп-двигатель 2», «Увеличить скорость двигате-
ля 1», «Увеличить скорость двигателя 2», «Уменьшить скорость
двигателя 1», «Уменьшить скорость двигателя 2».
Если появляется сигнал «Стоп», то все остальные сигналы
игнорируются и включаются выходы «Стоп-двигатель 1»,
«Стоп-двигатель 2». Если сигнал на входе «Полный/малый ход»
равен «0», то желаемая скорость маленькая, поэтому если вход
«Скорость мала» равен «1», то все выходы равны нулю. Если же
сигнал «Полный/малый ход» равен «1», то желаемая скорость
большая, поэтому если вход «Скорость мала» равен «1», то нуж-
но увеличить скорость обоих двигателей. Аналогично, если сиг-
нал на входе «Полный/малый ход» равен «0», а сигнал «Ско-
рость велика» равен «1», то нужно уменьшить скорости обоих
двигателей. Эти действия выполняются, если сигналы на входах
«Поворот направо», «Поворот налево» равны нулю.
При появлении сигнала «Поворот направо» или «Поворот
налево» увеличивается или уменьшается скорость первого или
второго двигателя в течение 3 с. Такие импульсы выдаются
при появлении положительных фронтов сигналов «Поворот
направо» или «Поворот налево». При этом при большой фак-
тической скорости (вход «Скорость велика» равен «1») и малой
желаемой скорости (вход «Полный/малый ход» равен «0») при
повороте нужно уменьшать скорость одного из двигателей. Если
же желаемая скорость большая, а реальная маленькая, то для то-
го же самого поворота нужно увеличить скорость другого двига-
теля. При совпадении реальной и желаемой скоростей поворот
осуществляется уменьшением скорости одного из двигателей.
Ситуации, когда сигналы «Скорость мала» и «Скорость велика»
одновременно равны «1», или «Поворот направо» и «Поворот
налево» равны «1», игнорируются.

132
Вариант 9
Система регулирования котлом.
Управляющий блок имеет 7 входов: «Режим до себя / после
себя», «Мощность мала», «Мощность велика», «Скорость мала»,
«Скорость велика», «Предельная скорость», «Предельная мощ-
ность». Также имеются 4 выхода: «Поднять заслонку», «Опу-
стить заслонку», «Увеличить подачу топлива», «Уменьшить по-
дачу топлива».
Если вход «Режим до себя / после себя» равен «0», то регу-
лировка происходит за счет выходов «Поднять заслонку», «Опу-
стить заслонку». Если мощность мала, а скорость велика то за-
слонка поднимается. Если мощность велика, а скорость мала, то
заслонка опускается. Если мощность и скорость велика, то за-
слонка опускается. Если мощность и скорость малы, то заслонка
поднимается.
Если вход «Режим до себя / после себя» равен «1», то регу-
лировка происходит за счет выходов «Увеличить подачу топли-
ва», «Уменьшить подачу топлива». Если мощность мала, а ско-
рость велика то подача топлива увеличивается. Если мощность
велика, а скорость мала, то подача топлива уменьшается. Если
мощность и скорость велика, то подача топлива уменьшается.
Если мощность и скорость малы, то подача топлива увеличива-
ется.
Сигналы «Предельная скорость» и «Предельная мощность»
проверяются только если имеются соответствующие сигналы
«Мощность мала», «Мощность велика» или «Скорость мала»,
«Скорость велика». При этом при появлении сигналов на входе
«Предельная скорость» и/или «Предельная мощность» дли-
тельностью более 5 с вход «Режим до себя / после себя» игно-
рируется и регулирование происходит за счет всех каналов
«Поднять заслонку», «Опустить заслонку», «Увеличить подачу
топлива», «Уменьшить подачу топлива». Если мощность мала, а
скорость велика то подача топлива увеличивается и заслонка от-

133
крывается. Если мощность велика, а скорость мала, то подача
топлива уменьшается и заслонка закрывается. Если мощность и
скорость велики, то подача топлива уменьшается и заслонка за-
крывается. Если мощность и скорость малы, то подача топлива
увеличивается и заслонка открывается.
КОНТРОЛЬНЫЕ ВОПРОСЫ
1. В каких режимах могут запускаться таймеры?
2. Приведите команду загрузки длительности работы тайме-
ра в аккумулятор. Какие интервалы времени можно загружать в
таймер?
3. Какой вид имеет время таймера в формате BCD?
4. Поясните понятия «временная база», «значение времени»,
«состояние таймера».
5. Приведите последовательность операторов при работе с
таймерами.
6. Опишите работу таймера с управляемым импульсом.
7. Опишите работу таймера с расширенным импульсом.
8. Опишите работу таймера с задержкой включения.
9. Опишите работу таймера с задержкой включения с памя-
тью.
10. Опишите работу таймера с задержкой выключения.
11. Для чего применяется операция разблокировки? Является
ли она обязательной?
12. Какие IEC-функции таймеров вы знаете?

134
5. ПРИМЕНЕНИЕ СЧЕТЧИКОВ ПРИ
АВТОМАТИЗАЦИИ ПРОЦЕССОВ ПОСРЕДСТВОМ
ЛОГИЧЕСКИХ КОНТРОЛЛЕРОВ SIEMENS
Функции счетчиков позволяют решать задачи счета непо-
средственно в CPU. Счетчики позволяют выполнять прямой и
обратный счет и используют при этом трехдекадный формат
значения счетчика и диапазон значений от 000 до 999. При необ-
ходимости можно использовать семиразрядный формат счета.
Это производится либо последовательным включением счетчи-
ков, либо применением 32-разрядной арифметики.
В данной работе рассматриваются выражения, содержащие
функции счетчиков для использования в языке программирова-
ния STL, в том числе установка и сброс, инициализация, счет.
Скорость счета счетчиков зависит от времени сканирования
программы. Чем больше операторов в программе, тем медленнее
в реальном времени считает счетчик. Для обеспечения процесса
счета CPU должен обнаруживать на входе счетчика импульс,
длительностью не менее одного цикла сканирования программы.
Чем продолжительнее цикл сканирования программы, тем мед-
леннее скорость счета.
В S7-300 CPU со встроенными функциями имеются функ-
ции, которые обеспечивают счет с использованием специального
входа счетчика с частотой следования импульсов до 10 кГц. Это
позволяет привязать счетчик к реальному времени.
Значения счетчиков, описанных в данном разделе, сохраня-
ются в системной памяти CPU. Для счетчика можно задавать
начальное значение, сбрасывать его, включать режим прямого
или обратного счета. Существует возможность определения со-
стояния счетчика – содержит ли счетчик нулевое или ненулевое
значение. С помощью функции загрузки L можно пересылать
текущие значения счетчика в двоичном или BCD-коде в аккуму-
лятор 1. Далее с помощью функции выгрузки содержимое счет-
чика может быть передано в ячейку памяти.

135
5.1. УСТАНОВКА И СБРОС СЧЕТЧИКОВ
Для установки счетчика применяется следующая команда:
S C n,
где S – команда установки; n – номер счетчика; C – идентифика-
тор, указывающий, что устанавливается счетчик.
Счетчик устанавливается по положительному фронту RLO
перед операцией установки S. Установить счетчик – это значит
загрузить в счетчик начальное значение, которое должно нахо-
диться в аккумуляторе 1. Начальное значение должно быть в
диапазоне от 0 до 999. Формат значения счетчика показан на
рис. 5.1.

Рис. 5.1. Содержимое счетчика в формате BCD


Функция установки счетчика использует значение в аккуму-
ляторе 1 как начальное значение счетчика. Как и когда это зна-
чение появляется в аккумуляторе 1, не имеет значения. Для
обеспечения лучшей читаемости программы лучше всего загру-
жать этот параметр непосредственно перед запуском функции
счетчика в виде константы или в виде переменной. Аккумулятор
1 должен содержать корректное значение, даже если счетчик не
установлен во время выполнения инструкции. Значение счетчи-
ка загружается в аккумулятор с помощью операции загрузки:
L C#100; // Значение счетчика 100
L W#16#0100 // Значение счетчика 100
Приведенные выше примеры демонстрируют различные
способы загрузки счетчика. Рекомендуется использовать специ-
альный формат, который обозначается идентификатором C#. В

136
этом случае пользователь не должен преобразовывать число в
двоично-десятичную форму.
Значение счетчика может быть только в формате BCD. При
этом счетчики не могут работать с отрицательными числами.
Для задания константы можете использовать формат C# или
W#16#, но только с десятичными числами.
Кроме непосредственной загрузки можно использовать за-
дание начального значения счетчика путем загрузки в аккумуля-
тор переменной:
L MW 56 // Загрузить значение счетчика из переменной
// MW 56
При этом переменная должна быть в двоично-десятичном
формате.
Для выполнения операции установки S предполагается
наличие значения счетчика в аккумуляторе 1, состоящего из
трех декад и расположенного в нем с выравниванием вправо.
Старшая декада равна нулю.
Для сброса счетчика применяется инструкция
RCn
Счетчик сбрасывается, если RLO равен «1» перед тем, как в
программе встретится операция сброса R. Пока RLO равен «1»,
двоичный опрос счетчика на состояние «1» возвращает «0».
Сброс устанавливает значение счетчика в ноль.
Сброс функции счетчика не сбрасывает внутренний меркер
фронта для установки счетчика, для включения режима прямого
счета и для включения режима обратного счета. Для повторного
запуска CPU должен обработать инструкцию установки счетчи-
ка или повторного запуска на счет при RLO, равном «0», и толь-
ко после этого при появлении фронта сигнала в соответствую-
щем меркере фронта счетчик может быть установлен или запу-
щен. Также для повторной активации функций счетчика можно
использовать операцию разблокировки.

5.2. СЧЕТ

137
Инструкция
CU C n
вызывает процесс прямого счета.
Счетчик выполняет прямой счет, если инструкция CU обра-
батывается при положительном фронте RLO. Каждый положи-
тельный фронт сигнала, предшествующий операции прямого
счета CU, увеличивает значение счетчика на единицу, пока не
будет достигнут верхний предел, равный 999. После этого поло-
жительный фронт сигнала RLO перед командой CU никак не бу-
дет влиять на состояние счетчика.
Инструкция
CD C n
вызывает процесс обратного счета.
Счетчик выполняет обратный счет, если инструкция обрат-
ного счета CD обрабатывается при положительном фронте RLO.
Каждый положительный фронт сигнала, предшествующий опе-
рации CD, уменьшает значение счетчика на единицу, пока не
будет достигнут нижний предел, равный 0. После этого положи-
тельный фронт сигнала RLO перед командой CD никак не будет
влиять на состояние счетчика.
Значения счетчика отрицательными быть не могут.
5.3. ОПРОС СЧЕТЧИКА
Двоичный опрос состояния счетчика может производиться
одним из следующих операторов:
A Сn // Проверка сигнала на состояние «1» и
// вычисление функции И с RLO
O Сn // Проверка сигнала на состояние «1» и
// вычисление функции ИЛИ с RLO
X Сn // Проверка сигнала на состояние «1» и
// вычисление
// функции ИСКЛЮЧАЮЩЕЕ ИЛИ с RLO
AN С n // Проверка сигнала на состояние «0» и
// вычисление функции И с RLO

138
ON С n // Проверка сигнала на состояние «0» и
// вычисление функции ИЛИ с RLO
XN С n // Проверка сигнала на состояние «0» и
// вычисление
// функции ИСКЛЮЧАЮЩЕЕ ИЛИ с RLO
Счетчик можно опрашивать таким же образом, что и обыч-
ный вход, и в дальнейшем использовать результат этой провер-
ки. Опрос счетчика на состояние «1» вызывает результат «1»,
если значение счетчика больше «0», и результат, равный «0»,
если значение счетчика равно «0». Опрос счетчика на состояние
«0» вызывает результат «0», если значение счетчика больше «0»,
и результат, равный «1», если значение счетчика равно «0».
Чтобы считать значение счетчика, можно использовать опе-
рацию загрузки счетчика. Например:
L Cn
непосредственно загружает двоичное значение счетчика. Ука-
занная функция загрузки пересылает значение счетчика, опреде-
ленного в инструкции, в аккумулятор 1 в форме двоичного чис-
ла. Значение счетчика, пересылаемое в аккумулятор 1, представ-
ляет собой текущее значение, соответствующее моменту време-
ни, когда производится опрос. Это соответствует положитель-
ному числу целого типа (INT) и может использоваться для даль-
нейшей обработки, например, с помощью арифметических
функций. Например:
L C 99 // Загрузка текущего значения счетчика 99
T MW 76 // Сохранение считанного значения по
// адресу MW 76
Инструкция
LС C n
загружает двоично-десятичное значение счетчика.
Значение счетчика, пересылаемое в аккумулятор 1, пред-
ставляет собой текущее значение, соответствующее моменту
времени, когда производится опрос. Содержимое аккумулятора
1 доступно для дальнейшего использования в виде числа в фор-

139
мате BCD-числа, выровненного вправо. Оно имеет такую же
структуру, как и заданное значение счетчика. Например:
LС С 99 //Загрузка текущего значения счетчика в
// BCD-формате
T MW 50 // Сохранение текущего значения по
// адресу MW 50
5.4. РАЗБЛОКИРОВКА СЧЕТЧИКА
Инструкция
FR C n
позволяет выполнить переустановку (перезапуск) счетчика. Эта
операция называется разблокировкой.
При использовании инструкции FR можно установить счет-
чик или запустить его на счет. Выполнение этих операций со
счетчиком будет возможно только пока RLO имеет значение
«1». Функция разблокировки активна, если перед тем, как она
встретится, RLO переходит от состояния «0» к состоянию «1».
Положительный фронт сигнала RLO – это всегда необходимое
условие для выполнения разблокировки счетчика. Данная ин-
струкция разблокировки функции счетчика не является необхо-
димой для установки, запуска на счет или сброса счетчика. В
обычных ситуациях функция разблокировки не используется.
Инструкция разблокировки функций счетчика воздействует
на функции установки, запуска на счет и сброса счетчика одно-
временно. Положительный фронт RLO перед выполнением раз-
блокировки счетчика вызывает все последующие инструкции (S,
CU и CD), которые имеют сигнал запуска «1».
Ниже представлен пример, показывающий принципы работы
инструкции разблокировки, а соответствующая диаграмма пока-
зана на рис. 5.2.
A "Enable" // Опрос входа разблокировки
FR "Counter" // Разблокировка, если RLO равен «1»
A "Count up" // Опрос входа инкремента
CU "Counter" // Увеличение значения счетчика

140
A "Count down" // Опрос входа декремента
CD "Counter" // Уменьшение значения счетчика
A "Set" // Опрос входа установки
L C#020 // Загрузка числа 20 в аккумулятор
S "Counter" // Загрузить счетчик из аккумулятора
A "Reset" // Опрос входа сброса
R "Counter" // Сброс счетчика
A "Counter" // Двоичный опрос счетчика
= "Counter status" // Запись результата в переменную

Рис. 5.2. Диаграмма работы счетчика


Рассмотрим фазы диаграммы, показанной на рис. 5.2:
1. Положительный фронт сигнала на входе установки счет-
чика устанавливает счетчик на начальное значение 20. При этом
сигнал «Состояние счетчика» равен «1».
2. Положительный фронт сигнала на входе прямого счета
инкрементирует счетчик, его значение увеличивается на «1».

141
3. Так как сигнал на входе установки имеет значение «1»,
инструкция разблокирования счетчика инкрементирует счетчик
– его значение увеличивается на 1.
4. Положительный фронт сигнала на входе сброса декремен-
тирует счетчик, его значение уменьшается на 1.
5. Инструкция разблокирования счетчика создает условия
для выполнения прямого и обратного счета: сигнал «1» присут-
ствует на обоих входах.
6. Положительный фронт сигнала на входе установки уста-
навливает счетчик на начальное значение 20.
7. Сигнал на входе сброса, имеющий значение «1», сбрасы-
вает счетчик. Проверка его на состояние «1» возвращает «0».
8. Так как состояние сигнала на входе установки все еще
равно «1», инструкция разблокирования устанавливает счетчик с
начальным значением 20. Проверка счетчика на состояние «1»
возвращает «1».
5.5. ПОСЛЕДОВАТЕЛЬНОСТЬ ИНСТРУКЦИЙ ПРИ
ИСПОЛЬЗОВАНИИ ФУНКЦИИ СЧЕТЧИКА
При программировании счетчика нет необходимости ис-
пользовать все приведенные выше выражения для активации
функций счетчиков. Например, для выполнения функции обрат-
ного счета обычно используются операция установки для счет-
чика заданного значения, операция обратного счета и двоичный
опрос счетчика на состояние «0». Чтобы выполнить функцию
счетчика в соответствии с описанием в предыдущих разделах,
необходимо соблюдать определенный порядок при программи-
ровании соответствующих операторов.
В табл. 5.1 показан оптимальный порядок для всех операто-
ров при программировании функций счетчика. Если какой-либо
оператор не нужен, то его можно просто пропустить.
Если функция сброса счетчика должна иметь статическое
влияние на операции CU, CD и S и не должна зависеть от ре-
зультата логической операции, то нужно записать выражение с

142
операцией сброса (R) после выражений с вышеуказанными опе-
рациями, но перед операцией проверки счетчика. Если при этом
счетчик устанавливается и сбрасывается одновременно (в одном
цикле), то счетчик сначала получит заданное значение, а затем
немедленно будет сброшен. Таким образом, последующая про-
верка счетчика не позволит установить тот факт, что счетчик
кратковременно находился в установленном состоянии.
Таблица 5.1
Последовательность операторов для счетчика
Функция счетчика Примеры
AI 22.0
Разблокировка
FRC 17
AI 22.1
Прямой счет
CU C 17
AI 22.2
Обратный счет
CD C 17
AI 22.3
Установка счетчика L C#500
S C 17
AI 22.4
Сброс счетчика
R C 17
LC 17
T MW 30
Опрос численного значения
LC C 17
TMW 32
A C 17
Двоичный опрос
= Q 13.0
Если функция установки счетчика Set должна иметь стати-
ческое влияние на операции счета и не должна зависеть от ре-
зультата логической операции, то нужно записать выражение с
операцией установки (S) после выражений с операциями счета.
Если при этом счетчик устанавливается и сбрасывается одно-

143
временно, то операции счета вначале будут изменять состояние
счетчика, а затем счетчик немедленно будет установлен опера-
цией S и получит заданное значение, которое и сохранится в нем
до окончания сканирования программы. Таким образом, после-
довательность выражений с операциями прямого и обратного
счета не будет иметь влияние на счетчик.
5.6. IEC-ФУНКЦИИ СЧЕТЧИКОВ
IEC-функции счетчиков встроены в операционную систему CPU
как системные функциональные блоки SFB. В соответствующим
образом оснащенных CPU могут быть доступны следующие
функции:
SFB 0 CTU // Функция прямого счета
SFB 1 CTD // Функция обратного счета
SFB 2 CTUD // Функция прямого и обратного счета
Можно вызывать эти SFB с экземплярными блоками данных
или использовать эти SFB как локальные экземпляры в функци-
ональном блоке. Параметры вышеуказанных IEC-функций счет-
чиков рассмотрены в табл. 5.2.
Рассмотрим функцию прямого счета SFB 0 CTU. Если на
входе прямого счета CU имеется положительный фронт, тогда
текущее значение счетчика инкрементируется и отображается на
выходе CV. При первом вызове (при «0» на входе сброса R) зна-
чение счетчика соответствует заранее заданному значению на
входе PV. Если текущее значение достигает верхнего предела,
равного 32 767, значение счетчика больше не увеличивается.
При этом сигнал на входе CU игнорируется. Если сигнал на вхо-
де сброса R принимает значение «1», то счетчик сбрасывается в
0. При этом положительный фронт на входе счетчика CU игно-
рируется, пока состояние сигнала на входе сброса R равно «1».
На выход Q счетчика будет выводиться значение «1», если зна-
чение на выходе CV будет больше или равно заранее заданного
значения счетчика на входе PV.

144
Таблица 5.2
Параметры IEC – счетчиков
Назва- Представле- Объявле-
Тип Описание
ние ние в SFB ние
Вход
CU 0 - 2 INPUT BOOL
прямого счета
Вход обратного
CD - 1 2 INPUT BOOL
счета
Вход
R 0 - 2 INPUT BOOL
cброса
Вход
LOAD - 1 2 INPUT BOOL
загрузки
Заданное значе-
PV 0 1 2 INPUT INT
ние
Состояние
Q 0 1 - OUTPUT BOOL
счетчика
Состояние в ре-
QU - - 2 OUTPUT BOOL жиме прямого
счета
Состояние в ре-
QD - - 2 OUTPUT BOOL жиме обратного
счета
Текущее значе-
CV 0 - 2 OUTPUT BOOL
ние

Для IEC - счетчика SFB 1 CTD, если на входе обратного сче-


та CD появляется положительный фронт, то текущее значение
счетчика декрементируется и отображается на выходе CV. При
первом вызове (при «0» на входе LOAD) значение счетчика со-
ответствует заранее заданному значению на входе PV. Если те-

145
кущее значение достигает нижнего предела, равного – 32 768, то
значение счетчика далее не уменьшается. При этом сигнал на
входе CD игнорируется. Если сигнал на входе LOAD равен «1»,
то счетчик сбрасывается и принимает значение, заданное на
входе PV. При этом положительный фронт на входе счетчика
CD игнорируется, пока состояние сигнала LOAD равно «1». На
выход Q счетчика будет выводиться значение «1», если значение
на выходе CV будет меньше или равно нулю.
IEC - счетчик SFB 1 CTD работает в рабочих режимах
RESTART и RUN и сбрасывается при холодном перезапуске.
Для IEC - счетчика SFB 2 CTUD, если на входе прямого сче-
та CU появляется положительный фронт, значение счетчика ин-
крементируется и отображается на выходе CV. Если на входе
обратного счета CD появляется положительный фронт, тогда те-
кущее значение счетчика декрементируется и также отображает-
ся на выходе CV. Если на обоих входах CU и CD появляется по-
ложительный фронт, то текущее значен ие счетчика не изменя-
ется. Если текущее значение достигает верхнего предела, равно-
го 32 767, то значение счетчика больше не увеличивается. При
этом в дальнейшем сигнал на входе CU игнорируется. Если те-
кущее значение достигает нижнего предела, равного – 32 768, то
значение счетчика далее не уменьшается. При этом в дальней-
шем сигнал на входе CD игнорируется.
Если на входе LOAD «1», то счетчик сбрасывается и прини-
мает значение, заданное на входе PV. При этом положительные
фронты сигналов на входах счетчика игнорируются, пока состо-
яние сигнала на входе LOAD равно «1».
Если сигнал на входе сброса R равен «1», то счетчик сбра-
сывается в 0. При этом положительные фронты сигналов на вхо-
дах счетчика и сигнал «1» на входе LOAD игнорируются, пока
сигнал на входе сброса R равен «1». На выход QU будет выво-
диться «1», если значение на выходе CV больше или равно зна-
чению на входе PV. На выход QD счетчика будет выводиться
«1», если значение на выходе CV меньше или равно нулю.

146
IEC - счетчик SFB 2 CTUD работает в рабочих режимах
RESTART и RUN и сбрасывается при холодном перезапуске.
5.7. ПРИМЕРЫ ИСПОЛЬЗОВАНИЯ СЧЕТЧИКОВ
Пример 1. Счетчик деталей.
Рассмотрим случай простого счетчика, когда детали должны
переноситься лентой конвейера. Для обнаружения и подсчета
деталей используется фотодатчик. Сигнал с датчика поступает
на вход счетчика, после чего он уменьшает свое содержимое.
После того как подсчитанное число деталей становится равным
заданному максимальному количеству (счетчик обнуляется),
счетчик посылает сигнал окончания работы «Finished».
Соответствующая программа имеет вид
A "Count_down" // Опрос входа декрементирования
CD C 1 // Декремент по положительному
//фронту
A "Set_count" // Опрос входа установки
L C#10 // Загрузка начального значения
S C1 // Установка по положительному
// фронту
L CC1 // Чтение содержимого счетчика в
// BCD – формате
T "Number_detal" // Остаток деталей
AN C1 // Двоичный опрос счетчика
= "Count_finish" // Счет завершен.
Как видно из примера, из всей последовательности операто-
ров работы со счетчиками выбраны только необходимые,
остальные пропущены из-за ненадобности. Например, не ис-
пользуются операции разблокировки и прямого счета.
Пример 2. Счетчик деталей с таймером.
Усложним предыдущую задачу. Пусть необходимо, чтобы,
если датчик не обнаруживает детали в течение 10 с, то выдава-
лась ошибка, говорящая о том, что в конвейере произошел сбой:
A "Count_down" // Опрос датчика деталей

147
CD C 1 // Декремент счетчика по фронту
A "Set_count" // Опрос входа установки
L C#10 // Задание начального значения
S C 1 // Загрузка начального значения
LC C 1 // Чтение содержимого счетчика
T "Number_detal" // Сохранение содержимого счетчика
AN C 1 // Двоичный опрос счетчика
= "Count_finish" // Сигнализация счета
A "Count_down" // Опрос датчика деталей
FR T 1 // Разблокировка таймера
A C 1 // Двоичный опрос счетчика
L S5T#10S // Загрузка времени таймера
SP T 1 // Запуск таймера
A "Count_finish"// Опрос сигнализации счета
R T 1 // Сброс таймера
AN T 1 // Двоичный опрос таймера и
A C 1 // счетчика и вычисление функции И
= "Count_error" // Результат на индикатор
Опишем приведенную выше программу счета более подроб-
но.
В первой строке производится опрос датчика деталей, кото-
рый выдает сигнал для уменьшения содержимого счетчика.
Каждый раз, когда датчик деталей будет выдавать положитель-
ный фронт, следующий оператор будет декрементировать со-
держимое счетчика до тех пор, пока оно не станет равным нулю.
В третьей строке происходит опрос входа установки началь-
ного значения счетчика. Если на этом входе положительный
фронт, то содержимое аккумулятора 1 в следующих строках по-
мещается в счетчик.
В шестой и седьмой строках осуществляется чтение содер-
жимого счетчика в двоично-десятичном формате и сохранение
результата в переменной Number_detal. Это число показывает,
сколько деталей осталось сосчитать до окончания счета.

148
В восьмой строке производится двоичный опрос счетчика на
состояние «0». Пока содержимое счетчика больше 0, результат
опроса будет равен «0», поэтому индикатор Count_finish не бу-
дет гореть. Как только счетчик обнулится, опрос выдаст «1», ко-
торая в девятой строке будет записана в индикатор окончания
счета.
С десятой строки начинается обработка таймера. Таймер с
управляемым импульсом перезапускается каждый раз, когда на
его входе разблокировки появляется положительный фронт от
датчика деталей. Таким образом, таймер будет каждый раз пере-
запускаться одновременно с декрементированием счетчика.
В двенадцатой строке производится двоичный опрос счет-
чика. Если содержимое счетчика загружено или перезагружено,
то положительный фронт запустит таймер. Это делается в три-
надцатой и четырнадцатой строках.
В пятнадцатой строке производится опрос датчика оконча-
ния счета. Если счет окончен, то соответствующий положитель-
ный фронт приведет к сбросу таймера, чтобы он не продолжал
отсчитывать заданный интервал времени после того как счетчик
завершил работу.
Последние три строки служат для обнаружения ошибки. Ес-
ли таймер окончил счет, а содержимое счетчика еще больше ну-
ля, то значит датчик деталей не выдавал сигналов более 10 с, по-
этому на индикатор ошибки Count_error поступает «1».
5.8. РАБОТА В ЛАБОРАТОРИИ
Работа в лаборатории состоит в следующем.
1. Набрать и отладить программу, реализующую заданный
вариант. Программу оформить в виде функции в проекте, со-
зданном в предыдущих работах.
2. Проверить работу программы при тестовых изменениях
сигналов на входе управляющего устройства. Изменение сигна-
лов на входах должно моделировать установку в различных ре-
жимах.

149
3. Результаты выполнения программы продемонстрировать в
PLCSIM, где нужно просмотреть состояние всех используемых
входных, выходных байтов, областей памяти и аккумуляторов.
Чтобы содержимое счетчика не отличалось от содержимого об-
ласти памяти, где записывается его значение, нужно просматри-
вать память в двоично-десятичном формате.
5.9. ДОМАШНЕЕ ЗАДАНИЕ И ТРЕБОВАНИЯ К ОТЧЕТУ
Допуском к выполнению лабораторной работы является вы-
полненная самостоятельная работа, заключающаяся в следую-
щем:
1. Изучить методическое описание.
2. Подготовить алгоритм, реализующий заданный вариант.
Обосновать применение того или иного счетчика и таймера.
3. Написать программу на STL, реализующую заданный алго-
ритм.
4. Подготовиться к ответам на контрольные вопросы.
Отчет по работе должен содержать:
1. Название и цель работы.
2. Задание в соответствии со своим вариантом.
3. Словесный алгоритм работы управляющего устройства и
обоснование выбора счетчика и таймера.
4. Функцию на языке STL, результаты выполнения про-
грамм.
5.10. ЗАДАНИЯ ДЛЯ ЛАБОРАТОРНОЙ РАБОТЫ
Вариант 0
Измерение положения. Имеются сигналы от импульсных
датчиков «Датчик 1» и «Датчик 2». Импульс от сигнала «Датчик
1» означает, что координата положения объекта увеличилась, а
импульс от сигнала «Датчик 2» означает, что координата поло-
жения объекта уменьшилась. Начальное положение датчика
равно 500. Импульсы от датчиков должны приходить не чаще,
чем один раз за 3 с.

150
Вариант 1
Имеется счетчик деталей на конвейере. Для обнаружения и
подсчета деталей используется фотодатчик. Счетчик не должен
реагировать на импульсы от фотодатчика, если интервал между
ними меньше чем 3 с. Максимальное число деталей – 20.
Вариант 2
Осуществляется подсчет пустых и полных бутылок. При по-
явлении пустой бутылки выдается сигнал «Датчик 1», а при по-
явлении полной бутылки – сигнал «Датчик 2». Необходимо под-
считать разницу между числом пустых и полных бутылок. Если
эта разница меньше или равна нулю, то необходимо выдать сиг-
нал «Нет тары». Если между появлением бутылок возникает па-
уза более 10 с, то нужно выдать сигнал «Нет подачи».
Вариант 3
Подсчет пассажиров. При появлении входящего пассажира
содержимое счетчика должно увеличиваться, а при появлении
выходящего – уменьшаться. Если разница между вошедшими и
вышедшими пассажирами стала больше 15, то необходимо вы-
дать сигнал «Перегруз». Сигналы, которые следуют через интер-
вал менее 3 с, игнорируются.
Вариант 4
Определение положения руля. При повороте вправо сраба-
тывает импульсный датчик «Вправо», а при повороте влево –
импульсный датчик «Влево». Нейтральное положение руля со-
ответствует числу 500. Если сигнала нет в течении 10 с ни от од-
ного, ни от другого датчика, то нужно заново переустановить
значение счетчика.
Вариант 5
Подсчет оборотов колеса. Имеется два импульсных датчика:
«Оборот влево» и «Оборот вправо». Необходимо подсчитать
обороты вправо и обороты влево. Если между сигналами пауза
менее 3 с, то выдается ошибка.

151
Вариант 6
Счетчик импульсов. Необходимо подсчитать число импуль-
сов за 10 с. Результат обновляется в области памяти каждые 10 с
и подсчет начинается заново.
Вариант 7
Имеется два датчика импульсов: «Датчик 1» и «Датчик 2».
Необходимо подсчитать разность между импульсами, выдавае-
мыми входами «Датчик 1» и «Датчик 2» за интервал времени 10.
Отсчет импульсов вести с числа 15.
Если разность между показаниями датчиков становится
больше 10, то выдать сигнал «Превышение» и начать подсчет
разности заново.
Результат отображать в выходном слове. Подсчет ведется
периодически.
Вариант 8
Имеется автомобильный датчик ухабов на дороге. Необхо-
димо при достижении числа ухабов значения 100 выдать сигнал
«Необходима диагностика». Отсчет начинается от 0. Если дат-
чик не выдает сигналов в течении 10 с, то счет запускается зано-
во, увеличив исходное значение на 10, т.е. после первой паузы
отсчет начинается с 10. После второй – с 20 и т.д.
Вариант 9
Ведется подсчет неудачных попыток входа в защищенную
систему. Если было 5 неудачных попыток подряд, то необходи-
мо выдать сигнал «Вход заблокирован». При удачной попытке
подсчет обнуляется. Если сигнал об удачной или неудачной по-
пытке отсутствует более 10 с, то также выдается сигнал «Вход
заблокирован».
КОНТРОЛЬНЫЕ ВОПРОСЫ
1. Какой формат имеет значение счетчика, чем он отличает-
ся от обычного целого числа?

152
2. Опишите команду установки счетчика. В каком случае эта
команда выполняется?
3. Опишите команду сброса счетчика. В каком случае эта
команда выполняется?
4. Опишите команды прямого и обратного счета и условия
их выполнения в программе.
5. Каким образом работает команда разблокировки счетчи-
ка?
6. Приведите оптимальную последовательность инструкций
при использовании счетчика. Можно ли изменять или пропус-
кать инструкции в этой последовательности?
7. Приведите IEC-функции счетчиков, встроенные в опера-
ционную систему CPU.
8. Каким образом и в каких числовых форматах можно счи-
тать содержимое счетчика?
9. Что такое двоичный опрос счетчика?
6. ИЗУЧЕНИЕ ФУНКЦИЙ ДЛЯ ОБРАБОТКИ ЧИСЕЛ В
КОНТРОЛЛЕРАХ S 300/400
Функции для обработки чисел используются преимуще-
ственно для типов INT (целое число длиной 16 разрядов), DINT
(целое число длиной 32 разряда) и REAL (вещественное), что
значительно расширяет функциональные возможности програм-
мируемых логических контроллеров.
Функции сравнения формируют бинарный результат срав-
нения двух величин. Они также обрабатывают данные INT,
DINT, REAL.
Арифметические функции позволяют выполнять в програм-
ме вычисления. Все базовые арифметические операции могут
быть выполнены также с данными INT, DINT и REAL.
Математические функции расширяют собой вычислитель-
ные возможности в программе. Математические функции добав-
ляют такое расширение, как тригонометрические функции.

153
Функции преобразования позволяют до и после выполнения
вычислений приводить численные значения к требуемому типу
данных.
Функции сдвига позволяют смещать содержимое аккумуля-
тора влево или вправо. Функции сдвига позволяют также прове-
рить бит, смещенный последним.
Логические функции с данными формата Word используют-
ся для маскирования численных значений для проверки отдель-
ных битов и задания для них значений «0» или «1».
Функции для обработки чисел работают, главным образом,
со значениями в блоках данных. Это могут быть блоки глобаль-
ных данных или экземплярные блоки данных, если используют-
ся статические локальные данные. За исключением аккумулято-
ров для хранения временных результатов, удобны временные
локальные данные.
6.1. ФОРМАТЫ ЧИСЕЛ
В программируемых контроллерах S7 применяются 16-
битный и 32-битный формат чисел. Для 16-битных чисел суще-
ствуют следующие типы числовых данных.
1. BCD-код – двоично-десятичное представление, когда
каждая цифра десятичного числа кодируется тетрадой двоично-
го кода. Например, число 296 на языке STL представляется в ви-
де W#16#296. При этом в контроллере записывается четыре тет-
рады (рис. 6.1) – младшие тетрады соответствуют цифрам 2, 9 и
6, а старшая тетрада означает знак числа. Если в старшей тетра-
де все нули, то число положительное, а если все единицы, то
число отрицательное. Отрицательное целое число на языке STL
имеет формат W#16#F413. Диапазон чисел формата BCD со-
ставляет от – 999 до 999.
2. INTEGER – тип данных INT является стандартным для
хранения 16-битного числа со знаком. Старший бит (бит 15) по-
казывает, является ли число положительным или отрицательным
(0 – положительное, 1 – отрицательное). 16-битное число integer

154
находится в диапазоне – 32 768 и + 32 767. В двоичном форма-
те отрицательное число представляется дополнительным кодом.
Дополнительный код отрицательного числа получается инверси-
ей всех битов и добавлением к результату 1. На STL числа дан-
ного типа представляются в стандартном виде: +296 или – 413.
Пример содержимого CPU, когда в нем записано число – 413,
показан на рис. 6.2.

Рис. 6.1. Двоично-десятичное число в CPU

155
Рис. 6.2. Двоичное отрицательное число в CPU
Для 32-битных чисел существуют следующие форматы.
1. Двоично-десятичное число BCD, которое записывается в
виде DW#16#296 и позволяет представить числа от – 9 999 999
до +9 999 999. При этом старшая тетрада указывает на знак.
2. Двойное целое число DINT – 32 - битное число со зна-
ком, лежащее в диапазоне от L# 2 147 483 648 до
L# +2 147 483 647. Буква L служит для формального обозначе-
ния таких чисел.
3. Число с плавающей запятой REAL – положительное или
отрицательное число из диапазона от − 3,402823 ⋅ 10 38 до
+ 3,402823 ⋅ 10 38 . Число типа real занимает в памяти два слова
(32 бита). Самый старший разряд показывает знак. Другие биты
представляют мантиссу и показатель степени числа 2. Мантисса
занимает младшие 23 разряда, а степень числа – 8 разрядов с 23
по 30. Содержимое CPU для чисел в разном формате показано на
рис. 6.3. Отметим, что при записи 16-битного числа в 32-
разрядный регистр процессора занимаются младшие 16 бит ре-
гистра.

Рис. 6.3. 32 - битные числа в CPU

Формат действительного числа показан на рис. 6.4.

156
Рис. 6.4. Формат действительного числа

6.2. ФУНКЦИИ СРАВНЕНИЯ


Функции сравнения выполняют сравнение двух численных
значений, одно из которых находится в аккумуляторе 1, а вто-
рое – в аккумуляторе 2. После выполнения операции функции
сравнения устанавливают RLO и биты состояния CC0 и CC1.
Этот результат может в дальнейшем быть использован в двоич-
ных логических операциях, в операциях с памятью или в опера-
торах перехода. В табл. 6.1 приведены существующие функции
сравнения. Отметим, что функции сравнения для различных ти-
пов данных различные, что позволяет оптимизировать вычисли-
тельный процесс.
Функции сравнения программируются в соответствии со
следующей общей схемой:
загрузка адреса Address1;
загрузка адреса Address2;
функция сравнения;
присвоение результата Result.
При выполнении первой операции загрузки из первого адре-
са Address1 число помещается в аккумулятор 1. При загрузке из
второго адреса Address2 содержимое аккумулятора 1 перемеща-
ется в аккумулятор 2, а число из второго адреса в аккумулятор 1.
После этого выполняется операция сравнения. Функции сравне-
ния возвращают двоичный результат (BOOL), который может
быть назначен двоичному адресу или использован в какой-либо

157
другой логической операции. Функции сравнения не изменяют
содержимого аккумуляторов. Они всегда выполняются вне вся-
кой связи с какими-либо условиями или содержимым регистра
состояния процессора.
Таблица 6.1
Общее представление функций сравнения
Операции Типы данных
сравнения INT DINT REAL
Равно ==I ==D ==R
Не равно <>I <>D <>R
Больше >I >D >R
Больше или равно >=I >=D >=R
Меньше <I <D <R
Меньше или равно <=I <=D <=R

В табл. 6.2 показаны примеры для различных типов данных.


Инструкции сравнения выполняются в соответствии с опреде-
ленными параметрами независимо от содержимого аккумулято-
ров.
В случае, когда данные имеют тип INT, микропроцессор
сравнивает только младшие слова в аккумуляторах; содержимое
старших слов в расчет не берется. В случае, когда данные имеют
тип REAL, выполняется проверка для корректности содержимо-
го аккумуляторов. Если результат этой проверки отрицателен, то
CPU сбрасывает RLO в «0», а биты состояния CC0, CC1, OV и
OS устанавливает в «1».
Инструкция для сравнения чисел с целью определения их
равенства устанавливает RLO в «1» в следующих случаях:

158
1) для данных INT, если содержимое младшего слова акку-
мулятора 2 равно содержимому младшего слова аккумулятора 1;
2) для данных DINT, если содержимое аккумулятора 2 равно
содержимому аккумулятора 1;
3) для данных REAL, если содержимое аккумулятора 2 равно
содержимому аккумулятора 1, при условии, что оба аккумулятора
содержат корректные действительные (REAL) числа. Если два
числа формата REAL равны, но некорректны, то RLO равно «0».
Таблица 6.2
Примеры функций сравнения
L MW 92
Меркер M 99.0 сбрасыва-
Сравнение дан- L 120
ется, если значение в сло-
ных типа INT ==I
ве MW 92 равно 120
R M 99.0
Переменная Result уста- L Val1
Сравнение дан- навливается, если пере- L Val2
ных типа DINT менная Val1 меньше, чем <D
Val2 = Result
Если переменная #val1 L #val1
Сравнение дан- больше или равна #val2, L #val2
ных REAL то переменная #Res уста- >=R
навливается S #Res
Инструкция для сравнения чисел с целью определения их
неравенства устанавливает RLO в «1» в следующих случаях:
1) для данных INT, если содержимое младшего слова акку-
мулятора 2 не равно содержимому младшего слова аккумулято-
ра 1;
2) для данных типа DINT, если содержимое аккумулятора 2
не равно содержимому аккумулятора 1;
3) для данных типа REAL, если содержимое аккумулятора 2
не равно содержимому аккумулятора 1, при условии, что оба ак-
кумулятора содержат корректные действительные (REAL) чис-

159
ла. Если два числа формата REAL не равны, но одно из них или
оба некорректны, то условие неравенства не выполняется, RLO
равен «0».
Инструкция для сравнения с целью определения выполнения
условия «больше» устанавливает RLO в «1» в следующих случа-
ях:
1) для данных INT, если содержимое младшего слова акку-
мулятора 2 больше чем содержимое младшего слова аккумуля-
тора 1;
2) для данных типа DINT, если содержимое аккумулятора 2
больше чем содержимое аккумулятора 1;
3) для данных типа REAL, если содержимое аккумулятора 2
больше чем содержимое аккумулятора 1, при условии, что оба
аккумулятора содержат корректные числа.
Инструкция для сравнения с целью определения выполнения
условия «больше или равно» устанавливает RLO в «1»,если:
1) для данных INT содержимое младшего слова аккумулято-
ра 2 больше или равно содержимому младшего слова аккумуля-
тора 1;
2) для данных DINT содержимое аккумулятора 2 больше
или равно содержимому аккумулятора 1;
3) для данных REAL содержимое аккумулятора 2 больше
или равно содержимому аккумулятора 1, если оба аккумулятора
содержат корректные действительные (REAL) числа.
Инструкция определения выполнения условия «меньше»
устанавливает RLO в «1», в следующих случаях:
1) для данных INT, если содержимое младшего слова акку-
мулятора 2 меньше чем содержимое младшего слова аккумуля-
тора 1;
2) для данных DINT, если содержимое аккумулятора 2
меньше чем содержимое аккумулятора 1;
3) для данных REAL, если содержимое аккумулятора 2
меньше или равно содержимому аккумулятора 1 при условии,

160
что оба аккумулятора содержат корректные действительные
числа.
Инструкция определения условия «меньше или равно» уста-
навливает RLO в «1» в следующих случаях:
1) для данных INT, если младшее слово аккумулятора 2
меньше или равно младшего слова аккумулятора 1;
2) для данных типа DINT, если содержимое аккумулятора 2
меньше или равно содержимому аккумулятора 1;
3) для данных типа REAL, если содержимое аккумулятора 2
меньше или равно содержимому аккумулятора 1 при условии,
что оба аккумулятора содержат корректные действительные
числа.
Функции сравнения возвращают двоичный результат логи-
ческой операции RLO и, следовательно, могут быть использова-
ны в сочетании с другими двоичными функциями.
Функция сравнения в начале логической операции всегда
является первичным опросом. RLO, возвращаемый функцией
сравнения, может быть непосредственно использован в логиче-
ских операциях:
L MW 120 // Загрузка переменной
L 512 // Загрузка константы
>I // Переменная больше константы?
A Input1 // Вычисление выражения RLO и input1
= Output1 // Передача результата в переменную Output1
Таким образом, выход Output1 устанавливается, если вы-
полняется условие сравнения функции сравнения, а вход Input1
равен «1».
Функция сравнения внутри логической операции должна
быть заключена в скобки:
O Input2 // Первичный опрос переменной Input2
O( // Input2 или результат сравнения
L MW 122 // Загрузка переменной
L 200 // Загрузка константы
<=I // Переменная меньше или равна константе?

161
) // Завершение сравнения
O Input3 // Input2 или результат сравнения или Input3
= Output2 // Запись результата
Выход Output2 устанавливается, если вход Input2 или Input3
равен «1» или если выполняется условие сравнения.
Так как функции сравнения не изменяют содержимого ак-
кумуляторов, возможно их многократное использование:
L MW 124 // Загрузка переменной
L 1200 // Загрузка константы
>I // Переменная больше константы?
JC GREA // Если да, то переход на метку GREA
==I // Переменная равна константе?
JC EQUA // Если да, то переход на метку EQUA
Функция сравнения устанавливает биты состояния незави-
симо от типа проверяемого условия. Тогда можно проверять би-
ты состояния в соответствующих функциях перехода. Вышепри-
веденный пример может быть также запрограммирован следую-
щим образом:
L MW 124 // Загрузка переменной
L 1200 // Загрузка константы
>I // Переменная больше константы? Здесь
// Устанавливаются биты состояния
JP GREA // Переход, если результат больше нуля
JZ EQUA // Переход, если результат равен нулю
Здесь результат выполнения функции сравнения проверяет-
ся с помощью битов состояния CC0 и CC1. Собственно условие
сравнения «больше чем» в данном случае не влияет на установ-
ку битов состояния, могут быть использованы и другие условия
сравнения, например «меньше чем». Оператор JP проверяет, не
является ли первая из сравниваемых величин больше, чем вто-
рая. Оператор JZ проверяет, не являются ли обе сравниваемые
величины равными.

162
6.3. АРИФМЕТИЧЕСКИЕ ФУНКЦИИ
Рассматриваемый процессор построен по аккумуляторной
архитектуре. Арифметические функции оперируют с двумя чис-
ловыми значениями, находящимися в аккумуляторе 1 и 2. Ре-
зультат арифметической операции помещается в аккумулятор 1.
Биты состояния CC0, CC1, OV и OS обеспечивают информацию,
касающуюся выполнения вычислений и результата. В табл. 6.3
приведен обзор арифметических функций.
В добавление к базовым арифметическим операциям с уча-
стием числа, находящегося в аккумуляторе 2, можно прибавлять
константы непосредственно к содержимому аккумулятора 1 или
изменять его содержимое на некоторую фиксированную вели-
чину. Для процессоров, содержащих 4 аккумулятора, можно оп-
тимизировать вычисления путем использования аккумуляторов
3 и 4.
Таблица 6.3
Основные арифметические функции
Типы данных
Функция
INT DINT REAL
Сложение +I +D +R
Вычитание –I –D R
Умножение *I *D *R
Деление /I /D /R
Остаток от деления MOD
Арифметические функции реализуются следующим обра-
зом:
– загрузка первого адреса;
– загрузка второго адреса;
– арифметическая функция;
– передача результата.
При выполнении операции загрузки из первого адреса число
помещается в аккумулятор 1. При загрузке из второго адреса со-
держимое аккумулятора 1 перемещается в аккумулятор 2. Далее
163
над содержимым аккумуляторов выполняется арифметическая
операция, результат которой сохраняется в аккумуляторе 1.
Арифметические функции всегда выполняются вне всякой связи
с какими-либо условиями. В табл. 6.4 показаны примеры для
различных типов данных.
В случае, когда данные имеют тип INT, арифметические
операции выполняются для младших слов в аккумуляторах,
старшие слова игнорируются. В случае, когда данные имеют тип
REAL, выполняется проверка определения корректности содер-
жимого аккумуляторов.
Таблица 6.4
Примеры арифметических функций
L MW 100
Значение в слове MW 100 делится L 250
INT
на 250, результат в слове MW 102 /I
T MW 102
L Val1
Переменные Val1 и Val2 склады-
L Val2
DINT ваются, результат заносится в Re-
+D
sult
T Result
L x1
Переменные x1 и x2 перемножают- L x2
REAL
ся, результат помещается в x3 *R
T x3
В S7-300 CPU (за исключением CPU 318) выполнение ариф-
метических функций не изменяет содержимого аккумулятора 2;
в S7-400 CPU и CPU 318 содержимое аккумулятора 2 после вы-
полнения операции переписывается содержимым аккумулятора
3. При этом содержимое аккумулятора 4 смещается в аккумуля-
тор 3, как показано на рис. 6.5.

164
Рис. 6.5. Выполнение арифметических функций
Инструкция +I складывает младшие слова аккумуляторов 1
и 2 как целые числа INT. Результат сохраняется в аккумуляторе
1. Старшие слова аккумуляторов не принимаются во внимание.
Инструкция - I для вычитает младшие слова аккумуляторов
1 и 2 как целые числа INT. Результат сохраняется в аккумулято-
ре 1. Старшие слова аккумуляторов не принимаются во внима-
ние.
Инструкция *I для умножает младшие слова аккумуляторов
1 и 2 как целые числа INT. Результат помещается в аккумулято-
ре 1. Для последующей операции перемножения результат,
находящийся в аккумуляторе 1, имеет формат числа DINT.
Инструкция /I делит младшее слово аккумулятора 2 на
младшее слово аккумулятора 1. Результат помещается в млад-
шее слово аккумулятора 1, а в старшем слове хранится остаток.
После выполнения инструкций биты состояния CC0 и CC1
показывают, какова разность: отрицательна, равна нулю или по-
ложительна. Биты состояния OV и OS указывают на нарушение
границ диапазона.
В случае деления на ноль частное от деления и остаток воз-
вращаются с нулевыми значениями, а биты состояния CC0, CC1,
OV и OS устанавливаются в состояние «1».
Вычисления с данными DINT производятся аналогично.

165
При выполнение сложения +D, вычитания –D, умножения
*D и деления /D операция проводится над всем содержимым ак-
кумуляторов 1 и 2. Результат также сохраняется в аккумуляторе
1. После выполнения операции биты состояния CC0 и CC1 пока-
зывают, какова результирующая сумма: отрицательна, равна ну-
лю или положительна. Биты состояния OV и OS указывают на
нарушение границ разрешенного диапазона.
При делении производится деление аккумулятора 2 на акку-
мулятор 1. Результат деления сохраняется в аккумуляторе 1.
Остаток не сохраняется. Частное является целым числом. Оно
равно нулю, если содержимое аккумулятора 2 меньше содержи-
мого аккумулятора 1. В случае деления на ноль результат равен
нулю, а биты состояния CC0, CC1, OV и OS устанавливаются в
«1».
Кроме того, для чисел DINT существует инструкция MOD
для нахождения остатка от деления. В случае деления на ноль
остаток от деления возвращается с нулевым значением, а биты
состояния CC0, CC1, OV и OS устанавливаются в состояние «1».
Операции с действительными числами REAL также реали-
зуются аналогично. В этом случае содержимое аккумуляторов 1
и 2 интерпретируется как действительное 32-разрядное число.
Результат выполняемой операции помещается в аккумулятор 1 в
формате REAL. После выполнения операции биты состояния
CC0 и CC1 показывают, какова результирующая сумма: отрица-
тельна, равна нулю или положительна. Биты состояния OV и OS
указывают на нарушение границ разрешенного диапазона. При
этом бит OV указывает на переполнение в последней операции,
а бит OS – на то, что переполнение могло возникнуть ранее.
В случае, когда не соблюдается формат чисел или делается
попытка операции над бесконечным числом, тогда результат
помещается в аккумулятор 1, а биты состояния CC0, CC1, OV и
OS равны «1».
При реализации последовательности операций нужно пом-
нить, что в CPU S7 300 два аккумулятора, а в S7 400 – четыре.

166
Для процессоров с двумя аккумуляторами (CPU 300) перед
выполнением операции в цепочке стоит операция загрузки:
// Y = X1-X2+X3
L X1
L X2
-I; // X1-X2
L X3
+I; // X1-X2+X3
TY
В приведенном выше фрагменте сначала загружается в ак-
кумулятор 1 переменная X1, затем в аккумулятор 1 загружается
X2, а X1 переписывается в аккумулятор 2. Далее производится
вычитание содержимого аккумуляторов, а результат помещается
в аккумулятор 1. Аналогичным образом при загрузке X3, раз-
ность X1 – X2 перемещается а аккумулятор 2, поэтому операция
+I вычисляет X1 – X2+X3. При последней пересылке оператор
не меняет содержимого аккумуляторов.
В процессоре с двумя аккумуляторами первое загруженное
значение остается без изменений в аккумуляторе 2 во время вы-
полнения арифметической функции и может быть вновь исполь-
зовано без необходимости повторной его загрузки:
// Y1 = X1+2*X2
L X2
L X1
+R // X1+X2
+R // X1+X2+X2 = X1+2*X2
T Y1
// Y2 = X3*X42
L X4
L X3
*D // X3*X4
*D // X3*X4*X4 = X3*X42
T Y2

167
В процессорах S7 400 значение из аккумулятора 3 может
быть смещено в аккумулятор 2 сразу после первой операции вы-
числения. Заблаговременно с помощью инструкции ENT можно
сохранить промежуточный результат в аккумуляторе 3:
// Y = (X1+X2)*(X3+X4)
L X1
L X2
+I // X1+X2 а аккумуляторе 1
L X3 // X1+X2 а аккумуляторе 2
ENT // X1+X2 а аккумуляторе 3, X3 в аккумуляторе 1 и
2
L X4 // X3 в аккумуляторе 1, X4 в аккумуляторе 2
+I // X3+X4 а аккумуляторе 1, X1+X2 а аккумуляторе
2
*I
TY
К аккумулятору 1 можно добавлять константы:
+ B#16#bb // Добавление байтовой константы
+ ±w // Добавление слова
+ L#±d // Добавление двойного слова
Добавление константы осуществляется следующим образом:
– загрузка адреса;
– сложение с константой;
– передача результата.
Операция добавления константы по сравнению с арифмети-
ческими функциями не влияет ни на содержимое остальных ак-
кумуляторов, ни на биты состояния. Константа может быть
шестнадцатеричным числом, десятичным словом или двойным
словом. Если десятичная константа по величине превышает раз-
решенный диапазон для типа INT, то вычисление автоматически
выполняется для типа данных DINT. Вы можете записать деся-
тичное число со знаком минус. Можно выполнить операцию вы-
читания константы из значения в аккумуляторе 1. Перед добав-

168
лением байтовой константы она преобразуется в число формата
INT со знаком.
Как и для арифметических функций, с данными INT опера-
ция добавления байта или слова влияет только на младшее слово
аккумулятора 1. Если разрешенный диапазон для INT нарушает-
ся, то бит 15 (бит знака) переписывается. Операция добавления
слова обрабатывает все 32 бита аккумулятора, что соответствует
операции вычисления для данных типа DINT.
Приведем примеры добавления констант:
L X1
+ B#16#11 // X1 + 9
T Y1
L X2
+ -15 // X2 – 15
T Y2
L X3
+ L#-1 // X3 – 1 (операция как с числом DINT)
T Y3
Для инкремента и декремента аккумулятора 1 применяются
следующие команды:
DEC n // Декрементирование
INC n // Инкрементирование.
Эти операции программируются аналогично сложению с
константами:
– загрузка адреса;
– инкремент (декремент);
– передача результата.
Содержимое аккумулятора 1 уменьшается или увеличивает-
ся на число n. Этот параметр может принимать значение в диа-
пазоне от 0 до 255. При этом изменяется только значение в
младшем байте аккумулятора. Старшие байты аккумулятора
остаются без изменения. Если значение в результате инкремен-
тирования превышает величину 255, то расчет начинается с 0.

169
Если в результате декрементирования значение становится
меньше 0, то расчет начинается с 255.
Пример операции инкрементирования:
L X
INC 5
T Y
6.4. МАТЕМАТИЧЕСКИЕ ФУНКЦИИ
К математическим функциям языка STL относятся:
1. Тригонометрические функции синус (SIN), косинус
(COS), тангенс (TAN).
2. Обратные тригонометрические функции арксинус (ASIN),
арккосинус (ACOS), арктангенс (ATAN).
3. Возведение в квадрат (SQR).
4. Извлечение квадратного корня (SQRT).
5. Экспонента (EXP).
6. Логарифм (LN).
Все математические функции обрабатывают числа в веще-
ственном формате REAL. В зависимости от результата матема-
тические функции устанавливают биты состояния CC0, CC1, OV
и OS. Перед выполнением математической функции обязательно
проверяется корректность числа на его принадлежность к типу
REAL.
Математические функции в качестве входного значения ис-
пользуют число, находящееся в аккумуляторе 1, данное число
обрабатывается в соответствии с функцией и сохраняется в ак-
кумуляторе 1.
Математические функции выполняются следующим обра-
зом:
– загрузка адреса;
– математическая функция;
– передача результата.

170
Математические функции изменяют только содержимое ак-
кумулятора 1 и выполняются вне всяких условий, они являются
безусловными операторами.
Приведем примеры применения математических функций.
Пример 1. Вычисление синуса.
L MD 120 // Загрузка константы в аккумулятор 1
// Из области памяти
SIN // Вычисление синуса
T MD 130 // Передача результата в ячейку памяти
Пример 2. Возведение в квадрат.
L X1 // Загрузка переменной X1 в аккумулятор 1
SQR // Вычисление квадрата
TY // Пересылка результата в переменную
Входные аргументы математических функций всегда имеют
тип REAL. Если число задано неверно, то в аккумулятор 1 все
равно записывается результат в вещественном формате REAL, а
биты состояния CC0, CC1, OV и OS устанавливаются в «1».
Тригонометрические функции SIN, COS и TAN восприни-
мают число в аккумуляторе 1 как значение угла в радианах.
Приме 3. Расчет реактивной мощности Ps = U ⋅ I ⋅ sin ϕ .
L PHI //Загрузка угла φ
SIN
L Current //Загрузка значения тока
*R
L Voltage //Загрузка значения напряжения
*R ;
T I_Power //Сохранение значения реактивной мощности
Если угол задан в градусах, его значение должно быть
умножено на коэффициент π / 180 .
Обратные тригонометрические ASIN, ACOS и ATAN ис-
пользуют число REAL, находящееся в аккумуляторе 1, и воз-
вращают значение угла, выраженное в радианах. Если превыша-
ется разрешенный диапазон значений, т.е. нарушается область
определения функции, указанная в табл. 6.5, то обратные триго-
171
нометрические функции возвращают некорректное действитель-
ное число и устанавливают биты состояния CC0, CC1, OV и OS
в состояние «1».
Пример 4. Вычисление арккосинуса от 0,5 в градусах:
L 0.5// загрузка константы
ACOS// вычисление функции
L 360// умножение на коэффициент 360/2π
*R
L 6.28
/R
T Angle// пересылка результата
Таблица 6.5
Области определений и значений обратных функций
Диапазон Диапазон выходных
Функция
входной величины значений
ASIN –1… +1 − π / 2 ...π / 2
ACOS –1… +1 0 ... + π
ATAN не ограничен − π / 2 ...π / 2

Функция извлечения квадратного корня работает корректно,


если содержимое аккумулятора 1 больше или равно нулю. В
противном случае биты состояния CC0, CC1, OV и OS устанав-
ливаются в «1». Для работы с комплексными числами необхо-
димо использовать специальные библиотеки, поставляемые от-
дельно, или создавать собственные функции.
Функции EXP (экспонента) и LN (натуральный логарифм)
часто используется для вычисления произвольной степени по
формуле

a b = e b ln (a ) . (6.1)

Пример 5. Вычисление степени по формуле (6.1).


L A
172
LN
L B
*R
EXP
T Result
При выполнении функции LN аккумулятор 1 должен содер-
жать положительную величину или нуль.
Логарифм по произвольному основанию вычисляется на ба-
зе следующей формулы:
ln a
log b a = . (6.2)
ln b
Пример 6. Вычисление логарифма по формуле (6.2).
L A
LN
L B
LN
/R
T Result
6.5. ФУНКЦИИ ПРЕОБРАЗОВАНИЯ
Функции преобразования преобразуют тип данных, находя-
щихся в аккумуляторе 1. На рис. 6.6 представлен обзор функций
преобразования, рассматриваемых в данном подразделе.
Функции преобразования воздействуют только на данные,
находящиеся в аккумуляторе 1. Функция преобразования про-
граммируется аналогично всем математическим командам:
– загрузка адреса;
– функция преобразования;
– передача результата.

173
Рис. 6.6. Функции преобразования
Функции преобразования конвертируют формат данных,
даже если тип данных в аккумуляторе не был объявлен, т.е. тип
содержимого аккумулятора определяется командой. Функции
преобразования всегда выполняются вне всякой связи с какими-
либо условиями.
Пример 7. Преобразование числа INT (целое) в BCD (дво-
ично-десятичное) число
L MW 150 // Загрузка константы из области памяти
ITB // Преобразование
T MW 160 // Сохранение результата
Пример 8. Преобразование числа DINT в REAL.
L #X1
DTR
T #X2
Знак # говорит о том, что переменные X1 и X2 локальные,
т.е. доступны только в пределах данного блока или функции.
Относительно аккумулятора 1 можно выполнять несколько
последовательных функций преобразования, что удобно при

174
преобразовании, в котором размерность входных и выходных
данных не совпадает, например, INT в REAL, REAL в BCD и
т.п.:
L BCD_Number
BTI // BCD в INT
ITD // INT в DINT
DTR //DINT в REAL
T REAL_Number
В примере BCD – число в три шага преобразуется в число
REAL.
Рассмотрим основные особенности функций преобразова-
ния.
Функция ITD преобразует число (целое, 16 разрядов) INT в
DINT (целое, 32 разряда). Фактически она Пересылает значение
знакового бита (15) в бит (31). Функция ITD не устанавливает
битов состояния.
Функция ITB преобразует число INT (целое, 16 разрядов) в
BCD (двоично-десятичное, 16 бит). Трехразрядное BCD-число в
аккумуляторе 1 располагаются в битах с 0 по 11. Знак располага-
ется в битах с 12 по 15. Если все эти биты равны «0», то знак по-
ложительный, если все биты «1», то знак отрицательный. Со-
держимое старшего слова аккумулятора остается без изменений.
Если исходное INT-число больше 999, то функция ITB устанав-
ливает биты переполнения OV и OS в «1». Преобразование в та-
ком случае не будет выполнено.
Функция DTB преобразует число DINT (целое, 32 бита) в
семиразрядное BCD-число (32 бита), которое в аккумуляторе 1
располагается с 0 по 27 биты. Знак располагается в битах с 28 по
31. Если эти биты равны «0», то знак положительный, если все
биты равны «1», то знак отрицательный. Если исходное DINT-
число больше 9 999 999, то функция DTB устанавливает биты
переполнения OV и OS в «1» и преобразование не выполняется.
Функция DTR преобразует число DINT (целое, 32 бита) в
REAL (вещественное, 32 бита). Так как число DINT имеет боль-

175
шую точность чем REAL, то в процессе преобразования формата
числа может произойти округление до ближайшего целого числа
(как при выполнении операции округления RND). Функция DTR
не устанавливает битов состояния.
Функция BTI преобразует число BCD (двоично-десятичное,
16 бит) в INT (целое, 16 бит). В процессе преобразования знак
вычисляется по биту 15. Содержимое старшего слова аккумуля-
тора остается без изменений. Функция преобразования BTI не
устанавливает никаких битов состояния.
Функция BTD преобразует семиразрядное число BCD (дво-
ично-десятичное, 32 бита) в DINT (целое, 32 бита). Знак опреде-
ляется по биту 31.
Если биты с 28 по 31 не равны между собой, то функция
BTD генерирует ошибку. Аналогично функция BTI генерирует
ошибку, если не равны друг другу биты с 12 по 15. В результате
вызывается организационный блок обработки синхронных оши-
бок OB 121. Если он не запрограммирован, то процессор пере-
ходит в состояние STOP. Функция преобразования BTD не уста-
навливает битов состояния.
Существует несколько функций, обеспечивающих выполне-
ние операций преобразования числа REAL (вещественное, 32
бита) в DINT (целое, 32 бита). Эти функции отличаются друг от
друга способом выполнения операции округления:
1) RND+ – преобразование с округлением до ближайшего
сверху целого числа;
2) RND- – преобразование с округлением до ближайшего
снизу целого числа;
3) RND – преобразование с округлением до ближайшего
числа;
4) TRUNC – преобразование без округления (усечение).
В табл. 6.6 показано различие действий указанных функций
на примере диапазона чисел от –1 до + 1.

176
Таблица 6.6
Функции округления чисел REAL
Входное Результат
значение
REAL RND RND + RND – TRUNC
1,001 1 2 1 1
0,992 1 1 0 0
0,57 1 1 0 0
–0,55 –1 0 –1 0
–0,01 0 0 –1 0
–1,4 –1 –1 –2 –1

Функции округления устанавливают биты переполнения OV


и OS в случае неверного формата данных в аккумуляторе 1. Ес-
ли действительное число REAL лежит ровно между двумя чис-
лами, то будет произведено округление до четного числа.
Существует еще несколько функций, обеспечивающих вы-
полнение операций преобразования чисел:
1) INVI – обратный код двоичного числа INT;
2) INVD – обратный код двоичного числа DINT;
3) NEGI – инвертирование числа INT;
4) NEGD – инвертирование числа DINT;
5) NEGD – инвертирование числа REAL;
6) ABS – нахождение абсолютного значения числа REAL.
Обратный код отличается от инвертирования тем, что в пер-
вом случае знак числа не меняется, а во втором – меняется знак
числа, а после этого для отрицательного результата вычисляется
обратный код.
Первые пять функций уже рассмотрены в разделе функций
аккумуляторов (разд. 3 данного пособия).

177
Функция ABS сбрасывает знаковый бит мантиссы в «0», да-
же если число является некорректным. В случае использования
обратного или дополнительного кода, производится преобразо-
вание. Функция ABS не устанавливает битов состояния.
6.6. ФУНКЦИИ СДВИГА
Функции сдвига сдвигают влево или вправо содержимое ак-
кумулятора 1 бит за битом. Часть этих функций описана при
рассмотрении функций аккумуляторов. В табл. 6.7 представлен
обзор доступных пользователю функций сдвига.
Таблица 6.7
Функции сдвига
Слово Двойное слово
Функция Число n Число n в Число n Число n в
параметр аккум. 2 параметр аккум. 2
Сдвиг
SLW n SLW SLD n SLD
влево
Сдвиг вправо SRW n SRW SRD n SRD
Сдвиг со зна-
SSI n SSI SSD n SSD
ком
Циклический
– – RLD n RLD
сдвиг влево
Циклический
– – RRD n RRD
сдвиг вправо
Циклический
сдвиг влево – – RLDA –
через бит CC1
Циклический
сдвиг вправо – – RRDA –
через бит CC1
Функции сдвига позволяют побитно сдвигать влево или
вправо данные, находящиеся в аккумуляторе 1. При этом, в за-
висимости от функции, сдвигается либо младшее слово, либо
178
весь аккумулятор. Биты, сдвигаемые за пределы слова или двой-
ного слова, теряются при операциях сдвига или переносятся в
младшие биты для циклического сдвига. Функции сдвига не
влияют на содержимое других аккумуляторов, выполняются без
всяких условий и не изменяют RLO.
Число сдвигаемых позиций задается либо содержимым ак-
кумулятора 2, либо непосредственно в инструкции.
В первом случае программирование функций сдвига произ-
водится в соответствии с алгоритмом:
– загрузка числа позиций n;
– загрузка сдвигаемого числа;
– функция сдвига;
– передача результата.
Во втором случае алгоритм программирования имеет сле-
дующий вид:
– загрузка сдвигаемого числа;
– функция сдвига с параметром n;
– передача результата.
Функции сдвига устанавливают бит состояния CC0 в «0», а в
бит CC1 записывается последний перемещенный за аккумулятор
бит. Биты состояния проверяются с помощью двоичного опроса
или в операциях перехода. На рис. 6.7 показано выполнение
функций сдвига.
Приведем примеры применения функций сдвига.
Пример 8. Сдвиг слова вправо.
L MW 100 // Загрузка числа из области памяти
// в аккумулятор 1
SRW 3 // Сдвиг на три позиции
T MW 100 // Пересылка результата
Пример 9. Циклический сдвиг влево.
L3 // Загрузка константы
L MD 10 // Загрузка сдвигаемого слова и
// передача числа 3 в аккумулятор 2
RLD // Циклический сдвиг влево

179
T MD 20

Рис. 6.7. Выполнение функций сдвига


Функции сдвига для слова воздействуют только на младшее
слово в аккумуляторе 1. Функция циклического сдвига с битом

180
состояния CC1 смещает содержимое аккумулятора 1 на один
разряд. Функции сдвига можно выполнять последовательно лю-
бое число раз.
Сдвиг слова влево и вправо (SLW и SRW) позволяет сдви-
гать младшее слово аккумулятора, заполняя нулями освобожда-
ющиеся разряды. Вытесняемые биты записываются в бит состо-
яния CC1, а затем пропадают.
Функции сдвига зачастую используются для умножения или
деления на целое число, кратное 2. Сдвиг в сторону старших би-
тов эквивалентен умножению, а в сторону младших битов – де-
лению.
Аналогично работают функции сдвига двойного слова (SLD
b SRD). При этом сдвигается весь аккумулятор.
При сдвиге слова данных со знаком (SSI) бит 15 интерпре-
тируется как знак числа и происходит сдвиг вправо. При этом
освобождаемые разряды заполняются значением знакового би-
та 15.
При сдвиге двойного слова (SSD) сдвигаются биты всего ак-
кумулятора, а знаковый разряд – бит 32.
Операции циклического сдвига позволяют сдвигать разряды
влево или вправо. При этом освобожденный бит заполняется
значением выталкиваемого бита.
При циклическом сдвиге через бит состояния CC1 освобож-
даемый бит заполняется содержимым бита состояния CC1, а вы-
талкиваемый бит записывается в CC1. При этом бит состояния
CC0 всегда устанавливается в состояние «0».
6.7. ЛОГИЧЕСКИЕ ФУНКЦИИ ДЛЯ СЛОВ ДАННЫХ
Логические функции для слов данных позволяют побитно
выполнять логические функции для значений, находящихся в
аккумуляторах 1 и 2. Они отличаются от обычных логических
функций тем, что выполняются не над двоичными переменны-
ми, а над 16-разрядными или 32-разрядными числами. Результат
операции сохраняется в аккумуляторе 1. Эти логические функ-

181
ции могут выполняться для слов и для двойных слов. В STL для
слов данных существуют логические операции И (AW, AD),
ИЛИ (OW, OD), ИСКЛЮЧАЮЩЕЕ ИЛИ (XOW, XOD).
Логические функции для слов данных программируются
следующим образом:
– загрузка переменной 1;
– загрузка переменной 2;
– логическая операция без константы;
– передача результата.
Также при реализации логической функции для слов данных
можно использовать константу как параметр:
– загрузка переменной;
– логическая операция c константой;
– передача результата.
Логические функции для слов данных всегда выполняются
вне всяких условий и они не влияют на результат логической
операции.
Логические функции для слов данных формируют результат
операции бит за битом таким же образом, как и функции двоич-
ной логики. При этом бит 0 аккумулятора 1 комбинируется с би-
том 0 аккумулятора 2, результат сохраняется в бите 0 аккумуля-
тора 1. Таким же образом логическая операция выполняется для
битов 1, 2 и т.д. Содержимое аккумулятора 2 при этом остается
неизменным.
Логические функции, выполняемые со словами, используют
только младшие слова аккумуляторов 1 и 2.
Логические операции для слов данных можно применять по-
следовательно друг за другом, например:
L X1
L X2
OW
L X3
XOW
T Y

182
С помощью логических операций для слов данных удобно
маскировать (задавать содержимое слова в соответствии с их со-
держимым – «0» или «1») отдельные биты переменных или
сбрасывать/устанавливать определенные биты переменных,
например код
L MW 10.0
AW W#16#F0F0
T MW 11.0
обнуляет байты 0 и 2 аккумулятора 1, так как результат логиче-
ского умножения на «0» всегда равен нулю, а умножение на «1»
зависит от второго операнда.
Приведем синтаксис логических операций для слов данных:
AW // Операция логического умножения И
// для слов в аккумуляторах 1 и 2;
AW W#16# // Операция логического умножения И
// для слова в аккумуляторе 1 и константы
AD // Операция логического умножения И для
// двойных слов в аккумуляторах 1 и 2
AD DW#16# // Операция логического умножения И для
// двойного слова в аккумуляторе 1 и
// константы
OW // Операция логического сложения ИЛИ
// для слов в аккумуляторах 1 и 2
OW W#16# // Операция логического сложения
// ИЛИ для слова в аккумуляторе 1 и
// константы
OD // Операция логического сложения
// ИЛИ для двойных слов в аккумуляторах 1 и 2
OD DW#16# // Операция логического сложения
// ИЛИ двойного слова в
// аккумуляторе 1 и константы
XOW // ИСКЛЮЧАЮЩЕЕ ИЛИ для слов в
// аккумуляторах 1 и 2
XOW W#16# // ИСКЛЮЧАЮЩЕЕ ИЛИ для слова в

183
// аккумуляторе 1 и константы
XOD // ИСКЛЮЧАЮЩЕЕ ИЛИ для двойных
// слов в аккумуляторах 1 и 2
XOD DW#16# // ИСКЛЮЧАЮЩЕЕ ИЛИ для двойного
// слова в аккумуляторе 1 и константы
6.8. ЗАДАНИЯ НА ЛАБОРАТОРНУЮ РАБОТУ
Вариант 0
Необходимо подключить синхронный генератор электро-
станции к ее шинам при следующих условиях:
1. E Гm ХХ − U Ш
m
< 5 B , где E Гm ХХ – амплитуда напряжения
генератора на холостом ходу, U Ш m
– амплитуда напряжения на
шинах электростанции;
2. E Гϕ ХХ − U Ш
ϕ
< 0,05 рад , где E Гϕ ХХ – фаза напряжения ге-
ϕ
нератора на холостом ходу, U Ш – фаза напряжения на шинах
электростанции;
3. ω Г − ω C < 0,1 рад / c , где ω Γ – частота генератора,
ω C = 50 Гц – синхронная частота.
Если условия подключения выполнены, то необходимо вы-
числить динамически воздействующие возмущения:
δ 
1. ∆U = 2 E Гm ХХ sin  в  , где δ в – электрический угол;
 2
″ ∆U ″
2. I в = , где X d – сверхпереходное сопротив-

X d + X св
ление, X св – сопротивление связи;

3. M c =
(E )
m
Г ХХ
2

sin (d в ) .

X d + X св
Вариант 1

184
Необходимо реализовать алгоритм работы синхронизатора,
который состоит в следующем:
dω s
1. Измеряем частоту скольжения и ее ускорение ω s и .
dt
dω s рад
2. Если < 0.05 2 , то вычисляем:
dt с
t оп = 0,5 c ;
dω s t оп
2
d оп = ω s t оп + .
dt 2
3. Если δ + δ оп − 2π < 0,01 рад , то включается автоматиче-
ский синхронизатор.
Вариант 2
Необходимо вычислить мнимо-статический закон автома-
тического регулирования частоты и мощности гидрогенератора
в соответствии с алгоритмом:
1. Измерение: напряжения ЭДС сельсина E P , пропорцио-
нальной мощности синхронного генератора; эквивалентного
напряжения U ab ; частоты генератора f Г .
E P − U ab
2. Вычислить величины U вх = , ∆f = f Г − 50 .
1 + Rвых / Rвх
3. Если выполнены условия U вх > 1 B или ∆f > 0,05 Гц , то
вычислить и выдать воздействие автоматического регулятора
частоты и мощности U = 2,0∆f + 1,5U вх .

185
Вариант 3
Необходимо реализовать алгоритм управления синхронным
компенсатором, который состоит в следующем:
1. Измерение реактивной мощности Pr электрического уг-
ла ϕ , напряжения на шине U Ш .
2. Если мощность емкостная, т.е. ϕ < 0,05 рад, то выдаем
задающее воздействие на синхронный компенсатор
X P
E q0 = U Ш + d r .

3. Если мощность индуктивная, т.е. ϕ > 0,05 , то выдаем за-
дающее воздействие на синхронный компенсатор
X P
E q0 = − U Ш − d r .

4. Если − 0,05 < ϕ < 0,05 , то E q0 = E qXX .
5. Если E q0 < E qmin , то E q0 = E qmin .

Вариант 4
Реализовать алгоритм управления источником реактивной
мощности, который состоит в следующем:
1. Считать зону нечувствительности ∆U H и максимальное
время воздействия на регулирующий орган Tmax .
2. Измерить реальное отклонение напряжения ∆U .
∆U
3. Вычислить коэффициент B = .
∆U H
4. Если ∆U > ∆U H , то время воздействия вычисляется по
T
формуле t P = max .
2 B −1
5. Если ∆U < 0,75∆U H , то параметр t p обнуляется.

186
Вариант 5
Реализовать упрощенный алгоритм управления мощностью
турбогенератора, который состоит в следующем:
1. Измерение заданного P 0 и реального P значений мощ-
ности. Вычисление ∆P = P 0 − P .
2. Если ∆P > 0 и ∆P > ∆Pmin , то вычисляем задающее воз-
действие на турбогенератор U = k1 ∆P + k 2 ∆P 3 .
3. Если ∆P < 0 и − ∆P < −∆Pmin , то вычисляем задающее
воздействие на турбогенератор U = −k1 ∆P − k 2 ∆P 3 .
Вариант 6
Определить мощность разгрузки в послеаварийном режиме
в соответствии с алгоритмом:
1. Измеряем мощность линии в нормальном режиме Pл.н ,
предельную мощность в нормальном режиме Рпр.н и предельную
мощность в послеаварийном режиме Рпр.па .
2. Если Pл.н < 0,5 Рпр.н , то мощность разгрузки вычисляем
0,9 Pпр.па
по формуле ∆P = 1,1Pл.н − .
1,08
3. Если Pл.н > 0,5 Рпр.н , то мощность разгрузки вычисляем
Pпр.н − 0,1Pл.н 0,9 Pпр.па
по формуле ∆P = − .
1,2 1,08
Вариант 7
Реализовать алгоритм обнаружения асинхронного режима,
который состоит в следующем:
1. Измерение амплитуды напряжений двух подсистем
E1 = E 2 = E и угла между ними δ .

187
2E δ
2. Вычисление тока асинхронного режима I ap = sin .
X 2
3. Если выполняется условие 1.25 I ap max < I ap < I ap min / 1,5 , то
асинхронный режим не обрабатывается.
4. В противном случае выдается сигнал асинхронного ре-
жима.
Вариант 8
Реализовать алгоритм отключения дефицита нагрузки, ко-
торый состоит в следующем:
1. Измеряем частоту сети f и номинальную мощность
Pном .
2. Если частота f ≤ 48,5 Гц, то отключаемая мощность вы-
числяется по формуле P1 = 0,024 ⋅ ( f ном − f ) ⋅ Pном .
3. Если частота сети f ≤ 48 Гц, то отключаемая мощность
вычисляется по формуле P2 = 0,024 ⋅ ( f ном − f ) ⋅ (1 − P1 ) .
4. Если частота сети f ≤ 47,5 Гц, то отключаемая мощ-
ность вычисляется по формуле P3 = 0,024 ⋅ ( f ном − f ) ⋅ (1 − P2 ) .
Вариант 9
Реализовать алгоритм управления частотой и мощностью
турбогенератора, который состоит в следующем:
1. Измеряем выходное напряжение генератора U , момент
на валу турбины M T , электрический угол δ , частоту вращения
вала турбогенератора ω , токи iq , id и ЭДС синхронного генера-
тора E q .
2. Вычисляем ошибки по выражениям ψ 1 = U 2 − U 02 ,
ψ 2 = M T + 4,2 * (d − π / 3 + 3 ⋅ (ω − 1,0 )) + E q iq + iq id (x d − x q ), где
U 0 = 1 , x d , x q – сопротивления.

188
3. Если ψ 1 + ψ 2 > 0,1 , то необходимо выдать сигнал о за-
пуске программы автоматического регулирования. В противном
случае выдается сигнал нормальной работы.
Вариант 10
Реализовать алгоритм управления двигателем постоянного
тока независимого возбуждения, который состоит в следующем:
1. Измерение частоты вращения вала ω , тока якоря I , по-
тока возбуждения Φ и момента сопротивления m .
2. Вычисление переменных
−0.25
   ω −ω0 
⋅ 
− 0.5 0,39
ψ1 = I − m ⋅  m −  ,
 0,12 + 0,29 ω 1.3   0.5 
 
0.25
 
ψ 2 = Φ − m ⋅  .
0.50,39
 0,12 + 0,29 ω 1.3 
 
3. Если переменная ψ 1 или ψ 2 по модулю больше 1.0, то
запустить программу регулирования.
Примечание. Во всех вариантах чтение аналоговых величин
производить из памяти, предварительно записав туда действи-
тельные или целые числа. Все незаданные параметры в вариан-
тах назначаются произвольно и могут быть взяты единичными.

6.9. ПРИМЕР ВЫПОЛНЕНИЯ РАБОТЫ


Рассмотрим реализацию алгоритма автоматического управ-
ления состоянием модели Лоренца, который состоит в следую-
щем:
1. Измеряем переменные x , y , z .
2. Если x 2 + y 2 + z 2 > 0 , то вычисляем выражение для
управления u = −49 x − 6 y + 2 xz .
Программа реализующая данный алгоритм, имеет вид
L 1.0 // Предварительная загрузка переменных
189
T "x" // x=1, y=1, z=1 в память, загрузка
L 1.0 // производится через аккумулятор
T "y"
L 1.0
T "z"
L "x" // Начало программы, загрузка x
SQR // Вычисление x2
L "y" // Загрузка y, x2 в аккумулятор 2
SQR // Вычисление y2
+R // Сложение x2 + y2
L "z" // Загрузка z, x2 + y2 в аккумулятор 2
SQR // Вычисление z2
+R // Сложение x2 + y2 + z2
L 0.0 // Загрузка 0, x2 + y2 + z2 в аккумулятор 2
>R // Сравнение x2 + y2 + z2 с 0
JCN end // Если x2 + y2 + z2 равно 0, то переход
L "x" // Вычисление управления, загрузка x
L -49,0 // Загрузка - 49,0, x в аккумулятор 2
*R // Умножение - 49,0*x
T "u" // Передача результата в u
L "y" // Загрузка y
L - 6,0 // Загрузка - 6,0, y в аккумулятор 2
*R // Умножение - 6,0*y
L "u" // Загрузка - 49,0*x, - 6,0*y в аккумулятор 2
+R // Сложение -49,0*x + ( - 6,0*y)
T "u" // Сохранение результата в u
L 2,0 // Загрузка 2,0
L "x" // Загрузка x
*R // Вычисление 2,0*x
L "z" // Загрузка z, 2,0*x в аккумулятор 2
*R // Вычисление 2,0*x*z
L "u" // Загрузка - 49,0*x - 6,0*y, 2,0*x*z
// в аккумулятор 2
+R // Вычисление - 49,0*x - 6,0*y + 2,0*x*z

190
T "u" // Передача управления в u
end: NOP 0 // Конец программы
6.10. РАБОТА В ЛАБОРАТОРИИ
Работа в лаборатории состоит в следующем.
1. Набрать и отладить программу, реализующую заданный
вариант. Программу оформить в виде функции в проекте, со-
зданном в предыдущих работах. Функция вызывается на выпол-
нение в основном организационном блоке OB 1.
2. Проверить работу программы при тестовых значениях пе-
ременных, являющихся исходными данными. Тестовые значения
выбираются самостоятельно.
3. Результаты выполнения программы продемонстрировать в
PLCSIM, где нужно просмотреть состояние всех используемых
ячеек памяти, входов, выходов и аккумуляторов.
6.11. ДОМАШНЕЕ ЗАДАНИЕ И ТРЕБОВАНИЯ К ОТЧЕТУ
Допуском к выполнению лабораторной работы является вы-
полненная самостоятельная работа, заключающаяся в следую-
щем:
1. Изучить методическое описание.
2. Подготовить алгоритм, реализующий заданный вариант.
3. Написать программу на STL, реализующую заданный ал-
горитм.
4. Подготовиться к ответам на контрольные вопросы.
Отчет по работе должен содержать:
1. Название и цель работы.
2. Задание в соответствии со своим вариантом.
3. Алгоритм, реализующий заданный вариант.
4. Функцию на языке STL, результаты выполнения про-
грамм.

КОНТРОЛЬНЫЕ ВОПРОСЫ

191
1. Приведите формат числа BCD.
2. Какой формат имеет число REAL?
3. Опишите формат семиразрядного числа BCD.
4. Приведите схему программирования функций сравнения.
Какие функции сравнения вы знаете?
5. Приведите схему выполнения арифметических функций.
Опишите основные арифметические функции.
6. Приведите описание и схему программирования основных
математических функций на языке STL.
7. Каким образом выполнить возведение числа в произволь-
ную степень? Каким образом вычисляется логарифм числа по
произвольному основанию?
8. Перечислите основные функции преобразования чисел.
9. Опишите основные функции для сдвига данных.
10. Приведите описание основных логических функций для
слов и двойных слов данных.
7. УПРАВЛЕНИЕ ВЫПОЛНЕНИЕМ ПРОГРАММЫ В
КОНТРОЛЛЕРАХ S 300/400
К операторам управления выполнением программы обычно
относят операторы ветвления и циклов. Кроме того, изменить
выполняемую программу можно, вызвав функцию или функци-
ональный блок или реализовав механизм прерывания.
STEP 7 и язык программирования STL позволяет реализо-
вать ряд стандартных в программировании способов управления
выполнением программы. К таким способам относятся:
1. Возможности ветвления по битам состояния с помощью
специальных функций перехода.
2. Создание структуры программы в виде вызываемых
функций.
3. Ветвление по функциям перехода, зависящим от резуль-
тата логической операции.
4. Возможность прерываний.

192
Информацию о битах состояния можно использовать для
ветвлений, зависящих от результатов выполнения арифметиче-
ских и математических функций. Информацию о битах состоя-
ния используют некоторые условные функции перехода. Не все
биты состояния доступны для использования, существуют биты,
которые используются только процессором в целях организации
и управления вычислительным процессом.
В целом функции перехода могут быть безусловные или
условные. При этом условия могут задаваться либо по отдель-
ному биту состояния, либо по результату логической операции.
С помощью функций перехода также программируются циклы.
Для управления программой в STL также используется
главное управляющее реле. Также можно использовать одни и те
же блоки с разными параметрами, программируя блоки функций
и задавая их параметры.
7.1. БИТЫ СОСТОЯНИЯ
Биты состояния содержатся в регистре состояния процессо-
ра. Они устанавливаются при обработке чисел. Некоторые биты
можно устанавливать программно.
В табл. 7.1 представлены биты состояния, доступные при
программировании на языке STL.
Бит состояния /FC управляет двоичными логическими опе-
рациями внутри логического устройства управления, которое
является частью АЛУ. Логическая операция всегда начинается с
первичного опроса при /FC = «0», т.е. «0» указывает на то, что
далее начнется цепочка логических операций. Первичный опрос
устанавливает бит /FC в «1», которая указывает на выполнение
логической операции в данный момент времени. Логическая
операции заканчивается присвоение двоичного значения, услов-
ным переходом, или изменением блока (вызовом функции или
другого блока). Любая из перечисленных операций сбрасывает
бит /FC в «0».

193
Таблица 7.1
Биты состояния
Бит Название Назначение
0 /FC Первичный опрос
1 RLO Результат логической операции
2 STA Состояние (статус)
3 OR Бит состояния OR
4 OS Переполнение с запоминанием
5 OV Переполнение
6 CC0 Условный код
7 CC1 Условный код
8 BR Двоичный результат

Бит RLO – результат логической операции – является про-


межуточным буфером в логических операциях. В него записы-
вается результат выполнения любого логического оператора.
Кроме того, на RLO влияет ряд других функций. При первичном
опросе CPU передает результат опроса в RLO, а при каждом по-
следующем опросе RLO является одним из операндов логиче-
ской операции. Этот бит можно устанавливать, сбрасывать или
инвертировать. Также можно сохранять его в бите BR. Функции
счетчика, таймера, операции с памятью и функции перехода ис-
пользуют результат логической операции RLO.
Бит статуса STA сохраняет значение адресованного бита
для команд опроса, установки и сброса. При записи этот бит
устанавливается после выполнения операции. При проверке
наличия фронта сигнала (оператор FP или FN) в бите STA со-
храняется значение результата логической операции RLO до са-
мой операции проверки фронта. Все остальные двоичные опера-

194
ции и переходы, зависящие от состояния двоичного флага: JC,
JCN, JBI, JNBI, устанавливают бит STA в «1». Исключение со-
ставляет оператор очистки CLR. Бит статуса STA не влияет на
обработку операторов, он используется в целях отладки.
Бит OR устанавливается в «1», если операция ИЛИ выпол-
няется после И, которая завершилась «1». В этом случае опера-
цию ИЛИ нет смысла выполнять, так как её результат уже опре-
делен, он равен «1».
Бит состояния OV (переполнение) показывает переполне-
ние или использование некорректных действительных чисел. На
состояние бита OV влияют арифметические, математические
функции, отдельные функции преобразования, функции сравне-
ния действительных чисел. Бит OV сбрасывается, если результат
находится в разрешенном диапазоне, т.е. он не сохраняет ин-
формацию о переполнении в дальнейшем.
Бит состояния OS фиксирует факт переполнения, дублируя
бит OV. При этом бит состояния OV в дальнейшем может быть
сброшен, а бит OS сохранит информацию о состоявшемся пере-
полнении. Оператор перехода JOS или смена блока сбрасывает
бит состояния OS.
Биты состояния CC0, CC1 (условные биты) дают информа-
цию о результатах выполнения функций сравнения, арифмети-
ческих и математических функций, логических операций для
слов данных или о состоянии вытолкнутых битов в случае вы-
полнения операций сдвига.
Бит состояния BR (двоичный результат) помогает реализо-
вать механизм для вызовов блоков в сочетании с графическими
языками.
Все биты состояния хранятся в слове состояния, которое
можно загружать в аккумулятор:
L STW // Загрузить слово состояния
T STW // Записать в слово состояния

195
Функции обработки чисел влияют на биты состояния CC0,
CC1, OV и OS, как показано в таблицах 7.2 – 7.9. Отдельные
операторы языка STL влияют на биты состояния RLO и BR.
Таблица 7.2
Флаги при операциях с данными INT
Результат CC0 CC1 OV OS
< – 32 768 ( + I, – I) 0 1 1 1
< – 32 768 ( *I ) 1 0 1 1
От – 32 768 до – 1 1 0 0 –
0 0 0 0 –
От + 1 до + 32 767 0 1 0 –
> 32 767 ( + I, – I) 1 0 1 1
> 32 767 ( *I ) 0 1 1 1
32 768 ( /I ) 0 1 1 1
( – )65 536 0 0 1 1
Деление на 0 1 1 1 1
Арифметические функции при использовании данных INT
и DINT могут устанавливать все биты состояния. В случае ре-
зультата, равного нулю, биты CC0 и CC1 сбрасываются в «0».
Сочетание CC0 «0» и CC1 «1» сообщает о положительном ре-
зультате выполненной операции. Сочетание CC0 «1» и CC1 «0»
сообщает об отрицательном результате выполненной операции.
Переполнение устанавливает биты OV и OS. Деление на ноль
вызывает установку в «1» для всех числовых битов.

196
Таблица 7.3
Флаги при операциях с данными DINT
Результат CC0 CC1 OV OS
< – 2 147 483 648 (+D, –D) 0 1 1 1
< – 2 147 483 648 (*D) 1 0 1 1
От – 2 147 483 648 до – 1 1 0 0 –
0 0 0 0 –
От + 1 до + 2 147 483 648 0 1 0 –
> 2 147 483 648 (+D, – D) 1 0 1 1
> 2 147 483 648 (*D) 0 1 1 1
2 147 483 648 ( /D) 0 1 1 1
(–)4294967296 0 0 1 1
Деление на 0 (/D, MOD) 1 1 1 1

Таблица 7.4
Флаги при операциях с данными REAL
Результат CC0 CC1 OV OS
+ нормирован 0 1 1 1
± ненормирован 1 0 1 1
± 0 1 0 0 –
– нормирован 0 0 0 –
+ бесконечность 0 1 0 –
– бесконечность 1 0 1 1
± некорректное REAL 0 1 1 1

197
Арифметические функции для данных REAL могут устанав-
ливать все числовые биты состояния. Если результат равен ну-
лю, биты CC0 и CC1 сбрасываются в 0».
Таблица 7.5
Флаги при операциях сравнения
Результат CC0 CC1 OV OS
равен 0 0 0 –
больше чем 0 1 0 –
меньше чем 1 0 0 –
некорректное REAL 1 1 1 1
Таблица 7.6
Флаги при преобразовании данных NEGI
Результат CC0 CC1 OV OS
+ 1 … + 32 767 0 1 0 –
0 0 0 0 –
– 32 768 … – 1 1 0 0 –
( – ) 32 768 1 0 1 1
Таблица 7.7
Флаги при преобразовании данных NEGD
Результат CC0 CC1 OV OS
+ 1 … + 2 147 483 647 0 1 0 –
0 0 0 0 –
– 2 147 483 648 … –1 1 0 0 –
( – )2 147 483 648 1 0 1 1
Сочетание CC0 «0» и CC1 «1» сообщает о положительном
результате. Сочетание CC0 «1» и CC1 «0» сообщает об отрица-
тельном результате. Переполнение устанавливает биты OV и OS
в «1». При обработке некорректного действительного числа про-
198
исходит установка в «1» всех числовых битов состояния. Дей-
ствительное число относится к ненормированным, если оно
меньше 1.175 494 е-38. S7-300 интерпретируют ненормирован-
ные числа REAL как ноль.
Таблица 7.8
Флаги при сдвиге
Результат CC0 CC1 OV OS
«0» 0 0 0 –
«1» 0 1 0 –
с числом позиций 0 – – – –
Таблица 7.9
Флаги при логических операциях со словами
Результат CC0 CC1 OV OS
ноль 0 0 0 –
не ноль 0 1 0 –
Функции инвертирования влияют на все числовые биты со-
стояния. Кроме того, функции ITB, DTB, RND+, RND-, RND,
TRUNC устанавливают биты состояния OV и OS в случае появ-
ления ошибок.
Функции сравнения и логические функции для слов данных
устанавливают биты CC0 и CC1.
Оператор SET устанавливает RLO, STA, OR и /FC в «1», а
CLR – сбрасывает RLO, STA, OR и /FC в состояние «0».
Прямая установка и сброс результата логической операции
RLO используются с таймерами и счетчиками. Для запуска тай-
мера и счетчика необходимо изменить бит RLO с «0» на «1» при
положительном фронте сигнала разрешения.
В бите BR с помощью оператора SAVE можно сохранить
двоичный результат. Оператор SAVE пересылает RLO в BR:
SET// Установка RLO в «1»

199
SAVE // Установка BR в «1»
Биты RLO (результат логической операции) и BR (двоич-
ный результат) и все числовые флаги могут быть проверены
(считаны) с помощью операций двоичного опроса и функций
перехода. Для этого можно использовать все операторы опроса,
основанные на логических операторах: A, O, X, AN, ON, XN.
При переполнении устанавливаются биты OV и OS. В
дальнейшем флаг OV может быть сброшен. Флаг OS сбрасыва-
ется только при встрече функции перехода JOS или при вызове
нового блока.
Далее в качестве примеров представлены две программы
проверки – с двоичным опросом и с использованием функций
перехода.
Двоичный опрос
L x1
L x2
+I
A OV // Проверка переполнения при сложении
= flag1
L x3
*I
A OS // Проверка переполнения при
// сложении и умножении
= flag2
Функции перехода
L x1
L x2
+I
JO m1 // Переход при переполнении суммы
L x3
*I
JOS STOV // Переход при переполнении суммы или/и
// умножения
7.2. ФУНКЦИИ ПЕРЕХОДА

200
С помощью функций перехода осуществляется ветвление
программы. В STL существуют условные и безусловные опера-
торы переходов. Также есть два особых оператора – распреде-
литель переходов с проверкой параметров и циклический пере-
ход. Основная масса переходов являются условными. Кроме то-
го, следует отметить, что STL не различает дальние и ближние
переходы.
Существуют следующие операторы переходов:
JU метка // Безусловный переход
JC метка // Переход, если RLO (результат логической
операции) равен «1»
JCN метка // Переход, если RLO (результат логической
операции) равен «0»
JCB метка // Переход, если RLO (результат логиче-
ской операции) равен «1» и сохранение RLO
JNB метка // Переход, если RLO (результат логической
операции) равен «0» и сохранение RLO
JBI метка // Переход, если BR (двоичный результат) ра-
вен «1»
JBI метка // Переход, если BR (двоичный результат) ра-
вен «0»
JZ метка // Переход, если результат предыдущей опе-
рации равен нулю
JN метка // Переход, если результат предыдущей опе-
рации не равен нулю
JP метка // Переход, если результат предыдущей опе-
рации больше нуля
JPZ метка // Переход, если результат предыдущей опе-
рации больше или равен нулю
JM метка // Переход, если результат предыдущей опе-
рации меньше нуля
JMZ метка // Переход, если результат предыдущей опе-
рации меньше или равен нулю

201
JUO метка // Переход, если результат предыдущей опе-
рации неверен
JO метка // Переход при переполнении по биту OV
JOS метка // Переход при переполнении по биту OS
JL метка // Переход в распределителе переходов
LOOP метка // Переход циклический
Инструкция перехода содержит оператор, определяющий
условие, и метку, которая показывает, в какую точку программы
осуществляется переход. Метка перехода содержит до 4 симво-
лов алфавита и числового ряда, а также символ подчеркивания.
Метка перехода не может начинаться с цифры. После метки пе-
рехода должно следовать двоеточие. Строка с меткой обязатель-
но должна содержать оператор. Если переход осуществляется на
конец программы, то можно использовать оператор NOP.
Переход может выполняться вперед или назад, но только
внутри блока. Переход в другой организационный блок осу-
ществляется посредством вызова. На одну метку можно перехо-
дить из разных точек программы.
Функция безусловного перехода JU выполняется всегда, т.е.
не зависит ни от каких условий. Функция JU прерывает после-
довательное выполнение программы и продолжает его с метки
перехода, указанной в инструкции. Функция безусловного пере-
хода JU не влияет на биты состояния. Если встречаются опера-
торы проверки, такие как A I, O I и т.д., располагающиеся непо-
средственно перед функцией перехода и сразу после метки пе-
рехода, то они воспринимаются как отдельные логические опе-
рации.
Переход в программе может зависеть от битов RLO и BR,
как видно из списка операторов перехода. Кроме того, при пере-
ходах можно сохранить результаты проверки битов состояния
RLO и BR.
Функции перехода, зависящие от RLO, устанавливают биты
состояния STA и RLO в «1», а OR и /FC в «0», и при выполнении

202
условия для перехода, и при невыполнении этого условия. Это
приводит к следующим последствиям:
1. RLO всегда устанавливается в состояние «1», поэтому
операторы, следующие сразу за функцией перехода и зависящие
от RLO, всегда выполняются, если переход не выполнен.
2. Логические операторы опроса битов, стоящие сразу за
функцией перехода, воспринимаются как операции первичного
опроса, т.е. после перехода логические операторы начинаются
заново.
Функции перехода, зависящие от бита BR (двоичный ре-
зультат), устанавливают бит состояния STA в «1», а биты OR и
/FC в «0», и при выполнении условия для перехода, и при невы-
полнении этого условия. Биты состояния BR и RLO остаются
неизменными. Это приводит к следующим особенностям:
1. Такие функции перехода завершают логическую опера-
цию.
2. Новая логическая операция начинается после таких функ-
ций перехода или с метки перехода.
3. Бит состояния RLO остается и может быть проверен с по-
мощью операций с памятью сразу после функции перехода.
Функция условного перехода JC выполняется, если резуль-
тат логической операции RLO равен «1», в противном случае
переход не выполняется и программа продолжает выполняться
со следующей инструкции.
Функция условного перехода JCN выполняется, если ре-
зультат логической операции RLO равен «0», в противном слу-
чае переход не выполняется и программа продолжает выпол-
няться со следующей инструкции.
Функция условного перехода JCB выполняется, если резуль-
тат логической операции RLO равен «1». При этом оператор JCB
устанавливает бит BR в состояние «1». Если RLO равен «0», то
переход не выполняется и обрабатывается следующая инструк-
ция. В этом случае бит BR устанавливается в «0».

203
Функция условного перехода JNB выполняется в случае, ес-
ли результат логической операции RLO равен «0», при этом опе-
ратор JNB устанавливает бит BR в состояние «0». Если RLO ра-
вен «1», то переход не выполняется, обрабатывается следующая
инструкция и бит BR устанавливается в состояние «1».
Функция условного перехода JBI выполняется, если бит BR
(двоичный результат) равен «1», в противном случае выполняет-
ся следующая инструкция.
Функция условного перехода JBIN выполняется, если бит
BR равен «0», в противном случае выполняется следующая ин-
струкция.
Функции перехода, зависящие от битов CC0 и CC1 (от знака
результата), не изменяют никаких битов состояния. Если пере-
ход выполнен, значение результата логической операции RLO
остается и может использоваться далее в программе (без изме-
нения в /FC).
Функция условного перехода JZ выполняется, если биты со-
стояния CC0 и CC1 равны «0». Это случается в следующих слу-
чаях:
1. Аккумулятор 1 содержит «0» после арифметической или
математической операции.
2. Аккумулятор 2 содержит то же значение, что и аккумуля-
тор 1 при выполнении операции сравнения.
3. Аккумулятор 1 содержит «0» после выполнения логиче-
ской операции для чисел.
4. Значение сдвинутого последним бита содержит «0» после
выполнения операции сдвига.
Во всех остальных случаях условие перехода для функции
JZ не выполняется и выполняется следующая инструкция.
Функция условного перехода JN выполняется, если биты со-
стояния CC0 и CC1 имеют разные значения. Этот случай имеет
место, в следующих случаях:
1. Аккумулятор 1 не содержит «0» после арифметической
или математической операции.

204
2. Аккумулятор 2 не содержит то же значение, что и акку-
мулятор 1, при выполнении операции сравнения.
3. Аккумулятор 1 не содержит «0» после выполнения логи-
ческой операции для чисел.
4. Значение сдвинутого последним бита содержит «1» после
выполнения операции сдвига.
Во всех остальных случаях условие перехода для функции
JN не выполняется и обрабатывается следующий оператор.
Функция условного перехода JP выполняется, если бит CC0
равен «0» и бит CC1 равен «1». Этот случай имеет место, в сле-
дующих случаях:
1. Содержимое аккумулятора 1 находится внутри допусти-
мого диапазона положительных значений после арифметической
или математической операции.
2. Содержимое аккумулятора 2 больше значения, находяще-
гося в аккумуляторе 1 при выполнении операции сравнения.
3. Аккумулятор 1 не содержит «0» после выполнения логи-
ческой операции для чисел.
4. Значение сдвинутого последним бита содержит «1» после
выполнения функции сдвига.
Во всех остальных случаях условие перехода для функции
JP не выполняется и обрабатывается следующая инструкция.
Функция условного перехода JPZ выполняется, если бит
CC0 равен «0».
Этот случай имеет место, в следующих случаях:
1. Содержимое аккумулятора 1 находится внутри диапазона
допустимых положительных значений или равно «0» после
арифметической или математической операции.
2. Содержимое аккумулятора 2 больше содержимого акку-
мулятора 1, или равно ему при выполнении операции сравнения.
3. После выполнения каждой логической операции для чи-
сел.
4. После выполнения каждой функции сдвига.

205
Во всех остальных случаях переход по JPZ не выполняется и
обрабатывается следующая команда.
Функция условного перехода JM выполняется, если биты
CC0 и CC1 оба равны «1». Этот случай имеет место, если вы-
полняются следующие условия:
1. Содержимое аккумулятора 1 находится внутри диапазона
допустимых отрицательных значений после арифметической
или математической операции.
2. Содержимое аккумулятора 2 меньше содержимого акку-
мулятора 1 при выполнении операции сравнения.
Во всех остальных случаях переход JM не выполняется и
обрабатывается следующая инструкция.
Функция условного перехода JMZ выполняется, если бит
CC1 равен «0».
Эта ситуация имеет место в следующих случаях:
1. Содержимое аккумулятора 1 находится внутри диапазона
допустимых отрицательных значений или равно «0» после
арифметической или математической операции.
2. Содержимое аккумулятора 2 меньше значения, находяще-
гося в аккумуляторе 1, или равно ему при выполнении операции
сравнения.
Во всех остальных случаях переход JMZ не выполняется и
обрабатывается следующая инструкция.
Функция условного перехода JUO выполняется, если биты
CC0 и CC1 оба равны «1». Этот случай имеет место, если вы-
полняются следующие условия:
1. Совершается попытка деления на ноль.
2. Некорректное действительное число было определено как
исходное значение или было получено при выполнении опера-
ции.
Во всех остальных случаях переход JUO не выполняется и
обрабатывается следующая инструкция.
Функция условного перехода JO выполняется, если бит пе-
реполнения OV равен «1». Это случается, если результат вычис-

206
ления выходит за пределы допустимых значений в предыдущей
операции. Бит состояния OV может быть установлен такими
функциями, как:
1) арифметические функции;
2) математические функции;
3) функции инвертирования числа;
4) функции сравнения для чисел REAL;
5) функции преобразования чисел INT/DINT в BCD и чисел
REAL в DINT.
Если бит переполнения OV равен «0», то переход JO не вы-
полняется и обрабатывается следующая инструкция. Бит OV
сбрасывается, если результат операции находится в допустимом
диапазоне.
Функция условного перехода JOS выполняется, если бит OS
равен «1». Это происходит в тех же случаях, что и для бита OV.
В отличие от OV, бит OS сохраняет свое состояние, если после
его установки результат одной из следующих операций находит-
ся в диапазоне допустимых значений. Бит OS может быть сбро-
шен при следующих обстоятельствах:
1) при вызове блока и при завершении блока;
2) при выполнении перехода JOS.
Если бит OS равен «0», то переход JOS не выполняется и
обрабатывается следующая инструкция.
Распределитель переходов JL позволяет определять перехо-
ды в разделе программы в блоке к разным точкам, отмеченным
метками. Функция JL работает вместе с набором функций пере-
хода JU. Функция JL используется аналогично оператору CASE
для языков высокого уровня, т.е. если необходимо организовать
ветвление по большому числу ветвей.
Последовательность выражений с операторами перехода JU
следует сразу после функции JL и может содержать до 255
строк. В инструкции после оператора JL следует метка перехода,
указывающая на инструкцию, следующую за набором функций

207
перехода JU. Можно программировать распределитель перехо-
дов JL следующим образом:
L Number_of_positions
JL End
JU M0
JU M1
JU M2
...
JU Mx
End: ...
В этом примере переменная Number_of_positions содержит
число, загружаемое в аккумулятор 1. Это число определяет
ветвь, по которой далее будет выполняться программа. Далее
следует распределитель переходов JL с меткой, указывающей на
конец списка функций JU. Номер перехода, который должен
быть выполнен, содержится в правом байте аккумулятора 1. Ес-
ли этот аккумулятор содержит 0, то выполняется первая функ-
ция перехода. Если этот аккумулятор содержит 1, то выполняет-
ся вторая функция перехода и так далее. Если число в аккумуля-
торе превышает размер списка операторов перехода, то проис-
ходит переход на конец списка (на первую инструкцию, следу-
ющую за набором функций перехода JU).
JL не зависит ни от каких условий и не изменяет битов со-
стояния. Он удобен, если есть более двух вариантов ветвления
программы в какой-либо точке.
Функция циклического перехода LOOP позволяет реализо-
вать программные циклы. Обычно циклически выполняемая
программа задается своим организационным блоком. Однако
иногда может потребоваться организовать цикл внутри про-
граммы. Функция LOOP интерпретирует число в правом слове
аккумулятора 1 как беззнаковое 16-разрядное число из диапазо-
на от 0 до 65 535. При обработке функция LOOP сначала декре-
ментирует содержимое аккумулятора 1 на «1». Если результат
не равен «0», то выполняется переход к указанной метке. Если

208
результат после декрементирования равен «0», то выполняется
следующее за циклом выражение. Таким образом, число в акку-
муляторе задает число циклов. Циклический переход LOOP про-
граммируется следующим образом:
LN
Next: T Counter
...
L Counter
LOOP N
В примере переменная N содержит общее число циклов, ко-
торое должно быть выполнено, а переменная Counter содержит
число циклов, которое осталось выполнить.
Функция LOOP не изменяет битов состояния.
7.3. ГЛАВНОЕ УПРАВЛЯЮЩЕЕ РЕЛЕ
Главное управляющее реле (MCR) активирует или деакти-
вирует отдельные фрагменты схемы управления, которая может
состоять из одного или нескольких уровней. При деактивации
уровня выключаются все нереманентные контакторы и остаются
неизменными состояния всех реманентных контакторов. Изме-
нить состояния этих контакторов можно при активации главного
управляющего реле MCR.
Выключение с помощью программного варианта главного
управляющего реле не заменяет антиаварийных или предохра-
нительных устройств. Включение с помощью MCR аналогично
включению посредством операций с памятью.
Язык программирования STL предоставляет следующие
операторы для выполнения функций главного управляющего
реле MCR:
1. MCRA – оператор активации области MCR;
2. MCR( – оператор открытия зоны MCR;
3. )MCR – оператор закрытия зоны MCR;
4. MCRD – оператор деактивации области MCR.

209
Операторы MCRA и MCRD определяют область в програм-
ме, на которую распространяется действие главного управляю-
щего реле MCR. Внутри этой области можно использовать опе-
раторы MCR ( и ) MCR для задания одной или нескольких зон
действия MCR, в которых зависимость от MCR может вклю-
чаться или выключаться. Зона действия реле аналогична участку
цепи. Также можно реализовать вложенные MCR-зоны. Резуль-
тат логической операции RLO, выполняемой непосредственно
перед зоной MCR, включает или выключает MCR - зависимость
внутри этой зоны.
Главное управляющее реле влияет на все операции, которые
записывают значения в память. Такие операции при включении
MCR-зависимости всегда реагируют следующим образом:
1. Оператор присвоения (=) содержимое адреса сбрасывает в
состояние «0».
2. Операторы установки S и сброса R оставляют содержимое
адреса неизменным.
3. Оператор пересылки T пересылает 0.
Некоторые функции STL используют операторы пересылки
для того, например, чтобы записать значение в адресный ре-
гистр. Если MCR - зависимость включена, то выполнение соот-
ветствующей функции не может быть гарантировано. В связи С
ЭТИМ необходимо исключить возможность влияния MCR на
части программы, содержащие следующие элементы:
1) вызовы блоков с параметрами;
2) операции доступа к параметрам блоков, которые относят-
ся к типам параметров (например, BLOCK_DB);
3) операции доступа к параметрам блоков, которые являют-
ся компонентами или элементами сложных типов данных или
типов, определенных пользователем UDT.
MCR - зависимость включается, если перед открытием зоны
результат логической операции RLO равен «0». Если бит RLO
равен «1», то MCR не включается.

210
Пример:
MCRA //Активация MCR
O Input0
MCR( // Открытие MCR-зоны
O Input1
O Input2
= Output0
)MCR // Закрытие MCR-зоны
MCRD // Деактивация MCR
Если переменная Input0 равна «0», то содержимое адреса
Output0 сбрасывается в «0» независимо от входов Input1 и
Input2. Иначе содержание адреса Output0 будет зависеть только
от входов Input1 и Input2.
Для того чтобы определить область действия главного
управляющего реле MCR, применяются операторы MCRA
(начало области) и MCRD (конец области). MCR-зависимость
активна внутри MCR-области, но может быть включена или от-
ключена. Если внутри MCR-области вызывается блок, то MCR-
зависимость является деактивированной в вызванном блоке
(рис. 7.1). По окончании обработки вызванного блока, MCR -
зависимость вновь будет находиться в том состоянии, в котором
она находилась до вызова блока.
MCR-зона включается с помощью операторов
MCR( и )MCR, которые заканчивают текущую логическую опе-
рацию. Т.е. первый логический оператор внутри зоны главного
управляющего реле является первичным опросом. Также можно
открыть другую MCR-зону внутри MCR-зоны. Глубина вложе-
ния для MCR-зон может достигать 8. Если MCR-зона открыта,
можно управлять MCR-зависимостью включенной MCR-зоны с
помощью бита результат логической операции – RLO. Однако
если MCR-зависимость включена в MCR-зоне верхнего уровня,
то нельзя выключить MCR-зависимость в MCR-зоне нижнего
уровня. Главное управляющее реле MCR-зоны управляет MCR-
зависимостью во всех включенных зонах, например:

211
Рис. 7.1. MCR-область при вызове блоков
MCRA // Активируем MCR
A Input3 // Формируем RLO
MCR( // Если RLO равен «0», то включаем зону 1
A Input4 // Если зона 1 включена, то RLO равен «0»
// Независимо от входа Input4, если зона 1
// Выключена, то формируется новый RLO
MCR( // Если RLO равен «0» то включаем зону 2
)MCR // Конец зоны 2

)MCR // Конец зоны 1
MCRD // Деактивация MCR.
Вызов блока внутри MCR-зоны не изменяет ее глубины
вложения, т.е. если в текущем блоке открыта зона 1, и в нее
вложена зона 2, а в вызванном блоке тоже открывается MCR-
зона, то она является вложенной в зону 2 (рис. 7.2).

212
Рис. 7.2. Вложение MCR-зон при вызове блоков
На рис. 7.2 входы Аx1 и Аx2 управляют MCR – за-
висимостью. Посредством входа Аx1 сигналом «0 можно вклю-
чить MCR-зависимость в обеих зонах, независимо от состояния
входа Аx2. Если MCR-зависимость зоны 1 выключена при Аx1
равном «1», то MCR-зависимость в зоне 2 зависит от входа Аx2.
В табл. 7.10 показано состояния MCR-зон в зависимости от вхо-
дов Аx1 и Аx2.
Таблица 7.10
Состояние вложенных MCR-зон
Аx1 Аx2 Зона 1 Зона 2
«1» «1» MCR не вкл. MCR не вкл.
«1» «0» MCR не вкл. MCR вкл.
«0» «1» или «0» MCR вкл. MCR вкл.
При включенной MCR - зависимости устанавливать и сбра-
сывать биты в области входов-выходов можно при помощи си-
стемных функций. Для этого требуется, чтобы биты, которыми

213
необходимо управлять, были в области отображения выходов
процесса.
Системная функция SFC 79 SET предназначена для уста-
новки I/O-битов, а системная функция SFC 80 RSET предназна-
чена для их сброса. (см. табл. 7.11). Эти функции можно вызы-
вать в MCR-зоне. Они работают только в случае, когда MCR-
зависимость включена.
Таблица 7.11
Параметры системных функций для управления I/O-битами
Назначе-
SFC Параметр Тип Описание
ние
Число устанавли-
N INPUT INT
ваемых битов
RET_VA
OUTPUT INT Ошибки
79 L
Указатель на пер-
SA OUTPUT POINTER вый устанавливае-
мый бит
Число сбрасывае-
N INPUT INT
мых битов
RET_VA
OUTPUT INT Ошибки
80 L
Указатель на пер-
SA OUTPUT POINTER вый сбрасываемый
бит

При выполнении установки и сброса I/O-битов одновре-


менно обновляются выходы из области отображения процесса
по выходам. Периферийные входы/выходы (I/O) управляются
побайтно (байт за байтом). Биты, не выбранные с помощью SFC-
функций, сохраняют (в первом и в последнем байте) состояние
сигнала, так как они доступны в области отображения процесса.

214
Пример 1
CALL SFC 79 ( // Установка битов
N := 8, // Устанавливаем 8 бит
RET_VAL := MW 10, // Информация об ошибках в MW 10
SA := P#12.0) // Первый устанавливаемый бит
// PQ 12.0
CALL SFC 80 ( // Сброс битов
N := 16, // Устанавливаем 2 байта
RET_VAL := MW 12, // Информация об ошибках в MW 12
SA := P#13.5) // Первый сбрасываемый бит
// PQ 13.5
7.4. РАБОТА В ЛАБОРАТОРИИ
Работа в лаборатории состоит в следующем.
1. Набрать и отладить программу, реализующую заданный
вариант. Программу оформить в виде функции в проекте, со-
зданном в предыдущих работах.
2. Проверить работу программы при тестовых изменениях
сигналов на входе управляющего устройства.
3. Результаты выполнения программы продемонстрировать в
PLCSIM, где нужно просмотреть состояние всех используемых
входных, выходных байтов, областей памяти и аккумуляторов.
7.5. ДОМАШНЕЕ ЗАДАНИЕ
Допуском к выполнению лабораторной работы является вы-
полненная самостоятельная работа, заключающаяся в следую-
щем:
1. Изучить методическое описание.
2. Подготовить алгоритм, реализующий заданный вариант.
3. Написать программу на STL, реализующую заданный алго-
ритм.
4. Подготовиться к ответам на контрольные вопросы.

215
7.6. ЗАДАНИЯ ДЛЯ ЛАБОРАТОРНОЙ РАБОТЫ
Варианты заданий для лабораторной работы приведены в
табл. 7.12. В таблице задано три условия, состояние входа, по
которому нужно включить MCR-зависимость, и длительность
интервала T.
Таблица 7.12
Варианты операций
№ У1 У2 У3 вход Т
0 x1vx2=0 x3=0 x3=2 x5=0 0,5
1 x1&x2=0 x3=1 x3>2 x5=1 1,0
2 x1=x2 x4<0 x3<= –5 x5=0 1,5
3 x1≠x2 x3+x4>0 x4>=20 x5=1 2,0
4 x1vx2=1 x3$x4=0 x3= –6 x5=0 2,5
5 x1&x2=1 x4<=0 x4<=2 x5=1 3,0
6 x1+x2=0 x4>=0 x3=x4 x5=0 3,5
7 x1+x2=1 x3>0 x4=0 x5=1 4,0
8 x1–x2>0 x3<x4 x4<0 x5=0 4,5
9 x1>0 x3=x4 x3<4 x5=1 5,0

В результате выполнения работы необходимо написать че-


тыре функции. В основной, циклически выполняемой, програм-
ме нужно вызвать основную функцию. В основной функции
проверяются три условия из табл.7.12 и вызываются соответ-
ствующие функции обработки.
Функция, обрабатывающая первое условие, должна устанав-
ливать результат логической операции и передавать его на ин-
дикатор.

216
Вторая функция должна активировать MCR -зависимость,
если состояние входа соответствует варианту, представленному
в табл.7.12.
Третья функция запускает таймер в течение интервала Т и
выдает его состояние на индикатор.
Инверсия имеет самый высокий приоритет.
7.7. ПРИМЕР ВЫПОЛНЕНИЯ ЗАДАНИЯ
Приведем пример выполнения задания для варианта, задава-
емого следующими условиями: У1 x1≠x2; У2 x3&x4=1; У3 x3=1;
x5=0; T=1 c.
Циклически исполняемая программа OB 1
CALL FC 3
Основная программа
L "x1" // Проверка первого условия
L "x2"
–I // Вычисляем x1 – x2
JN p1 // Если Аx1 не равно Аx2, то обработка
// условия 1
JU m1 // Иначе проверяем второе условие
p1: CALL FC 4 // Подпрограмма при выполнении условия
1
m1: A "x3" // Проверка второго условия A "x4"
JCN p2 // Если x3&x4=1, то вызов функции
JU m2 // Переход на проверку условия 3
p2: CALL FC 5 // Подпрограмма при выполнении условия 2
m2: A "x3" // Проверка условия 3
JC p3 // Вызов функции, если условие 3
// выполнено
JU m5 // Иначе переход на конец программы
p3: CALL FC 6 // Обработка условия 3
m5: NOP 0
Функция обработки условия 1
SET // Установка RLO в «1»

217
= "y1" // Запись RLO в переменную y1
Функция обработки условия 2
MCRA // Активация зоны MCR
O "x5" // Опрос входа x5
MCR( // MCR включено, если x5=0
ON "x6" // При x5=1 и x6=1 переход на m3,
JCN m3 // Иначе переход на m4
JU m4
m3: CALL "SET" // Установка выходного байта QB 5 в «1»
N :=8
RET_VAL:=MW10
SA :=P#5.0
m4: )MCR // MCR выключен
MCRD // Деактивация зоны MCR
Функция обработки условия 3
A "x3" // Проверка условия 3
L S5T#1S // Загрузка длительности работы таймера
SP T 1 // Запуск таймера с управляемым импульсом
A T 1 // Опрос состояния таймера
= "y2" // Запись состояния в выход y2.
Примечание. В данном примере в случае невыполнения
условия 2 не производится гашение выходного байта. Для того,
чтобы реализовать такое гашение, необходимо перед проверкой
условия 3 вставить функцию сброса битов SFC 80. При наборе
имени системной функции STEP 7 автоматически формирует
шаблон для задания ее параметров и добавляет функцию в спи-
сок блоков. Системные функции также должны загружаться в
контроллер, как и прочие функции.
7.8. ДОМАШНЕЕ ЗАДАНИЕ ТРЕБОВАНИЯ К СОДЕРЖАНИЮ
ОТЧЕТА
Отчет по работе должен содержать:
1. Название и цель работы.
2. Задание в соответствии со своим вариантом.

218
3. Словесный алгоритм работы управляющего устройства.
4. Функцию на языке STL, результаты выполнения про-
грамм.

КОНТРОЛЬНЫЕ ВОПРОСЫ
1. Какие биты состояния доступны при программировании
на языке STL? Каково их назначение?
2. Какими способами можно считать или установить отдель-
ные биты или все слово состояния?
3. Перечислите функции перехода, использующие биты со-
стояния RLO и BR.
4. Перечислите операторы перехода по результату арифме-
тической операции.
5. Приведите синтаксис распределителя переходов. В каких
случаях он применяется?
6. Опишите оператор циклического перехода LOOP.
7. Для чего применяется главное управляющее реле MCR?
8. Какими операторами программируется MCR?
9. Каким образом работают вложенные друг в друга MCR-
зоны?

ЗАКЛЮЧЕНИЕ
В учебном пособие рассмотрены вопросы применения языка
программирования STL пакета STEP 7 для автоматизированного
проектирования микроконтроллерных систем управления систе-
мами электроснабжения. Рассмотрены основы работы в STEP 7
и функции языка STL, позволяющие реализовывать алгоритмы
автоматического или автоматизированного управления техноло-
гическими процессами на базе контроллеров S 300/400. Приве-
дены примеры проектирования систем.

219
БИБЛИОГРАФИЧЕСКИЙ СПИСОК
1. Бергер Г. Автоматизация посредством STEP 7 с использо-
ванием STL и SCL программируемых контроллеров SIMATIC
S7-300/400. Siemens AG, Нюрнберг, 2001.
2. Программирование с помощью STEP 7 V5.3. Руководство
6ES7810-4CA07-8BW1. Siemens AG, Нюрнберг, 2001.

220
СОДЕРЖАНИЕ
1. Изучение базового программного обеспечения
промышленных контроллеров SIEMENS……. 3
1.1. Основные утилиты STEP 7…………………….. 4
1.2. Элементы проекта в SIMATC MANAGER……. 6
1.3. Создание проекта в SIMATC MANAGER…….. 9
1.4. Конфигурирование аппаратных средств………. 13
1.5. Редактирование блоков…………………………. 24
1.6. Символьные переменные……………………..... 28
1.7. Симулятор контроллера PLCSIM………………. 33
1.8. Пример создания проекта …………………........ 35
1.9. Работа в лаборатории……………………………. 38
1.10. Домашнее задание…………………………....... 39
Контрольные вопросы…………………………. 41
2. Программирование логических схем на базе про-
42
мышленных контроллеров SIEMENS…………..
2.1. Основные логические операторы STL…………. 42
2.2. Операции с памятью…………………………...... 52
2.3. Пример программирования логической управ-
58
ляющей схемы………………………..............
2.4. Работа в лаборатории…………………………… 66
2.5. Домашнее задание и требования к отчету…….. 66
2.6. Задание на лабораторную работу……………….. 67
Контрольные вопросы…………………………... 75
3. Обмен данными в STL программируемых кон-
76
троллерах SIEMENS……………………………….
3.1. Функции загрузки данных в аккумулятор…….. 78
3.2. Функции выгрузки данных в аккумулятор……. 81
3.3. Функции аккумуляторов………………………… 83
3.4. Системные функции для пересылки данных..... 86
3.5. Пример программирования обмена данными…. 90
3.6. Работа в лаборатории……………………………. 92
3.7. Домашнее задание и требования к отчету…….. 93
3.8. Задания для лабораторной работы …………...... 93

221
Контрольные вопросы…………………………... 93
4. Изучение таймеров в STL программируемых кон-
96
троллерах SIEMENS……………………………….
4.1. Программирование функций таймеров……….. 97
4.2. Таймер с управляемым импульсом…………...... 104
4.3. Таймер с расширенным импульсом……………. 108
4.4. Таймер с задержкой включения………………… 111
4.5. Таймер с задержкой включения с памятью……. 114
4.6. Таймер с задержкой выключения………………. 117
4.7. EIC функции таймеров………………………..... 119
4.8. Пример программирования таймера…………… 122
4.9. Работа в лаборатории…………………………… 124
4.10. Домашнее задание и требования к отчету…… 124
4.11. Задания для лабораторной работы……………. 125
Контрольные вопросы…………………………. 134
5. Применение счетчиков при автоматизации про-
цессов посредством логических контроллеров 135
SIEMENS………………………………..................
5.1. Установка и сброс счетчика…………………..... 136
5.2. Счет……………………………………………….. 138
5.3. Опрос счетчика…………………………………… 138
5.4. Разблокировка счетчика………………………… 140
5.5. Последовательность инструкций при использо-
142
вании функций счетчика………………………….
5.6. EIC функции счетчиков………………………… 144
5.7. Примеры использования счетчиков……………. 147
5.8. Работа в лаборатории…………………………… 149
5.9. Домашнее задание и требования к отчету…….. 150
5.10. Задания для лабораторной работы……………. 150
Контрольные вопросы…………………………. 152
6. Изучение функций обработки чисел в контролле-
153
рах S 300/400………………………………………
6.1. Форматы чисел………………………………….. 154
6.2. Функции сравнения…………………………….. 157

222
6.3. Арифметические функции……………………... 163
6.4. Математические функции……………………… 170
6.5. Функции преобразования………………………. 173
6.6. Функции сдвига…………………………………. 178
6.7. Логические функции для слов данных………… 181
6.8. Задания на лабораторную работу………………. 184
6.9. Пример выполнения работы……………………. 189
6.10. Работа в лаборатории………………………….. 191
6.11. Домашнее задание и требования к отчету…… 191
Контрольные вопросы…………………………. 192
7. Управление выполнением программы в контрол-
192
лерах S 300/400…………………………………….
7.1. Биты состояния………………………………….. 193
7.2. Функции перехода…………………………….... 201
7.3. Главное управляющее реле…………………….. 209
7.4. Работа в лаборатории…………………………… 215
7.5. Домашнее задание………………………………. 215
7.6. Задания для лабораторной работы…………….. 216
7.7. Пример выполнения задания…………………… 217
7.8. Требования к содержанию отчета……………… 218
Контрольные вопросы…………………………... 219
Заключение ……………………………………… 219
Библиографический список…………………..... 220

Медведев Михаил Юрьевич

223
Пшихопов Вячеслав Хасанович

ПРАКТИКУМ ПО ИЗУЧЕНИЮ
STL-ПРОГРАММИРУЕМЫХ ПРОМЫШЛЕННЫХ
КОНТРОЛЛЕРОВ SIEMENS

Учебное пособие

Ответственный за выпуск Медведев М.Ю.


Редактор Проценко И.А.
Корректор Чиканенко Л.В., Селезнева Н.И.

ЛР №020565 от 23 июня 1997г. Подписано к печати


Формат 60×84 1/16. Бумага офсетная. Печать офсетная.
Усл.п.л. – 14,0. Уч.-изд.л. – 13,6.
Заказ № Тираж экз.

«С»
____________________________________________________

Издательство Технологического института


Южного федерального университета
ГСП 17А, Таганрог, 28, Некрасовский, 44
Типография Технологического института
Южного федерального университета
ГСП 17А, Таганрог, 28, Энгельса, 1

224

Вам также может понравиться