Округление температуры из Modbus по TCP
Модератор: immortal
- Lerych
- Сообщения: 191
- Зарегистрирован: Чт дек 14, 2017 8:46 pm
- Откуда: Московская область, Серпухов
- Благодарил (а): 79 раз
- Поблагодарили: 24 раза
Re: Округление температуры из Modbus по TCP
Господа!
А если данные приходят в виде, например, частота - 5001; напряжение - 2201
Как выделить в первом случае 50.01, во втором - 220.1?
Описанный выше вариант будет работать?
Спасибо!
А если данные приходят в виде, например, частота - 5001; напряжение - 2201
Как выделить в первом случае 50.01, во втором - 220.1?
Описанный выше вариант будет работать?
Спасибо!
- xor
- Сообщения: 2039
- Зарегистрирован: Сб ноя 22, 2014 8:45 pm
- Благодарил (а): 286 раз
- Поблагодарили: 629 раз
Re: Округление температуры из Modbus по TCP
Конечно, хоть в квадрат возводи. /100, /10 в строке, где округлениеLerych писал(а):Господа!
А если данные приходят в виде, например, частота - 5001; напряжение - 2201
Как выделить в первом случае 50.01, во втором - 220.1?
Описанный выше вариант будет работать?
Спасибо!
Отправлено с моего Redmi 4X через Tapatalk
- Рейтинг: 1.16%
win10 connect https://connect.smartliving.ru/profile/303
-
- Сообщения: 1462
- Зарегистрирован: Вс янв 10, 2016 11:05 am
- Благодарил (а): 260 раз
- Поблагодарили: 454 раза
Re: Округление температуры из Modbus по TCP
Строковые функции не подойдут?
Код: Выделить всё
$x="5001";
$y=substr($x,0,2);
$z=substr($x,-2);
echo($y.".".$z);
Код: Выделить всё
$x="2201";
$y=substr($x,0,3);
$z=substr($x,-1);
echo($y.".".$z);
- xor
- Сообщения: 2039
- Зарегистрирован: Сб ноя 22, 2014 8:45 pm
- Благодарил (а): 286 раз
- Поблагодарили: 629 раз
Re: Округление температуры из Modbus по TCP
Изврат, извините (Chainik писал(а):Строковые функции не подойдут?иКод: Выделить всё
$x="5001"; $y=substr($x,0,2); $z=substr($x,-2); echo($y.".".$z);
Код: Выделить всё
$x="2201"; $y=substr($x,0,3); $z=substr($x,-1); echo($y.".".$z);
Отправлено с моего Redmi 4X через Tapatalk
win10 connect https://connect.smartliving.ru/profile/303
-
- Сообщения: 1462
- Зарегистрирован: Вс янв 10, 2016 11:05 am
- Благодарил (а): 260 раз
- Поблагодарили: 454 раза
Re: Округление температуры из Modbus по TCP
Согласен, ступил (хотя и работает).
Ну не ищет наш человек легких путей... Природа у нас такая...
- xor
- Сообщения: 2039
- Зарегистрирован: Сб ноя 22, 2014 8:45 pm
- Благодарил (а): 286 раз
- Поблагодарили: 629 раз
Re: Округление температуры из Modbus по TCP
))
работает, пока напряжение больше 99В,
частота, да, так не меняется, если только не упадет до 0
win10 connect https://connect.smartliving.ru/profile/303
- Lerych
- Сообщения: 191
- Зарегистрирован: Чт дек 14, 2017 8:46 pm
- Откуда: Московская область, Серпухов
- Благодарил (а): 79 раз
- Поблагодарили: 24 раза
Re: Округление температуры из Modbus по TCP
Спасибо за подсказки.
Использую этот код для получения данных от ModBUS устройств.
Но всё-таки иногда по ModBUS приходит пустая строка регистра, соответственно, получаем 0 после деления и т.д.
Вопрос: как отбраковать пустую строку, чтобы ноль в значение не писать?
Можно использовать что-то типа:
Использую этот код для получения данных от ModBUS устройств.
Код: Выделить всё
// Получаем данные от сенсора
$value = $params['NEW_VALUE']/100;
// Выполняем округление с точностью до одного знака
$value = round($value, 1);
// Сохраняем обработанное значение в свойство объекта
$this->setProperty('value', $value);
Вопрос: как отбраковать пустую строку, чтобы ноль в значение не писать?
Можно использовать что-то типа:
Код: Выделить всё
// Фильтруем данные
if ($value > 60 || $value < -60) return;
- xor
- Сообщения: 2039
- Зарегистрирован: Сб ноя 22, 2014 8:45 pm
- Благодарил (а): 286 раз
- Поблагодарили: 629 раз
Re: Округление температуры из Modbus по TCP
Конечно, но обычно на правильность данные проверяют в самом начале, чтобы не тратить время на деление, округление и тдLerych писал(а):Спасибо за подсказки.
Использую этот код для получения данных от ModBUS устройств.Но всё-таки иногда по ModBUS приходит пустая строка регистра, соответственно, получаем 0 после деления и т.д.Код: Выделить всё
// Получаем данные от сенсора $value = $params['NEW_VALUE']/100; // Выполняем округление с точностью до одного знака $value = round($value, 1); // Сохраняем обработанное значение в свойство объекта $this->setProperty('value', $value);
Вопрос: как отбраковать пустую строку, чтобы ноль в значение не писать?
Можно использовать что-то типа:Код: Выделить всё
// Фильтруем данные if ($value > 60 || $value < -60) return;
Отправлено с моего Redmi 4X через Tapatalk
- Рейтинг: 1.16%
win10 connect https://connect.smartliving.ru/profile/303
- Lerych
- Сообщения: 191
- Зарегистрирован: Чт дек 14, 2017 8:46 pm
- Откуда: Московская область, Серпухов
- Благодарил (а): 79 раз
- Поблагодарили: 24 раза
Re: Округление температуры из Modbus по TCP
А какой оператор сравнения правильнее использовать?
1. if ($value = '0') return;
2. if ($value == 0) return;
3. if ($value <= 0) return;
4. if ($value = null) return;
5. ещё что-то
1. if ($value = '0') return;
2. if ($value == 0) return;
3. if ($value <= 0) return;
4. if ($value = null) return;
5. ещё что-то
- xor
- Сообщения: 2039
- Зарегистрирован: Сб ноя 22, 2014 8:45 pm
- Благодарил (а): 286 раз
- Поблагодарили: 629 раз
Re: Округление температуры из Modbus по TCP
Код: Выделить всё
if(!isset($params['NEW_VALUE'])||( $params['NEW_VALUE']<=0)) return; //не установлено (нулл) или меньше и равно 0 -- выходим
$this->setProperty('value', round($params['NEW_VALUE']/100,1));
- Рейтинг: 2.33%
win10 connect https://connect.smartliving.ru/profile/303