Профиль должен быть заполнен на русском языке кириллицей. Заполнение профиля заведомо ложными или некорректными данными - причина возможного отказа в регистрации на форуме.

EN для FBD и его распространение

PLC, прочие контроллеры, промышленные компьютеры, операторские панели
Аватара пользователя

Автор темы
izhidkov
осмотрелся
осмотрелся
Сообщения: 165
Зарегистрирован: 25 фев 2016, 12:18
Ф.И.О.: Жидков Игорь Алексеевич
Благодарил (а): 1 раз
Поблагодарили: 5 раз
Контактная информация:

EN для FBD и его распространение

Сообщение izhidkov » 08 окт 2016, 23:58

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

Если на выход блока FB с наличием сигнала EN, мы подключаем "переменную" на выход "Q", то будет ли при выключенном сигнале EN в "переменную" записываться значение FB.Q, которое было в последний вызов FB, при включенном EN...?

Вопрос возникает в связи с тем что по ощущению в различных средах программирования(step,unity,twincat...) эта ситуация решается по разному.

Благо по-моему с функцией MOVE при наличии сигнала EN все довольно просто:
если EN==1 (c-подобное сравнение) то значение FB.Q записывается в сигнал подключенный к линии Q, иначе значение сигнала не меняется.

Можно меня ткнуть в текст стандарта на язык FB где описывается, как должна решаться данная ситуация?

// P.s. кроме этого можете подсказать в FB есть ли ситуация, когда признак EN внедряется в "сигнал" на выходе ("Q" например) и нет необходимости соединять каскадом выходы ENO и входы EN (я так не делаю) или параллельно от одного источника сигнала "питать" входы EN (я так делаю)[ чтобы реализовать конструкцию языка "c": if(something) {one=somefct();two=do_two(one); three=do_three(two).... и т.п.} ] каскадов блоков?
want to have ultimate control, and the sky is the limit!


Михайло
почётный участник форума
почётный участник форума
Сообщения: 2225
Зарегистрирован: 10 ноя 2009, 04:58
Ф.И.О.: Толмачев Михаил Алексеевич
Благодарил (а): 1 раз
Поблагодарили: 23 раза
Контактная информация:

EN для FBD и его распространение

Сообщение Михайло » 09 окт 2016, 05:22

izhidkov писал(а):Источник цитатыЕсли на выход блока FB с наличием сигнала EN, мы подключаем "переменную" на выход "Q", то будет ли при выключенном сигнале EN в "переменную" записываться значение FB.Q, которое было в последний вызов FB, при включенном EN...?

Если я правильно понял, то ответ следующий: значение FB.Q сохранится с момента последнего вызова FB. Объяснение простое: для того, чтобы обнулить или установить FB.Q нужно затратить процессорное время, выполнить соответствующие инструкции, но таковых условий нет - следовательно память сохранит значение FB.Q.
Соответственно это не описано в стандарте. Оно было бы описано, если потребовалось бы предписание как-то особо управляться с FB.Q при отсутствии сигнала EN.

Аватара пользователя

Автор темы
izhidkov
осмотрелся
осмотрелся
Сообщения: 165
Зарегистрирован: 25 фев 2016, 12:18
Ф.И.О.: Жидков Игорь Алексеевич
Благодарил (а): 1 раз
Поблагодарили: 5 раз
Контактная информация:

EN для FBD и его распространение

Сообщение izhidkov » 09 окт 2016, 10:24

Михайло писал(а):Источник цитаты FB.Q

То, что значения выходных сигналов FB сохраняют свои значения при EN==0, (кажется) очевидно и прописано в описании языка.
Мне не понятно как затем происходит присваивание сигнала FB.Q к сигналу , который на этот выход подключен. Происходит ли присваивание независимо от того есть ли сигнал EN на входе FB или нет.
Иначе запишу в псевдокоде "с"

Код: Выделить всё

1) if(FB.EN==1)
{
 FB.Q = rand();  //rand - что-то в FB происходит
}
next= FB.Q;    // next это переменная которая подключена к FB.Q
2)
if(EB.EN==1)
{
 FB.Q = rand();
 next= FB.Q;
}

Так вот 1 или 2 вариант верно описывает поведение FB со входом EN?
FB_MOVE работает по 2-му правилу, а вот с другими FB почему-то иногда 1-ый вариант происходит.
want to have ultimate control, and the sky is the limit!


Михайло
почётный участник форума
почётный участник форума
Сообщения: 2225
Зарегистрирован: 10 ноя 2009, 04:58
Ф.И.О.: Толмачев Михаил Алексеевич
Благодарил (а): 1 раз
Поблагодарили: 23 раза
Контактная информация:

EN для FBD и его распространение

Сообщение Михайло » 10 окт 2016, 03:48

izhidkov писал(а):Источник цитаты Так вот 1 или 2 вариант верно описывает поведение FB со входом EN?

Ну это зависит от того, где происходит присваивание. Тот блок, где находится присваивание, выполняется?..

Аватара пользователя

Автор темы
izhidkov
осмотрелся
осмотрелся
Сообщения: 165
Зарегистрирован: 25 фев 2016, 12:18
Ф.И.О.: Жидков Игорь Алексеевич
Благодарил (а): 1 раз
Поблагодарили: 5 раз
Контактная информация:

EN для FBD и его распространение

Сообщение izhidkov » 10 окт 2016, 12:04

Михайло писал(а):Источник цитаты Ну это зависит от того, где происходит присваивание. Тот блок, где находится присваивание, выполняется?..

