Стартовая страница › Форумы › Ошибки в работе › Непонятки с расчётной частью
- В этой теме 5 ответов, 2 участника, последнее обновление 4 года назад сделано
Mikhail.
-
АвторСообщения
-
25.05.2022 в 14:21 #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
Отдельно дорасчётный канал решил не создавать.При передаче конфигурации ошибок не возникает. Но через некоторое время работы в таблице показаний начинают отображаться прочерки. Не пойму, в чём причина.
25.05.2022 в 15:38 #23713
MikhailМодераторДобрый день!
Преобразование срок излишне и содержит ошибку. Для преобразования нужно использовать умножение или деление.
25.05.2022 в 16:27 #23717ppwkh
Участник25.05.2022 в 17:11 #23721
MikhailМодераторОшибка в том, что разделитель числа — точка, а не запятая. VS использует настройки языка Windows.
И конечно работать со строками вместо банального деления — плохая практика.25.05.2022 в 21:04 #23723ppwkh
УчастникПолностью согласен. А то я так, в качестве эксперимента проводил.
Привёл формулу к виду: Cnl+Val(700)/1000000; Stat()*Stat(700)==0 ? 0 : 1
Но и после этого проблема не исчезла, т.е. поработает несколько опросов, а потом опять показываются прочерки. Но, посмотрев на архивы увидел, что перед появлением прочерков записывается в качестве последнего значения выражение ‘Val(700)/1000000’, т.е. доли кубов. Решил убрать из формулы правую часть: Stat()*Stat(700)==0 ? 0 : 1
Вроде пока работает, но мне непонятно, разве здесь выражение со статусами каналов лишнее?26.05.2022 в 13:13 #23724
MikhailМодераторДа, выражение со статусами здесь лишнее, потому что канал не является дорасчётным. Его статус приходит от Коммуникатора.
-
АвторСообщения
- Для ответа в этой теме необходимо авторизоваться.