«Автоматизация посредством STEP 7 с использованием STL и SCL и программируемых контроллеров SIMATIC S7-300/400 (Automating with STEP 7 in STL and SCL by Hans Berger) Перевод по изданию 2-му, исправленному 2001 SIMATIC ...»
аккумулятор accumulator 1 должен содержать корректное значение, даже если счетчик не установлен во время выполнения инструкции.
Определение (спецификация) счетчика с помощью константы 8. Функции счетчиков Значения счетчика лежат в диапазоне 000 … 999. При этом используются три декады. Значение счетчика может быть только в формате BCD. При этом счетчики не могут работать с отрицательными числами.
Для задания константы Вы можете использовать C# или W#16# (и только с Определение (спецификация) счетчика с помощью переменной Для выполнения операции Set предполагается наличие значения счетчика в аккумуляторе accumulator 1, состоящего из трех декад и расположенного в нем с выравниванием вправо. Назначение битов в счетчике (тип C#) подробно описано в главе 24 "Типы данных".
Сброс счетчика (Resetting a counter) Счетчик сбрасывается, если RLO имеет значение "1" перед тем, как в программе встретится операция сброса R счетчика (Reset). Пока RLO равен "1", проверки счетчика на состояние "1" возвращают результат проверки "0";
проверки счетчика на состояние "0" возвращают результат проверки "1".
Сброс устанавливает для значения счетчика ("count value") нулевое значение Сброс функции счетчика не сбрасывает внутренний меркер фронта для установки счетчика, для включения режима прямого счета и для включения режима обратного счета. Для повторного запуска CPU должен обработать инструкцию установки счетчика или повторного запуска на счет при RLO, равном "0", и только после этого при появлении фронта сигнала в соответствующем меркере фронта счетчик может быть установлен или запущен. Также для повторной активации функций счетчика Вы можете использовать операцию разблокировки счетчика.
8.2 Счет (Counting) Прямой счет (Counting up) Автоматизация посредством STEP с использованием STL и SCL Счетчик выполняет прямой счет ("инкрементируется"), если инструкция CU обрабатывается при положительном (возрастающем) фронте сигнала RLO (RLO меняет свое состояние с "0" на "1").
Каждый положительный фронт сигнала, предшествующий операции CU, увеличивает значение счетчика ("count value") на единицу, пока не будет достигнут верхний предел, равный 999. После этого положительный фронт сигнала RLO перед вводом CU никак не будет влиять на состояние счетчика.
Обратный счет (Counting Down) Счетчик выполняет обратный счет ("декрементируется"), если инструкция CD обрабатывается при положительном (возрастающем) фронте сигнала RLO (RLO меняет свое состояние с "0" на "1").
Каждый положительный фронт сигнала, предшествующий операции CD, уменьшает значение счетчика ("count value") на единицу, пока не будет достигнут нижний предел, равный 0. После этого положительный фронт сигнала RLO перед вводом CD никак не будет влиять на состояние счетчика.
Значения счетчика отрицательными быть не могут.
8.3 Проверка (опрос) счетчика (Checking a Counter) Проверка (опрос) состояния счетчика (binary counter check) AN Сn проверка сигнала на состояние "0" и комбинирование с RLO в ON Сn проверка сигнала на состояние "0" и комбинирование с RLO в XN Сn проверка сигнала на состояние "0" и комбинирование с RLO в Вы можете опрашивать счетчик, как если бы это был, например, вход (input), и в дальнейшем использовать результат этой проверки. Проверка (опрос) сигнала на состояние "1" вызывает результат "1", если значение счетчика больше 0 и результат, равный "0", если значение счетчика равно 0.
8. Функции счетчиков Непосредственная загрузка значения счетчика (direct loading of a count value) Функция загрузки L C пересылает определенное значение ("count value") счетчика, определенного в инструкции, в аккумулятор accumulator 1 в форме двоичного числа. Значение счетчика, пересылаемое в аккумулятор accumulator 1, представляет собой текущее значение, соответствующее моменту времени, когда производится опрос. Теперь значение в аккумуляторе accumulator 1 соответствует положительному числу целого типа (INT) и может использоваться для дальнейшей обработки, например, с помощью арифметических функций.
Загрузка значения счетчика в BCD-формате ("coded loading") Вы можете также использовать инструкцию для т.н. "кодированной" пересылки ("coded load") в аккумулятор accumulator 1 в формате двоичнодесятичного числа значения счетчика, определенного в инструкции. Значение счетчика, пересылаемое в аккумулятор accumulator 1, представляет собой текущее значение, соответствующее моменту времени, когда производится опрос. Содержимое аккумулятора accumulator 1 доступно для дальнейшего использования в виде числа в формате BCD-числа, выровненного вправо.
Оно имеет такую же структуру как и заданное значение счетчика.
8.4 Разблокировка счетчика (Enabling a counter) FR Cn позволяет выполнить переустановку (перезапуск) счетчика.
Автоматизация посредством STEP с использованием STL и SCL При использовании инструкции FR Вы можете установить (Set) счетчик или запустить на счет без предшествующего операции положительного фронта сигнала RLO. Тем не менее, выполнение этих операций со счетчиком будет возможно только, пока RLO имеет значение "1".
Функция разблокировки активна, если перед тем, как она встретится, RLO переходит от состояния "0" к состоянию "1". Положительный фронт сигнала RLO - это всегда необходимое условие для выполнения разблокировки Данная инструкция разблокировки функции счетчика не требуется для установки, запуска на счет или сброса счетчика (т.е., инструкция не является необходимой для обычных условий работы со счетчиком).
Инструкция разблокировки функций счетчика воздействует на функции установки, запуска на счет и сброса счетчика одновременно! Положительный фронт сигнала RLO перед выполнением разблокировки счетчика вызывает все последующие инструкции (S, CU и CD), которые имеют сигнал запуска "1".
Ниже представлен пример, показывающий принципы работы инструкции разблокировки (соответствующие диаграммы показаны на рис. 8.2):
Ниже рассмотрены фазы соответствующих диаграмм, показанных на рис. 8.2:
устанавливает счетчик на начальное значение 20.
Положительный фронт сигнала на входе CU инкрементирует счетчик (его значение увеличивается на 1).
Так как сигнал на входе Set имеет значение "1", инструкция разблокирования счетчика инкрементирует счетчик - его значение увеличивается на 1.
8. Функции счетчиков Положительный фронт сигнала на входе сброса (Reset) декрементирует Инструкция разблокирования счетчика создает условий для выполнения прямого и обратного счета: сигнал "1" присутствует на обоих входах.
устанавливает счетчик на начальное значение 20.
Сигнал на входе Reset, имеющий значение "1", сбрасывает счетчик. Проверка Так как состояние сигнала на входе Set все еще равно "1", инструкция разблокирования устанавливает счетчик с начальным значением 20.
Проверка счетчика на состояние "1" возвращает результат "1".
Функция разблокировки Enable Функция прямого счета Count up Функция обратного счета Count down Функция установки Set Функция сброса счетчика Reset Состояние счетчика Counter status Рис. 8.2 Принцип работы инструкции разблокировки Enable Автоматизация посредством STEP с использованием STL и SCL 8.5 Последовательность инструкций при использовании функций счетчика При программировании счетчика Вам нет необходимости использовать все возможные выражения для активации функций счетчиков. Вы должны использовать только те из функций, которые Вам необходимо выполнить.
Например, для выполнения функции обратного счета обычно используются операция установки для счетчика заданного значения (initial value), операция обратного счета и двоичный опрос счетчика на состояние "0".
Чтобы выполнить функцию счетчика в соответствии с описанием в предыдущих разделах необходимо соблюдать определенный порядок при программировании соответствующих операторов.
В таблице 8.1 показан оптимальный порядок для всех операторов при программировании функций счетчика. Вы можете просто пропустить ненужные операторы, когда Вы будете записывать программу, ориентируясь на рекомендуемую последовательность операторов, например, пропустите функцию разблокировки Enable.
Таблица 8.1 Последовательность операторов для счетчика Разблокировка счетчика (Enable counter) Функция прямого счета (Count up) Функция обратного счета (Count down) Сброс счетчика (Reset counter) Проверка численного значения счетчика T MW Если функция сброса счетчика Reset должна иметь статическое ("static") влияние на операции CU, CD и S и не должна зависеть от результата логической операции (RLO), то Вы должны записать выражение с операцией Reset для счетчика после выражений с вышеуказанными операциями, но перед операцией проверки счетчика.
Если при этом счетчик устанавливается (set) и сбрасывается (reset) "одновременно", то счетчик сначала получит заданное значение, а затем немедленно будет сброшен операцией Reset. Таким образом, последующая проверка счетчика не позволит установить тот факт, что счетчик кратковременно находился в установленном состоянии.
8. Функции счетчиков Если функция установки счетчика Set должна иметь статическое ("static") влияние на операции счета и не должна зависеть от результата логической операции (RLO), то Вы должны записать выражение с операцией Set после выражений с операциями счета.
Если при этом счетчик устанавливается (set) и сбрасывается (reset) "одновременно", то операции счета вначале будут изменять состояние счетчика, а затем счетчик немедленно будет установлен операцией Set и получит заданное значение, которое и сохранится в нем до окончания Таким образом, последовательность выражений с операциями прямого и обратного счета не будет иметь влияние на счетчик.
8.6 IEC-функции счетчиков (IEC Counter Functions) IEC-функции счетчиков (IEC Counter Functions) встроены в операционную систему CPU как системные функциональные блоки SFB.
В соответствующим образом оснащенных CPU могут быть доступны следующие функции счетчиков:
Вы можете вызывать эти SFB с экземплярными блоками данных или использовать эти SFB как локальные экземпляры в функциональном блоке.
Вы можете найти описание интерфейса функций для программирования в автономном режиме (offline) в "стандартной библиотеке" Standard Library в разделе System Function Blocks.
Примеры вызовов этих функций находятся на прилагаемой дискете в библиотеке STL_Book в разделе "Basic Functions" в функциональном блоке FB 108 или в исходном файле Chap_8 или в библиотеке SCL_Book в разделе Параметры вышеуказанных IEC-функций счетчиков предлагаются Вашему Автоматизация посредством STEP с использованием STL и SCL Таблица 8.2 Параметры IEC-функций счетчиков 8.6.1 Функция прямого счета SFB 0 CTU Параметры IEC-счетчика SFB 0 CTU показаны в таблице 8.2.
Если сигнал на входе прямого счета счетчика (up counter input) CU изменяет свое состояние с "0" на "1" ("прямой фронт"), тогда текущее значение счетчика инкрементируется (увеличивается на единицу) и отображается на выходе CV. При первом вызове (при состоянии сигнала "0" на входе сброса R) значение счетчика соответствует заранее заданному значению на входе Если текущее значение достигает верхнего предела, равного 32767, значение счетчика больше не увеличивается. При этом сигнал на входе CU Если сигнал на входе сброса R принимает значение "1", то счетчик сбрасывается в 0. При этом положительный фронт на входе счетчика CU игнорируется, пока состояние сигнала на входе сброса R равно "1". На выход Q счетчика будет выводиться значение "1", если значение на выходе CV будет больше или равно заранее заданного значения счетчика на входе PV.
8. Функции счетчиков IEC-счетчик SFB 0 CTU работает в рабочих режимах RESTART и RUN. IECсчетчик SFB 0 CTU сбрасывается при холодном перезапуске.
8.6.2 Функция обратного счета SFB 1 CTD Параметры IEC-счетчика SFB 1 CTD показаны в таблице 8.2.
Если сигнал на входе обратного счета счетчика (down counter input) CD изменяет свое состояние с "0" на "1" ("прямой фронт"), тогда текущее значение счетчика декрементируется (уменьшается на единицу) и отображается на выходе CV. При первом вызове (при состоянии сигнала "0" на входе LOAD) значение счетчика соответствует заранее заданному значению на входе PV (Preset value).
Если текущее значение достигает нижнего предела, равного -32768, значение счетчика далее не уменьшается. При этом сигнал на входе CD игнорируется.
Если сигнал на входе LOAD имеет значение "1", то счетчик сбрасывается и принимает заранее заданное значение (на входе PV). При этом положительный фронт на входе счетчика CD игнорируется, пока состояние сигнала на входе LOAD равно "1". На выход Q счетчика будет выводиться значение "1", если значение на выходе CV будет меньше или равно нулю.
IEC-счетчик SFB 1 CTD работает в рабочих режимах RESTART и RUN. IECсчетчик SFB 1 CTD сбрасывается при холодном перезапуске.
8.6.3 Функция прямого и обратного счета SFB 2 CTUD Параметры IEC-счетчика SFB 2 CTUD показаны в таблице 8.2.
Если сигнал на входе прямого счета счетчика (up counter input) CU изменяет свое состояние с "0" на "1" ("прямой фронт"), тогда текущее значение счетчика инкрементируется (увеличивается на единицу) и отображается на выходе CV. Если сигнал на входе обратного счета счетчика (down counter input) CD изменяет свое состояние с "0" на "1" ("прямой фронт"), тогда текущее значение счетчика декрементируется (уменьшается на единицу) и отображается на выходе CV. Если сигнал на обоих входах счетчика CU и CD изменяет свое состояние с "0" на "1" ("прямой фронт"), тогда текущее значение счетчика не изменяется.
Если текущее значение достигает верхнего предела, равного 32767, значение счетчика больше не увеличивается. При этом в дальнейшем сигнал на входе Если текущее значение достигает нижнего предела, равного -32768, значение счетчика далее не уменьшается. При этом в дальнейшем сигнал на входе CD Если сигнал на входе LOAD имеет значение "1", то счетчик сбрасывается и принимает заранее заданное значение (на входе PV). При этом положительные фронты сигналов на входах счетчика игнорируются, пока Автоматизация посредством STEP с использованием STL и SCL состояние сигнала на входе LOAD равно "1".
Если состояние сигнала на входе сброса R принимает значение "1", то счетчик сбрасывается в 0. При этом положительные фронты сигналов на входах счетчика и состояние сигнала "1" на входе LOAD игнорируются, пока состояние сигнала на входе сброса R равно "1". На выход QU счетчика будет выводиться значение "1", если значение на выходе CV будет больше или равно значению на входе PV. На выход QD счетчика будет выводиться значение "1", если значение на выходе CV будет меньше или равно нулю.
IEC-счетчик SFB 2 CTUD работает в рабочих режимах RESTART и RUN. IECсчетчик SFB 2 CTUD сбрасывается при холодном перезапуске.
8.7 Пример счетчика деталей В данном разделе представлен пример, с помощью которого иллюстрируется работа с таймерами и счетчиками. В этом примере запрограммированы входы, выходы и меркеры, так что данная программа может быть включена в любое место любого блока. Пример выполнен как функция без параметров.
Описание функций Детали должны переноситься лентой конвейера. Для обнаружения и подсчета деталей используется фотодатчик. После того, как подсчитанное число деталей становится равным заданному максимальному количеству, счетчик посылает сигнал окончания работы "Finished". Счетчик снабжен цепью слежения. Если состояние сигнала от фотодатчика не меняется в течение заданного времени, эта цепь слежения генерирует соответствующий Вход "Set" обеспечивает передачу счетчику начального значения (число деталей, которое должно быть сосчитано). Положительный фронт сигнала от фотодатчика вызывает уменьшение на единицу значения счетчика. Когда значение счетчика достигнет значения 0, счетчикает посылает сигнал окончания работы "Finished". Должно выполняться условие, согласно которому детали на ленте конвейера лежат отдельно (с интервалом между отдельными деталями).
Вход "Set" обеспечивает также установку сигнала "Active". Контроллер отслеживает изменение состояния сигнала, поступающего от фотодатчика, только во время установления сигнала "Active". Сигнал "Active" сбрасывается при завершении счета, когда последняя деталь минует фотодатчик.
В активном состоянии положительный фронт сигнала от фотодатчика запускает таймер со значением времени "Dura1" в режиме таймера с памятью. Если на входе Start таймера "0" в следующем цикле сканирования таймер в дальнейшем не продолжает отсчет времени. Новый положительный фронт сигнала от фотодатчика перезапускает таймер. Следующий положительный фронт сигнала от фотодатчика, перезапускающий таймер, генерируется, после того как фотодатчик выдаст отрицательный фронт сигнала. Тогда таймер запустится со значением времени "Dura2".
8. Функции счетчиков Если фотодатчик обнаружит деталь через промежуток времени, больший чем значение "Dura1" или будет свободен ("free") в течение промежутка времени, большего, чем значение "Dura2", то время заканчивается и таймер сигнализирует о сбое - выдает сигнал "Fault".
Первый сигнал "Active" запускает таймер со значением времени "Dura2".
Сигнал "Set" запускает счетчик со схемой слежения. Положительные и отрицательные фронты сигнала, поступающие от фодатчика, используются для управления счетчиком, для выбора промежутка времени и для запуска (перезапуска) таймера (watchdog timer).
Проверка наличия положительного и отрицательного фронта сигнала требуется часто, и, поэтому, в качестве "сверхоперативной памяти" можно использовать область временных локальных данных для запоминания результата проверки. Временные локальные данные - это "внутриблочные" переменные (переменные, объявленные в блоке, а не в таблице символов). В данном примере результаты проверки хранятся в меркерах импульса ("pulse memory bits") в области временных локальных даных. Сигналы от меркеров фронта ("edge memory bits") требуются также в последующих циклах сканирования программы, поэтому эти меркеры не должны располагаться в области временных локальных даных.
Данная программа-пример выполнен как функция без параметров. Вы можете вызывать эту функцию (например, из OB 1) следующим образом:
В конце данной главы представлен исходный текст программы-примера с символьной адресацией таймеров, счетчиков и меркеров.
Глобальные символы могут также использоваться без кавычек (без апострофа), если они не содержат специальных символов. Если же символ (символьное имя) содержит специальный символ (например, умляут или пробел [space]), то такое имя должно быть заключено в кавычки. В компилированных блоках редактор STL отображает все глобальные символы Для большей ясности и лучшей читаемости представленная программа разделена на сегменты. Последний сегмент, имеющий заголовок BLOCK END (конец блока), не является необходимым, а служит лишь для обозначения окончания блока. Такой прием бывает очень полезно использовать в случаях, когда блоки имеют чрезмерно большой размер.
Вы можете найти таблицу символов (symbol table) на прилагаемой к данной книге дискете в библиотеке STL_Book в разделе "Conveyor Example" в объекте Symbol, в исходной программе "Conveyor" в разделе исходных файлов Source Files и в скомпилированной программе в разделе Blocks, в Автоматизация посредством STEP с использованием STL и SCL (Функция проверки наличия (Функция проверки наличия отрицательного фронта) 8. Функции счетчиков FUNCTION "Counter_control" : VOID //TITLE = Счетчик деталей с системой слежения //Данный пример иллюстрирует работу таймеров и счетчиков NAME : Count AUTHOR : Berger FAMILY : STL_Book Version : 01. VAR_TEMP PM_LB_P : BOOL; //Положительный фронт импульса от фотодатчика PM_LB_N : BOOL; //Отрицательный фронт импульса от фотодатчика END_VAR BEGIN
NETWORK
TITLE = Counter_Control A Light_barnerl; //При срабатывании фотодатчика L Quantity; //Загрузить в счетчик заданное количество A Acknowledge;= Finished; //генерируется сигнал окончания работы
NETWORK
TITLE = Activate monitor A Light_barrierl;FP EM_LB_P; //Генерировать меркер импульса = PM_LB_P; //при положительном фронте сигнала от датчика A Light_barrierl;
FN EM_LB_N; //Генерировать меркер импульса = PM_LB_N; //при отрицательном фронте сигнала от датчика FP EM_ST_P;
0 Acknowledge;
R Active; //Деактивировать систему слежения
NETWORK
TITLE = Monitoring circuit A Light_barrierl; //то выполняется переход JC к Dl и Dl: A Active;FP EM_AC_P; //Если положительный фронт в "Active", 0 PM_LB_P; //или положительный фронт от датчика, 0 PM_LB_N; //или отрицательный фронт от датчика, то SE Monitor; //таймер запускается или перезапускается AN Monitor;
NETWORK
TITLE = Block EndEND_FUNCTION
Автоматизация посредством STEP с использованием STL и SCL 8 - 16 Automating with STEP 7 in STL and SCL Автоматизация посредством STEP Функции для обработки чисел Функции для обработки чисел используются для обработки численных значений преимущественно типов INT, DINT и REAL, что значительно расширяет функциональные возможности PLC. Здесь будут рассмотрены функции для обработки чисел, используемые в STL-программах. В языке программирования SCL функции сравнения, логические функции с данными формата Word и арифметические функции выполняются с помощью операторов (см. раздел 27.4 "Выражения"); остальные функции для обработки чисел включены в язык SCL в виде стандартных функций (см.разделы 30.3 "Математические функции", 30.4 "Функции сдвига и ротации", 30.5 "Функции преобразования").
Функции сравнения формируют двоичный результат сравнения двух величин. Функции сравнения могут обрабатывать данные типов INT, DINT и Арифметические функции позволяют выполнять в программе вычисления.
Все базовые арифметические операции могут быть выполнены с данными Математические функции расширяют собой вычислительные возможности в программе. Математические функции добавляют к базовым арифметическим функциям такое расширение как тригонометрические функции.
Функции преобразования позволяют до и после выполнения вычислений приводить численные значения к требуемому типу данных.
Функции сдвига позволяют смещать содержимое аккумулятора влево или вправо. Функции сдвига позволяют также проверить бит, смещенный Логические функции с данными формата Word используются для маскирования численных значений для проверки отдельных битов и задания Функции для обработки чисел работают, главным образом, со значениями в блоках данных. Это могут быть блоки глобальных данных или экземплярные блоки данных, если используются статические локальные данные. В разделе 18.2 "Функции для блоков данных" показано использование блоков данных и За исключением аккумуляторов для хранения временных результатов очень удобны временные локальные данные.
Автоматизация посредством STEP с использованием STL и SCL 9 Функции сравнения Операции сравнения величин на предмет их равенства, неравенства;
операции: больше чем, больше чем или равно, меньше чем, меньше чем или равно; функции сравнения в двоичных логических операциях.
10 Арифметические функции Базовые арифметические операции; цепочки вычислений; сложение констант; декрементирование и инкрементирование.
11 Математические функции Тригонометрические функции; обратные тригонометрические функции;
возведение в квадрат; извлечение квадратного корня; экспоненты и 12 Функции преобразования Преобразование данных типов INT/DINT в данные BCD типа и наоборот;
преобразование данных типа DINT в данные типа REAL и наоборот с различными способами округления; нахождение обратного кода двоичного числа, инвертирование и нахождение абсолютной величины.
Сдвиг влево, вправо, на слово и двойное слово, сдвиг в соответствии с правилами для знаков; циклический сдвиг содержимого аккумулятора влево или вправо; сдвиг и циклический сдвиг с параметрами сдвига, заданными константой или в аккумуляторе 2.
14 Логические функции с данными формата Word Операции AND (И), OR (ИЛИ), Exclusive OR (Исключающее ИЛИ);
логические операции со словом, с двойным словом, с константой или с содержимым аккумулятора 2.
9 Функции сравнения Функции сравнения обеспечивают выполнение операции сравнения двух численных значений, одно из которых находится в аккумуляторе accumulator 1, а второе находится в аккумуляторе accumulator 2. После выполнения операции сравнения функции сравнения устанавливают RLO (результат логической операции) и биты состояния CC0 и CC1. Этот результат может в дальнейшем быть использован в двоичных логических операциях, в операциях с памятью или в операторах перехода. В таблице 9.1 Вы найдете обзор доступных пользователю функций сравнения.
Общее представление функций сравнения биты состояния OV и OS. Преобразование в таком случае не будет Преобразование данных формата DINT в формат BCD Функция DTB интерпретирует содержимое аккумулятора accumulator 1 как число типа DINT и преобразует его в семиразрядное BCD-число.
Семиразрядное BCD-число в аккумуляторе accumulator 1 располагаются с выравниванием вправо и представляет собой значение десятичного Автоматизация посредством STEP с использованием STL и SCL числа. Знак располагается в битах с 28 по 31. Если все эти биты имеют значение "0", то знак положительный, если все биты имеют значение "1", то знак отрицательный.
Если исходное DINT-число слишком велико, для того, чтобы выполнить преобразование в BCD-число (> 9 999 999), в таком случае функция DTB устанавливает биты состояния OV и OS и преобразование в таком случае не может быть выполнено.
Преобразование данных формата DINT в формат REAL Функция DTR интерпретирует содержимое аккумулятора accumulator 1 как число формата DINT и преобразует его в число формата REAL. Так как число формата DINT имеет большую точность чем число формата REAL, то в процессе преобразования формата числа может произойти округление, но только до следующего целого числа (как при выполнении операции RND). Если все эти биты имеют значение "0", то знак положительный, если все биты имеют значение "1", то знак Функция DTR не устанавливает битов состояния.
12.3 Преобразование чисел формата BCD Следующие функции обеспечивают выполнение преобразований чисел Преобразование данных формата BCD в формат INT Функция BTI интерпретирует содержимое младшего слова в аккумуляторе accumulator 1 (биты с 0 по 15) как трехразрядное BCD-число и преобразует его в число типа INT. Три разряда числа в аккумуляторе accumulator 1 располагаются с выравниванием вправо и представляют собой значение десятичного числа. Знак располагается в битах с 12 по 15.
Если все эти биты имеют значение "0", то знак положительный, если все биты имеют значение "1", то знак отрицательный. В процессе преобразования берется в расчет только состояние бита 15.
Содержимое старшего слова (биты с 16 по 31) остается без изменений.
При обнаружении "псевдотетрады" в исходном BCD-числе (численные значения с 10 по 15 или с A по F в шестнадцатеричном числе), CPU сообщает об ошибке назначения параметра ("a parameter assignment error") и вызывает организационный блок OB 121 (блок обработки синхронных ошибок). Если блок OB 121 не запрограммирован, то CPU переходит в состояние STOP.
Функция преобразования BTI не устанавливает битов состояния.
12. Функции преобразования Преобразование данных формата BCD в формат DINT Функция BTD интерпретирует содержимое аккумулятора accumulator 1 как семиразрядное BCD-число и преобразует его в число типа DINT. Семь разрядов числа в аккумуляторе accumulator 1 располагаются с выравниванием вправо и представляют собой значение десятичного числа. Биты с 28 по 31 содержат знак. Если все эти биты имеют значение "0", то знак положительный, если все биты имеют значение "1", то знак отрицательный. В процессе преобразования берется в расчет только При обнаружении "псевдотетрады" в исходном BCD-числе (численные значения с 10 по 15 или с A по F в шестнадцатеричном числе), CPU сообщает об ошибке назначения параметра ("a parameter assignment error") и вызывает организационный блок OB 121 (блок обработки синхронных ошибок). Если блок OB 121 недоступен, то CPU переходит в Функция преобразования BTD не устанавливает битов состояния.
12.4 Функции преобразования чисел формата REAL Существует несколько функций, обеспечивающих выполнение операций преобразования дробного числа формата REAL в число формата DINT (преобразование дробного числа в целое число). Эти функции отличаются друг от друга способом выполнения операции округления.
• RND+ преобразование с округлением "вверх" до следующего целого • RND- преобразование с округлением "вниз" до следующего целого • RND преобразование с округлением до следующего целого числа • TRUNC преобразование без округления (усечение) В таблице 12.2 показано различие действий указанных функций преобразования чисел формата REAL в числа формата DINT. Диапазон Преобразование с округлением "вверх" до следующего целого числа Функция RND+ интерпретирует содержимое аккумулятора accumulator как число типа REAL и преобразует его в число формата DINT.
Функция RND+ возвращает целое число, которое больше исходного числа Если исходное число в аккумуляторе выходит за пределы допустимого для формата DINT диапазона или исходное число имеет другой формат, отличный от формата REAL, то функция RND+ устанавливает биты состояния OV и OS. Преобразование в таком случае не может быть Автоматизация посредством STEP с использованием STL и SCL Таблица 12.2 Режимы округления функции преобразования чисел типа REAL Преобразование с округлением "вниз" до следующего целого числа Функция RND- интерпретирует содержимое аккумулятора accumulator как число типа REAL и преобразует его в число формата DINT.
Функция RND- возвращает целое число, которое меньше исходного числа Если исходное число в аккумуляторе выходит за пределы допустимого для формата DINT диапазона или исходное число имеет другой формат, отличный от формата REAL, то функция RND- устанавливает биты состояния OV и OS. Преобразование в таком случае не будет выполнено.
Преобразование с округлением до ближайшего целого числа Функция RND интерпретирует содержимое аккумулятора accumulator 1 как число типа REAL и преобразует его в число формата DINT.
Функция RND возвращает целое число, которое может быть больше или Функция RND возвращает то целое число, которое ближе к результату преобразования типа исходного числа. Если значение результата лежит точно посредине между четным и нечетным целыми числами, то четное число будет иметь более высокий приоритет, т.е. возвращается четное.
Если исходное число в аккумуляторе выходит за пределы допустимого для формата DINT диапазона или исходное число имеет другой формат, отличный от REAL, то функция RND устанавливает биты состояния OV и OS. Преобразование в таком случае не будет выполнено.
12. Функции преобразования Преобразование без округления Функция TRUNC интерпретирует содержимое аккумулятора accumulator как число типа REAL и преобразует его в число формата DINT.
Функция TRUNC возвращает целую часть обрабатываемого числа, то есть, дробная часть числа отбрасывается ("усекается").
Если исходное число выходит за пределы допустимого для формата DINT диапазона или исходное число имеет другой формат, отличный от REAL, то функция TRUNC устанавливает биты состояния OV и OS.
Преобразование в таком случае не будет выполнено.
12.5 Другие функции преобразования чисел Существует еще несколько функций, обеспечивающих выполнение операций преобразования чисел:
• INVI нахождение обратного кода двоичного числа формата INT • INVD нахождение обратного кода двоичного числа формата DINT • NEGD инвертирование числа формата DINT • NEGD инвертирование числа формата REAL • ABS нахождение абсолютного значения числа формата REAL Нахождение обратного кода двоичного числа формата INT Функция INVI инвертирует содержимое младшего слова в аккумуляторе accumulator 1 (биты с 0 по 15) бит за битом. Функция каждый двоичный ноль заменяет двоичной единицей и наоборот, каждую единицу заменяет нулем. Содержимое старшего слова (биты с 16 по 31) остается без Функция преобразования INVI не устанавливает битов состояния.
Нахождение обратного кода двоичного числа формата DINT Функция INVD инвертирует содержимое в аккумуляторе accumulator 1 бит за битом. Функция каждый двоичный ноль заменяет двоичной единицей и наоборот, каждую единицу заменяет нулем.
Функция преобразования INVD не устанавливает битов состояния.
Инвертирование числа формата INT Функция NEGI интерпретирует содержимое младшего слова в аккумуляторе accumulator 1 (биты с 0 по 15) как число типа INT и изменяет Автоматизация посредством STEP с использованием STL и SCL Эта операция идентична умножению на -1. При этом биты старшего слова в аккумуляторе accumulator 1 (биты с 16 по 31) не изменяют своего Функция преобразования NEGI устанавливает следующие биты Инвертирование числа формата DINT Функция NEGD интерпретирует содержимое аккумулятора accumulator как число типа DINT и изменяет его знак.
Эта операция идентична умножению на -1. При этом биты старшего слова в аккумуляторе accumulator 1 (биты с 16 по 31) не изменяют своего Функция преобразования NEGD устанавливает следующие биты Инвертирование числа формата REAL Функция NEGR интерпретирует содержимое аккумулятора accumulator как число формата REAL и умножает это число на -1 (функция меняет знак мантиссы, даже если число в аккумуляторе является некорректным действительным числом).
Функция NEGR не устанавливает битов состояния.
Нахождение абсолютного значения числа формата REAL Функция ABS интерпретирует содержимое аккумулятора accumulator 1 как число формата REAL и формирует для этого числа абсолютное значение, устанавливая знак числа в значение "0" (функция устанавливает знак мантиссы в значение "0", даже если число в аккумуляторе является некорректным действительным числом).
Функция ABS не устанавливает битов состояния.
13 Функции сдвига Функции сдвига сдвигают влево или вправо содержимое аккумулятора В таблице 13.1 представлен обзор доступных пользователю функций Таблица 13.1 Обзор функций сдвига Функции сдвига Сдвиг влево (Shift left) Сдвиг вправо (Shift right) Сдвиг со знаком (Shift with sign) Циклический сдвиг влево (Rotate left) Циклический сдвиг вправо (Rotate right) Циклический сдвиг CC1) Циклический сдвиг CC1) Без параметров, как при смещении только одного бита В этой главе будут рассмотрены функции сдвига, используемые в языке программирования STL. В языке программирования SCL выполнение функций сдвига обеспечивается с помощью соответствующих стандартных функций SCL (см. раздел 30.4 "Сдвиг и циклический сдвиг").
Примеры, рассматриваемые в данной главе, Вы можете найти на прилагаемой дискете в библиотеке STL_Book library в разделе "Digital Functions" ("Функции для обработки чисел") в функциональном блоке FB Автоматизация посредством STEP с использованием STL и SCL 13.1 Выполнение функций сдвига Функции сдвига позволяют побитно сдвигать влево или вправо данные, находящиеся в аккумуляторе accumulator 1. При этом в зависимости от функции сдвига аккумулятор содержит либо слово (word), либо двойное слово (duobleword). Биты, сдвигаемые за пределы слова (двойного слова), либо теряются (при операциях сдвига [shift operations]), либо переносятся на другую сторону слова или двойного слова (при операциях циклического сдвига [rotate operations]). Функции сдвига не влияют на содержимое других аккумуляторов.
Функции сдвига всегда выполняются вне всякой связи с какими-либо условиями. Функции сдвига воздействуют только на содержимое аккумулятора accumulator 1. При этом функции не влияют на результат логической операции (RLO).
Параметры для функции сдвига могут быть заданы следующими двумя • С числом позиций, заданным в аккумуляторе • С числом позиций, заданным в инструкции с помощью параметра Вы можете программировать операции двумя способами в соответствии со следующими общими схемами:
Загрузка (load) числа позиций Number_of_positions;
Загрузка (load) адреса Address;
Передача (transfer) результата Result;
Загрузка (load) адреса Address;
Функция сдвига с параметром "число позиций" (Number_of_positions);
Передача (transfer) результата Result;
Функции сдвига устанавливают бит состояния CC0 в "0", а бит CC устанавливают в состояние, в котором находился последний перемещенный бит (см. рис. 13.1). Биты состояния проверяются с помощью двоичного опроса или в операциях перехода в соответствии с описанием в главе 15 "Биты состояния" и в главе 16 "Функции перехода".
В таблице 13.2 показаны несколько примеров применения функций сдвига для данных типов Word и Duobleword.
Функции сдвига для данных типа Word воздействуют только на содержимое младшего слова в аккумуляторе accumulator 1 (биты с 0 по 15). Содержимое старшего слова аккумулятора остается неизменным.
Функция циклического сдвига с битом состояния CC1 смещает содержимое аккумулятора accumulator 1 на одну разрядную позицию 13. Функции сдвига Сдвиг слова данных влево SLW Сдвиг двойного слова данных влево SLW Сдвиг слова данных вправо SRW Сдвиг двойного слова данных вправо SRW Сдвиг слова данных со знаком SSI Сдвиг двойного слова данных со знаком SSD Циклический сдвиг влево RLD Цикл. сдвиг влево через бит состояния CC1 RLDA Циклический сдвиг вправо RRD Цикл. сдвиг вправо через бит состояния CC1 RRDA Рис.13.1 Принцип работы функций сдвига Таблица 13.2 Примеры применения функций сдвига Автоматизация посредством STEP с использованием STL и SCL Последовательное выполнение функций сдвига Вы можете выполнять операцию сдвига содержимого аккумулятора accumulator 1 любое необходимое число раз.
В данном примере в результате выполнения программы содержимое аккумулятора будет сдвинуто со знаком вправо на 2 позиции при этом два правых бита будут сброшены в состояние "0".
13.2 Операции сдвига Сдвиг слова данных влево Функция сдвига SLW позволяет бит за битом сдвигать влево данные, находящиеся в младшем слове аккумулятора accumulator 1 (т.е. в битах с 0 по 15). При этом разряды, освобождаемые при сдвиге содержимого указанных битов заполняются нулями. Биты, находящиеся в старшем слове аккумулятора остаются без изменения; нет также переноса данных Число позиций, на которое выполняется операция сдвига, может быть указано в параметре инструкции SLW или может быть загружено в аккумулятор accumulator 2 в виде положительного числа формата INT, выровненного вправо. Если число позиций равно нулю, то операция сдвига не выполняется (нет операции, т.е. NOP); если число позиций больше 15, то после выполнения операции сдвига SLW все биты младшего слова аккумулятора будут иметь значение "0".
Если содержимое аккумуляторе accumulator 1 (младшего слова) интерпретируется как целое число формата INT, то сдвиг влево эквивалентен умножению на число, равное степенной функции с основанием 2 и показателем степени, равным числу позиций, на которые Сдвиг двойного слова данных влево Функция сдвига SLD позволяет бит за битом сдвигать влево данные, находящиеся во всех битах аккумулятора accumulator 1. При этом разряды, освобождаемые при сдвиге содержимого аккумулятора 13. Функции сдвига Число позиций, на которое выполняется операция сдвига, может быть указано в параметре инструкции SLD или может быть загружено в аккумулятор accumulator 2, в виде положительного числа формата INT, выровненного вправо. Если число позиций равно нулю, то операция сдвига не выполняется (нет операции, т.е. NOP); если число позиций больше 31, то после выполнения операции сдвига SLD все биты аккумулятора accumulator 1 будут иметь значение "0".
Если содержимое аккумуляторе accumulator 1 интерпретируется как целое число формата DINT, то сдвиг влево эквивалентен умножению на число, равное степенной функции с основанием 2 и показателем степени, равным числу позиций, на которые производится сдвиг.
Сдвиг слова данных вправо Функция сдвига SRW позволяет бит за битом сдвигать вправо данные, находящиеся в младшем слове аккумулятора accumulator 1 (т.е. в битах с 0 по 15). При этом разряды, освобождаемые при сдвиге содержимого указанных битов заполняются нулями. Биты, находящиеся в старшем слове (биты с 16 по 31) остаются без изменения.
Число позиций, на которое выполняется операция сдвига, может быть указано в параметре инструкции SRW или может быть загружено в аккумулятор accumulator 2 в виде положительного числа формата INT, выровненного вправо. Если число позиций равно нулю, то операция сдвига не выполняется (нет операции, т.е. NOP); если число позиций больше 15, то после выполнения операции сдвига SRW все биты младшего слова аккумулятора будут иметь значение "0".
Если содержимое аккумуляторе accumulator 1 (младшего слова) интерпретируется как целое число формата INT, то сдвиг вправо эквивалентен делению на число, равное степенной функции с основанием 2 и показателем степени, равным числу позиций, на которые производится сдвиг. Так как при сдвиге вправо производится заполнение битов нулевым значением, начиная со старшего бита в слове, то результатом всегда будет положительное число. Результат упомянутого деления соответствует округлению целой части.
Сдвиг двойного слова данных вправо Функция сдвига SRD позволяет бит за битом сдвигать вправо данные, находящиеся во всех битах аккумулятора accumulator 1. При этом разряды, освобождаемые при сдвиге содержимого этого аккумулятора Число позиций, на которое выполняется операция сдвига, может быть указано в параметре инструкции SRD или может быть загружено в аккумулятор accumulator 2, в виде положительного числа формата INT, Автоматизация посредством STEP с использованием STL и SCL выровненного вправо. Если число позиций равно нулю, то операция сдвига не выполняется (нет операции, т.е. NOP); если число позиций больше 31, то после выполнения операции сдвига SRD все биты аккумулятора accumulator 1 будут иметь значение "0".
Если содержимое аккумуляторе accumulator 1 интерпретируется как целое число формата DINT, то сдвиг вправо эквивалентен делению на число, равное степенной функции с основанием 2 и показателем степени, равным числу позиций, на которые производится сдвиг. Так как при сдвиге вправо производится заполнение битов нулевым значением, начиная со старшего бита в слове, то результатом всегда будет положительное число. Результат упомянутого деления соответствует операции округления целой части.
Сдвиг слова данных со знаком Функция сдвига SSI позволяет бит за битом сдвигать вправо данные, находящиеся в младшем слове аккумулятора accumulator 1 (т.е. в битах с 0 по 15). При этом разряды, освобождаемые при сдвиге содержимого указанных битов заполняются значением бита 15 (бита, содержащего знак числа формата INT). Иначе говоря, этом разряды заполняются значением "0", если число положительное и значением "1", если число Функция сдвига SSI не влияет на содержимое битов с 16 по 31.
Число позиций, на которое выполняется операция сдвига, может быть указано в параметре инструкции SSI или может быть загружено в аккумулятор accumulator 2 в виде положительного числа формата INT, выровненного вправо. Если число позиций равно нулю, то операция сдвига не выполняется (нет операции, т.е. NOP); если число позиций больше 15, то после выполнения операции сдвига SSI все биты младшего слова аккумулятора будут иметь значение, соответствующее знаку исходного числа в аккумуляторе.
Если содержимое аккумуляторе accumulator 1 (младшего слова) интерпретируется как целое число формата INT, то сдвиг вправо эквивалентен делению на число, равное степенной функции с основанием 2 и показателем степени, равным числу позиций, на которые производится сдвиг. Результат упомянутого деления соответствует округлению целой части.
Сдвиг двойного слова данных со знаком SSD Функция сдвига SSD позволяет бит за битом сдвигать вправо данные, находящиеся во всех битах аккумулятора accumulator 1. При этом разряды, освобождаемые при сдвиге содержимого указанных битов заполняются значением бита 31 (бита, содержащего знак числа формата DINT). Иначе говоря, этом разряды заполняются значением "0", если число положительное и значением "1", если число отрицательное.
13. Функции сдвига Число позиций, на которое выполняется операция сдвига, может быть указано в параметре инструкции SSD или может быть загружено в аккумулятор accumulator 2, в виде положительного числа формата INT, выровненного вправо. Если число позиций равно нулю, то операция сдвига не выполняется (нет операции, т.е. NOP); если число позиций больше 31, то после выполнения операции сдвига SSD все биты аккумулятора accumulator 1 будут иметь значение, соответствующее знаку исходного числа в аккумуляторе.
Если содержимое аккумуляторе accumulator 1 интерпретируется как целое число формата DINT, то сдвиг вправо эквивалентен делению на число, равное степенной функции с основанием 2 и показателем степени, равным числу позиций, на которые производится сдвиг. Результат упомянутого деления соответствует операции округления целой части.
13.3 Операции циклического сдвига Циклический сдвиг влево Операция циклического сдвига RLD позволяет бит за битом сдвигать влево данные, находящиеся во всех битах аккумулятора accumulator 1.
При этом вновь освобожденный при сдвиге содержимого разряд заполняется значением бита, который был "вытолкнут" из аккумулятора Число позиций, на которое выполняется операция циклического сдвига, может быть указано в параметре инструкции RLD или может быть загружено в аккумулятор accumulator 2, в виде положительного числа формата INT, выровненного вправо. Если число позиций равно нулю, то операция циклического сдвига не выполняется (нет операции, т.е. NOP);
если число позиций равно 32, то содержимое аккумулятора accumulator не изменяется, а бит состояния CC1 принимает состояние бита, перемещенного последним (бит 0). Если указанное число позиций равно 33, то содержимое аккумулятора accumulator 1 смещается на 1 разряд, если указанное число позиций равно 34, то содержимое смещается на Циклический сдвиг вправо Операция циклического сдвига RRD позволяет бит за битом сдвигать вправо данные, находящиеся во всех битах аккумулятора accumulator 1.
При этом вновь освобожденный при сдвиге содержимого разряд заполняется значением бита, который был "вытолкнут" из аккумулятора Автоматизация посредством STEP с использованием STL и SCL Число позиций, на которое выполняется операция циклического сдвига, может быть указано в параметре инструкции RRD или может быть загружено в аккумулятор accumulator 2, в виде положительного числа формата INT, выровненного вправо. Если число позиций равно нулю, то операция циклического сдвига не выполняется (нет операции, т.е. NOP);
если число позиций равно 32, то содержимое аккумулятора accumulator не изменяется, а бит состояния CC1 принимает состояние бита, перемещенного последним (бит 31). Если указанное число позиций равно 33, то содержимое аккумулятора accumulator 1 смещается на 1 разряд, если указанное число позиций равно 34, то содержимое смещается на Циклический сдвиг влево через бит состояния CC RLDA Циклический сдвиг влево через бит состояния CC1 на 1 разряд Операция циклического сдвига RLDA позволяет сдвигать на 1 бит влево данные, находящиеся во всех битах аккумулятора accumulator 1. При этом вновь освобожденный при сдвиге содержимого разряд (бит 0) заполняется значением из бита состояния CC1, а бит состояния CC1, в свою очередь принимает состояние бита, который был "вытолкнут" из аккумулятора последним (бит 31). При этом бит состояния CC устанавливается в состояние "0".
Циклический сдвиг вправо через бит состояния CC RRDA Циклический сдвиг вправо через бит состояния CC1 на 1 разряд Операция циклического сдвига RRDA позволяет сдвигать на 1 бит вправо данные, находящиеся во всех битах аккумулятора accumulator 1. При этом вновь освобожденный при сдвиге содержимого разряд (бит 31) заполняется значением из бита состояния CC1, а бит состояния CC1, в свою очередь принимает состояние бита, который был "вытолкнут" из аккумулятора последним (бит 0). При этом бит состояния CC устанавливается в состояние "0".
14 Логические функции для слов данных (Word Logic) Логические функции для слов данных (Word Logic) позволяют побитно комбинировать значение, находящееся в аккумуляторе accumulator 1, с константой или с содержимым аккумулятора accumulator 2. Результат выполнения операции сохраняется в аккумуляторе accumulator 1.
Логические функции могут выполняться как для данных формата Word (слов), так и для данных фомата Duobleword (двойных слов).
Пользователю доступны следующие логические операции для слов • Exclusive OR логическая операция "Исключающее ИЛИ".
В этой главе будут рассмотрены логические функции для слов данных (Word Logic), используемые в языке программирования STL. В языке программирования SCL выполнение логических функций обеспечивается с помощью программирования соответствующих логических выражений (см. раздел 27.4.3 "Логические операции").
Информацию о том, каким образом логические функции устанавливают биты состояния Вы можете получить из главы 15 "Биты состояния".
Примеры, рассматриваемые в данной главе, Вы можете найти на прилагаемой дискете в библиотеке STL_Book library в разделе "Digital Functions" ("Функции для обработки чисел") в функциональном блоке FB 14.1 Выполнение логических операций для слов данных Вы можете программировать операции двумя способами в соответствии со следующими общими схемами:
Загрузка (load) адреса Address1;
Загрузка (load) адреса Address2;
Логическая операцияции для слова данных без константы;
Передача (transfer) результата Result;
Загрузка (load) адреса Address;
Логическая операцияции для слова данных c константой;
Передача (transfer) результата Result;
Автоматизация посредством STEP с использованием STL и SCL Логические функции для слов данных всегда выполняются вне всякой связи с какими-либо условиями. При этом эти функции не влияют на результат логической операции (RLO).
Формирование результата логической операции для слов данных Логические функции для слов данных формируют результат операции бит за битом таким же образом, как и функции двоичной логики, описанные в главе 4 "Двоичные логические операции" (табл.14.1).
Таблица 14.1 Формирование результата логической операции для слов Содержимое бита в аккумуляторе Логическая функция комбинирует бит 0 аккумулятора accumulator 1 с битом 0 аккумулятора accumulator 2 или константы, указанной в инструкции. Результат сохраняется в бите 0 аккумулятора accumulator 1.
Таким же образом эта же логическая операция выполняется для битов 2, битов 3 и так далее вплоть до старшего бита операндов (до бита 15 в операциях для слов и до бита 31 в операциях для двойных слов).
Содержимое аккумулятора accumulator 2 при этом остается неизменным.
Логические функции для слов данных с содержимым accumulator Перед инструкцией логической функции для слов данных должны следовать две операции загрузки, для того, чтобы можно было комбинировать загружаемые значения. После выполнения логической функции результат сохраняется в аккумуляторе accumulator 1.
В этом примере логическая функция выполняется с данными формата Логические функции для слов данных с константой Перед инструкцией логической функции для слов данных должна следовать операция загрузки, для того, чтобы можно было комбинировать загружаемое значение с константой, которая в свою очередь задается в операторе функции. Результат выполнения логической функции сохраняется в аккумуляторе accumulator 1.
14. Логические функции для данных формата Word В этом примере логическая функция выполняется с данными формата двойное слово (Duobleword).
Выполнение логических операций c данными формата слово (Word) Логические функции, выполняемые с данными формата слово (Word), воздействуют только на данные, находящиеся в младшем слове аккумулятора accumulator 1 (т.е. в битах с 0 по 15). При этом биты, находящиеся в старшем слове аккумулятора (биты с 16 по 31), остаются Рис.14.1 Выполнение логических операций c данными формата слово (Word) Последовательное выполнение логических операций После завершения логической операции для слов данных Вы можете немедленно перейти к выполнению следующей логической операции (загрузив предварительно данные посредством операции load из соответствующего адреса или задав константу как параметр в инструкции) без необходимости сохранения промежуточного результата (например, в области локальных данных). Аккумуляторы сами служат для временного Автоматизация посредством STEP с использованием STL и SCL В вышеуказанном примере результат выполнения инструкции AW содержится в аккумуляторе accumulator 1. Во время загрузки значения Value3 этот результат смещается в аккумулятор accumulator 2. Теперь оба значения могут быть обработаны в соответствии с инструкцией OW.
В данном примере результат выполнения операции XOW содержится в аккумуляторе accumulator 1. Биты с 0 по 3 аккумулятора сбрасываются в состояние "0" при выполнении операции AW.
В таблице 14.2 показаны примеры по одному для каждого типа логических Таблица 14.2 Примеры применения логических функций для слов данных Логическая операция (логическое И) ИЛИ) Логическая операция Exclusive OR (Исключающее ИЛИ) 14.2 Описание логических операций для слов данных Операция AND (И) для слов данных 14. Логические функции для данных формата Word Логическая функция для обработки двух чисел в соответствии с логикой AND (И) позволяет последовательно бит за битом комбинировать данные, находящиеся в аккумуляторе accumulator 1, с соответствующими битами аккумулятора accumulator 2 или с соответствующими битами константы, указанной в инструкции функции. Бит, находящийся в слове результата, будет установлен в состояние "1" только в случае, если оба сравниваемых бита исходных данных имеют значение "1".
Так как те биты в аккумуляторе accumulator 2 или в константе, которые имеют значение "0", сбрасывают в "0" соответствующие биты слова результата вне зависимости от состояния соответствующих битов в аккумуляторе accumulator 1, то говорят, что эти биты "маскированы" ("masked"). Этот, так называемый, эффект маскирования битов и является основным назначением логических AND (И) операций для слов данных.
Операция OR (ИЛИ) для слов данных Логическая функция для обработки двух чисел в соответствии с логикой OR (ИЛИ) позволяет последовательно бит за битом комбинировать данные, находящиеся в аккумуляторе accumulator 1, с соответствующими битами аккумулятора accumulator 2 или с соответствующими битами константы, указанной в инструкции функции. Бит, находящийся в слове результата, будет сброшен в состояние "0" только в случае, если оба сравниваемых бита исходных данных имеют значение "0".
Так как те биты в аккумуляторе accumulator 2 или в константе, которые имеют значение "1", устанавливают в "1" соответствующие биты слова результата вне зависимости от состояния соответствующих битов в аккумуляторе accumulator 1, то говорят, что эти биты "маскированы" ("masked"). Этот, так называемый, эффект маскирования битов и является основным назначением логических OR (ИЛИ) операций для слов данных.
Операция Exclusive OR (Исключающее ИЛИ) для слов данных Автоматизация посредством STEP с использованием STL и SCL Логическая функция для обработки двух чисел в соответствии с логикой Exclusive OR (Исключающее ИЛИ) позволяет последовательно бит за битом комбинировать данные, находящиеся в аккумуляторе accumulator 1, с соответствующими битами аккумулятора accumulator 2 или с соответствующими битами константы, указанной в инструкции функции.
Бит, находящийся в слове результата, будет установлен в состояние "1" только в случае, если только один из сравниваемых битов исходных данных имеет значение "1". Если некоторый бит в аккумуляторе accumulator 2 или в константе, имеет значение "1", то соответствующий бит слова результата в соответствии с логикой функции будет иметь инвертированное значение по отношению к предыдущему значению этого бита в аккумуляторе accumulator 1.
В результате те биты в аккумуляторе accumulator 2 или в константе, которые имеют значение "1", устанавливают в "1" соответствующие биты слова результата вне зависимости от состояния соответствующих битов в аккумуляторе accumulator 1, то говорят, что эти биты "маскированы" ("masked"). Этот, так называемый, эффект маскирования битов и является основным назначением логических Exclusive OR (Исключающее ИЛИ) операций для слов данных.
Управление выполнением программы STEP 7 обеспечивает пользователя различными средствами для управления ходом выполнения программы. Вы можете выходить из выполняемой линейной программы внутри блока, Вы можете также создать определенную структуру программы посредством вызовов параметрируемых блоков. Вы можете воздействовать на выполнение программы, исходя из текущих значений параметров, рассчитанных во время работы программы, в зависимости параметров процесса или в связи с состоянием установки.
Биты состояния (status bits) призваны обеспечивать информацией, зависящей от результатов выполнения арифметических и математических функций, а также от возникающих ошибок (например, из-за нарушения границ диапазона допустимых значений при расчетах). Вы можете использовать состояния сигналов этих битов в Вашей программе непосредственно, проверяя их с помощью двоичных логических операций.
Функции перехода (jump functions) могут использоваться для организации ветвления программы пользователя. Функции перехода могут быть либо безусловные, либо условные, (по условию определяемому отдельным битом состояния, результатом логической операции RLO или двоичным результатом). В STL можно легко запрограммировать переходы в рассчетные точки программы (распределитель переходов) или выполнить программные циклы Главное управляющее реле (Master Control Relay - MCR) обеспечивает еще один способ управления выполнением программы. Изначально разработанный для систем управления с помощью реле, язык STL обеспечивает программную (компьютерную) версию программируемого Функции блоков (block functions) позволяют пользователю структурировать программу. Вы можете снова и снова использовать функции и функциональные блоки, определяя параметры блоков.
Более подробную информацию о программировании блоков на STL Вы можете найти в разделе 3.4 "Программирование кодовых блоков на STL".
Главы 18 "Функции блоков" и 19 "Параметры блоков" продолжают эту тему. Информацию, касающуюся этих же вопросов для языка SCL, Вы можете отыскать в разделе 3.5 "Программирование кодовых блоков на SCL" и в главе 29 "SCL блоки". Глава 26 "Прямой доступ к переменным" содержит дополнительную информацию по параметрам блоков, такую, например, как сохранение параметров в памяти и использование параметров для сложных типов данных.
Автоматизация посредством STEP с использованием STL и SCL 15 Биты состояния (Status bits) Биты состояния RLO, BR, CC0, CC1 и превышения (overflow); проверка битов состояния; слово состояния (status word); EN/ENO.
16 Функции перехода (Jump functions) Безусловные переходы; переходы по условию для RLO, BR, CC0, CC и превышения (overflow); распределитель переходов ("jump distributor");
циклический переход (loop jump).
17 Главное управляющее реле (Master Control Relay - MCR) Зависимость от MCR; MCR-диапазон; MCR-зона.
Тип блоков, вызовы блоков, окончания блоков; статические локальные данные; обработка блоков данных, регистр блока данных, обработка Объявление параметров; формальные параметры и фактические параметры; передача параметров в вызываемые блоки; примеры:
ленточный конвейер, счетчик деталей и загрузка.
15 Биты состояния (Status Bits) Биты состояния - это двоичные флаги (индикаторные биты). CPU использует их для управления двоичными логическими операциями. CPU устанавливает биты состояния при выполнении операций обработки чисел. Вы можете проверять состояние этих битов (например, для выяснения результата выполнения вычислений); Вы можете также влиять на отдельные биты. Биты состояния скомпонованы в слово, в "слово состояния" ("status word").
Примеры, рассматриваемые в данной главе, Вы можете найти на прилагаемой дискете в библиотеке STL_Book library в разделе "Program Flow Control" ("Управление выполнением программы") в функциональном блоке FB 115 или в исходном файле Chap_15.
15.1 Описание битов состояния В таблице 15.1 представлены биты состояния, доступные при STLпрограммировании.
Автоматизация посредством STEP с использованием STL и SCL Первый столбец показывает номер бита в слове состояния. CPU использует "двоичные флаги" ("binary flags") для управления двоичными функциями; "числовые флаги" ("digital flags") используются прежде всего для индикации результатов арифметических и математических функций.
Первичный опрос (first check) Бит состояния /FC управляет двоичными логическими операциями внутри логического устройства управления (часть АЛУ). Двоичный логический шаг всегда начинается с двоичной инструкции проверки (первичного опроса) при /FC = "0", как показано в описании двоичных логических операций. Первичный опрос устанавливает /FC в состояние "1" (/FC = "1").
Двоичный логический шаг заканчивается присвоение двоичного значения, или условным переходом, или изменением блока. Это сбрасывает бит состояния: /FC = "0". Следующая двоичная проверка (опрос) начинается с новой двоичной логической функции.
Результат логической операции (RLO) Бит состояния RLO является промежуточным буфером в двоичных логических операциях. При первичном опросе CPU передает результат опроса в RLO, комбинирует результат опроса с хранящимся в RLO значением при каждом последующем опросе и затем сохраняет результат в RLO (как описано в главе 4 "Двоичные логические операции"). Вы можете также устанавливать, сбрасывать или инвертировать значение в RLO непосредственно или сохранять его в BR. Функции счетчика, таймера и операции с памятью управляются с использованием RLO, как и функции Состояние (status) Состояние бита STA соответствует состоянию сигнала указанного двоичного разряда (двоичного адреса) или проверяемого "условного бита" для двоичной логической операции (A, AN, O, ON, X, XN).
В случае операций с памятью (S, R, =) значение бита состояния STA соответствует записанному в память значению или (в случае отсутствия операции записи в память, например, при RLO = "0" или когда главное управляющее реле MCR активно) значение бита STA соответствует значению адресованного (но неизмененного) двоичного адреса.
При проверке наличия фронта сигнала FP или FN значение RLO до операции проверки фронта сохраняется в бите состояния STA. Все остальные двоичные операции устанавливают STA (STA = "1"), как и переходы, зависящие от состояния двоичного флага: JC, JCN, JBI, JNBI (исключение: CLR сбрасывает бит STA: STA = "0").
Бит состояния STA не влияет на обработку операторов STL-операторов.
Состояние этого бита отображается тестовыми функциями с помощью программатора PG (такой функцией, например, как функция отображения состояния программы "program status"). Таким образом, Вы можете использовать этот бит состояния для трассировки двоичных логических последовательностей или в целях отладки программы.
Бит состояния OR (OR status bit) Бит OR status сохраняет результат выполненной (имеется в виду, что условие функции выполнено) двоичной логической операции AND (И) ("1") 15. Биты состояния и показывает последующей операции OR (ИЛИ), что результат уже зафиксирован (при комбинированной операции OR (ИЛИ) внутри операции AND (И) перед выполнением операции OR (ИЛИ)). Все остальные двоичные операторы сбрасывают бит OR status.
В таблице 15.2 в графах "Двоичные флаги (Binary flags)" приводится пример двоичного логического шага для иллюстрации действия двоичных флагов. Двоичный логический шаг начинается с первичного опроса после операции с памятью и заканчивается с последней операцией с памятью Таблица 15.2 Пример влияния битов состояния STL-операторы Автоматизация посредством STEP с использованием STL и SCL Переполнение (Overflow) Бит состояния OV индицирует факт превышения диапазона допустимых численных значений (переполнения) или факт использования некорректных действительных (REAL) чисел. На состояние бита OV влияют следующие функции: арифметические, математические, отдельные функции преобразования, функции сравнения действительных Вы можете проверить состояние бита OV с помощью операций проверки или посредством оператора перехода JO.
Сохранение информации о превышении граничных значений (Stored overflow) Бит состояния OS фиксирует факт превышения (дублирует и сохраняет установленное состояние бита OV). Когда CPU устанавливает бит состояния OV, он также устанавливает бит состояния OS. При этом, если бит состояния OV в дальнейшем может быть сброшен при выполнении соответствующей операции, то бит OS сохранит свое состояние, т.е.
информацию о состоявшемся факте превышения. Это позволит Вам выполнять альтернативную проверку бита состояния, в том числе и отложенную во времени (в более поздней точке программы), для определения факта превышения диапазона допустимых численных значений или факта использования некорректных действительных (REAL) Вы можете проверять состояние бита OS посредством операторов проверки (опроса) или с помощью оператора перехода JOS. Оператор перехода JOS или смена блока сбрасывает бит состояния OS.
Биты состояния CC0, CC1 (биты "условных кодов") (condition codes) Биты состояния CC0, CC1 (условные биты) призваны обеспечивать информацией о результатах выполнения функций сравнения, арифметических и математических функций, логических операций для слов данных или о состоянии "вытолкнутых" битов в случае выполнения Вы можете проверять состояние всех числовых флагов с помощью операторов перехода или посредством операторов проверки (опроса) (см.
далее в этой главе). В нижней части таблицы 15.2 показаны примеры установки числовых флагов (digital flags).
Двоичный результат (binary result) Бит состояния BR (двоичный результат) помогает реализовать механизм EN/ENO для вызовов блоков (в сочетании с графическими языками). В разделе 15.4 "Использование двоичного результата" показано, как STEP использует бит двоичный результат. Вы можете также установить или сбросить бит состояния BR или проверить его состояние с помощью операторов проверки (опроса) или посредством операторов перехода. ).
Слово состояния (status word) Слово состояния (status word) содержит в себе все биты состояния. Вы можете загружать слово состояния в аккумулятор accumulator 1, а также считать его значение из этого аккумулятора.
15. Биты состояния См. в главе 6 "Функции пересылки данных" о том, как используются операторы загрузки (load) и выгрузки (transfer). В таблице 15. представлены биты состояния в слове состояния с указанием их Вы можете использовать слово состояния для проверки битов состояния или для их установки в соответствии с Вашими требованиями. Таким образом, Вы можете сохранить текущее значение слова состояния или начать выполнение программного блока с требуемыми значениями битов Надо учитывать, что S7-300 CPU (кроме CPU 318) не загружают биты состояния /FC, STA и OR в аккумулятор; аккумулятор в соответствующих этим битам позициях содержит "0".
15.2 Описание битов состояния Функции обработки чисел влияют на биты состояния CC0, CC1, OV и OS, как показано в таблице 15.3. Отдельные операторы STL влияют на биты Биты состояния при вычислениях с INT- и DINT-числами Арифметические функции при использовании данных форматов INT и DINT могут устанавливать все числовые флаги ("digital flags" - биты состояния). В случае результата, равного нулю, биты CC0 и CC сбрасываются в "0". Сочетание CC0 = "0", а CC1 = "1" сообщает о положительном результате. Сочетание CC0 = "1", а CC1 = "0" сообщает об отрицательном результате. Превышение (overflow) пределов диапазона допустимых значений устанавливает биты OV и OS (примечание: при других значениях битов состояния CC0 и CC1). Деление на ноль приводит к установлению в состояние "1" всех "числовых битов состояния" ("digital status bits").
Биты состояния при вычислениях с REAL-числами Арифметические функции при использовании данных формата REAL могут устанавливать все "числовые биты состояния" ("digital status bits"). В случае результата, равного нулю, биты CC0 и CC1 сбрасываются в "0".
Сочетание CC0 = "0", а CC1 = "1" сообщает о положительном результате.
Сочетание CC0 = "1", а CC1 = "0" сообщает об отрицательном результате.
Превышение (overflow) пределов диапазона допустимых значений устанавливает биты OV и OS (примечание: при других значениях битов состояния CC0 и CC1). При обработке некорректного действительного (REAL) числа происходит установка в состояние "1" всех числовых битов Действительное (REAL) число относится к "ненормированным" (или "ненормализованным" - "denormalized"), если оно представляется с уменьшенной точностью. Абсолютное значение "ненормированного" ("denormalized") числа формата REAL меньше чем 1.175494 · 10 (см.
главу 24 "Типы данных"). S7-300 интерпретируют ненормированные числа формата REAL как числа, равные нулю.
Автоматизация посредством STEP с использованием STL и SCL Таблица 15.3 Установка битов состояния + бесконечность - бесконечность (деление на 0) Преобразование данных NEG_I Преобразование данных NEG_D 15. Биты состояния Биты состояния при работе с функциями преобразования Из функций преобразования функции инвертирования влияют на все "числовые биты состояния" ("digital status bits"). Кроме того, следующие функции преобразования устанавливают биты состояния OV и OS в случае появления ошибок: (выход за пределы диапазона допустимых значений и обработка некорректного числа формата REAL):
• ITB и DTB: преобразование числа формата INT в формат BCD • RND+, RND-, RND, TRUNK: преобразование числа формата REAL Биты состояния при работе с функциями сравнения Функции сравнения устанавливают биты состояния CC0 и CC1. Флаги устанавливаются независимо от типа выполняемой функции сравнения;
зависят они только от отношения между двумя значениями, указанными в выражении функции сравнения. Функция сравнения чисел формата REAL производит проверку корректности данных формата REAL.
Биты состояния при работе с логическими операциями для слов и с функциями сдвига Логические операции для слов и функции сдвига устанавливают биты состояния CC0 и CC1. Бит OV находится в сброшенном состоянии ("0").
Установка и сброс RLO Оператор SET устанавливает RLO в состояние "1", а оператор CLR сбрасывает RLO в состояние "0". Одновременно происходит установка в "1" или сброс в "0" бита состояния STA. Рассматриваемые операторы выполняются без всяких условий.
Операторы SET и CLR устанавливают также биты состояния OR и /FC, что означает, что после операторов SET или CLR новая логическая операция начинается со следующей операции проверки (опроса).
Вы можете запрограммировать сброс или установку бита (двоичного адреса) с помощью оператора SET:
Прямая установка и сброс RLO также полезны при использовании с таймерами и счетчиками. Для запуска таймера и счетчика Вам необходимо изменить RLO со значения "0" на значение "1" (помните также, что Вам еще требуется для этого положительный фронт сигнала разрешения). В разделе программы, в котором преобладают числовые логические операции, RLO обычно не определяется, например, при последующей функции перехода для проверки "числовых флагов" (битов состояния -"digital flags"). При этом Вы можете использовать операторы SET и CLR для определенных установок и сбросов RLO или для программного изменения RLO.
Об инвертировании RLO с NOT см. гл. 4 "Двоичные логические операции".
Автоматизация посредством STEP с использованием STL и SCL Установка и сброс BR С помощью оператора SAVE Вы можете сохранить в бите состояния "двоичный результат" (BR - "binary result"). Оператор SAVE пересылает состояние сигнала RLO в бит состояния BR. Оператор SAVE выполняются без всяких условий; при этом он не влияет на другие биты состояния.
15.3 Проверка битов состояния Биты состояния RLO и BR и все числовые флаги (digital flags) могут быть проверены с помощью операций двоичного опроса и функций перехода.
Также можно обрабатывать биты состояния после загрузки в аккумулятор Проверка битов состояния с помощью операции двоичного опроса Вы можете использовать все операторы опроса (проверки), описанные в главе 4 "Двоичные логические операции", для проверки числовых флагов (digital flags) и двоичного результата BR (см. ниже).
A - Проверка (опрос) выполнения условия и логическое AND (И) O - Проверка (опрос) выполнения условия и логическое OR (ИЛИ) X - Проверка (опрос) выполнения условия и Exclusive OR AN - Проверка (опрос) невыполнения условия и логическое AND (И) ON - Проверка (опрос) невыполнения условия и логическое OR (ИЛИ) XN - Проверка (опрос) невыполнения условия и Exclusive OR Рис.16.1 Пример ветвления программы.
В примере условием перехода является положительный результат операции сравнения; операция сравнения формирует результат логической операции RLO. Собственно значение RLO и является условием перехода для выражения с JC. При положительном результате операции сравнения (условие операции сравнения выполняется) RLO = "1", при этом выполняется переход к метке GR50. Выполнение программы продолжается с этой метки. При отрицательном результате операции сравнения (условие операции сравнения не выполняется) RLO = "0" и перехода к GR50 нет, программа выполняется со следующего за оператором условного перехода выражения.
Переход может выполняться как вперед (в направлении выполнения программы, т.е., в направлении увеличения номеров строк), так и назад.
Переход может выполняться только внутри блока; то есть, назначение точек перехода должно задаваться в том же блоке, где находятся выражения с оператором перехода. Разбиение блока на сегменты не влияет на функцию перехода.
Точки перехода должны иметь уникальный идентификатор, что означает, что Вы можете назначать любую метку перехода в блоке, но только один 16. Функции перехода К одной точке (метке) переход может осуществляться из нескольких точек программы блока. Если Вы используете главное управляющее реле MCR, то метки перехода должны быть в той же MCR-зоне или в той же MCRобласти, что и выражение с оператором перехода.
При программировании на языке STL идентификаторы меток сохраняются в соответствующей неисполняемой части блока на носителях данных программатора PG. Только величина перехода хранится в рабочей (work) памяти CPU (в скомпилированном блоке). По этой причине изменения в программе блока, сделанные в интерактивном режиме в CPU, должны также быть выполнены и на дисках программатора PG для сохранения исходных назначений. Если обновления программы не сделаны или если блоки были перенесены из CPU в программатор PG, то соответствующие неисполняемые части блоков переписываются или уничтожаются. Затем редактор сгенерирует свои собственные назначения меток (M001, M002 и 16.2 Безусловный переход Функция безусловного перехода JU выполняется всегда, т.е. не зависит ни от каких условий. Функция JU прерывает последовательное выполнение программы и продолжает это выполнение с другой точки программы - с метки перехода, указанной в инструкции.
Функция безусловного перехода JU не влияет на биты состояния. Если встречаются операторы проверки (опроса), такие, например, как A I, O I и т.д., располагающиеся непосредственно перед функцией перехода и сразу после метки перехода, то они воспринимаются как отдельные 16.3 Функции перехода в зависимости от состояния RLO и BR Переход в программе может быть сделан зависящим от состояния сигналов битов RLO и BR (см. табл. 16.1). Кроме того, одновременно можно сохранить результаты проверки битов состояния RLO и BR.
Автоматизация посредством STEP с использованием STL и SCL Установка битов состояния Функции перехода, зависящие от RLO, устанавливают биты состояния STA и RLO в "1", а OR и /FC в "0", и при выполнении условия для перехода, и при невыполнении этого условия.
Это приводит к нижеуказанным последствиям при использовании этих функций перехода: RLO всегда устанавливается в состояние "1". Если выражения содержат операции, зависящие от RLO, следующие сразу за такими функциями перехода, то они будут выполняться, если не будет выполнен переход. Если встречаются операторы проверки (опроса), такие, например, как A I, O I и т.д., располагающиеся непосредственно за такими функциями перехода, то эти операторы проверки (опроса) воспринимаются как операции первичного опроса, что означает, что начинается новый логический шаг (новая логическая операция).
Функции перехода, зависящие от BR, устанавливают бит состояния STA в "1", а OR и /FC в "0", и при выполнении условия для перехода, и при невыполнении этого условия. Биты состояния BR и RLO остаются неизменными. Это приводит к нижеуказанным последствиям при использовании таких функций перехода: такие функции перехода завершают логическую операцию; новая логическая операция начинается после таких функций перехода или с метки перехода в программе при выполнении условия для перехода. Бит состояния RLO остается и может быть проверен с помощью операций с памятью сразу после функции Переход при RLO = "1" Функция перехода JC выполняется только в том случае, если RLO = "1" в момент обработки функции. Если RLO = "0", то переход не выполняется и программа продолжает выполняться со следующей инструкции.
Переход при RLO = "0" Функция перехода JCN выполняется только в том случае, если RLO = "0" в момент обработки функции. Если RLO = "1", то переход не выполняется и программа продолжает выполняться со следующей инструкции.
Переход при RLO = "1" и сохранение RLO Функция перехода JCB выполняется только в том случае, если RLO = "1" в момент обработки функции. Одновременно функция JCB устанавливает двоичный результат BR в состояние "1". Если RLO = "0", то переход не выполняется и программа продолжает выполняться со следующей инструкции. В этом случае функция JCB устанавливает двоичный результат BR в состояние "0" (т.е., в любом случае RLO переносится в двоичный результат BR).
Переход при RLO = "0" и сохранение RLO Функция перехода JNB выполняется только в том случае, если RLO = "0" в момент обработки функции. Одновременно функция JNB устанавливает двоичный результат BR в состояние "0". Если RLO = "1", то переход не выполняется и программа продолжает выполняться со следующей инструкции. В этом случае функция JNB устанавливает двоичный результат BR в состояние "1" (т.е., в любом случае RLO переносится в двоичный результат BR).
16. Функции перехода Переход при BR = "1" Функция перехода JBI выполняется только в том случае, если двоичный результат BR = "1" в момент обработки функции. Если двоичный результат BR = "0", то переход не выполняется и программа продолжает выполняться со следующей инструкции.
Переход при BR = "0" Функция перехода JBIN выполняется только в том случае, если двоичный результат BR = "0" в момент обработки функции. Если двоичный результат BR = "1", то переход не выполняется и программа продолжает выполняться со следующей инструкции.
16.4 Функции перехода в зависимости от состояния CC0 и CC Переход в программе может быть сделан зависящим от состояния сигналов битов CC0 и CC1 (см. табл. 16.2). Это позволяет, например, проверять, положителен ли результат вычисления, равен ли он нулю или меньше нуля (отрицательный результат). Подробную информацию о том, как устанавливаются биты состояния CC0 и CC1, Вы можете найти в Таблица 16.2 Функции перехода с CC0 и CC Установка битов состояния Функции перехода, зависящие от CC0 и CC1, не изменяют никаких битов состояния. Если переход выполнен, значение RLO остается при продолжении программы со строки с меткой перехода и может использоваться далее в программе (без изменения в /FC).
Двоичный опрос является другим способом проверки битов состояния (см.
Автоматизация посредством STEP с использованием STL и SCL Переход при условии, что результат равен нулю Функция перехода JZ выполняется только в том случае, если CC0 = "0" и • аккумулятор accumulator 1 содержит ноль после арифметической или • аккумулятор accumulator 2 содержит то же значение, что и аккумулятор accumulator 1, при выполнении операции сравнения;
• аккумулятор accumulator 1 содержит ноль после выполнения логической • значение сдвинутого последним бита содержит ноль после выполнения Во всех остальных случаях условие для перехода для функции JZ не выполняется и выполнение программы продолжается со следующей Переход при условии, что результат не равен нулю Функция перехода JN выполняется только в том случае, если биты состояния CC0 и CC1 имеют разные значения. Этот случай имеет место, • аккумулятор accumulator 1 не содержит ноль после арифметической • аккумулятор accumulator 2 не содержит то же значение, что и аккумулятор accumulator 1, при выполнении операции сравнения;
• аккумулятор accumulator 1 не содержит ноль после выполнения • значение сдвинутого последним бита содержит "1" после выполнения Во всех остальных случаях условие для перехода для функции JN не выполняется и выполнение программы продолжается со следующей Переход при условии, что результат больше нуля Функция перехода JP выполняется только в том случае, если CC0 = "0" и CC1 = "1". Этот случай имеет место, если • содержимое аккумулятора accumulator 1 находится внутри диапазона допустимых положительных значений после арифметической или математической операции (проверить нарушение границ диапазона • содержимое аккумулятора accumulator 2 больше значения, находящегося в аккумуляторе accumulator 1, при выполнении операции • аккумулятор accumulator 1 не содержит нуля после выполнения • значение сдвинутого последним бита содержит "1" после выполнения 16. Функции перехода Во всех остальных случаях условие для перехода для функции JP не выполняется и выполнение программы продолжается со следующей Переход при условии, что результат больше нуля или равен нулю Функция перехода JPZ выполняется только в том случае, если CC0 = "0".
• содержимое аккумулятора accumulator 1 находится внутри диапазона допустимых положительных значений или равно нулю после арифметической или математической операции (проверить нарушение границ диапазона можно с помощью операторов JO или JOS);
• содержимое аккумулятора accumulator 2 больше значения, находящегося в аккумуляторе accumulator 1, или равно ему при • после выполнения каждой логической операции для чисел;
• после выполнения каждой функции сдвига.
Во всех остальных случаях условие для перехода для функции JPZ не выполняется и выполнение программы продолжается со следующей Переход при условии, что результат меньше нуля Функция перехода JM выполняется только в том случае, если CC0 = "1" и • содержимое аккумулятора accumulator 1 находится внутри диапазона допустимых отрицательных значений после арифметической или математической операции (проверить нарушение границ диапазона • содержимое аккумулятора accumulator 2 меньше значения, находящегося в аккумуляторе accumulator 1, при выполнении операции Во всех остальных случаях условие для перехода для функции JM не выполняется и выполнение программы продолжается со следующей Переход при условии, что результат меньше нуля или равен нулю Функция перехода JMZ выполняется только в том случае, если CC1 = "0".
• содержимое аккумулятора accumulator 1 находится внутри диапазона допустимых отрицательных значений или равно нулю после арифметической или математической операции (проверить нарушение границ диапазона можно с помощью операторов JO или JOS);
• содержимое аккумулятора accumulator 2 меньше значения, находящегося в аккумуляторе accumulator 1, или равно ему при Во всех остальных случаях условие для перехода для функции JMZ не выполняется и выполнение программы продолжается со следующей Автоматизация посредством STEP с использованием STL и SCL Переход при условии, что результат некорректен Функция перехода JUO выполняется только в том случае, если CC0 = "1" и CC1 = "1". Этот случай имеет место, если • если совершается попытка деления на ноль при арифметической • если некорректное действительное (REAL) число было определено как исходное значение или было получено при выполнении операции.
Во всех остальных случаях условие для перехода для функции JUO не выполняется и выполнение программы продолжается со следующей 16.5 Функции перехода в зависимости от состояния OV и OS Переход в программе может быть сделан зависящим от состояния сигналов битов OV и OS. Это позволяет проверять, находится ли все еще результат вычисления в диапазоне допустимых значений. Подробную информацию о том, как устанавливаются биты состояния OV и OS, Вы можете найти в главе 15 "Биты состояния".
Переход при условии, что результат вышел за пределы диапазона (переполнение) (проверка бита OV) Функция перехода JO выполняется только в том случае, если OV = "1".
Это случается, если результат вычисления выходит за пределы допустимых значений в предыдущей операции. Бит состояния OV может быть установлен такими функциями, как:
• арифметические функции;
• математические функции;
• функции инвертирования числа;
• функции сравнения для чисел формата REAL;
• функции преобразования чисел форматов INT/DINT в формат BCD и Если бит состояния OV = "0", то условие для перехода для функции JO не выполняется и выполнение программы продолжается со следующей Если выполняется цепочка последовательных вычислений, то состояние бита OV должно проверяться после выполнения каждого вычисления, так как бит состояния OV вновь будет сброшен после выполнения операции вычисления, результат которой будет находится в диапазоне допустимых Бит состояния OS может быть опрошен после выполнения цепочки вычислений для проверки, не вышел ли за пределы допустимых значений результат одного из вычислений в рассматриваемой последовательности 16. Функции перехода Переход при условии, что результат вышел за пределы диапазона (переполнение) (проверка бита OS) Функция перехода JOS выполняется только в том случае, если OS = "1".
Это происходит во всех случаях, когда результат вычисления выходит за пределы допустимых значений, что вызывает установку бита состояния OV (см. выше). В отличие от OV, бит OS сохраняет свое состояние, даже если после его установки результат одной из последующих операций будет в диапазоне допустимых значений. Бит состояния OS может быть сброшен при следующих обстоятельствах:
• при вызове блока и при завершении блока;
Если бит состояния OS = "0", то условие для перехода для функции JOS не выполняется и выполнение программы продолжается со следующей 16.6 Распределитель переходов (Jump Distributor) Распределитель переходов (Jump Distributor) JL позволяет определять (вычислять) переходы в разделе программы в блоке к разным точкам, Функция JL работает вместе с набором функций перехода JU.
Последовательность выражений с операторами перехода JU следует сразу после функции JL и может содержать до 255 строк (входов). В инструкции после оператора JL следует метка перехода, указывающая на конец списка функций перехода JU (на первую инструкцию, следующую за набором функций перехода JU).
Вы можете запрограммировать распределитель переходов (Jump Distributor) JL в соответствии со следующей общей схемой:
В этом примере переменная Number_of_positions содержит число, загружаемое в аккумулятор accumulator 1. Вслед за операцией загрузки следует распределитель переходов JL с меткой, указывающей на конец Номер перехода, который должен быть выполнен, содержится в правом байте аккумулятора accumulator 1. Если этот аккумулятор содержит 0, то выполняется первая функция перехода. Если этот аккумулятор содержит 1, то выполняется вторая функция перехода и так далее. Если число в аккумуляторе превышает размер списка операторов перехода, то Автоматизация посредством STEP с использованием STL и SCL происходит переход на конец списка (на первую инструкцию, следующую за набором функций перехода JU).
JL не зависит ни от каких условий и не изменяет битов состояния.
При этом только выражения с оператором JU, располагающиеся без пробелов, допускаются в списке операторов перехода функции JL.
Назначая произвольные метки для этих операторов перехода, Вы должны придерживаться общих правил для меток.
16.7 Циклический переход (Loop Jump) Функция циклического перехода (Loop Jump) LOOP позволяет просто реализовать в программе программные циклы.
Функция LOOP интерпретирует число в правом слове (word) аккумулятора accumulator 1 как беззнаковое 16-разрядное число из диапазона от 0 до При обработке функция LOOP сначала декрементирует (уменьшает) содержимое аккумулятора accumulator 1 на 1. Если значение при этом не равно нулю, то выполняется переход к указанной метке.
Если значение после декрементирования равно нулю, то выполняется следующее за телом цикла выражение.
Значение в аккумуляторе accumulator 1, таким образом, соответствует числу циклов, которые должны быть выполнены. Вы должны сохранить это число в счетчике цикла. Вы можете использовать любое число (адрес) соответствии со следующей общей схемой:
В этом примере переменная Number содержит общее число циклов, которое необходимо выполнить. Переменная Counter содержит число циклов, которое осталось выполнить.
При первом проходе цикла значению Counter задается число циклов, которое необходимо выполнить. В конце программного цикла содержимое переменной Counter загружается в аккумулятор и декрементируется с помощью оператора LOOP. Если после этого аккумулятор не содержит нуля, то выполняется переход к метке цикла здесь к метке Next. После этого происходит обновление переменной Функция циклического перехода LOOP не изменяет битов состояния.
17 Главное управляющее реле MCR Управляя методом переключения, главное управляющее реле (Master Control Relay - MCR) активирует или деактивирует отдельные фрагменты схемы управления, которая может состоять из одного или нескольких уровней. При деактивации уровня:
• выключаются все нереманентные контакторы и • остаются неизменными состояния всех реманентных контакторов.
Вы можете вновь изменить состояния этих контакторов только тогда, когда главное управляющее реле MCR будет активировано.
Эти свойства главного управляющего реле MCR определяют его использование особенно в LAD-программах.
В этой главе рассматриваются операторы, необходимые для выполнения функций главного управляющего реле MCR в языке программирования STL. Вы можете использовать эти операторы для эмуляции свойств главного управляющего реле MCR в STL.
рассматриваемые в данной главе, Вы можете найти на прилагаемой дискете в библиотеке STL_Book в разделе "Program Flow Control" ("Управление выполнением программы") в функциональном блоке FB Необходимо отметить, что выключение с помощью программного варианта главного управляющего реле (Master Control Relay - MCR) не заменяет антиаварийных или предохранительных устройств. Вы должны трактовать включение с помощью главного управляющего реле MCR, как включение посредством операций с памятью (memory Язык программирования STL предоставляет следующие операторы для выполнения функций главного управляющего реле MCR:
Операторы MCRA и MCRD определяют область в Вашей программе, на которую распространяется действие MCR. Внутри этой области Вы можете использовать операторы MCR( и )MCR для задания одной или нескольких зон действия MCR, в которых зависимость от MCR может включаться или выключаться.
Вы можете также использовать вложенные MCR зоны. Результат логической операции RLO, выполняемой непосредственно перед зоной MCR включает или выключает MCR-зависимость внутри этой зоны.
Автоматизация посредством STEP с использованием STL и SCL 17.1 MCR-зависимость (MCR Dependency) Главное управляющее реле (MCR) влияет на все операции, которые возвращают (записывают) значения в память. Такие операции, зависящие от MCR, при включении MCR-зависимости, независимо от результатов любых предыдущих двоичных логических операций или логических операций с числами, реагируют следующим образом:
содержимое адреса сбрасывается в состояние "0" • операторы установки Set (S) и сброса Reset (R):
содержимое адреса остается неизменным • оператор пересылки Transfer (T):
Некоторые функции STL используют операторы пересылки (незаметно для пользователя) для того, например, чтобы записать значение в адресный регистр. Так как оператор пересылки записывает значение нуля "0", если MCR-зависимость включена, то выполнение соответствующей функции (использующей оператор пересылки) не может быть Поэтому, чтобы во время работы избежать переход CPU в состояние STOP или в неопределенное состояние, Вы должны исключить возможность влияния MCR на соответствующие части программы, • операции доступа к параметрам блоков, которые относятся к типам параметров (например, BLOCK_DB) • операции доступа к параметрам блоков, которые являются компонентами или элементами сложных типов данных или типов, определенных пользователем UDT.
Если MCR-зависимость выключена, то операции, зависящие от MCR, выполняются в "нормальном" режиме, в соответствии с описанием в соответствующих разделах данной книги.