Блоки обработки переменных

Для хранения данных между “шагами” программы используются переменные величины, или просто переменные. Переменная постоянно занимает в памяти устройства требуемый объем памяти, который задается пользователем. Для обмена данными с переменными имеются соответствующие блоки. Этих блоков нет в окне Блоки, для их создания на сцене программы необходимо перетащить соответствующую переменную в Вашу схему. Созданный блок имеет те же параметры, что были заданы при создании переменной. При перетаскивании пользовательской переменной на сцену, тип блока зависит от точки, в которую перетаскивается переменная и где отпущена кнопка мыши. Если это место – вход блока: создается блок чтения, связанный с этим входом. Если эта точка – выход блока: создается блок записи, связанный с этим выходом. Иначе – создается несвязанный блок чтения.

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

Свойства блока переменной

Общие свойства: Редактирование свойств блока.

Тип: в этом пункте осуществляет выбор типа блока, работающего с переменной (чтение, запись, условная запись, запись MODBUS).

Чтение после записи: значение выхода блока чтения, также как и любого другого выхода, фиксировано на каждом шаге выполнения программы в зависимости от свойства Чтение после записи: если флаг не установлен (по умолчанию) - блок чтения выполняется гарантированно до блоков записи соответствующей переменной. В таком случае значение, записанное в переменную условно на первом шаге, будет прочитано блоком чтения на втором шаге выполнения схемы. Если флаг Чтение после записи установлен - блок чтения выполняется гарантированно после блоков записи соответствующей переменной.

Приоритет записи: данный параметр задает приоритет записи при возникновении спорных ситуаций.

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

Блок чтения переменной

_images/fbd_var_READ.png

Описание: считывает значение переменной, выдает значение на выход.

Количество блоков чтения одной переменной не ограничено, при этом значения всех блоков чтения с одинаковыми свойствами одинаковы.

Блок записи переменной

_images/fbd_var_WRITE.png

Описание: записывает значение в переменную, поданное на вход.

Для каждой переменной в проекте может быть только один блок записи, в противном случае появляется неопределенность, какое значение требуется записать. Если необходимо записывать значение одного из нескольких выходов, следует использовать блок Условие или Мультиплексор для явного выбора требуемого значения. Блоки записи переменных выполняются гарантированно после блоков чтения соответствующей переменной и после блоков, которые могут прервать шаг программы. Блоки записи не выполняются при отладке схемы в устройстве, в режиме паузы. Блок записи может быть условным, при наличии дополнительно входа en. Такой блок записи выполняется, если значение входа en равно 1. По умолчанию вход en равен 1:

_images/fbd_var_IFWRITE.png

Блок “Запись Modbus”

Описание: этот блок позволяет, в режиме подчиненного устройства Modbus, обработать команду записи, полученную от главного устройства. Выходы val и rdy выдают значение, полученное от master-устройства, и признак окончания передачи нового значения, соответственно. При отсутствии команды записи от “главного”, эти выходы выдают 0. Значения выходов блока зависят только от главного устройства, выходы можно связывать с входами того же блока (циклическая связь разрывается внутри блока). Этот блок выполняет сначала обработку выходов, затем, в конце шага схемы – обработку входов. Внимание! Не следует путать значение, полученное в команде записи, со значением переменной! Выход val не выдает значение переменной. Входы val и en обрабатываются независимо от других входов-выходов блока, являясь фактически отдельным блоком условной записи. Как уже было сказано выше, блок записи выполняется в конце шага схемы, эти входы можно связать с выходами val и rdy соответственно. При таком связывании значение, поданное на вход val c одноименного выхода, будет записано как только такая команда будет получена с выхода rdy и передана на вход en:

_images/block1.png

По сути, это та же условная запись переменной. Но данный блок объединяет в себе три операции: блок Чтения (если выход val получает значение в режиме подчиненного устройства Modbus, то на выходе rdy устанавливается логическое значение 1, признак получения команды записи), блок Условной записи (на вход val записывается обработанное значение, при условии, что вход en получил логическое значение 1) и блок Вывода ошибки err. Обработка значения переменной выполняется согласно поставленной задаче.

Пример: записать в переменную VAR4 значение X, если на выход val получено X < 20. Во-первых, сравниваем X с числом 20 (Блок сравнения), во-вторых, чтобы запись значения произошла, нужно, чтобы на входе en была установлена 1. Для этого выход Блока сравнения и выход rdy объединим блоком AND, а выход блока AND соединим со входом en, значение на выходе val соединим со входом val. Итак, если два условия истинны, то в переменную VAR4 будет записано значение, полученное на выходе val:

_images/zapispomodbus2.png

Но есть еще блок вывода ошибки err. Если значение, поданное на выход val не удовлетворяет условию блока сравнения, то на выходе блока AND установится 0, и вход en получит 0, а вход err должен выдать номер ошибки, почему не произведена запись в переменную. Ошибка 03 – неверные данные запроса. При получении на вход if 1 блок Условие подаст на вход er 0, в противном случае вход err получит номер ошибки 3.

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

  1. Просто записать значение в переменную;
  2. Условная запись. Если на вход en подана 1, то запись произойдет.
  3. Запись по MODBUS. Если полученное значение предварительно требуется обработать (сравнить, изменить, проверить на соответствие каким-то условиям):
_images/zapispomodbus3.png

Переменные, имеющие возможность записи по сети, всегда имеют на схеме блок Запись Modbus. Если пользователь его не создал, он создается неявно, как указано на рисунке. Блок с таким связыванием выполняет безусловную запись полученного значения от главного устройства в переменную. Если пользователь хочет проверить записываемое значение на корректность, заменить его или совсем не выполнять запись при каких-либо условиях, он должен вместо указанных связей создать цепь блоков, проверяющую и заменяющую значения требуемым образом. Вход err предназначен для возврата главному устройству кода ошибки в ответ на команду записи. Этот вход имеет уникальную особенность – если команда записи имеется (выход rdy равен 1) и на вход подано ненулевое значение, устройство прекращает выполнять шаг схемы. Обработка входа err всегда выполняется до всех блоков записи в переменные, и переменной этого блока, в том числе. Поэтому команда записи, в таком случае, не выполняется. Т.к. входы val и en записывают значение в переменную, этот блок записи может быть только один на сцене, и не может быть других, в том числе обычных, блоков записи той же переменной.