Выделил фильтрацию в отдельный POU.
Но в этом POU нет описание переменных типа BOOL. Т.к. они глобальные и требуется их анализ в других POU программы.
Пришлось и глобальные переменные экспортировать.
FILTER.zip
Выделил фильтрацию в отдельный POU.
Но в этом POU нет описание переменных типа BOOL. Т.к. они глобальные и требуется их анализ в других POU программы.
Пришлось и глобальные переменные экспортировать.
FILTER.zip
Не хватило этих переменных:
DV_1: BOOL;
DN_1: BOOL;
DV_2: BOOL;
DN_2: BOOL;
MODUL_IN: WORD; (* Маска входов *)
1 Программа.jpg
У вас на скрине Маске входов MODUL_IN присвоена цифра 4, поэтому и горит бит Kn_Up_1 который равен MODUL_IN.2 биту маски.
Kn_Up_1:= MODUL_IN.2;
На скрине повторил, что у вас
А так всё работает.
Правильно наверно так, из битов надо было собрать маску:
MODUL_IN.2:=Kn_Up_1;
Последний раз редактировалось kondor3000; 25.01.2022 в 19:57.
У меня до выделения в отдельный POU фильтрацию сигналов было ложное срабатывание (см. скрин)
Проблема2.png
После того, как я выделил фильтрацию в отдельный POU. Стал проверять, а все и работает! Странно. Меня это радует. Еще раз, спасибо!
Таймеры, это тоже ФБ, только стандартные, вы же создаёте пользовательские ФБ.
Вы же POU создали, с ФБ всё тоже самое, например создали FUNCTION_BLOCK Swap_W или для вас FILTER 1 Фильтр.jpg
В программе надо объявить экземпляр
Swap_W1: Swap_W;
а в теле программы вызвать
Swap_W1();
Все тоже самое, что с вызовом экземпляров таймеров.
Вызвать как таймер по F2, только в пользовательских ФБ. Обратиться к переменным входа-выхода как к глобальным или так
и к локальным.
Swap_W2 (rIn:= , rOut=> );
По справке F1 можно прочитать про "FUNCTION_BLOCK" выделив название без кавычек.
Сделал пример из вашей же программы, только в виде ФБ. В эмуляции, чтобы посмотреть работу, щёлкните мышью по ФБ слева и выберите Экземпляр и нажмите ОК.
Последний раз редактировалось kondor3000; 25.01.2022 в 22:41.
Во! Можно ещё так - при помощи окна вставки переменных, которое вызывается по F2 (если открыт код на ST и это окно можно показать).
Для примера показал на том, как вставить вызов своего FB регулятора тепла.
FBCall-1.gif FBCall-2.gif
Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живёте. © Steve McConnell
Мой рабочий блог со статьями про щиты и автоматику ОВЕН - Cs-Cs.Net | Почта: Info@Cs-Cs.Net
Cs-Cs, и Вам спасибо. Буду изучать. И еще на скрине мне понравилось оформление кода. Хочу перенять такой стиль. Хорошо читается.
Не за что! Код оформлять я учился с других языков (я программирую с 96-97 годов, с бэйсика начинал в школе), и все привычки перенёс на CodeSys сюда. Если кратко, то тезисы будут такие:
0. Группировать всё по логическим группам (POU по папочкам раскладывать, переменные по группам - Входы Важные, Входы Кнопок, Входы Ламп, Датчики Температуры, Датчики Давления и так далее).
1. Обзывать переменные так, чтобы по ним было удобно понимать что и для чего, и учитывать сортировку их по алфавиту в окнах выбора (типа такого, которое по F2 вызывается). Скажем, если я хочу чтобы все объявления FBшек регуляторов тёплых полов в окне выбора шли подряд - то я буду называть их fbRegTPolnnn - где nnn - помещение этого пола.
Причём способ того, как части названия сочетаются между собой может быть тоже разным. Выдумал такой пример (на примере каких-нить двигателей мешалок, которых есть три штуки под разные техпроцессы - Замес, Прогрев, Слив):
а) Если нам приоритетна группировка по типу мешалки - то его ставим первым:
* ZamesWorkTime
* ZamesTemperature
* ProgrevWorkTime
* ProgrevTemperature
* SlivWorkTime
* SlivTemperature
б) Если нам приоритетна характеристика, то наоборот:
* WorkTimeZames
* WorkTimeProgrev
* WorkTimeSliv
* TemperatureZames
* TemperatureProgrev
* TemperatureSliv
2. В названиях переменных использовать префикс типа. В CodeSys используют другие префиксы, но я свои притащил из других языков - b = BOOL, i = INT, w = WORD, dw = DWORD, s = STRING, ws = WSTRING, fb = какой-нибудь FB (таймер, свой FB), tm = TIME. По ним всё вполне читается, типа "dwWaterPulseCount" или "fbDelayTimer" и "tmDelayTime".
3. Ну и всё комментировать. Если комментировать переменные, то среда эти комментарии видит и даже выводит их иногда, если на переменную навести мышку, или в окне выбора по F2.
Я местами соображаю медленно в плане алгоритмов - вот и расписываю себе всё подряд.
Если это удобно (публично я не хочу проект выкладывать), то можно написать мне своё мыло в личку - и я какой-нибудь проект скину как образец. Но НЕ для распространения.
Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живёте. © Steve McConnell
Мой рабочий блог со статьями про щиты и автоматику ОВЕН - Cs-Cs.Net | Почта: Info@Cs-Cs.Net