РОССИЙСКОЙ ФЕДЕРАЦИИ
ФЕДЕРАЛЬНОЕ АГЕНТСТВО ПО ОБРАЗОВАНИЮ
Технологический институт
Федерального государственного образовательного
учреждения высшего профессионального образования
«Южный федеральный университет»
ПРАКТИКУМ ПО ИЗУЧЕНИЮ
STL-ПРОГРАММИРУЕМЫХ
ПРОМЫШЛЕННЫХ КОНТРОЛЛЕРОВ SIEMENS
Учебное пособие
Таганрог 2007
УДК 681.326.3(07)
Рецензенты:
2
1. ИЗУЧЕНИЕ БАЗОВОГО ПРОГРАММНОГО
ОБЕСПЕЧЕНИЯ ПРОМЫШЛЕННЫХ КОНТРОЛЛЕРОВ
SIEMENS
3
здавать программное обеспечение и проводить тестирование про-
екта.
ОБОРУДОВАНИЕ
ТЕХНОЛОГИЧЕСКИЙ
ПРОЦЕСС
ПРОГРАММЫ
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.
7
Рис. 1.3. Структура проекта в SIMATIC Manager
На рис. 1.5 показан один из примеров проекта, содержащего
на уровне Blocks несколько элементов. Каждый элемент являет-
ся исполняемым блоком.
8
Основными блоками, которые используются в STEP 7, яв-
ляются:
а) организационный блок, например OB1, который является
основной циклически исполняемой программой;
б) функция, например FC1, применяемая для замены типо-
вых или часто повторяющихся блоков;
в) функциональный блок, например FB1, в отличие от функ-
ции имеет отдельную память в глобальном пространстве, назы-
ваемую блоком данных, за счет чего функциональный блок мо-
жет сохранять свои переменные в общем адресном простран-
стве;
г) блоки данных, например DB1, наличие которых обуслов-
лено гарвардской архитектурой контроллеров.
9
екта состоит из четырех шагов, которые демонстрируются на
рис. 1.6 – 1.9.
В первом окне, показанном на рис. 1.6, пользователю пред-
лагается выбрать структуру проекта по умолчанию, показанную
в двух окнах, нажав кнопку «Finish», или продолжить пошаговое
создание проекта, нажав кнопку «Next».
11
Point Fault»), ошибка процессора (OB84 «CPU Fault»), ошибка
загрузки организационного блока (OB85 «OB Not Loaded Fault»),
отсутствие контакта в соединительном разъеме (OB86 «Loss of
Rack Fault»), ошибка соединения (OB87 «Communication Fault»).
12
В последнем окне, показанном на рис. 1.9, предлагается за-
дать имя проекта. Результатом работы «New Project Wizard» яв-
ляется созданный проект, который появляется после нажатия
кнопки Finish в последнем диалоговом окне.
Добавление новых элементов в проект осуществляется через
меню «Insert». Сохранение проекта, копирование блоков проис-
ходит стандартным способом через буфер или с помощью мани-
пулятора.
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».
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. Возможными причинами превышения вре-
мени могут быть коммуникационные процессы, часто от собы-
тий прерываний, ошибки в программе.
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”
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
28
Комментарий Comment содержит произвольную информа-
цию до 80 символов.
Таблицу символов можно вызвать либо из окна SIMATIC
Manager, находясь на уровне программ и выбрав значок «Sym-
bols», либо непосредственно из редактора LAD/STL/FBD, вос-
пользовавшись меню «Options» -> «Symbol Table» . При этом
появляется окно, показанное на рис. 1.20.
Каждое символическое имя занимает одну строку в таблице.
Пустая строка автоматически добавляется в конце таблицы для
ввода нового символа. Символьная таблица является общей ба-
зой данных и может быть использована различными утилитами.
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.
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
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
42
«0» «1»
Входной модуль
CPU
Проверка входа
Функция установки/сброса
Выходной модуль
«0» «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
46
Двоичные логические функции в программе могут объеди-
няться и стоять в произвольном порядке. STL рассматривает
операторы ИЛИ и ИСКЛЮЧАЮЩЕЕ ИЛИ как операторы с
одинаковым приоритетом. Оператор И имеет более высокий
приоритет.
Чтобы функции выполнялись в требуемом порядке, могут
использоваться вложенные выражения, которые обеспечивают
выполнение одних функций раньше других. Вложенные опера-
торы могут также включать в себя функцию ИЛИ.
Язык STL позволяет использование следующих двоичных
вложенных операторов:
O – функция ИЛИ для функций И;
A( – открывающая скобка с функцией И;
O( – открывающая скобка с функцией ИЛИ;
X( – открывающая скобка с функцией ИСКЛЮЧАЮЩЕЕ ИЛИ;
AN( – открывающая скобка с функцией НЕ-И;
ON( – открывающая скобка с функцией НЕ-ИЛИ;
XN( – открывающая скобка с функцией НЕ-
ИСКЛЮЧАЮЩЕЕ ИЛИ;
) – закрывающая скобка.
Правило логики для выражения с открывающей скобкой по-
казывает, как результат вложенного выражения должен быть
связан с текущим значением RLO в момент обработки закрыва-
ющей скобки. До этой логической операции результат выполне-
ния вложенного выражения инвертируется, если присутствует
символ операции инвертирования.
В STL двоичные вложенные выражения используются для
определения порядка выполнения логических операций. CPU
первым обрабатывает выражения, заключенные в скобки, т.е. до
выполнения выражений, находящихся за скобками.
Когда CPU встречает открывающую скобку, он запоминает
текущее значение RLO и затем обрабатывает выражение в скоб-
ках, когда CPU встречает закрывающую скобку, он связывает
значение RLO для вложенного выражения с ранее запомненным
47
значением RLO в соответствии с функцией, определенной при
открывающей скобке (рис. 2.2).
Функция вложения(
Логическая операция 2 RLO2
)
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
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
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
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
Q 4.0
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
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
58
установки должен загораться индикатор включения. Индикато-
ры автоматического и ручного режима отображают текущий ре-
жим работы. Сигналы «Двигатель вперед» и «Двигатель назад»
отрабатывают задающие сигналы в ручном режиме. В автомати-
ческом режиме, если «Датчик 1» выдает «1», то включается сиг-
нал «Двигатель вперед», если «Датчик 2» выдает «1», то вклю-
чается сигнал «Двигатель назад», если оба датчика выдают «0»,
то сигналы «Двигатель вперед» и «Двигатель назад» нулевые.
Если оба датчика равны «1» или в ручном режиме одновременно
нажаты кнопки «Вперед» и «Назад», то выдается ошибка.
Включено - Индикатор
выключено включения
Индикатор
авт.
Автоматический режима
- ручной режим
Индикатор
ручного
Вперед
режима
Двигатель
Назад вперед
Двигатель
Датчик 1
назад
Датчик 2 Ошибка
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
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).
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.
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 Область-приемник
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. Опишите операцию загрузки данных в аккумулятор 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 Слово из памяти Слово в таблице выходов
94
Таблица 3.3
Варианты заданий к упражнению 2
95
Таблица 3.4
Варианты заданий к упражнению 3
Функция BLKMOV Функция FILL
Вар. Входные Выходные Входные дан- Выходные
данные данные ные данные
0 Вх. слово Вых. слово Байт памяти 2 байта памяти
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
98
T MW20 // Сохранить длительность работы
L MW20 // Загрузить длительность работы
Внутренняя структура временного параметра «длительность
работы» состоит из значения времени и временной базы. Дли-
тельность работы таймера равна произведению этих величин:
ДР = ЗВ ⋅ ВБ , (4.1)
где ДР – длительность работы; ЗВ – значение времени;
ВБ – временная база.
Длительность работы таймера – это период времени, в тече-
ние которого таймер находится в активном состоянии. Значение
времени – целое число, которое показывает сколько временных
баз составляет требуемый отрезок времени. Величина такого
временной базы является величиной шага по времени, которая
используется операционной системой CPU для декрементирова-
ния таймера. Структура параметра «длительность работы» пока-
зана на рис. 4.1.
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 // сохранение текущего значения времени
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
Последовательность операторов для таймера
105
ния заданного периода работы, обозначая момент времени, в ко-
торый произошло преждевременное прерывание работы тайме-
ра.
106
ной вертикальной чертой). Если опросы таймера на состояние
«1» следуют по времени после сброса таймера, то работа тайме-
ра после его запуска не скажется на результатах проверки – ре-
зультат проверки будет равен «0».
На рис. 4.3 показана функция разблокировки таймера, запус-
каемого в режиме управляемого импульса. Функция разблоки-
ровки таймера позволяет вновь запускать (в том числе и уже ак-
тивный таймер) посредством приложения ко входу разблокиров-
ки положительного фронта сигнала. Функция разблокировки
таймера доступна для использования только в языке программи-
рования STL.
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.
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 показана функция разблокировки
таймера, запускаемого в режиме с задержкой включения.
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 показана функция разблокировки тай-
мера, запускаемого в режиме с задержкой включения с памятью.
116
щен вновь. При этом заданное значение длительности работы
будет взято как исходное значение.
4.6. ТАЙМЕР С ЗАДЕРЖКОЙ ВЫКЛЮЧЕНИЯ
Программа запуска таймера с задержкой выключения на STL
отличается от предыдущих только пятой строкой, которая в дан-
ном случае имеет вид
SF Timer
На рис. 4.10 показаны динамические характеристики тайме-
ра, запускаемого в режиме с задержкой выключения, и его реак-
ция на сброс. Показанное на рис. 4.10 поведение таймера будет
соответствовать действительности, если придерживаться реко-
мендованной выше последовательности операторов для STL
(сначала запуск, затем сброс, затем опрос таймера).
1 и 2. Таймер запускается отрицательным фронтом сигнала
запуска и работает до истечения заданного времени работы.
Опрос таймера на состояние «1» возвращает «1», если до момен-
та истечения заданного времени работы таймера на входе сброса
не появлялась «1», вызывающая сброс, и если сигнал запуска
остается равным «1».
117
сбрасывается в «0». Таймер не запускается до появления нового
отрицательного фронта на входе запуска.
4. Единица на входе сброса вызывает сброс таймера. После
этого таймер обнуляется. Значения времени и временной базы
также сбрасываются и становятся равными «0».
5 и 6. Если имеется положительный фронт сигнала сброса, в
то время как на входе запуска присутствует «1», то выход тай-
мера сбрасывается. Отрицательный фронт сигнала сброса в то
время пока на входе запуска присутствует «1», возвращает вы-
ход таймера в состояние «1». Если имеется отрицательный
фронт на входе запуска, в то время как на входе сброса присут-
ствует «1», то таймер запускается, но затем немедленно сбрасы-
вается, что показано на рис. 4.10 жирной вертикальной чертой.
Если опрос таймера следует после его сброса, то короткое время
работы таймера не обнаруживается – результат проверки «0».
На рис. 4.11 показана функция разблокировки таймера, за-
пускаемого в режиме с задержкой выключения.
118
ни последующий отрицательный фронт сигнала разблокировки
не оказывают влияния.
2. Если на входе разблокировки имеется положительный
фронт в то время, когда таймер активен, отсчет времени таймера
будет перезапущен сначала.
3. Если на входе разблокировки имеется положительный или
отрицательный фронт, когда таймер неактивен и сигнал запуска
равен «0», то фронты не влияют на работу таймера.
4.7. IEC-ФУНКЦИИ ТАЙМЕРОВ
IEC-функции таймеров встроены в операционную систему
CPU как системные функциональные блоки. В соответствующем
образом оснащенных CPU могут быть доступны следующие
функции таймеров:
SFB 3 TP // Генератор импульсов
SFB 4 TON // Генератор импульса с задержкой включения
SFB 5 TOF // Генератор импульса с задержкой выключения
На рис. 4.12 представлены динамические характеристики
этих таймеров. Можно вызывать эти функции с экземплярными
блоками данных или использовать их как локальные экземпляры
в функциональном блоке.
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». За-
слонка открывается только при наличии контейнера.
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.
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" // Запись результата в переменную
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
ние
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.
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 бит ре-
гистра.
156
Рис. 6.4. Формат действительного числа
157
другой логической операции. Функции сравнения не изменяют
содержимого аккумуляторов. Они всегда выполняются вне вся-
кой связи с какими-либо условиями или содержимым регистра
состояния процессора.
Таблица 6.1
Общее представление функций сравнения
Операции Типы данных
сравнения INT DINT REAL
Равно ==I ==D ==R
Не равно <>I <>D <>R
Больше >I >D >R
Больше или равно >=I >=D >=R
Меньше <I <D <R
Меньше или равно <=I <=D <=R
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
a b = e b ln (a ) . (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
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
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 .
UШ
3. Если мощность индуктивная, т.е. ϕ > 0,05 , то выдаем за-
дающее воздействие на синхронный компенсатор
X P
E q0 = − U Ш − d r .
UШ
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, то
запустить программу регулирования.
Примечание. Во всех вариантах чтение аналоговых величин
производить из памяти, предварительно записав туда действи-
тельные или целые числа. Все незаданные параметры в вариан-
тах назначаются произвольно и могут быть взяты единичными.
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 Двоичный результат
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 вый сбрасываемый
бит
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
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
Учебное пособие
«С»
____________________________________________________
224