ISP функциональный блок
ISP функциональный блок
Здравствуйте!
Создаю в ISP 3.02 функциональный блок.
В нем создаю переменную VAR_OUTPUT, тип данных BOOL,
для которой, при использовании блока в программе, назначаю
энергонезависимый флаг. Но он обнуляется при переходе контроллера в "RUN".
Единственное отличие - если поставить флаг обыкновенный - он обнуляется при переходе в "STOP"...
никаких команд выключения этого флага нет.
Возможен вариант создания функционального блока с энергонезависимыми "выходами"?
Создаю в ISP 3.02 функциональный блок.
В нем создаю переменную VAR_OUTPUT, тип данных BOOL,
для которой, при использовании блока в программе, назначаю
энергонезависимый флаг. Но он обнуляется при переходе контроллера в "RUN".
Единственное отличие - если поставить флаг обыкновенный - он обнуляется при переходе в "STOP"...
никаких команд выключения этого флага нет.
Возможен вариант создания функционального блока с энергонезависимыми "выходами"?
Re: ISP функциональный блок
Укажите для параметра адрес в энергонезависимой памяти явно.
Или создайте переменную с таким адресом в Global symbols. Тогда декларировать Var_output будет не нужно.
Или создайте переменную с таким адресом в Global symbols. Тогда декларировать Var_output будет не нужно.
Re: ISP функциональный блок
Что значит явно? Мне нужно этот блок использовать несколько раз, с разными переменными.
И каким образом я обойдусь без декларирования VAR_OUTPUT?
И каким образом я обойдусь без декларирования VAR_OUTPUT?
Re: ISP функциональный блок
Указать для переменной в графе Adress M512, к примеру. Это тип latched для ПЛК ES/EX/SS...KDN писал(а):Что значит явно?
Ну и..., что вам мешает, после каждого вызова FB присваивать значение того-же М512 другой переменной .KDN писал(а):Мне нужно этот блок использовать несколько раз, с разными переменными.
По факту (коду программы) это и происходит.
FB это подпрограмма. И вызывается он (FB) командой Call. А Call не может передать параметры подпрограмме.(((
При вызове FB значения его параметров "тупо переписываются" в рабочие регистры и битовые переменные в теле FB , а потом обратно (для OUTPUT и IN_OUT).
Re: ISP функциональный блок
У Вас FB выставляет свой выход в ноль при первом же проходе, значение выхода присваивается биту который назначили выходу.никаких команд выключения этого флага нет.
При чём тут энергонезависимый или нет бит?
Ну прям как деревья качаются, поэтому ветер дует.
У ФБ есть переменная in-out, используйте её правильно, тогда получится сохранить состояние бита.
Re: ISP функциональный блок
С in-out все получилось, спасибо.Олег писал(а):У Вас FB выставляет свой выход в ноль при первом же проходе, значение выхода присваивается биту который назначили выходу.никаких команд выключения этого флага нет.
При чём тут энергонезависимый или нет бит?
Ну прям как деревья качаются, поэтому ветер дует.
У ФБ есть переменная in-out, используйте её правильно, тогда получится сохранить состояние бита.
Re: ISP функциональный блок
Здравствуйте! В процессе разбивки программы на части(Функциональные блоки) столкнулся со следующей непоняткой.
Суть проблемы изложу на да двух простых одинаковых по функционалу примерах. Косяк проявляется во втором
случае, где есть функциональный блок. Х0 всегда "ON". При ПЕРВОМ нарастающем фронте М0, M2 почему-то тоже
переходит в "ON". Если потом сбрасывать М0, М2, М10 в "OFF" и повторно включать М0 в "ON", то М2 уже не
переключается в "ON"(как и должно быть). В примере без функционального блока - все в порядке. Проверял на симуляторе в ISP_3.10, но в контроллере(SS2) косяк тот же. Помогите разобраться, почему так происходит?
Суть проблемы изложу на да двух простых одинаковых по функционалу примерах. Косяк проявляется во втором
случае, где есть функциональный блок. Х0 всегда "ON". При ПЕРВОМ нарастающем фронте М0, M2 почему-то тоже
переходит в "ON". Если потом сбрасывать М0, М2, М10 в "OFF" и повторно включать М0 в "ON", то М2 уже не
переключается в "ON"(как и должно быть). В примере без функционального блока - все в порядке. Проверял на симуляторе в ISP_3.10, но в контроллере(SS2) косяк тот же. Помогите разобраться, почему так происходит?
- Вложения
-
- 1.jpg (31.52 КБ) 3642 просмотра
-
- 2.jpg (42.24 КБ) 3642 просмотра
Re: ISP функциональный блок
fenist FB используется вами совсем не верно.
у FB вход enable это отдельный специальный вход, который запускает выполнение внутренностей и сажается на прямую на "шину" или через m1000 (ну или любой другой флаг, который не приведет к неправильному поведению.
для ввода данных надо добавлять отдельный вход, куда вы присоединяете свой M10, так же и с ENO - это не выход блока, а сигнал о том, что он сейчас активен. результат работы необходимо выводить через OUT или IN-OUT переменные внутри.
ну и не присваивайте внутри FB абсолютные маркеры, ведь смысл FB это тиражирование. внутри FB необходимо создавать свои внутренние переменные.
FB это подпрограмма со всеми вытекающими, это не просто "контейнер". вы видимо в принципе не разобрались с принципами его использования.
я вижу правильное оформление вашего примера вот так:
у FB вход enable это отдельный специальный вход, который запускает выполнение внутренностей и сажается на прямую на "шину" или через m1000 (ну или любой другой флаг, который не приведет к неправильному поведению.
для ввода данных надо добавлять отдельный вход, куда вы присоединяете свой M10, так же и с ENO - это не выход блока, а сигнал о том, что он сейчас активен. результат работы необходимо выводить через OUT или IN-OUT переменные внутри.
ну и не присваивайте внутри FB абсолютные маркеры, ведь смысл FB это тиражирование. внутри FB необходимо создавать свои внутренние переменные.
FB это подпрограмма со всеми вытекающими, это не просто "контейнер". вы видимо в принципе не разобрались с принципами его использования.
я вижу правильное оформление вашего примера вот так:
- Вложения
-
- 2020-05-23_17-40-11.png (4.36 КБ) 3615 просмотров
-
- 2020-05-23_17-40-34.png (13.84 КБ) 3615 просмотров
Re: ISP функциональный блок
Так я же так и писал - повторно он не включается. Вопрос в том почему он включается ПЕРВЫЙ раз, при использовании ФБ?
Ну это все удобно, когда ФБ используется как некая вычислительная функция, как в языках программирования Си, Паскаль и др. Но ведь никто не запрещал использовать глобальные переменные, абсолютные маркеры и регистры, и использовать ФБ без входных и выходных переменных. При компиляции ФБ трансформируется в простые команды языка IL: CALL и SRET. А все входные и выходные переменные ФБ это лишь дополнительные удобные фишечки языка LD. И в данном случае я действительно использую ФБ как контейнер, просто так удобно - арифметических операций почти нет, но куча логический действий.
Прогу конечно же можно переделать, но интересно же почему вылазит такой косяк? Проверьте плз, кому не лень, пример простенький, может какие идеи появятся.