| Предыдущая тема :: Следующая тема |
| Автор |
Сообщение |
maxim Эксперт


Зарегистрирован: Feb 16, 2007 Сообщения: 123 Рейтинг: +7/-0 Откуда: Енакиево
|
Добавлено: Пт 23 Июл, 2010 7:00:03 Заголовок сообщения: Использование UTC в контроллерах CL |
|
|
| Здравствуйте коллеги. Решился спросить. Задача такая: нужно при наступлении определенного события запоминать текущее время. Я пока решил использовать атрибут CurrentValue объекта WALLCLOCKTIME. Однако столкнулся с проблемой: текущее время ложится в переменную с типом LINT и не скопировать не сконвертировать в другой тип я не могу, а мне нужно чуть отредактировать значение. Может кто уже сталкивался с такой темой. Спасибо. |
|
| Вернуться к началу |
|
 |
Locky Частый гость


Зарегистрирован: Oct 13, 2009 Сообщения: 49 Рейтинг: +5/-1 Откуда: Рязань
|
Добавлено: Пт 23 Июл, 2010 9:29:43 Заголовок сообщения: |
|
|
| Попробуйте использовать атрибут DateTime (UTC) или LocalDateTime (локальное). В качестве приемника данных команды GSV используйте 0-й элемент массива типа DINT[7]. Результат получается очень наглядный. |
|
| Вернуться к началу |
|
 |
maxim Эксперт


Зарегистрирован: Feb 16, 2007 Сообщения: 123 Рейтинг: +7/-0 Откуда: Енакиево
|
Добавлено: Пт 23 Июл, 2010 10:28:29 Заголовок сообщения: |
|
|
| Locky писал(а): | | Попробуйте использовать атрибут DateTime (UTC) или LocalDateTime (локальное). В качестве приемника данных команды GSV используйте 0-й элемент массива типа DINT[7]. Результат получается очень наглядный. | Я это знаю, но мне это не подходит - мне нужно именно время unix time. CurrentValue - это как раз то, что мне нужно, но существует проблема, которую я описал выше... |
|
| Вернуться к началу |
|
 |
dv_ Эксперт


Зарегистрирован: Sep 14, 2006 Сообщения: 776 Рейтинг: +41/-1 Откуда: Донецк
|
|
| Вернуться к началу |
|
 |
maxim Эксперт


Зарегистрирован: Feb 16, 2007 Сообщения: 123 Рейтинг: +7/-0 Откуда: Енакиево
|
Добавлено: Пн 26 Июл, 2010 6:26:21 Заголовок сообщения: Re: Использование UTC в контроллерах CL |
|
|
Благодарю за ссылку. |
|
| Вернуться к началу |
|
 |
maxim Эксперт


Зарегистрирован: Feb 16, 2007 Сообщения: 123 Рейтинг: +7/-0 Откуда: Енакиево
|
Добавлено: Ср 19 Окт, 2011 11:43:59 Заголовок сообщения: |
|
|
Долго не давала покоя мне эта идея - получить в контроллере нормальное UT в 32 - х разрядном виде. Мучился с LINT разлаживал на 2 DINT, умножал, делил, нашел даже в примерах как с LINT получают UT в DINT, но все как то не нравилось. Решил написать свой код, на основе класса WALLCLOCKTIME и атрибута DateTime получаю на выходе dUnixTime тип DINT :
| Код: | gsv(WALLCLOCKTIME,,DateTime,diTemp[0]);
year:= diTemp[0] - 1970;
vysokosny:= year/4;
CASE diTemp[1] OF
1: DayOfMounth:= 0;
2: DayOfMounth:= 31;
3: if (year MOD 4) > 0 then
DayOfMounth:= 59;
else DayOfMounth:= 60;
end_if;
4: if (year MOD 4) > 0 then
DayOfMounth:= 90;
else DayOfMounth:= 91;
end_if;
5: if (year MOD 4) > 0 then
DayOfMounth:= 120;
else DayOfMounth:= 121;
end_if;
6: if (year MOD 4) > 0 then
DayOfMounth:= 151;
else DayOfMounth:= 152;
end_if;
7: if (year MOD 4) > 0 then
DayOfMounth:= 181;
else DayOfMounth:= 182;
end_if;
8: if (year MOD 4) > 0 then
DayOfMounth:= 212;
else DayOfMounth:= 213;
end_if;
9: if (year MOD 4) > 0 then
DayOfMounth:= 243;
else DayOfMounth:= 244;
end_if;
10: if (year MOD 4) > 0 then
DayOfMounth:= 273;
else DayOfMounth:= 274;
end_if;
11: if (year MOD 4) > 0 then
DayOfMounth:= 304;
else DayOfMounth:= 305;
end_if;
12: if (year MOD 4) > 0 then
DayOfMounth:= 334;
else DayOfMounth:= 335;
end_if;
END_CASE;
dUnixTime:= year*365*86400+vysokosny*86400+DayOfMounth*86400+(diTemp[2]-1)*86400+diTemp[3]*3600+diTemp[4]*60+diTemp[5]; |
как мне кажется все наглядно и просто. Может тоже кому пригодиться -пользуйтесь  |
|
| Вернуться к началу |
|
 |
|