Вход

Просмотр полной версии : сравнение в Ld



Alr
29.07.2010, 11:11
подскажите как реализовать задачу на Ld.необходимо сравнивать значение входного параметра с заданной уставкой и включать если выше.

Николаев Андрей
29.07.2010, 11:13
Ну вообще это уже не LD а FBD или CFC надо использовать.
Но в порядке исключения можно - есть возможность вставлять в цепь не просто фб а FB with En. Дальше как в FBD. В принципе блок может быть любым...

AlexZ60
02.08.2010, 09:50
Ну вообще это уже не LD а FBD или CFC надо использовать.
Но в порядке исключения можно - есть возможность вставлять в цепь не просто фб а FB with En. Дальше как в FBD. В принципе блок может быть любым...

Можно ли вставить в середину цепи?

Николаев Андрей
02.08.2010, 11:59
А попробовали?
Можно. Но в этом случае предыдущее выражение на цепи будет разрешением на исполнение блока...
Блок с EN - блок с разрешением на исполнение. На вход EN пришло true - блок исполняется, false - не исполняется.
А сравниваемые значения уже на 2 и 3 входа соответственно.

AlexZ60
02.08.2010, 16:11
А попробовали?
Можно. Но в этом случае предыдущее выражение на цепи будет разрешением на исполнение блока...
Блок с EN - блок с разрешением на исполнение. На вход EN пришло true - блок исполняется, false - не исполняется.
А сравниваемые значения уже на 2 и 3 входа соответственно.

Конечно пробовал, но в этом случае блок становится правым, и его выхода нельзя использовать в этой цепи. В Step7 и Unity Pro так делал (не используя ENO).

Николаев Андрей
02.08.2010, 21:23
Не очень понял что значит правым... Выложите программку и описание что хотели сделать...
Возможно использование CoDeSys будет иметь свои особенности, но не думаю, что что-то критичное

SergeyNG
03.08.2010, 08:42
Правым скорее означает, что блок сравнения в LD CoDeSys может быть только выходной инстукцией как -( )- или -(S)-.
В реализации LD других производителей часто встречаются инструкции сравнения как входные инструкции, т.е. возможна ,например, такая запись

-| |--|/|--[A>B]--| |------------------(S)-

Удобно, в LD CoDeSys приходится же прибегать к дополнительным промежуточным переменным

AlexZ60
03.08.2010, 09:02
Правым скорее означает, что блок сравнения в LD CoDeSys может быть только выходной инстукцией как -( )- или -(S)-.
В реализации LD других производителей часто встречаются инструкции сравнения как входные инструкции, т.е. возможна ,например, такая запись

-| |--|/|--[A>B]--| |------------------(S)-

Удобно, в LD CoDeSys приходится же прибегать к дополнительным промежуточным переменным

Да. Совершенно верно.

Николаев Андрей
03.08.2010, 09:57
А в этих программах сколько языков программирования? Случайно не два?

В любом случае - будем считать это особенностью CoDeSys. Во всем есть свои плюсы и минусы

SergeyNG
04.08.2010, 09:39
А в этих программах сколько языков программирования? Случайно не два?

В любом случае - будем считать это особенностью CoDeSys. Во всем есть свои плюсы и минусы

В каких два, в каких один, а при чем здесь количество языков?

Да, особенность не переделаешь!
Но если очень хочется такую форму записи, то можно сделать свой FB. Например, FB A>B:

FUNCTION_BLOCK FGT
var_input
EN: BOOL;
IN1: INT;
IN2: INT;
end_var

var_output
Q: BOOL;
end_var

тело на ST:
Q:=EN AND (IN1>IN2);
А в основной программе на LD для всех подобных вычислений использовать только один экземпляр этого FB

Николаев Андрей
04.08.2010, 18:54
Ну я про стандарт и системы программирования, близкие к стандарту или далекие. Естественно на сколько это хорошо - каждый решает сам - вот Вы например примером на ST выбираете близость стандарту.:cool:

А если по задаче - ну нет ничего критичного в том, что блок правый - все проблеммы - добавить ниже еще одну линию и дописать условие в ней с результатом блока сравнения в предыдущей линии через промежуточную переменную...