PDA

Просмотр полной версии : Фиксация данных на определенный промежуток времени



Юрий+
22.05.2023, 00:05
Возникла такая необходимость. Нужно фиксировать данные на 5 секунд, а не на один цикл на выходе D блока TREND библиотеки BASIC OSCAT. Сутки голову ломаю, ни одной мысли.

krollcbas
22.05.2023, 00:29
Вы бы чуть конкретнее, что за программа?

Юрий+
22.05.2023, 00:50
Codesys 3.5

Юрий+
22.05.2023, 00:53
Пишу нв CFC. Мне данные с выхода нужны для дальнейшей обработки и управления приводом, а так как данные появляются только на один цикл, я не могу привязать управление двигателем.

Spawn
22.05.2023, 01:19
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

Адаптируйте под свои нужды и "заверните" в функциональный блок указанный выше код, который потом используйте в CFC.

Юрий+
22.05.2023, 08:29
🙂Я на язык ST смотрю и ничего не понимаю, для меня это темный лес. Я так понимаю, нужно созжать ФБ по этому коду. Нужно дописать вход и выход как я понимаю. Вход будет B1, а выход Var1, как чтоли?

1exan
22.05.2023, 08:34
Пишу нв CFC. Мне данные с выхода нужны для дальнейшей обработки и управления приводом, а так как данные появляются только на один цикл, я не могу привязать управление двигателем.

"данные появляются на один цикл" - а потом какое значение на этом выходе?
Т.е. как отследить момент появления данных на выходе D?

Юрий+
22.05.2023, 09:03
На вход подается значение REAL, а на этом выходе на один цикл появляется значение на которое изменился вход. Через некоторое время значение входа меняется, на выхода данные на сколько изменились данные на один цикл. А мне нужно эти данные привязать к счетчику импульсов.

kondor3000
22.05.2023, 09:08
На вход подается значение REAL, а на этом выходе на один цикл появляется значение на которое изменился вход. Через некоторое время значение входа меняется, на выхода данные на сколько изменились данные на один цикл. А мне нужно эти данные привязать к счетчику импульсов.

Лучше бы свой проект выложили, если значение появляется, значит оно где то посчитано, его только запомнить надо и прибавить 1 к счётчику.

1exan
22.05.2023, 09:12
На вход подается значение REAL, а на этом выходе на один цикл появляется значение на которое изменился вход. Через некоторое время значение входа меняется, на выхода данные на сколько изменились данные на один цикл. А мне нужно эти данные привязать к счетчику импульсов.

Ну так REAL на входе может меняться непрерывно, значит и на выходе D в каждом цикле будет новое значение?

Вот код блока TREND:



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;


У вас каждый цикл значение на выходе D меняется, если вы "выхватываете" и задерживаете одно значение, то теряете несколько следующих
Лучше опишите в чём задача, возможно нужен другой подход

Юрий+
22.05.2023, 09:46
У меня на входе значение REAL постоянно меняться не будет, значение будет изменяться по мере необходимости. Проекта на данный узел как такогого нет. Суть будет подаваться какой либо аналоговый сигнал на вход X при увеличении сигнала будет открываться шибер, при уменьшении закрываться, уровень открытия будет регулироваться количеством импульсов поступающих с индуктивного датчика. Количество импульсов будет поступать как раз с этого выхода, в голове у меня все сложилось, а вот как взять данные с этого выхода и использовать не могу🤪

Юрий+
22.05.2023, 12:21
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

Адаптируйте под свои нужды и "заверните" в функциональный блок указанный выше код, который потом используйте в CFC.

Блок получается цикличным и не подходит. А не проще может сделать так, чтобы переменная REAL при увеличении данных был один выход BOOL, при уменьшении другой. Не подскажете как это сделать?

1exan
22.05.2023, 13:09
Блок получается цикличным и не подходит. А не проще может сделать так, чтобы переменная REAL при увеличении данных был один выход BOOL, при уменьшении другой. Не подскажете как это сделать?

У блока TREND есть выходы TU и TD c аналогичным назначением