Суть проблемы описана выше
Суть проблемы описана выше
Нет ПРки под рукой, проверить не могу
попробуйте включить "Запись в конце цикла"
Захват-1.png
ЗЫ
В Вашем случае думаю можно упростить
Захват-2.png
Последний раз редактировалось petera; 20.11.2020 в 12:52.
26 лет деятельности в области промышленной безопасности
Поправка, чтобы функция "запись в конце цикла" стала активной переменная должна обязательно быть подключена к экранному элементу, или переменная должна быть энергонезависимой, тогда функция автоматически будет работать, если я ничего не путаю
Очередной вопрос: в ПР100 есть 6 цифровых входов I1,...,I6. ПР100 в режиме модбас мастер. Нужно сформировать сетевую слейв переменную Err_MB целого типа по следующему алгоритму.
Если все входы равны 0, то Err_MB = 0. Если хотя бы один вход стал равен 1, то переменная Err_MB должна стать равна номеру входа, на котором появился 1.
При этом важно, что бы в переменной Err_MB должен зафиксироваться номер первого сработавшего входа. Т.е. если сначала сработал вход I3, а потом вход I5, то Err_MB должна остаться = 3.
Более того, как только Err_MB изменилась из 0 в номер сработавшего входа, то изменить ее в 0 потом можно только слейвом (по модбас).
Не до конца ясно, как должно работать в тех или иных случаях, например должно ли сбрасываться при наличии активных аварий(ошибок), у меня можно сбросить и следующая авария(ошибка) появится только после пропадании всех и возникновении вновь или логика при одновременном нажатии более одного входа(у меня приоритет у более старшего входа), короче, наверно примерно так:
Авария_3.PNG
Авария_3.owl
Последний раз редактировалось Сергей0308; 27.11.2020 в 02:38.
Если проблему можно решить за деньги, это не проблема, это расходы. Бог каждому посылает проблемы по его силам. Так что одно из двух. Либо ты можешь-таки
справиться с проблемами, либо это не твои проблемы.
Сергей0308, спасибо огромное, практически то, что нужно. Особенно интересно решение с приоритетами при одновременном нажатии более одного входа. Вот только не пойму назначение переменной IN1_8.
Если я понял правильно, то в OUT_w формируется код аварии (от 1 до 8). Как правильно сбрасывать это код в 0? Записью 0 в локальную переменную Q ? Или формированием некоторого значения (какого ?) в IN1_8 ?
Какова связь между срабатыванием входов и значением переменной IN1_8 ?
Насколько я смог понять, Вы хотели сбрасывать код ошибки(1-8) только по сети?!
В данном случае, для примера ПР200(мастер) считывает 51 регистр модуля дискретного ввода(слейв) и если на его первом входе появляется "1" сбрасывает значение ошибки в "0". Можно одним регистром передавать до 16 дискретных сигналов! Короче, сброс происходит значением "1" в сетевой переменной IN1_8, так как такой весовой коэффициент у первого входа(нулевого бита), у второго входа(первого бита) это будет "2" у третьего входа - "4", у четвёртого входа - "8", у пятого входа - "16", у шестого входа - "32", у седьмого входа - "64" и у восьмого входа - "128", если сброс сделать с этих входов, всё!
Для передачи кода ошибки(диапазона 0-6) достаточно задействовать три бита(диапазон 0-7)!
Последний раз редактировалось Сергей0308; 28.11.2020 в 20:23.
Если проблему можно решить за деньги, это не проблема, это расходы. Бог каждому посылает проблемы по его силам. Так что одно из двух. Либо ты можешь-таки
справиться с проблемами, либо это не твои проблемы.
Сергей0308, спасибо за пояснение. Я понял назначение данной переменной в Вашем примере.