PDA

Просмотр полной версии : что лучше считывать с модуля int или float



Vitorgan
12.05.2016, 12:12
Добрый день, подскажите пожалуйста, что лучше считывать с модуля int или float? Быстрее наверное int, один регистр. Но зато потом в ПЛК или скаде придется делить, умножать на 10,100 и т.д. чтобы получить нужное значение.

Кто знает, может есть какие подводные камни? пугает флоат с чтением аж трех регистов, но с ним удобней. Разъясните пожалуйста.

melky
12.05.2016, 13:00
float всего два регистра занимает. а инт быстрее, тем более если их много

Scream
12.05.2016, 14:31
float = 4 байта = 2 регистра, как уже сказали.
+ проверить порядок байт, с этим могут быть проблемы.
я использую word\int в основном

Спорягин Кирилл
12.05.2016, 15:16
Тоже считываю INT.
Преобразовать INT в float в контроллере быстро и не оказывает влияние на быстродействие системы. А вот считывание лишних байт по сети Modbus увеличивает цикл опроса. Если количество модулей велико, то это уже может оказывать влияние на быстродействие.

ASo
12.05.2016, 15:37
Скажем так, модули обычно многоканальные и с каждого считывается по несколько значений. Поэтому - групповое чтение. А тогда все равно, что считывать.

Валенок
12.05.2016, 18:53
В общем соглашусь с ASo, но даже для одноканальных влияние 2х байт на скорость обмена - просто смешно. Терять точность, какие-то лишние телодвижения с преобразованиями и т.п. Если есть исходный флоат, я всегда за него

ASo
12.05.2016, 21:42
Да не теряете Вы точность.
Как правило, погрешность датчика ~1%, поэтому настраиваем положение дес. точки, остальные цифры - не значащие.

murdemon
12.05.2016, 21:58
только строковый с указанием единиц измерения по системе си, а то там же можно настроить пределы почему нет единиц измерения и строковых в формате XML??? :)

Валенок
12.05.2016, 22:27
Да не теряете Вы точность.
Как правило, погрешность датчика ~1%, поэтому настраиваем положение дес. точки, остальные цифры - не значащие.
С аналогами - все равно на флоаты переходить, ну и зачем тогда мне голову ломать на сколько нужно точку передвинуть там, а потом еще и делить здесь ? Тут чтоб не потерять точность на 3 знака, в панель подвинуть на 1 знак .... иметь кучу сущностей для одной и той же переменной. А флоат - он и в африке флоат. Считал, его же посмотрел в онлайне и он же в панель ушел - без проблем.

Валенок
12.05.2016, 22:35
только строковый с указанием единиц измерения по системе си, а то там же можно настроить пределы почему нет единиц измерения и строковых в формате XML??? :)
)) Ну если б стояла задача чистой трансляции/индикации - вообще было бы класно

rwg
13.05.2016, 07:07
С аналогами - все равно на флоаты переходить, ну и зачем тогда мне голову ломать на сколько нужно точку передвинуть там, а потом еще и делить здесь ? Тут чтоб не потерять точность на 3 знака, в панель подвинуть на 1 знак .... иметь кучу сущностей для одной и той же переменной. А флоат - он и в африке флоат. Считал, его же посмотрел в онлайне и он же в панель ушел - без проблем.

Передача флоата по сети занимает времени больше, чем инта, на время передачи 20 бит. А кто нибудь знает, насколько медленнее перемножаются флоаты чем инты? Я привык, что в AVRах и 51 процессорах это ужасно долго и с тех пор флоаты использую только там, где использование целых чисел снижает точность вычислений. То есть нигде не использую.

capzap
13.05.2016, 07:21
ну почему сразу на 20, а вдруг 2 стоп-бита или по 7 бит данных?
А зачем флоат перемножать, это добавляется дополнительная операция у интов чтоб получить похожее значение на флоат

rwg
13.05.2016, 08:56
А зачем флоат перемножать

А Вы что, полученные данные не обрабатываете, только пересылаете? В одном ПИ-регуляторе как минимум пара операций умножения, а то и гораздо больше.

capzap
13.05.2016, 10:15
А Вы что, полученные данные не обрабатываете, только пересылаете? В одном ПИ-регуляторе как минимум пара операций умножения, а то и гораздо больше.

ну не я же жалуюсь,что работа с флоатами медленнее, в случае с интом на одну операцию будет больше,если мы про пид, а не визуализацию,там вполне достаточно целочисленного. И кстати, когда указываете на 20 бит, Вы хотите произвести впечатление от количества? а в процентном соотношении это сколько будет?

rwg
13.05.2016, 12:29
когда указываете на 20 бит, Вы хотите произвести впечатление от количества? а в процентном соотношении это сколько будет?

Просто удобно считать лишние временные задержки. На скорости 9600 - потеря 2 мсек на одном параметре. На 50 параметрах теряем 0,1 секунды. Иногда это важно.

capzap
13.05.2016, 15:45
Просто удобно считать лишние временные задержки. На скорости 9600 - потеря 2 мсек на одном параметре. На 50 параметрах теряем 0,1 секунды. Иногда это важно.

процентное соотношение назовите, что Вы все цифрами какими то оперируете и скорость то какую взяли)

Валенок
13.05.2016, 16:07
Передача флоата по сети занимает времени больше, чем инта, на время передачи 20 бит..
Если бы проц занимался исключительно обменом и минц был строго кратен циклу обмена еще можно было бы говорить о каких несчастных 1-3% потери общего времени. Но эта экономия похожа на вытягивание скорости за счет улучшение аэродинамики лошадиной подковы.


На 50 параметрах теряем 0,1 секунды. Иногда это важно.
Если это становится важным - значит неправильный алгоритм или схема. Вы б еще 1200 поставили для расчета.
Приведите конкретную пример с конкретными модулями когда это имело бы значение



Просто удобно считать лишние временные задержки
Такие - бессмысленно без анализа общего алгоритма