Шрифт:
Интервал:
Закладка:
Рис. 35. Пример присвоения начальных значений переменным, сохраняемым в энергонезависимой памяти
В зависимости от задачи возможны различные варианты установки начальных значений для переменных, сохраняемых в энергонезависимой памяти.
3.5. Операции над входными данными
Входные данные могут считываться с входов контроллера, на котором работает табличная программа, или поступать по внутренней связи от вспомогательных контроллеров первичной обработки сигналов, а также быть полученными удаленно от других контроллеров. Вне зависимости от источника данных входные переменные можно разделить на два основных типа: битовые и аналоговые. Битовые переменные могут принимать только два значения: ноль и единица. Аналоговые переменные необходимы для описания аналоговых сигналов и, по сути, являются числами с плавающей десятичной точкой. Чтобы не перегружать таблицу активными ячейками и улучшить восприятие информации о состоянии управляющей программы, над входными переменными производятся арифметические и логические операции. Битовые операции над входными переменными позволяют уменьшить количество активных ячеек, присваивая последним не значения входных переменных, а сигналы состояний, получаемые в результате логических операций над несколькими входными переменными. С помощью операций с аналоговыми переменными производятся необходимые вычисления для установки аналоговых значений на выходах контроллера или принятия управляющих решений. Так как мы имеем два типа переменных, то результат операций также будет либо битовым, либо аналоговым. Результат арифметической операции двух аналоговых переменных будет аналоговым. А результат сравнения этих же аналоговых переменных будет битовым. Битовый результат сравнения аналоговых переменных может поступать на вход таймера и после срабатывания таймера изменять состояние активных ячеек. Также битовый результат может участвовать в других битовых операциях. Аналоговый результат может только переписаться на выход без изменения. Входные операции могут иметь от одного до трех операндов.
Для операций присвоения, инверсии и синхронизации требуется один операнд (рис. 36). Битовые входные переменные при необходимости могут быть инвертированы и уже в таком виде использоваться в качестве аргумента.
Рис. 36. Операции с одним операндом:
A — обозначение аналогового типа, b — обозначение битового типа
Операциям присвоения и инверсии требуется одна строка (рис. 37), операциям синхронизации — две (рис. 38). На первой строке для операции синхронизации формируется сигнал, передний или задний фронт которого необходимо обнаружить. На строке ниже записывается операция синхронизации и вычисляется результат. Примеры операций синхронизации показаны на рис. 38. Результат текущего пересчета таблицы обозначим как b1a, а как b0 — результат предыдущего. Если предыдущее значение операнда было ноль, а текущее значение — единица, то программа пересчета таблицы фиксирует переход из ноля в единицу — передний фронт. Если был переход из единицы в ноль, то это задний фронт. При обнаружении фронта сигнала результату операции синхронизации будет присвоена единица, которая продержится всего один цикл пересчета таблицы, после чего результат операции синхронизации вернется в ноль. В течение одного цикла единица на выходе операции синхронизации может запустить таймер, сбросить или установить значение в триггерной ячейке, изменить результат логического И по столбцу.
Рис. 37. Однострочные битовые операции:
а) присвоение; б) инверсия
Рис. 38. Пример обнаружения фронта сигнала:
а) переднего фронта; б) заднего фронта
Аналоговая операция присвоения устанавливает результат, равный входному значению переменной (рис. 39).
Рис. 39. Аналоговая операция присвоения
Битовым логическим операциям, операциям сравнения аналоговых переменных и арифметическим операциям требуется два операнда, один из которых находится в предыдущей строке, а другой — в строке выше предыдущей. Всего для этих операций требуется три строки.
Представленный в таблице на рис. 40 базовый набор операций может быть дополнен другими математическими операциями. Написание тестовых программ для различного оборудования показало, что для большинства применений достаточно использования базового набора. При необходимости сложных расчетов значений от датчиков лучше применить дополнительные контроллеры первичной обработки сигналов — для того, чтобы не усложнять логику управляющей программы.
Рис. 40. Операции с двумя операндами:
A — обозначение аналогового типа, b — обозначение битового типа
Ход выполнения операции с двумя битовыми операндами можно рассмотреть на примере логического И. На рис. 41 представлен ход выполнения такой операции. Так как программа пересчета таблицы проходит по строкам сверху вниз, то сначала будет вычислен первый операнд, b1a. Его значение будет зависеть от состояния переменной b1 и от необходимости ее инвертировать. Если переменную b1 необходимо инвертировать, то b1a получит инвертированное значение b1, а если такой необходимости нет, то b1a станет равной b1. Аналогичное действие будет проведено с переменной b2. После этого результату b3 будет присвоено значение логического И b1a и b2a.
Рис. 41. Выполнение операции «логическое И» программой пересчета таблицы:
а) шаг 1 — первому операнду присваивается прямое или инверсное значение; б) шаг 2 — второму операнду присваивается прямое или инверсное значение; в) шаг 3 — вычисляется результат логической операции
Арифметические операции с аналоговым результатом можно рассмотреть на примере сложения (рис. 42). Аналогично производятся операции вычитания, умножения и деления.
Рис. 42. Операция сложения двух аналоговых переменных
Операции сравнения используют аналоговые операнды и имеют битовый результат, который может далее использоваться в любых битовых операциях. На рис. 43 показана операция «больше» для двух аналоговых переменных. Справа от результата записана эта же операция на текстовом языке программирования.
Рис. 43. Пример операции «больше»
Операции выбора используют три операнда, два из которых — входные переменные, а третий определяет, значение какой переменной появится на выходе (рис. 44). По сути, это аналоговый или битовый мультиплексоры.
Рис. 44. Операции выбора с тремя операндами
На рис. 45 показана операция выбора одного из двух битовых значений SELB, в которой все три операнда и результат битовые.
Рис. 45. Пример битового мультиплексора
Для выбора одного из двух аналоговых значений используется операция SEL, в которой первые два операнда и результат аналоговые, а битовый операнд определяет, какое из входных аналоговых значений будет присвоено результату (рис. 46).
Рис. 46. Пример аналогового мультиплексора
Так как программа пересчета таблицы обрабатывает строки сверху вниз, то с помощью указателя вычисленный результат по строке может быть присвоен любому операнду в строках ниже. Указатель — это номер строки, результат которой может быть использован в битовых и аналоговых операциях других строк. На рис. 47 приведены операции с указателем. Номер одной строки, находящейся выше, результат