ISP функциональный блок

Модератор: AND

KDN
Сообщения: 68
Зарегистрирован: 02 окт 2015, 13:34

ISP функциональный блок

Сообщение KDN »

Здравствуйте!
Создаю в ISP 3.02 функциональный блок.
В нем создаю переменную VAR_OUTPUT, тип данных BOOL,
для которой, при использовании блока в программе, назначаю
энергонезависимый флаг. Но он обнуляется при переходе контроллера в "RUN".
Единственное отличие - если поставить флаг обыкновенный - он обнуляется при переходе в "STOP"...
никаких команд выключения этого флага нет.
Возможен вариант создания функционального блока с энергонезависимыми "выходами"?

tvent
Сообщения: 818
Зарегистрирован: 11 янв 2011, 17:02

Re: ISP функциональный блок

Сообщение tvent »

Укажите для параметра адрес в энергонезависимой памяти явно.
Или создайте переменную с таким адресом в Global symbols. Тогда декларировать Var_output будет не нужно.

KDN
Сообщения: 68
Зарегистрирован: 02 окт 2015, 13:34

Re: ISP функциональный блок

Сообщение KDN »

Что значит явно? Мне нужно этот блок использовать несколько раз, с разными переменными.
И каким образом я обойдусь без декларирования VAR_OUTPUT?

tvent
Сообщения: 818
Зарегистрирован: 11 янв 2011, 17:02

Re: ISP функциональный блок

Сообщение tvent »

KDN писал(а):Что значит явно?
Указать для переменной в графе Adress M512, к примеру. Это тип latched для ПЛК ES/EX/SS...
KDN писал(а):Мне нужно этот блок использовать несколько раз, с разными переменными.
Ну и..., что вам мешает, после каждого вызова FB присваивать значение того-же М512 другой переменной .
По факту (коду программы) это и происходит.
FB это подпрограмма. И вызывается он (FB) командой Call. А Call не может передать параметры подпрограмме.(((
При вызове FB значения его параметров "тупо переписываются" в рабочие регистры и битовые переменные в теле FB , а потом обратно (для OUTPUT и IN_OUT).

Олег
Сообщения: 561
Зарегистрирован: 18 янв 2011, 23:06

Re: ISP функциональный блок

Сообщение Олег »

никаких команд выключения этого флага нет.
У Вас FB выставляет свой выход в ноль при первом же проходе, значение выхода присваивается биту который назначили выходу.
При чём тут энергонезависимый или нет бит?
Ну прям как деревья качаются, поэтому ветер дует.

У ФБ есть переменная in-out, используйте её правильно, тогда получится сохранить состояние бита.

KDN
Сообщения: 68
Зарегистрирован: 02 окт 2015, 13:34

Re: ISP функциональный блок

Сообщение KDN »

Олег писал(а):
никаких команд выключения этого флага нет.
У Вас FB выставляет свой выход в ноль при первом же проходе, значение выхода присваивается биту который назначили выходу.
При чём тут энергонезависимый или нет бит?
Ну прям как деревья качаются, поэтому ветер дует.

У ФБ есть переменная in-out, используйте её правильно, тогда получится сохранить состояние бита.
С in-out все получилось, спасибо.

fenist
Сообщения: 9
Зарегистрирован: 21 май 2020, 23:36

Re: ISP функциональный блок

Сообщение fenist »

Здравствуйте! В процессе разбивки программы на части(Функциональные блоки) столкнулся со следующей непоняткой.
Суть проблемы изложу на да двух простых одинаковых по функционалу примерах. Косяк проявляется во втором
случае, где есть функциональный блок. Х0 всегда "ON". При ПЕРВОМ нарастающем фронте М0, M2 почему-то тоже
переходит в "ON". Если потом сбрасывать М0, М2, М10 в "OFF" и повторно включать М0 в "ON", то М2 уже не
переключается в "ON"(как и должно быть). В примере без функционального блока - все в порядке. Проверял на симуляторе в ISP_3.10, но в контроллере(SS2) косяк тот же. Помогите разобраться, почему так происходит?
Вложения
1.jpg
1.jpg (31.52 КБ) 76 просмотров
2.jpg
2.jpg (42.24 КБ) 76 просмотров

tvent
Сообщения: 818
Зарегистрирован: 11 янв 2011, 17:02

Re: ISP функциональный блок

Сообщение tvent »

fenist писал(а):
22 май 2020, 20:10
Если потом сбрасывать М0, М2, М10 в "OFF" и повторно включать М0 в "ON", то М2 уже не
переключается в "ON"(как и должно быть).
С ФБ или без ФБ - у X0 состояние не меняется. То есть M2 повторно не включиться.
ISPSoft 3.06, COMMGR 1.10

bayk
Сообщения: 397
Зарегистрирован: 30 май 2015, 21:20

Re: ISP функциональный блок

Сообщение bayk »

fenist FB используется вами совсем не верно.
у FB вход enable это отдельный специальный вход, который запускает выполнение внутренностей и сажается на прямую на "шину" или через m1000 (ну или любой другой флаг, который не приведет к неправильному поведению.
для ввода данных надо добавлять отдельный вход, куда вы присоединяете свой M10, так же и с ENO - это не выход блока, а сигнал о том, что он сейчас активен. результат работы необходимо выводить через OUT или IN-OUT переменные внутри.
ну и не присваивайте внутри FB абсолютные маркеры, ведь смысл FB это тиражирование. внутри FB необходимо создавать свои внутренние переменные.
FB это подпрограмма со всеми вытекающими, это не просто "контейнер". вы видимо в принципе не разобрались с принципами его использования.
я вижу правильное оформление вашего примера вот так:
Вложения
2020-05-23_17-40-11.png
2020-05-23_17-40-11.png (4.36 КБ) 49 просмотров
2020-05-23_17-40-34.png
2020-05-23_17-40-34.png (13.84 КБ) 49 просмотров

fenist
Сообщения: 9
Зарегистрирован: 21 май 2020, 23:36

Re: ISP функциональный блок

Сообщение fenist »

tvent писал(а):
23 май 2020, 04:56
То есть M2 повторно не включиться.
Так я же так и писал - повторно он не включается. Вопрос в том почему он включается ПЕРВЫЙ раз, при использовании ФБ?
bayk писал(а):
23 май 2020, 17:31
FB используется вами совсем не верно.
Ну это все удобно, когда ФБ используется как некая вычислительная функция, как в языках программирования Си, Паскаль и др. Но ведь никто не запрещал использовать глобальные переменные, абсолютные маркеры и регистры, и использовать ФБ без входных и выходных переменных. При компиляции ФБ трансформируется в простые команды языка IL: CALL и SRET. А все входные и выходные переменные ФБ это лишь дополнительные удобные фишечки языка LD. И в данном случае я действительно использую ФБ как контейнер, просто так удобно - арифметических операций почти нет, но куча логический действий.
Прогу конечно же можно переделать, но интересно же почему вылазит такой косяк? Проверьте плз, кому не лень, пример простенький, может какие идеи появятся.

Ответить