Возникла такая необходимость. Нужно фиксировать данные на 5 секунд, а не на один цикл на выходе D блока TREND библиотеки BASIC OSCAT. Сутки голову ломаю, ни одной мысли.
Вид для печати
Возникла такая необходимость. Нужно фиксировать данные на 5 секунд, а не на один цикл на выходе D блока TREND библиотеки BASIC OSCAT. Сутки голову ломаю, ни одной мысли.
Вы бы чуть конкретнее, что за программа?
Codesys 3.5
Пишу нв CFC. Мне данные с выхода нужны для дальнейшей обработки и управления приводом, а так как данные появляются только на один цикл, я не могу привязать управление двигателем.
Адаптируйте под свои нужды и "заверните" в функциональный блок указанный выше код, который потом используйте в CFC.Код:VAR
TON1 : TON;
Trig1 : R_TRIG;
B1 : BYTE;
Var1 : BYTE;
END_VAR
B1 := B1 + 1;
TON1(IN := NOT TON1.Q, PT := T#5000MS);
Trig1(CLK := TON1.Q);
IF Trig1.Q THEN
Var1 := B1;
END_IF
🙂Я на язык ST смотрю и ничего не понимаю, для меня это темный лес. Я так понимаю, нужно созжать ФБ по этому коду. Нужно дописать вход и выход как я понимаю. Вход будет B1, а выход Var1, как чтоли?
На вход подается значение REAL, а на этом выходе на один цикл появляется значение на которое изменился вход. Через некоторое время значение входа меняется, на выхода данные на сколько изменились данные на один цикл. А мне нужно эти данные привязать к счетчику импульсов.
Ну так REAL на входе может меняться непрерывно, значит и на выходе D в каждом цикле будет новое значение?
Вот код блока TREND:
У вас каждый цикл значение на выходе D меняется, если вы "выхватываете" и задерживаете одно значение, то теряете несколько следующихКод:FUNCTION_BLOCK TREND_DW
VAR_INPUT
X : DWORD;
END_VAR
VAR_OUTPUT
Q : BOOL;
TU : BOOL;
TD : BOOL;
D : DWORD;
END_VAR
VAR
last_X: DWORD;
END_VAR
IF X > last_X THEN
TU := TRUE;
TD := FALSE;
D := X - last_X;
Q := TRUE;
ELSIF X < last_X THEN
TD := TRUE;
TU := FALSE;
D := last_X - X;
Q := FALSE;
ELSE
TU := FALSE;
TD := FALSE;
D := 0;
END_IF;
last_X := X;
Лучше опишите в чём задача, возможно нужен другой подход
У меня на входе значение REAL постоянно меняться не будет, значение будет изменяться по мере необходимости. Проекта на данный узел как такогого нет. Суть будет подаваться какой либо аналоговый сигнал на вход X при увеличении сигнала будет открываться шибер, при уменьшении закрываться, уровень открытия будет регулироваться количеством импульсов поступающих с индуктивного датчика. Количество импульсов будет поступать как раз с этого выхода, в голове у меня все сложилось, а вот как взять данные с этого выхода и использовать не могу🤪