Просмотр полной версии : Кто это все придумал?
ВладОвен
29.03.2022, 11:46
Всем привет.
В среде CodeSys пытаюсь использовать обычный логический двухвходовой элемент И.
Однако в этом элементе есть цепи EN и ENO.
Что это за они и зачем они нужны?
59985
Евгений Кислов
29.03.2022, 11:52
Всем привет.
В среде CodeSys пытаюсь использовать обычный логический двухвходовой элемент И.
Однако в этом элементе есть цепи EN и ENO.
Что это за они и зачем они нужны?
59985
Добрый день.
EN - вход управления: если он в TRUE, то элемент обрабатывается при выполнении POU, если в FALSE - то не обрабатывается.
Это позволяет "включать" и "выключать" выполнение каких-то фрагментов схемы в процессе работы программы.
Значение ENO равно значению EN и используется для "прокидывания" сигнала управления в другие блоки без засорения холста лишними линиями от EN.
https://help.codesys.com/webapp/_cds_cmd_fbd_ld_il_insert_empty_box_with_en_eno;pr oduct=codesys;version=3.5.17.0
Кто это все придумал?
Авторы стандарта МЭК 61131-3.
а почитать? можно вообще запретить выполнение блока и нанизывать их один на другой.
kondor3000
29.03.2022, 15:28
Всем привет.
В среде CodeSys пытаюсь использовать обычный логический двухвходовой элемент И.
Однако в этом элементе есть цепи EN и ENO.
Что это за они и зачем они нужны?
Вас кто то принуждает? Не надо этих входов - пишите программу на CFC или ST, там нет этого, если вы специально не используете управляющие входы.
kondor3000
31.03.2022, 10:01
Видимо про SFC?
Они (ен/ено) есть везде. В ST это IF, в SFC это ветвление обхода шага
А дочитать предложение до конца? Что за манера, вырывать куски из контекста.
ВладОвен
07.06.2022, 17:49
Привет. Наверное, мне пока в отпуск!
1. Создадим структуру:
TYPE struct1 :STRUCT
bFlag1: BOOL;
bFlag2: BOOL;
bFlag3: BOOL;
bFlag4: BOOL;
bFlag5: BOOL;
bFlag6: BOOL;
END_STRUCT
END_TYPE
2. Объявим массив:
VAR
arrBuffer: ARRAY[1..2] OF struct1;
END_VAR
3. На экране визуализации разместим графический элемент "Кнопка-флажок".
В поле "Переменная" вставим: PLC_PRG.arrBuffer[1].bFlag1.
А в поле "Конфигурация ввода - OnValueChanged" установим "Переключить переменную - PLC_PRG.arrBuffer[1].bFlag1".
4. Запустим все это безобразие на ПЛК "CODESYS Control Win V3".
5. При попытке переключить флажок получаем ошибку визуализации/зависание.
Что я делаю не так?
Файл:
Евгений Кислов
07.06.2022, 18:17
Что я делаю не так?
А чего вы добиться-то своими действиями хотели?
ВладОвен
08.06.2022, 08:17
Переключение логического флага. Т.е. множества таких флагов.
Разве "Кнопка-Флажок" не для этого предназначена?
Евгений Кислов
08.06.2022, 08:23
Переключение логического флага. Т.е. множества таких флагов.
Разве "Кнопка-Флажок" не для этого предназначена?
Для переключения логического флага OnValueChanged не нужно.
А вы сейчас с его помощью создаете поток одинаковых событий (нажали на флажок - изменилась переменная - сработало событие OnValueChanged - в обработчике инвертировали переменную - поэтому опять сработало событие и далее бесконечный цикл), который приводит к переполнению стека.
ВладОвен
08.06.2022, 10:02
Ок. Спасибо. Заработало.
ВладОвен
08.06.2022, 12:37
Вот только теперь "варнинги" сыплются постоянно...
Можно было бы и забить на них, но мы ведь профессионалы! Недопускам костылей. Не так ли?
61120
Евгений Кислов
08.06.2022, 12:43
Вот только теперь "варнинги" сыплются постоянно...
Можно было бы и забить на них, но мы ведь профессионалы! Недопускам костылей. Не так ли?
61120
Удалите вообще действие из настроек чекбоксов (сейчас вы только переменную из действия удалили, а само действие осталось).
ВладОвен
13.06.2022, 16:52
А если в графическом элементе "Нажимной выключатель" в конфигурации ввода "OnValueChanged" разместить команду "Выполнить ST-код", то он при нажатии на этот выключатель должен выполниться один раз? Или я что-то не понимаю?
Евгений Кислов
13.06.2022, 17:34
А если в графическом элементе "Нажимной выключатель" в конфигурации ввода "OnValueChanged" разместить команду "Выполнить ST-код", то он при нажатии на этот выключатель должен выполниться один раз? Или я что-то не понимаю?
Вы понимаете правильно.
ВладОвен
21.06.2022, 10:58
Привет. Подскажите, как присвоить переменной дату и время в момент нажатия на клавишу на экране?
Будем использовать библиотеку CAA DTUtility и ее функциональный блок GetDateAndTime.
Создадим на экране визуализации клавишу "Временной хлопок!" и в событии OnMouseClick разместим код:
PC_PRG.fbGetDateTime.xExecute := TRUE; // запустим ф-блок
В основной программе расположим следующий код:
fbGetDateTime: DTU.GetDateAndTime; // при объявлении переменных создадим экземпляр ф-блока
dtMyDateTime: DATE_AND_TIME; // объявляем переменную для хранения даты и времени последнего (крайнего) хлопка
Основная программа:
IF fbGetDateTime.xDone THEN // дождемся завершения работы ф-блока
dtMyDateTime := fbGetDateTime.dtDateAndTime; // забираем результат
fbGetDateTime.xExecute := FALSE; // деактивируем ф-блок
END_IF
При нажатии на клавишу дата и время не записываются в переменную.
Что я делаю не так?
Евгений Кислов
21.06.2022, 11:02
Привет. Подскажите, как присвоить переменной дату и время в момент нажатия на клавишу на экране?
Будем использовать библиотеку CAA DTUtility и ее функциональный блок GetDateAndTime.
Создадим на экране визуализации клавишу "Временной хлопок!" и в событии OnMouseClick разместим код:
PC_PRG.fbGetDateTime.xExecute := TRUE; // запустим ф-блок
В основной программе расположим следующий код:
fbGetDateTime: DTU.GetDateAndTime; // при объявлении переменных создадим экземпляр ф-блока
dtMyDateTime: DATE_AND_TIME; // объявляем переменную для хранения даты и времени последнего (крайнего) хлопка
Основная программа:
IF fbGetDateTime.xDone THEN // дождемся завершения работы ф-блока
dtMyDateTime := fbGetDateTime.dtDateAndTime; // забираем результат
fbGetDateTime.xExecute := FALSE; // деактивируем ф-блок
END_IF
При нажатии на клавишу дата и время не записываются в переменную.
Что я делаю не так?
Вы не вызываете блок.
Надо так:
"Создадим на экране визуализации клавишу "Временной хлопок!" и привяжем к ее параметру Конфигурация ввода/Нажатие/Переменная переменную PC_PRG.xGetDateAndTime типа BOOL.
// объявление переменных
VAR
fbGetDateTime: DTU.GetDateAndTime; // при объявлении переменных создадим экземпляр ф-блока
dtMyDateTime: DATE_AND_TIME; // объявляем переменную для хранения даты и времени последнего (крайнего) хлопка
xGetDateAndTime: BOOL; // команда чтения системного времени из визуализации
END_VAR
// код программы
fbGetDateTime(xExecute := xGetDateAndTime);
IF fbGetDateTime.xDone THEN // дождемся завершения работы ф-блока
dtMyDateTime := fbGetDateTime.dtDateAndTime; // забираем результат
fbGetDateTime(xExecute := FALSE); // деактивируем ф-блок. в данной реализации можно этого и не делать, потому что он будет автоматически деактивирован при отпускании кнопки в визуализации за счет первой строки программы
END_IF
ВладОвен
21.06.2022, 11:43
Спасибо. Так заработало.
Подскажите, а почему при нажатии на кнопку "Временной хлопок!" дата и время становятся равными: 21.06.2022 08:36:21 ?
Хотя хлопок произошел в 21.06.2022 11:36:21 .
При этом в соседнем поле на экране визуализации (для контроля) выводится текст %t[dd.MM.yyyy HH:mm:ss] (т.е. текущая дата/время). Там отображается 21.06.2022 11:36:21 , т.е. верные дата/время.
Что может быть не так?
Евгений Кислов
21.06.2022, 11:46
Спасибо. Так заработало.
Подскажите, а почему при нажатии на кнопку "Временной хлопок!" дата и время становятся равными: 21.06.2022 08:36:21 ?
Хотя хлопок произошел в 21.06.2022 11:36:21 .
При этом в соседнем поле на экране визуализации (для контроля) выводится текст %t[dd.MM.yyyy HH:mm:ss] (т.е. текущая дата/время). Там отображается 21.06.2022 11:36:21 , т.е. верные дата/время.
Что может быть не так?
Они не "становятся равными", они считываются без учета часового пояса (в UTC+0).
Для наших контроллеров эта библиотека вообще не нужна - у нас системное время и часовой пояс доступны в узле OwenRTC в дереве проекта.
61328
ВладОвен
21.06.2022, 12:02
Евгений, спасибо за оперативные и быстрые ответы. Без вас можно было бы волосы рвать от безнадёги (в т.ч. и на голове). :)
ВладОвен
01.07.2022, 16:26
Привет. Компилирую проект, но получаю кучу непонятных предупреждений. И нет указания где именно в коде произошло то, или иное предупреждение.
Подскажите в чем дело? См. рисунок.
Спасибо.
61496
Евгений Кислов
01.07.2022, 16:42
Привет. Компилирую проект, но получаю кучу непонятных предупреждений. И нет указания где именно в коде произошло то, или иное предупреждение.
Подскажите в чем дело? См. рисунок.
Спасибо.
61496
По тексту предупреждений очевидно, что они связаны с ненастроенными элементами визуализации, а не с кодом.
ВладОвен
01.07.2022, 16:53
Да, Евгений. Это я тоже понял. Но IDE не пишет какой элемент править-то.
Все поудалять и новое создать что-ли? Походу только так... :(
Евгений Кислов
01.07.2022, 16:58
Да, Евгений. Это я тоже понял. Но IDE не пишет какой элемент править-то.
Все поудалять и новое создать что-ли? Походу только так... :(
Выкладывайте проект, посмотрим.
проще забить, на работу это не влияет. "варнинги" они на то и "варнинги", чтобы просто привлечь внимание к возможной ошибке, но ошибки может и не быть, а может быть специфика написания программы.
Если, например, в коде программы оставить пустые переменные, которые нужны для банального мониторинга состояний модулей подключенных к контроллеру, то по каждой переменной будет предупреждение, однако у меня такие переменные обычно в коде остаются, чтобы можно было оперативно посмотреть тот или иной параметр.
Мой совет - завязывать с перфекционизмом и не сношать мозг ни себе ни людям.
ВладОвен
04.07.2022, 11:13
Можно и так.
Только помните, если появляется более 100 варнингов, то система не выводит последующие. Т.е. 101 и далее вы уже не увидите.
ВладОвен
23.09.2022, 16:05
Привет.
Всем удачных выходных!
Powered by vBulletin® Version 4.2.3 Copyright © 2025 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot