Ну к примеру генерировать число от 20 до 23, например 21.5, 22, 20, 22.5, 22, 22.8, 21.9
Вид для печати
Здравствуйте !
Столкнулся с неумением пользоваться интернетом и поисковиками, так как не могу найти ответ на вопрос: есть ли в CoDeSys 3.5 переменная или что-то на неё похожее, которая сбрасывается в FALSE после прохождения первого цикла программы? Своего рода флаг сброса первого прохождения цикла MainTask. Необходима для инициализации функциональных блоков приводов.
И если её нет, то какие есть способы имитации или замены её при помощи конструкций? Как поймать момент перехода программы на следующий цикл выполнения?
Спасибо
Добрый день.
См. здесь:
https://www.owen.ru/forum/showthread...l=1#post304642
Добрый день.
Codesys 3.5 SP17 Patch 3
Есть необходимость сделать указатель на BOOL. Читая различные источники так и не понял допустимо ли это? В книге Сергея Романова написано, что "POINTER TO BOOL не работает и указатель должен ссылаться, как минимум, на BYTE". Но BOOL, как известно, по памяти занимает этот самый BYTE. Где то написано, что нельзя ссылаться на BIT, а про BOOL ничего не сказано.
Смысл этого вот в чем. Есть двумерный массив состояний дискретных входов модулей ввода вида aDiscreteInputs[<номер модуля>, <номер входа>] OF BOOL; Все элементы массива привязаны через соотнесение входов/выходов.
Есть типовые сигналы, которые из проекта в проект могут быть поданы на разные входы модулей. С выходами то же самое. Хочется иметь универсальный код, который легко адаптировать под проект щита по входам и выходам. В дальнейшем есть идея сделать их настраиваемыми в веб-визуализации (что то типа "Клапан открыт: Номер модуля А ___, Номер входа DI ___" и т.д.)
Пока пришло в голову такое:
PROGRAM PLC_PRG
VAR
pt_x_Opened: POINTER TO BOOL; //Клапан открыт
pt_x_Closed: POINTER TO BOOL; //Клапан закрыт
pt_x_ON: POINTER TO BOOL; //Открыть
pt_x_OFF: POINTER TO BOOL; //Закрыть
В самой программе при инициализации выполняем один раз:
pt_x_Opened := ADR(aDiscreteInputs[1,1]);
pt_x_Closed := ADR(aDiscreteInputs[1,2]);
pt_x_ON := ADR(aDiscreteOutputs[2,3]);
pt_x_OFF := ADR(aDiscreteOutputs[2,4]);
Ну а дальше оперировать уже сигналами через разыменовывание
IF pt_x_Opened^ THEN и т.д.
pt_x_OFF^ := TRUE; и т.д.
Это для примера. Сигналов на самом деле много, все они упакованы в структуры, а структуры в массивы.
Имеет ли такая реализация право на существование? Компилятор вроде не ругается пока.
Здравствуйте, подскажите как можно реализовать обрыв связи с слайв устройством, на языке FBD