Стартовая страница › Форумы › Понять, как работает ПО › Использование формул › Дата время (BCD)
- В этой теме 58 ответов, 4 участника, последнее обновление 1 год, 7 месяцев назад сделано
VylegzhaninD.
-
АвторСообщения
-
26.04.2022 в 22:35 #23288
VylegzhaninD
Участникбожественно!
А как часовой пояс задать?
Смещение UtC?26.04.2022 в 22:40 #23289a80808
УчастникФормула возвращает время в UTC, т.е. со смещением = 0. Смещение добавляет Web станция. Т.е. время будет правильно отображаться в зависимости от часового пояса сервера.
26.04.2022 в 22:52 #23290VylegzhaninD
Участникнаверное всё таки нет…
отклонение от времени сервера27.04.2022 в 00:49 #23295VylegzhaninD
УчастникУж не знаю на сколько это корректно, но установку часового пояса я решил так
DateTime UTCdata = new DateTime(yyyy, mm, dd, hh + 5, min, 0);
@a80808 нижайший поклон.
формула работает, спасибо!
27.04.2022 в 08:34 #23297a80808
УчастникДоброе утро! У вас +5, Урал? Дело в том, что формула «затачивалась» под версию 6, у нее несколько по другому отображаются даты чем в пятой. В «моем» коде на предыдущей странице «закоментируйте» последнюю строку и раскоментируйте предпоследнюю. Надо было в комментах написать, что для 6 а что для 5 🙂
27.04.2022 в 08:36 #23298a80808
УчастникПо поводу корректности — оно корректно, но «привязано» к определенному часовому поясу. Оно конечно можно поковыряться с методами DateTime…
27.04.2022 в 09:25 #23299a80808
Участник@mikhail, а есть способ как узнать версию SCADA для формул? Чтобы сразу делать инвариантно для пятой и шестой?
27.04.2022 в 09:40 #23300VylegzhaninD
УчастникПриветствую @a80808!
Да, Урал, Екатеринбург.
Версия RapidScada стоит 5.5.2.2Разве предпоследняя строка в коде закомментирована?
Если это не «//» то я тогда вообще не понял о чем речь и что тогда имеется ввиду закомментировать/раскомментировать27.04.2022 в 14:37 #23305Mikhail
Модератора есть способ как узнать версию SCADA для формул? Чтобы сразу делать инвариантно для пятой и шестой?
Если только самому завести константу в формулах. Но лучше не усложнять.
27.04.2022 в 16:23 #23311a80808
УчастникНемного не то. Я предполагал. что можно послать запрос к SCADA (формула) и получить номер версии. И тогда:
if (Version == 5)
{
…код;
}
elsif (Version == 6)
…другой код;
}
тогда уж проще писать версию в имени функции
BCD_GetDate_v6
BCD_GetDate_v527.04.2022 в 16:30 #23312a80808
Участник@vylegzhanind, похоже я немного запутался в своих версиях. 🙂
Ниже код с комментариями. Там я и лишние переменные убрал 🙂
public double BCD_GetDate(int bcd_dm, int bcd_yy, int bcd_hm)
{int dd;
int mm;
int yyyy;
int hh;
int min;
ushort x;
int d1;
int d2;
int y1;
int y2;x = (ushort) Val(bcd_yy);
//BCD_YEAR
d1 = (x >> 12) & 0x0F;
d2 = (x >> 8) & 0x0F;
y1 = d1 * 10 + d2;d1 = (x >> 4) & 0x0F;
d2 = x & 0x0F;
y2 = d1 * 10 + d2;yyyy = y1 *100 + y2;
x = (ushort)Val(bcd_dm);
//BCD_DAY
d1 = (x >> 12) & 0x0F;
d2 = (x >> 8) & 0x0F;
dd = d1 * 10 + d2;//BCD_MONTH
d1 = (x >> 4) & 0x0F;
d2 = x & 0x0F;
mm = d1 * 10 + d2;x = (ushort)Val(bcd_hm);
//BCD_HOUR
d1 = (x >> 12) & 0x0F;
d2 = (x >> 8) & 0x0F;
hh = (d1 * 10 + d2);//BCD_MIN
d1 = (x >> 4) & 0x0F;
d2 = x & 0x0F;
min = d1 * 10 + d2;DateTime UTCdata = new DateTime(yyyy, mm, dd, hh, min, 0);
//Rapid SCADA v.5.x
//return EncodeDate(UTCdata);//Rapid SCADA v.6.x
return EncodeDate(TimeZoneInfo.ConvertTimeToUtc(UTCdata));}
P.S. Урал, Екатеринбург.
Ext. ПАО «Энел Россия», Среднеуральск, Рефта…27.04.2022 в 16:34 #23313a80808
УчастникДа, еще.
Версия RapidScada стоит 5.5.2.2
Соберитесь с духом и переходите хотя бы на 5.8.4. Потом будет тяжелее…28.04.2022 в 13:47 #23321Mikhail
Модератор5.5.2.2 — это версия приложения Администратор, скорее всего.
Чтобы определить версию Rapid SCADA лучше посмотреть в журналах версию Сервера и по ней проверить версию всего пакета.30.04.2022 в 20:41 #23341VylegzhaninD
УчастникДа, посмотрел внимательней версия стоит — 5.8.3 (17.05.2021)
-
АвторСообщения
- Вы должны авторизироваться для ответа в этой теме.