Форум TRACE MODE: техническая поддержка Послать новую тему / Post New Topic  Послать ответ / Post A Reply
мой профиль / my profile авторизация / login | регистрация / register | поиск / search | часто задаваемые вопросы / faq | начало / forum home

  Следующая старая тема / next oldest topic   Следующая новая тема / next newest topic
» Форум TRACE MODE: техническая поддержка » ТЕХНИЧЕСКАЯ ПОДДЕРЖКА / TECHNICAL SUPPORT TRACE MODE 6 » Редактор проекта TRACE MODE 6 / » Как узнать свой текущий часовой пояс?

   
Автор / Author Тема / Topic: Как узнать свой текущий часовой пояс?
stepagrus
Forum Haunter / Завсегдатай форума
Участник № / Member № 3589


Icon 6 отправлено / posted      Профиль для / Profile for stepagrus           Редактировать/удалить сообщение / Edit/Delete Post   Вставить в ответ текст исходного сообщения  / Reply With Quote 
Здравия!

вопрос в топике, задача следующая:

при формировании отчета я программно откатываю время периода генерации отчета на 23:00:00

для того чтобы задать нужное количество часов нужно знать часовой пояс. у меня он GMT +6 зимой и GMT+7 летом (но об этом я вспомнил только после перевода времени))

время откатываю по такой формуле:

T_FROM_CHANEL_OUT = T_FROM_IN - (T_FROM_IN + TimeZone*3600) mod 86400 + 23*3600;

где: T_FROM_IN - изначальное время
T_FROM_CHANEL_OUT - откорректированное время
TimeZone - часовой пояс, у меня он был равен 6. но после 27 марта результат расчета по форумле стал неверным.

вопрос: как мне узнать часовой пояс для выбранной даты, чтобы правильно рассчитывать смещения? [Насмешка / Razz]

Сообщения / Posts 136 | Из / From: РФ  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
Romсheg
unregistered



Icon 1 отправлено / posted            Редактировать/удалить сообщение / Edit/Delete Post   Вставить в ответ текст исходного сообщения  / Reply With Quote 
Похоже, что только если написать свою DLL.
IP / IP: IP адрес / IP address | Report this post to a Moderator
АдАстра. Техподдержка
Administrator
Участник № / Member № 4


Icon 1 отправлено / posted      Профиль для / Profile for АдАстра. Техподдержка           Редактировать/удалить сообщение / Edit/Delete Post   Вставить в ответ текст исходного сообщения  / Reply With Quote 
Все операции с временем в Trace Mode 6 автоматически учитывают локальные и сезонные сдвиги.
Работать с временем надо в локальном формате.
Выбирайте в языке FBD блок "Управление по астрономическому времени (ALARM)", задавайте нужное Вам время и формируйте команду на генерацию документа.

Сообщения / Posts 17101 | Из / From: Россия  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
stepagrus
Forum Haunter / Завсегдатай форума
Участник № / Member № 3589


Icon 1 отправлено / posted      Профиль для / Profile for stepagrus           Редактировать/удалить сообщение / Edit/Delete Post   Вставить в ответ текст исходного сообщения  / Reply With Quote 
спасибо! завтра попробую
Сообщения / Posts 136 | Из / From: РФ  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
stepagrus
Forum Haunter / Завсегдатай форума
Участник № / Member № 3589


Icon 1 отправлено / posted      Профиль для / Profile for stepagrus           Редактировать/удалить сообщение / Edit/Delete Post   Вставить в ответ текст исходного сообщения  / Reply With Quote 
окзалось неправдой.

читаем справку:
-------------------------------
Управление по астрономическому времени (ALARM)


Данный блок формирует на выходе 1 при совпадении текущего астрономического времени с временем, заданным входами блока. Единица на выходе удерживается в течение одной секунды, затем выход обнуляется.

Вход MON задает номер месяца, DAY – день месяца, DOF – день недели (1 - 7, первый день недели - воскресенье), H – часы, M – минуты и S – секунды. Если хотя бы один из этих параметров не соответствует текущему астрономическому времени, Q0 = 0. При формировании выходного сигнала не учитываются входы со значением -1.
------------------------------------

так что сформировать нужно нам время при помощи этого FBD блока ни как не получится :-(

Так как же все таки мне решить эту проблему? как можно задать в TM нужное мне время: год, месяц, день, час, минута, секунда и получить на выходе дату в формате UDINT

похоже я задачу криво объяснил
...
мдя... я лишнего наворотил

я пытался брать дату/время в формате UDINT и работать непосредственно с ней.

гораздо проще использовать атрибут [12, Час] канала #TIME )))

Сообщения / Posts 136 | Из / From: РФ  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
АдАстра. Техподдержка
Administrator
Участник № / Member № 4


Icon 1 отправлено / posted      Профиль для / Profile for АдАстра. Техподдержка           Редактировать/удалить сообщение / Edit/Delete Post   Вставить в ответ текст исходного сообщения  / Reply With Quote 
Действительно, надо точно объяснить задачу.
Сообщения / Posts 17101 | Из / From: Россия  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
stepagrus
Forum Haunter / Завсегдатай форума
Участник № / Member № 3589


Icon 1 отправлено / posted      Профиль для / Profile for stepagrus           Редактировать/удалить сообщение / Edit/Delete Post   Вставить в ответ текст исходного сообщения  / Reply With Quote 
вопрос возник.
1. а в этот атрибут (12, Час) записывать то можно?
2. с каналом Time происходят странности: если его в программе привязать за атрибут (0,R) и (12, Час), а за атрибут (2, In) не привязывать, то в канале имется значение -1 а дату он показывает 0.1.1900

Сообщения / Posts 136 | Из / From: РФ  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
АдАстра. Техподдержка
Administrator
Участник № / Member № 4


Icon 1 отправлено / posted      Профиль для / Profile for АдАстра. Техподдержка           Редактировать/удалить сообщение / Edit/Delete Post   Вставить в ответ текст исходного сообщения  / Reply With Quote 
Записывать значения в атрибуты канала TIME можно.
Начальное значение с датой 1900 г. - вполне закономерно связано с тем, что этот канала ни разу не отработал свой стандартный алгоритм.
Если Вы при этом заставляете его отрабатывать только атрибуты часов и дней, не редактируя год, алгоритм обратным пересчетом пытается войти в шкалу с 01.01.1970 и выдает на входе отрицательное число.

Может быть, стоит в рабочем порядке по телефону или e-mail уточнить постановку задачи и обсудить способы ее рационального решения?

Сообщения / Posts 17101 | Из / From: Россия  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
stepagrus
Forum Haunter / Завсегдатай форума
Участник № / Member № 3589


Icon 1 отправлено / posted      Профиль для / Profile for stepagrus           Редактировать/удалить сообщение / Edit/Delete Post   Вставить в ответ текст исходного сообщения  / Reply With Quote 
спасибо. я уже решил проблему.
решение на самом деле очевидное и простое:
code:
VAR_INPUT T_FROM_IN : UDINT; END_VAR // Вход. Начальная дата 
VAR_OUTPUT T_FROM_HOUR : INT; END_VAR //Час. Начальная дата
VAR_OUTPUT T_FROM_CHANEL_OUT : UDINT; END_VAR // Привязать к каналу с начальной датой в аргумент (3, IN)
VAR t : REAL; END_VAR

//Чтобы выставить X часов в нашей дате
t = X - T_From_Hour;
T_FROM_CHANEL_OUT = T_FROM_IN - (T_FROM_IN mod 3600) + t*3600;

это всё ;)


Сообщения / Posts 136 | Из / From: РФ  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
АдАстра. Техподдержка
Administrator
Участник № / Member № 4


Icon 1 отправлено / posted      Профиль для / Profile for АдАстра. Техподдержка           Редактировать/удалить сообщение / Edit/Delete Post   Вставить в ответ текст исходного сообщения  / Reply With Quote 
Если я правильно понял задачу, Вы хотите изменить час в известной Вам дате.
В Вашей программе есть синтаксические ошибки:
- переменная VAR_OUTPUT T_FROM_HOUR должна быть VAR_INPUT T_FROM_HOUR,
- "Привязать к каналу с начальной датой в аргумент (3, IN)" - здесь номер атрибута д.б. 2.
Кроме того, алгоритмически непонятно, как Вы будете задавать X меньший, чем T_From_Hour? Мне кажется, что здесь будет ошибка.

