Вот только теперь "варнинги" сыплются постоянно...
Можно было бы и забить на них, но мы ведь профессионалы! Недопускам костылей. Не так ли?
Вложение 61120
Вид для печати
Вот только теперь "варнинги" сыплются постоянно...
Можно было бы и забить на них, но мы ведь профессионалы! Недопускам костылей. Не так ли?
Вложение 61120
А если в графическом элементе "Нажимной выключатель" в конфигурации ввода "OnValueChanged" разместить команду "Выполнить ST-код", то он при нажатии на этот выключатель должен выполниться один раз? Или я что-то не понимаю?
Привет. Подскажите, как присвоить переменной дату и время в момент нажатия на клавишу на экране?
Будем использовать библиотеку 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 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
Евгений, спасибо за оперативные и быстрые ответы. Без вас можно было бы волосы рвать от безнадёги (в т.ч. и на голове). :)
Привет. Компилирую проект, но получаю кучу непонятных предупреждений. И нет указания где именно в коде произошло то, или иное предупреждение.
Подскажите в чем дело? См. рисунок.
Спасибо.
Вложение 61496