Обсуждение макросов для OWEN Logic
Уважаемые коллеги!
Данная тема предназначена для обсуждения макросов, которые размещены на форуме в разных темах. Для облегчения поиска в первом сообщении будут прикрепляться ссылки на макросы, с описанием работы от пользователей, которые выкладывались на форуме. Мы надеемся это упростит использование макросов и ускорит написание программ в OWEN Logic.
Также обращаем Ваше внимание на онлайн базу макросов, которая доступна из программы OWEN Logic, в данной теме происходит обсуждение макросов содержащихся в этой базе.
Общие рекомендации по использованию макросов прикрепленных в данной теме:
-перед использованием скачанного макроса, рекомендуется пройти по ссылке описание или обсуждение, в зависимости от того что доступно, и ознакомиться с отзывами от других пользователей, для того чтобы понять, подходит Вам макрос или нет;
-в случае, если возле ссылки стоит пометка о том что данный макрос есть в онлайн базе, рекомендуется использовать макрос из онлайн базы, т.к. перед выгрузкой в базу, мы стараемся сделать макрос максимально универсальным и более тщательно проверить на оборудовании. Так же для макросов из онлайн базы всегда доступно более детальное описание, и в случае если возникнут вопросы по использованию макроса, мы сможем быстрее дать на них ответ.
Вложений: 4
Набор макросов для работы с временем UNIX
В начале макрос, который упаковывает стандартные дата_время в UNIX формат ( в кодесис это формат DATA_AND_TIME).
Вложение 26324
На выходе собственно упакованное DT и на двух дополнительных выходах - младший и старший WORD этого самого DT.
Выход DT можно использовать в самом ПР, например расчитывать интервалы для событий реального времени, например для вкл/выкл по расписанию. Ведь DT можно складывать, вычитать и сравнивать между собой, т.к. любое DT это всего лишь число секунд с 0 часов 1 января 1970г.
К выходам Lo_wDT и Hi_wDT нужно подключать две сетевые переменные с последовательными адресами, тогда панель или скада или ПЛК смогут прочитать DT как переменную DWORD.
Вложение 26323
ВНИМАНИЕ.
Т.к. в ПР не поддерживается работа со знаковыми целыми числами, макрос будет корректно работать только с даты "эры Unix" - с 0 часов 1 января 1970г. Зато не будет проблемы 2038г, когда 19 января 2038 многие системы сойдут сума и время у них потечет вспять. У нас, в макросе, эра Unix закончится 5 февраля 2106г.:rolleyes:
Теперь макросы, которые позволяют использовать в программах это самое Unix-время.
Вложение 26325
Вложение 26315
ЗЫ.
Пришлось пост разбить на части. Больше 8 картинок прикрепить нельзя:confused:
Вложений: 8
Набор макросов для работы с временем UNIX. Продолжение.
1. ExtrD_T. Извлекает из DT дату и время суток, как отдельные части, что позволят использовать их по отдельности.
Вложение 26326
Этот макрос используется в
DT_to_UTC
2. Собственно из TIME можно получит только Час, Мин и Сек времени суток. Чем и будет заниматься макрос ExtrTime
Вложение 26327
Этот макрос используется в
DT_to_UTC
3. DayOfYear. Определяет по Дате номер дня в году.
Вложение 26328
Этот макрос используется в
ExtrMonth
ExtrDay
DT_to_UTC
4. LeapYear. Макрос для определение високосного года
Вложение 26329
Этот макрос используется в
ExtrMonth
ExtrDay
DT_to_UTC
5. ExtrYear. Извлекает Год из упакованной Даты.
Вложение 26330
Этот макрос используется в
DT_to_UTC
6. ExtrMonth. Извлекает из упакованной Даты номер месяца.
Вложение 26331
Этот макрос используется в
ExtrDay
7. D_of_W. Возвращает день недели. Пн - 1, .. Вс - 7 из упакованной даты.
Вложение 26332
Этот макрос используется в
DT_to_UTC
8. ExtrDay. Извлекает номер дня месяца из упакованной Даты. А также определяет признак четного дня месяца, может кто захочет расписание врачей сделать.:)
Вложение 26333
Вложений: 1
Макросы для упаковки/распаковки времени
petera, вот гду вы раньше были??!:confused:
Выкладываю аналогичные макросы (не зря же делал) упаковки/распаковки времени в формате Unix.
Основные макросы:
1. DT_TO_DW - упаковка времени в формат Unix с разбивкой на два регистра (для отправки по сети).
2. DW_TO_DT - распаковка времени из формата Unix. Если на вход dwDT блока подается значение, то расчёт идет по нему, иначе расчёт идет по входам highDT и lowDT (используется в случае прихода данных по сети).
Вложение 26337
Вложений: 8
Набор макросов для работы с временем UNIX. Окончание.
Пример использования макросов, приведенных в предыдущем посте.
Вложение 26334 Вложение 26335
А теперь макрос DT_to_UTC обратного преобразования из времени Unix в стандартное время.
Вложение 26336
Чтобы не плодить вложенные макросы, DayOfYear и LeapYear вынес из других наружу.
Пример с этим макросом
Вложение 26338
Вложение 26339
Вложение 26340
Значение DT может поступать и через сетевые переменные, в примере этого делать не стал, как "склеить" из двух сетевых переменных одну 32 битную, надеюсь понятно.