Обсуждать FBD без графики бессмысленно
Изображение
среда "unity"

Вот
1) часть не работает как хотелось бы
2) часть работает

В 1-й части каждый FB что-то делает и выдает сигнал готовности. На картинке 2-й FB перезатирает сигнал 1-го FB и "c_tare_zero_ok" всегда зависит только от 2-го FB. (т.е. FB тут работает по типу №1 )
izhidkov писал(а):Источник цитаты 1) if(FB.EN==1)
{
 FB.Q = rand();  //rand - что-то в FB происходит
}
next= FB.Q;    // next это переменная которая подключена к FB.Q
2)
if(EB.EN==1)
{
 FB.Q = rand();
 next= FB.Q;
}


Во второй части в зависимости от состояния EN подается либо на 1-й MOVE (.6), либо на 2-й MOVE (.8). В этом случае все работает как задумано и speed равен или speed1sp*100 или speed2sp в зависимости от того на каком MOVE EN==1. Т.о. эта часть работает по типу №2 в моем псевдокоде.
----

Итог: мы имеем библиотечный FB и пользовательский FB. Один по одному принципу присваивает сигнал с выхода на подключенную переменную, а другой по другому. Я вот и пытаюсь найти где это описано в стандарте.
want to have ultimate control, and the sky is the limit!


Михайло
почётный участник форума
почётный участник форума
Сообщения: 2225
Зарегистрирован: 10 ноя 2009, 04:58
Ф.И.О.: Толмачев Михаил Алексеевич
Благодарил (а): 1 раз
Поблагодарили: 23 раза
Контактная информация:

EN для FBD и его распространение

Сообщение Михайло » 10 окт 2016, 14:30

В случае блока FB присвоение должно всегда работать, в случае MOVE, по определению, в зависимости от входа EN.
Вход EN у блока FB предназначен для инициализации расчетов внутри этого блока FB, на внешние присвоения не влияет.

Аватара пользователя

Автор темы
izhidkov
осмотрелся
осмотрелся
Сообщения: 165
Зарегистрирован: 25 фев 2016, 12:18
Ф.И.О.: Жидков Игорь Алексеевич
Благодарил (а): 1 раз
Поблагодарили: 5 раз
Контактная информация:

EN для FBD и его распространение

Сообщение izhidkov » 10 окт 2016, 14:59

Михайло писал(а):Источник цитаты В случае блока FB присвоение должно всегда работать, в случае MOVE, по определению, в зависимости от входа EN.

По определению, это по "логике" или по стандарту?

По моей логике, если у любого блока EN выключен, то никакие действия с любым сигналом, к нему подключенным, не должны происходить. И это должно касаться не только MOVE.
want to have ultimate control, and the sky is the limit!


Михайло
почётный участник форума
почётный участник форума
Сообщения: 2225
Зарегистрирован: 10 ноя 2009, 04:58
Ф.И.О.: Толмачев Михаил Алексеевич
Благодарил (а): 1 раз
Поблагодарили: 23 раза
Контактная информация:

EN для FBD и его распространение

Сообщение Михайло » 10 окт 2016, 16:54

Команда MOVE по определению осуществляет перенос данных со входа на выход. При этому у команды нет никаких внутренних переменных, перенос осуществляется напрямую со входа на выход. Это команда, а не блок.
Если блок FB будет работать также как команда MOVE, то наверное нарушится некоторая логика: блок есть, данные есть, время для обновления состояния блока не наступило, но считать состояние нельзя.

Аватара пользователя

Автор темы
izhidkov
осмотрелся
осмотрелся
Сообщения: 165
Зарегистрирован: 25 фев 2016, 12:18
Ф.И.О.: Жидков Игорь Алексеевич
Благодарил (а): 1 раз
Поблагодарили: 5 раз
Контактная информация:

EN для FBD и его распространение

Сообщение izhidkov » 10 окт 2016, 23:38

Итак, про POU стандарт говорит:
1) значение выходной переменной функции при EN(0) определяется разработчиком.
2) значение выходной переменной функционального блока при EN(0) не должно изменяться относительно значения, полученного при вызове функционального блока с EN(1).

Выходная переменная POU (и функции и функционального блока) соединяется с переменной на диаграмме, и по логике это означает, что каждый раз выходная переменная POU будет записана в соединенную к ней переменную не зависимо от значения сигнала EN.

Еще раз перепроверю unity ))
want to have ultimate control, and the sky is the limit!


Михайло
почётный участник форума
почётный участник форума
Сообщения: 2225
Зарегистрирован: 10 ноя 2009, 04:58
Ф.И.О.: Толмачев Михаил Алексеевич
Благодарил (а): 1 раз
Поблагодарили: 23 раза
Контактная информация:

EN для FBD и его распространение

Сообщение Михайло » 11 окт 2016, 04:50

Наверное тебя смутила команда MOVE, которая не является POU (но она подозрительно внешне похожа на такую).

Аватара пользователя

Автор темы
izhidkov
осмотрелся
осмотрелся
Сообщения: 165
Зарегистрирован: 25 фев 2016, 12:18
Ф.И.О.: Жидков Игорь Алексеевич
Благодарил (а): 1 раз
Поблагодарили: 5 раз
Контактная информация:

EN для FBD и его распространение

Сообщение izhidkov » 11 окт 2016, 13:54

На симуляторе все работает по типу "move" . А я точно помню, что на железе была разница.
want to have ultimate control, and the sky is the limit!


Вернуться в «Средний уровень автоматизации»



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость