This is topic печать времени in forum Документирование в TRACE MODE / Data Documentation in Trace Mode at Форум TRACE MODE: техническая поддержка.


To visit this topic, use this URL:
http://forum.adastra.ru/ultimatebb.php/ubb/get_topic/f/9/t/000047.html

Posted by Погодаева Г. (Участник № / Member № 192) on :
 
Помогите, пожалуйста,решить мою проблему.
Раз в сутки проверяется прибор на нуль и в канал Пр0 я записываю время его проверки (вещ. число), в Win2000 это время в сутках. А сервер док-ния работает с временем в сек. Мне в отчет надо напечатать или время проверки, или 00:00:00, если проверки не было. Меня еще запутывает время по Гринвичу (у нас разница в 8 час.).Какое выражение мне надо составить в отчете или что программно еще мне надо сделать?
Заранее благодарна.
 
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
 
Каким образом Вы заносите это время в канал Пр0?
 
Posted by Погодаева Г. (Участник № / Member № 192) on :
 
Для времени 00:00:00 я посылала в Пр0 - 0.00 , но в отчете печаталось 8:00:00. А для времени проверки, я вычисляла веществ. число = время проверки (переведенное в секунды) - 28800 (разница часовых поясов в секундах). В отчете это время печаталось как мне надо. Вывод на печать шел по такому формату:
TIMESTR("%X",GETVAL(CHAN("Пр0",0,"medal"))).
Я пробовала менять функции (использовать DTIME), но ничего хорошего не получилось: или идет ошибка, или не то время печатается.
 
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
 
Рекомендую использовать более простой метод. Суть его в том, чтобы использовать для хранения времени проверки прибора атрибут время изменения канала. Допустим, что у Вас в проекте есть для этого канал ChannelTime. Тогда - при проведении проверки в этот канал Вам необходимо послать любое значение (значение роли не играет - главное, чтобы значение канала поменялось) для того, чтобы его атрибут Время Изменения зафиксировал текущее системное время. Это и будет время, которое мы будем использользовать в шаблоне документа. В шаблоне вывести данное время можно следующим выражением:
TIMESTR( "%#x %X", GETVAL( CHAN( "ChannelTime", "TS", "NODE1") ) )
 
Posted by Погодаева Г. (Участник № / Member № 192) on :
 
Я согласна, что и так можно напечатать нужное мне время. Но в 7 час. утра каждых суток я должна обнулить это время и как по вашему выражению напечатается 00:00:00 ? Что я должна подать на вход этого канала?
 
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
 
В таком случае Вам необходимо делать поправку на часовой пояс. Вы верно получаете значение 8:00:00 при нулевом значении в канале. Дело в том, что внутри - система работает с форматом времени по Гринвичу, а как Вы уже уточнили - у Вас разница по Гринвичу +8 часов. Поэтому в Вашем локальном времени значение 00:00:00 в канале должно учитывать эту поправку. Для времени проверки Вы эту поправку вводили (- 28800, разница часовых поясов в секундах), а вот при обнулении - не учитывали и получали как следствие время на 8 часов большее, чем необходимо!
Кроме того - не рекомендуется использовать функции типа DTIME() или TIME() от значения Вашего канала, ведь Вы и так уже формируете время в том формате, в котором они его сами возвращают, иначе данные функции будут возвращать всегда текущее время системы!
 
Posted by Погодаева Г. (Участник № / Member № 192) on :
 
Извините, но для меня это уже пройденный этап. Дело в том, что функция TIMESTR() выдает ошибку, если в канале отрицательное число. Но я нашла выход -применила функцию IF(). При равенстве 0 значения канала я выдаю на печать пробелы:
IF( GETVAL( CHAN( "Пр0_ВСГ", 0, "Medal")), '!=', 0, TIMESTR( "%X", GETVAL( CHAN( "Пр0_ВСГ", 0, "Medal")))," " )
Но теперь у меня пропали границы ячеек, где печатаются пробелы. Я не пойму, почему они пропадают. При просмотре пробного отчета- все нормально. Честно говоря, я уже достаточно намучилась с этими границами. Везде описано, как должно быть, и как надо делать, а непонятные ситуации нигде не описаны.
 
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
 
Естественно система не понимает отрицательное значение! Ведь нижний предел - это ноль часов 1970 года. Как можно сместить время меньше этой границы? Это начало осчета - меньше быть не может и Trace Mode тут не при чем, так уж устроена вся вычислительная техника.
Если Вы хотите обнулять время по 00:00:00 - то будте добры учитывать и остальные составляющие формата времени - это День, Месяц и Год! Вы забыли про них? Ведь 00 часов, 00 минут 00 секунд бывают в разные дни разных месяцев и разных лет! Поэтому при формировании нулевого времени про это нельзя забывать! [Улыбка / Smile]
 


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



Powered by Infopop Corporation
UBB.classic™ 6.7.2