Стартовая страница › Форумы › Понять, как работает ПО › Формулы › Округление до десятых
- В этой теме 11 ответов, 5 участников, последнее обновление 2 года, 7 месяцев назад сделано
Mikhail.
-
АвторСообщения
-
14.11.2023 в 22:05 #30355
mr_smit
УчастникRS6. Читаю температуру по modbus, тип real. Получаю, например, 22.437. Хочу округлить до 22.4. Во входной формуле написал Math.Round(Val(109),1). Но это срабатывает только один раз. Далее значение не меняется (хотя входное меняется). Как правильно округлять?
P.S. И ещё заметил что установка на дисплее отображает температуру, округленную до десятых, но как то хитро. В большую сторону что ли. Например 22.537 округлит до 22.6, хотя по правилам вроде как 22.5 должно быть.
15.11.2023 в 06:23 #30356Romiros
УчастникПодозреваю что ситуация в следующем. Видимо пытаетесь применить данную формулу во входном, а не расчетном канале. Val() — это значение канала после расчета. Оно у Вас рассчитывается первый раз и далее Вы к нему постоянно обращаетесь, игнорируя реальные входящие данные.
Поэтому во входном канале используйте Math.Round(Cnl,1)Есть разные способы округления. Почитайте про округления в c# и подберите нужное, если хотите повторить поведение как у установки.
15.11.2023 в 09:45 #30358
a80808УчастникНапример 22.537 округлит до 22.6,
По правилам математики если последняя цифра 4 — округляется вниз, 5 — вверх. А вот у бухгалтеров не так — 5 — вниз… Постоянно с бухгалтерией конфликтовали на этот счет.15.11.2023 в 10:16 #30360
manjey73УчастникТам несколько правил округления, еще зависит какая цифра стоит после той, на которой требуется округлить…
з.ы. у бухов по идее два вида округления, если должен бух, то вниз, если должны буху, то вверх 🙂 так что с ними всегда надо осторожно 🙂
15.11.2023 в 13:29 #30364
MikhailМодераторИспользуйте формат канала. Округление с помощью формулы в данном случае излишне.
20.11.2023 в 20:05 #30417mr_smit
УчастникВ 101 канал читаю значение bool. Его же назначил во входной канал для тумблера. Работает. Теперь надо чтобы при нажатии на тумблер произошла отправка значения 0 или 1 устройству. Для это использую другой канал (136). Значение должно отправиться инверсно. Т.е. если читаем в 101-м канале 1, то при нажатии на тумблер должно отправиться 0. Используется Rapid Scada 6.
Т.е. тумблер отображает состояние устройства (0-1), а при нажатии меняет его.
В выходной формуле для 136 канала написал:
!Val(101)
Но не фурычит.-
Ответ изменён 2 года, 7 месяцев назад пользователем
mr_smit.
20.11.2023 в 22:15 #30419
manjey73УчастникПотому что канал Double. Сперва приведите его к bool
21.11.2023 в 14:39 #30426
MikhailМодераторДля это использую другой канал
Другой канал является лишним, обычно достаточно одного канала. Компонент тумблер отправляет значение в зависимости от положения тумблера, поэтому формула тоже лишняя.
21.11.2023 в 14:45 #30429mr_smit
УчастникЗапись идет по другому адресу. Не по тому откуда считывается значение.
22.11.2023 в 11:25 #30443
MikhailМодераторБез формулы попробуйте, в любом случае.
23.11.2023 в 08:10 #30454mr_smit
УчастникДа, получилось без формулы. Тумблер, по умолчанию, оказывается 0 или 1 отправляет в выходной канал. Просто указал входной и выходной канал. По входному он сам переводится в нужное положение. А по выходному отправляет 0 ил 1 в зависимости опять же от положения. Если был включен -> при нажатии отправит 0 для выключения.
23.11.2023 в 15:09 #30461 -
Ответ изменён 2 года, 7 месяцев назад пользователем
-
АвторСообщения
- Для ответа в этой теме необходимо авторизоваться.