Но самое главное, что эта программа не нужна.
Если в канала TIME задана корректная "начальная дата", то простым заданием в атрибуте 12 нужного часа Вы автоматически получите нужную дату-время.

Сообщения / Posts 17101 | Из / From: Россия  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
stepagrus
Forum Haunter / Завсегдатай форума
Участник № / Member № 3589


Icon 1 отправлено / posted      Профиль для / Profile for stepagrus           Редактировать/удалить сообщение / Edit/Delete Post   Вставить в ответ текст исходного сообщения  / Reply With Quote 
>Вы хотите изменить час в известной Вам дате.

да

>переменная VAR_OUTPUT T_FROM_HOUR должна быть VAR_INPUT T_FROM_HOUR,

согласен. только сейчас заметил, но проект почему то нормально работает, несмотря на то, что аргумент T_FROM_HOUR типа OUTPUT [Недоумение / Confused]

> "Привязать к каналу с начальной датой в аргумент (3, IN)" - здесь номер атрибута д.б. 2.

да, просто я забыл, что нумерация с 0

>Кроме того, алгоритмически непонятно, как Вы будете задавать X меньший, чем T_From_Hour? Мне кажется, что здесь будет ошибка.

здесь всё нормально работает

>Если в канала TIME задана корректная "начальная
>дата", то простым заданием в атрибуте 12 нужного
>часа Вы автоматически получите нужную дату-время.

я попытался сделать так, как вы сказали и вот что получилось (верхняя дата на скриншоте (при этом я просто привязался к атрбуту (12, час) и ничего в этот атрибут не записывал пока):
 -

В самом канале -1 (Повторяю! я еще ни чего не записывал в канал) по умолчанию он выставляется другой прогаммой на 1.1.2010)

попробовал ввести дату 1.4.2010 00:00. дата ввелась нормально. нажал кнопку. программа отработала нормально 1.4.2010 12:00.

тут всё вроде бы нормально, если бы не эти страшные значения в начале
.

До этого в программе канал Time Был привязан за атрибуе R и за атрибут Час. Так вот не удавалось даже перейти на экран с ГЭ, который отображет этот канал - Windows выдавала ошибку и RTM закрывался.

Сообщения / Posts 136 | Из / From: РФ  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
АдАстра. Техподдержка
Administrator
Участник № / Member № 4


Icon 1 отправлено / posted      Профиль для / Profile for АдАстра. Техподдержка           Редактировать/удалить сообщение / Edit/Delete Post   Вставить в ответ текст исходного сообщения  / Reply With Quote 
2 поста назад я написал Вам, что внутренние адгоритмы канала TIME без хотя бы одной штатной отработки не функцируют.
И в Вашей программе наличие НЕ КОРРЕКТНОЙ "Начальной даты" приведет к не корректному результату.

Достаточно поставить каналу TIME флажок "Отработать на старте" и затем ему можно просто задавать нужную "Начальную дату" и произвольно менять атрибут 12 (Час). Никаких коллизий и фатальных ситуаций не будет.

По поводу "отрицательности t" я выразился неточно. Я имел в виду возможные проблемы с моменты сезонного сдвига времени. При работе через атрибут 12 (Час) эти переходы учтены.

Однако, если Вас устраивает найденный Вами вариант, работайте с ним.

Сообщения / Posts 17101 | Из / From: Россия  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
   

Quick Reply
Сообщение / Message:

HTML код не разрешен. / HTML is not enabled.
UBB код разрешен. / UBB Code is enabled.

Значки Graemlins / Instant Graemlins
   


Послать новую тему / Post New Topic  Послать ответ / Post A Reply Закрыть тему / Close Topic   Feature Topic   Переместить топик / Move Topic   Удалить топик / Delete Topic Следующая старая тема / next oldest topic   Следующая новая тема / next newest topic
 - Printer-friendly view of this topic
Перейти к / Hop To


Новости АСУ ТП / News | SCADA / HMI | Обучение / Trainings | Свяжитесь с нами / Contact Us



Powered by Infopop Corporation
UBB.classic™ 6.7.2