Стартовая страница › Форумы › Понять, как работает ПО › Использование формул › Кривые дата и время
- В этой теме 21 ответ, 2 участника, последнее обновление 6 лет, 4 месяца назад сделано Mikhail.
-
АвторСообщения
-
10.09.2017 в 20:32 #7240kustarУчастник
Добрый день, коллеги!
Получаю по MODBUS’у дату и время в следующем виде:
Date UInt16 102, где 1 — день, 02 — месяц
Time UInt16 908, где 9 — час, 08 — минута.
Это данные из архива замеров и мне нужно отобразить их на схеме.
С результатами собственно замеров проблем нет — там UInt16*10. Результат деления на 10 красиво смотрится в динамической надписи на схеме.
Дату все привыкли видеть как ДД.ММ, а время — как ЧЧ:ММ
Если я правильно понимаю, ни DateTime, ни String в динамическую надпись не вывести?
Правильно ли я понимаю, что это счастье придется конвертировать в строки, вытаскивать раздельно день, месяц, час и минуту и каждое из этих значений засовывать назад в UInt16? Или в Double?
А как при этом организовать лидирующие нули?10.09.2017 в 20:38 #7241kustarУчастникИ еще вопрос. 2017 на схеме в динамической надписи отображается как 2 017. С разделением разрядов.
Формат вывода настроить можно?11.09.2017 в 11:05 #7243MikhailМодераторДобрый день!
Вам нужно использовать функцию EncodeDate, которая преобразовывает DateTime в специальный double. Предварительно потребуется преобразовать полученные от устройства значения в DateTime. А затем для входного канала выбрать формат Дата и время.11.09.2017 в 14:29 #7248kustarУчастникНу да, с исходными данными придется поколдовать…
У меня сервер версии 5.0, там для входных каналов формата «Дата и Время» нет.
Есть в новой версии?11.09.2017 в 19:07 #7250MikhailМодераторДа, обновите с сайта.
Советую создать отдельную формулу в таблице формул. Для начала получите год, месяц и т.д. в виде int, а потом new DateTime() с этими значениями.30.10.2017 в 11:06 #7669kustarУчастникДобрый день!
Получил год, месяц, день, час и минуту в int. Как это все засунуть в EncodeDate?
И еще вопрос. У админа теперь есть форматы «Текст ASCII» и «Текст UNICODE». Но string все равно не выводится.30.10.2017 в 11:10 #7670kustarУчастникЧасы в int делаю формулой:
public double AGZUHourToInt(double val)
{
string hh;
int hh_i;
string s1 = val.ToString();
int len = s1.Length;
if(len == 3)
{
s1 = «0» + s1;
}
hh = s1.Remove(2, 2);
hh_i = Convert.ToInt32(hh, 10);
return hh_i;
//return hh;
}Если попытаться вернуть hh (string) — ругается про неявное преобразование типа.
30.10.2017 в 16:31 #7687MikhailМодераторДобрый день!
Получил год, месяц, день, час и минуту в int. Как это все засунуть в EncodeDate?
EncodeDate(new DateTime(year, month, day, hour, min, sec))
У админа теперь есть форматы «Текст ASCII» и «Текст UNICODE». Но string все равно не выводится.
Нужно сначала применить EncodeAscii(«Hello») или EncodeUnicode(«Привет»)
30.10.2017 в 16:31 #7688MikhailМодераторТолько кавычки нормальные в формулах
05.11.2017 в 11:48 #7749kustarУчастникДа, кавычки такие — »
Не могу вывести текст с помощью EncodeAscii и EncodeUnicode. Выводит 0, независимо от формата канала.Начнем с азов.
Сделал функцию:
double TxtUn()
{
double a = 0x0420;
return a;
}
Сделал дорасчетный входной канал, ставлю птицу «Исп. формулу», в ячейке «Формула» пишу TxtUn(). Ячейка «Формат» пуста. Вывожу канал на схему. Вижу десятичное значение 1056. Это и есть 0х0420. Все правильно.
Выбор «Текст Unicode» в ячейке «Формат» не приводит к появлению чара «Ф», все равно 1056.
С «Текстом Ascii» та же история. Если переменной присвоить 0х42, то на схеме вижу десятичное 66, но никак не чар «B».Функции эти экспортировал из крайней версии RapidScada. В CalcEngine.cs они есть, сервер запускается без ошибок.
05.11.2017 в 11:50 #7750kustarУчастникНормальные кавычки форум не поддерживает 🙂
05.11.2017 в 12:38 #7751kustarУчастникКанал с формулой EncodeDate(new DateTime(0x7e1, 1, 1, 1, 1, 1)) должен, по идее, выдать «2017-01-01 01:01:01»
Независимо от выбора формата выдает десятичное 42736.В .dat файлах нужные формулы и форматы присутствуют.
06.11.2017 в 11:59 #7755MikhailМодераторУточните, какая у Вас версия приложения Вебстанция? Форматирование выполняется веб-приложением.
06.11.2017 в 13:03 #7758kustarУчастникВебСтанция 5.0.2.1
Видимо, надо обновить?06.11.2017 в 19:17 #7760kustarУчастникПоставил 5.0.3.0 из дистрибутива 5.4.1
Без изменений.
Десятичные значения есть, юникодов и дататаймов нет. -
АвторСообщения
- Вы должны авторизироваться для ответа в этой теме.