Просмотр полной версии : Фиксация данных на определенный промежуток времени
Возникла такая необходимость. Нужно фиксировать данные на 5 секунд, а не на один цикл на выходе D блока TREND библиотеки BASIC OSCAT. Сутки голову ломаю, ни одной мысли.
krollcbas
22.05.2023, 00:29
Вы бы чуть конкретнее, что за программа?
Пишу нв 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
Адаптируйте под свои нужды и "заверните" в функциональный блок указанный выше код, который потом используйте в CFC.
🙂Я на язык ST смотрю и ничего не понимаю, для меня это темный лес. Я так понимаю, нужно созжать ФБ по этому коду. Нужно дописать вход и выход как я понимаю. Вход будет B1, а выход Var1, как чтоли?
Пишу нв CFC. Мне данные с выхода нужны для дальнейшей обработки и управления приводом, а так как данные появляются только на один цикл, я не могу привязать управление двигателем.
"данные появляются на один цикл" - а потом какое значение на этом выходе?
Т.е. как отследить момент появления данных на выходе D?
На вход подается значение REAL, а на этом выходе на один цикл появляется значение на которое изменился вход. Через некоторое время значение входа меняется, на выхода данные на сколько изменились данные на один цикл. А мне нужно эти данные привязать к счетчику импульсов.
kondor3000
22.05.2023, 09:08
На вход подается значение REAL, а на этом выходе на один цикл появляется значение на которое изменился вход. Через некоторое время значение входа меняется, на выхода данные на сколько изменились данные на один цикл. А мне нужно эти данные привязать к счетчику импульсов.
Лучше бы свой проект выложили, если значение появляется, значит оно где то посчитано, его только запомнить надо и прибавить 1 к счётчику.
На вход подается значение 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 меняется, если вы "выхватываете" и задерживаете одно значение, то теряете несколько следующих
Лучше опишите в чём задача, возможно нужен другой подход
У меня на входе значение REAL постоянно меняться не будет, значение будет изменяться по мере необходимости. Проекта на данный узел как такогого нет. Суть будет подаваться какой либо аналоговый сигнал на вход X при увеличении сигнала будет открываться шибер, при уменьшении закрываться, уровень открытия будет регулироваться количеством импульсов поступающих с индуктивного датчика. Количество импульсов будет поступать как раз с этого выхода, в голове у меня все сложилось, а вот как взять данные с этого выхода и использовать не могу🤪
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, при уменьшении другой. Не подскажете как это сделать?
Блок получается цикличным и не подходит. А не проще может сделать так, чтобы переменная REAL при увеличении данных был один выход BOOL, при уменьшении другой. Не подскажете как это сделать?
У блока TREND есть выходы TU и TD c аналогичным назначением
Powered by vBulletin® Version 4.2.3 Copyright © 2024 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot