Непонятки с расчётной частью

Стартовая страница Форумы Ошибки в работе Непонятки с расчётной частью

  • В этой теме 5 ответов, 2 участника, последнее обновление 4 года назад сделано Mikhail.
Просмотр 6 сообщений - с 1 по 6 (из 6 всего)
  • Автор
    Сообщения
  • #23712
    ppwkh
    Участник

    Здравствуйте.
    SCADA 5.8.4
    Имеется расходомер, из которого извлекается в формате «ulong» накопленные объёмы в м3 и см3 (миллилитры). Миллилитры выдаются в диапазоне от 0 до 999999. Стоит задача их сложить.
    Создал функцию:
    public double Drob_6(double ml)
    {
    uint wrd = Convert.ToUInt32(ml);
    string sss = string.Format(«0,{0:d6}», wrd);
    return Convert.ToDouble(sss);
    }
    Данная функция преобразует из целочисленного значения миллилитров в доли м3, при этом добавляя вначале после точки недостающие нули. Получается вещественное число вида 0,XXXXXX.
    Входные каналы «Телеизмерение»:
    № 700 — Накопленный объём, см3
    № 702 — Накопленный объём, м3 с формулой:
    Cnl+ Drob_6(Val(700)); Stat()*Stat(700)==0 ? 0 : 1
    Отдельно дорасчётный канал решил не создавать.

    При передаче конфигурации ошибок не возникает. Но через некоторое время работы в таблице показаний начинают отображаться прочерки. Не пойму, в чём причина.

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

    Добрый день!

    Преобразование срок излишне и содержит ошибку. Для преобразования нужно использовать умножение или деление.

    #23717
    ppwkh
    Участник

    «Преобразование срок излишне и содержит ошибку» — но в среде Visual Studio работает безошибочно.

    • Ответ изменён 4 года назад пользователем ppwkh.
    • Ответ изменён 4 года назад пользователем ppwkh.
    #23721
    Mikhail
    Модератор

    Ошибка в том, что разделитель числа — точка, а не запятая. VS использует настройки языка Windows.
    И конечно работать со строками вместо банального деления — плохая практика.

    #23723
    ppwkh
    Участник

    Полностью согласен. А то я так, в качестве эксперимента проводил.

    Привёл формулу к виду: Cnl+Val(700)/1000000; Stat()*Stat(700)==0 ? 0 : 1
    Но и после этого проблема не исчезла, т.е. поработает несколько опросов, а потом опять показываются прочерки. Но, посмотрев на архивы увидел, что перед появлением прочерков записывается в качестве последнего значения выражение ‘Val(700)/1000000’, т.е. доли кубов. Решил убрать из формулы правую часть: Stat()*Stat(700)==0 ? 0 : 1
    Вроде пока работает, но мне непонятно, разве здесь выражение со статусами каналов лишнее?

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

    Да, выражение со статусами здесь лишнее, потому что канал не является дорасчётным. Его статус приходит от Коммуникатора.

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