Страница 1 из 5

Округление температуры из Modbus по TCP

Добавлено: Вт ноя 10, 2015 4:37 pm
AVB
Добрый день, Уважаемые форумчане!

Прошу помощи в настройки системы!.
Не могу понять почему не округляются показания температуры с 11 знаками после запятой, вот показания:
СпойлерПоказать
Изображение
Как мы видим, данные с контроллера поступают!

Далее созданный объект, его метод.
СпойлерПоказать
Изображение
СпойлерПоказать
Изображение
И собственно сам метод, в котором есть строки для округления данных строка 19 и 20
СпойлерПоказать
Изображение
Прошу помощи в решении проблемы, что Я не так сделал.
Спасибо!

Re: Помогите! Округление температуры из Modbus по TCP

Добавлено: Чт ноя 12, 2015 3:34 pm
sergejey
Причина в том, метод не вызывается вовсе. Значение попадает напрямую "как есть". Чтобы при этом вызывался метод, нужно зайти в настройку свойства temp класса tempSensor и прописать название метода tempChanged в поле вызова метода при изменении значения свойства. Но и этого мало. Надо переделать сам код метода, чтобы сохранять округлённое значение -- лучше для этого использовать отдельное свойство, предположим мы его добавили в класс tempSensor и назвали tempRounded. Тогда в коде метода надо произвести следующе изменения:
1. Убрать строчки
if (!isset($params['t'])) {
return;
}
2. Заменить
$t=round($params['t'],2);
на
$t=round($old_temp,2);

3. заменить
$this->setProperty('temp',$t);
на
$this->setProperty('tempRounded',$t);

после чего в новом свойстве tempRounded будет округлённое значение

Re: Помогите! Округление температуры из Modbus по TCP

Добавлено: Чт ноя 12, 2015 7:49 pm
AVB
Сергей, еще раз благодарю за оперативный ответ.

Сделал все как вы написали, данные записываются в tempRouded c округлением.
Вопрос Закрыт!

Огромное спасибо!
С Уважением, Александр!

Re: Помогите! Округление температуры из Modbus по TCP

Добавлено: Ср фев 07, 2018 10:31 pm
dimabolt
Подскажите пожалуйста, сделал все как написано, но округляются только температуры имеющие вид 23.0
А температуры 22.9 записываются в tempRounded как есть без округления.

Re: Помогите! Округление температуры из Modbus по TCP

Добавлено: Чт фев 08, 2018 6:37 am
nick7zmail
У вас в коде round($чтототам, 2); 2 - как раз округление до 2 десятичных знаков. Надо целые - ставьте 0.

Re: Помогите! Округление температуры из Modbus по TCP

Добавлено: Чт фев 08, 2018 5:12 pm
dimabolt
nick7zmail писал(а):У вас в коде round($чтототам, 2); 2 - как раз округление до 2 десятичных знаков. Надо целые - ставьте 0.
Спасибо за пояснение, помогло.

Re: Помогите! Округление температуры из Modbus по TCP

Добавлено: Пт сен 21, 2018 8:25 pm
yden
Добрый всем.
С разрешения ТС вклинюсь.
Такая же проблема как и у ТС.
Код метода объекта:

Код: Выделить всё

// Получаем данные от сенсора
$value = $params['temp'];
 
// Выполняем округление с точностью до одного знака
$value = round($value, 0);
 
// Сохраняем обработанное значение в свойство объекта
$this->setProperty('tempRounded', $value);
В tempRounded всегда 0.
Как округлить данные?

благодарю

Re: Помогите! Округление температуры из Modbus по TCP

Добавлено: Пт сен 21, 2018 8:39 pm
Chainik
Вообще то округление до одно знака должно выполняться кодом:

Код: Выделить всё

// Выполняем округление с точностью до одного знака
$value = round($value, 1);

Re: Помогите! Округление температуры из Modbus по TCP

Добавлено: Пт сен 21, 2018 8:44 pm
yden
Chainik писал(а):
Пт сен 21, 2018 8:39 pm
Вообще то округление до одно знака должно выполняться кодом:

Код: Выделить всё

// Выполняем округление с точностью до одного знака
$value = round($value, 1);
Это от примера осталось. мне целое и нужно.
Но не суть, все равно 0 пишет.

Re: Помогите! Округление температуры из Modbus по TCP

Добавлено: Пт сен 21, 2018 9:27 pm
fandaymon
yden писал(а):
Пт сен 21, 2018 8:44 pm
Chainik писал(а):
Пт сен 21, 2018 8:39 pm
Вообще то округление до одно знака должно выполняться кодом:

Код: Выделить всё

// Выполняем округление с точностью до одного знака
$value = round($value, 1);
Это от примера осталось. мне целое и нужно.
Но не суть, все равно 0 пишет.

Если этот метод вызывается при изменении, то там в параметрах
$params['PROPERTY']
$params['NEW_VALUE']
$params['OLD_VALUE']
$params['SOURCE']
никакого $params['temp'] нету, поэтому и получаем 0...