Формат значения с лидирующим нулем

Стартовая страница Форумы Понять, как работает ПО Формат значения с лидирующим нулем

Просмотр 9 сообщений - с 1 по 9 (из 9 всего)
  • Автор
    Записи
  • #8873
    litmi
    Участник

    Здравствуйте! Как отобразить значение величины в формате, например «08», а не «8». К примеру, симпатичнее (понятнее) выглядит запись 08:02:03 — час:минут:секунд, а не 1:2:3.

    #8874
    manjey73
    Участник

    Перевести в ASCII, как раз 8 символов с : получается и отображать как текст.

    #8878
    litmi
    Участник

    Не очень понятно. Каждое из значений (часы, минуты, секунды) хранится в 2-х байтных регистрах. Каждый регистр считывается отдельно (в принципе можно и разом считать). После считывания, в формате D отображаются на схеме в виде чисел. Если в Администраторе изменить формат отображения на Текст ASCII, то отображаются всякие неинтересные символы.

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

    Для времени есть соответствующий формат канала. Если Вы получате час, минуту и сек. по отдельности, то понадобится доп. вх. канал, типа дорасчётный ТИ с формулой примерно такой: EncodeDate(new DateTime(0, 0, 0, Val(1), Val(2), Val(3)))
    Val(N) — каналы, которые хранят часы, мин. и сек.

    #8892
    litmi
    Участник

    Пытался использовать приведенную формулу и другие похожие из описаний C# из интернета. Скада останавливается = не нравится ей синтаксис.

    #8893
    manjey73
    Участник

    Так в логах посмотреть что ей не нравится.
    Проверяйте все скобочки ли на месте, все ли каналы присутствуют.

    • Ответ изменён 8 лет, 4 месяца назад пользователем manjey73.
    #8912
    Mikhail
    Модератор

    Исходный код формул, который компилирует сервер, можно посмотреть в файле C:\SCADA\ScadaServer\Log\CalcEngine.cs
    Это бывает полезно для поиска причины ошибки.

    #8930
    litmi
    Участник

    Здравствуйте! В файле C:\SCADA\ScadaServer\Log\ScadaServerSvc.log было указано на необходимость преобразования типа входных данных. В окончательном варианте формула выглядит так: EncodeDate(new DateTime(1, 1, 1, (int)Val(N1), (int)Val(N2), (int)Val(N3))), где N1, N2, N3 номера каналов часов, минут, секунд. Если в формуле вместо «1» ставить «0», то не ругается, но и не отображает текущее значение. Придется день, месяц, год прятать на экране другими средствами.
    Обнаружил на англоязычном форуме любопытный ответ на вопрос темы «Leading zeros» :).
    Всем спасибо за содействие!

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

    Спасибо.
    Итак после корректировки:

    EncodeDate(new DateTime(1, 1, 1, (int)Val(N1), (int)Val(N2), (int)Val(N3)))
    

    любопытный ответ на вопрос темы «Leading zeros»

    Кидайте ссылку, может кому-нибудь пригодится.

Просмотр 9 сообщений - с 1 по 9 (из 9 всего)
  • Для ответа в этой теме необходимо авторизоваться.