Стартовая страница › Форумы › Понять, как работает ПО › Использование формул › Округление до десятых
- В этой теме 11 ответов, 5 участников, последнее обновление 1 год назад сделано Mikhail.
-
АвторСообщения
-
14.11.2023 в 22:05 #30355mr_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 #30358a80808УчастникНапример 22.537 округлит до 22.6,
По правилам математики если последняя цифра 4 — округляется вниз, 5 — вверх. А вот у бухгалтеров не так — 5 — вниз… Постоянно с бухгалтерией конфликтовали на этот счет.15.11.2023 в 10:16 #30360manjey73УчастникТам несколько правил округления, еще зависит какая цифра стоит после той, на которой требуется округлить…
з.ы. у бухов по идее два вида округления, если должен бух, то вниз, если должны буху, то вверх 🙂 так что с ними всегда надо осторожно 🙂
15.11.2023 в 13:29 #30364MikhailМодераторИспользуйте формат канала. Округление с помощью формулы в данном случае излишне.
20.11.2023 в 20:05 #30417mr_smitУчастникВ 101 канал читаю значение bool. Его же назначил во входной канал для тумблера. Работает. Теперь надо чтобы при нажатии на тумблер произошла отправка значения 0 или 1 устройству. Для это использую другой канал (136). Значение должно отправиться инверсно. Т.е. если читаем в 101-м канале 1, то при нажатии на тумблер должно отправиться 0. Используется Rapid Scada 6.
Т.е. тумблер отображает состояние устройства (0-1), а при нажатии меняет его.
В выходной формуле для 136 канала написал:
!Val(101)
Но не фурычит.- Этот ответ был изменен 1 год назад от mr_smit.
20.11.2023 в 22:15 #30419manjey73УчастникПотому что канал Double. Сперва приведите его к bool
21.11.2023 в 14:39 #30426MikhailМодераторДля это использую другой канал
Другой канал является лишним, обычно достаточно одного канала. Компонент тумблер отправляет значение в зависимости от положения тумблера, поэтому формула тоже лишняя.
21.11.2023 в 14:45 #30429mr_smitУчастникЗапись идет по другому адресу. Не по тому откуда считывается значение.
22.11.2023 в 11:25 #30443MikhailМодераторБез формулы попробуйте, в любом случае.
23.11.2023 в 08:10 #30454mr_smitУчастникДа, получилось без формулы. Тумблер, по умолчанию, оказывается 0 или 1 отправляет в выходной канал. Просто указал входной и выходной канал. По входному он сам переводится в нужное положение. А по выходному отправляет 0 ил 1 в зависимости опять же от положения. Если был включен -> при нажатии отправит 0 для выключения.
23.11.2023 в 15:09 #30461 -
АвторСообщения
- Вы должны авторизироваться для ответа в этой теме.