Кривые дата и время

Просмотр 15 сообщений - с 1 по 15 (из 22 всего)
  • Автор
    Сообщения
  • #7240
    kustar
    Участник

    Добрый день, коллеги!
    Получаю по MODBUS’у дату и время в следующем виде:
    Date UInt16 102, где 1 — день, 02 — месяц
    Time UInt16 908, где 9 — час, 08 — минута.
    Это данные из архива замеров и мне нужно отобразить их на схеме.
    С результатами собственно замеров проблем нет — там UInt16*10. Результат деления на 10 красиво смотрится в динамической надписи на схеме.
    Дату все привыкли видеть как ДД.ММ, а время — как ЧЧ:ММ
    Если я правильно понимаю, ни DateTime, ни String в динамическую надпись не вывести?
    Правильно ли я понимаю, что это счастье придется конвертировать в строки, вытаскивать раздельно день, месяц, час и минуту и каждое из этих значений засовывать назад в UInt16? Или в Double?
    А как при этом организовать лидирующие нули?

    #7241
    kustar
    Участник

    И еще вопрос. 2017 на схеме в динамической надписи отображается как 2 017. С разделением разрядов.
    Формат вывода настроить можно?

    #7243
    Mikhail
    Модератор

    Добрый день!
    Вам нужно использовать функцию EncodeDate, которая преобразовывает DateTime в специальный double. Предварительно потребуется преобразовать полученные от устройства значения в DateTime. А затем для входного канала выбрать формат Дата и время.

    #7248
    kustar
    Участник

    Ну да, с исходными данными придется поколдовать…
    У меня сервер версии 5.0, там для входных каналов формата «Дата и Время» нет.
    Есть в новой версии?

    #7250
    Mikhail
    Модератор

    Да, обновите с сайта.
    Советую создать отдельную формулу в таблице формул. Для начала получите год, месяц и т.д. в виде int, а потом new DateTime() с этими значениями.

    #7669
    kustar
    Участник

    Добрый день!
    Получил год, месяц, день, час и минуту в int. Как это все засунуть в EncodeDate?
    И еще вопрос. У админа теперь есть форматы «Текст ASCII» и «Текст UNICODE». Но string все равно не выводится.

    #7670
    kustar
    Участник

    Часы в 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) — ругается про неявное преобразование типа.

    #7687
    Mikhail
    Модератор

    Добрый день!

    Получил год, месяц, день, час и минуту в int. Как это все засунуть в EncodeDate?

    EncodeDate(new DateTime(year, month, day, hour, min, sec))

    У админа теперь есть форматы «Текст ASCII» и «Текст UNICODE». Но string все равно не выводится.

    Нужно сначала применить EncodeAscii(«Hello») или EncodeUnicode(«Привет»)

    #7688
    Mikhail
    Модератор

    Только кавычки нормальные в формулах

    #7749
    kustar
    Участник

    Да, кавычки такие — »
    Не могу вывести текст с помощью EncodeAscii и EncodeUnicode. Выводит 0, независимо от формата канала.

    Начнем с азов.
    Сделал функцию:
    double TxtUn()
    {
    double a = 0x0420;
    return a;
    }
    Сделал дорасчетный входной канал, ставлю птицу «Исп. формулу», в ячейке «Формула» пишу TxtUn(). Ячейка «Формат» пуста. Вывожу канал на схему. Вижу десятичное значение 1056. Это и есть 0х0420. Все правильно.
    Выбор «Текст Unicode» в ячейке «Формат» не приводит к появлению чара «Ф», все равно 1056.
    С «Текстом Ascii» та же история. Если переменной присвоить 0х42, то на схеме вижу десятичное 66, но никак не чар «B».

    Функции эти экспортировал из крайней версии RapidScada. В CalcEngine.cs они есть, сервер запускается без ошибок.

    #7750
    kustar
    Участник

    Нормальные кавычки форум не поддерживает 🙂

    #7751
    kustar
    Участник

    Канал с формулой EncodeDate(new DateTime(0x7e1, 1, 1, 1, 1, 1)) должен, по идее, выдать «2017-01-01 01:01:01»
    Независимо от выбора формата выдает десятичное 42736.

    В .dat файлах нужные формулы и форматы присутствуют.

    #7755
    Mikhail
    Модератор

    Уточните, какая у Вас версия приложения Вебстанция? Форматирование выполняется веб-приложением.

    #7758
    kustar
    Участник

    ВебСтанция 5.0.2.1
    Видимо, надо обновить?

    #7760
    kustar
    Участник

    Поставил 5.0.3.0 из дистрибутива 5.4.1
    Без изменений.
    Десятичные значения есть, юникодов и дататаймов нет.

Просмотр 15 сообщений - с 1 по 15 (из 22 всего)
  • Вы должны авторизироваться для ответа в этой теме.