Преобразование знаковых параметров (signed)
Wialon, принимая данные от объектов в формате двух- и четырехбайтных целых чисел, предполагает, что они беззнаковые (unsigned). Иными словами, любые приходящие значения (и положительные, и отрицательные) отображаются как беззнаковые, т. е. положительные.
Если же используемое Вами оборудование на самом деле посылает знаковые значения в каком-то параметре (например, параметр температуры), то необходимо создать на основе этого параметра датчик и настроить таблицу преобразований должным образом.
Анализ параметра
Откройте вкладку Сообщения и закажите сообщения от объекта за какой-нибудь интервал. Укажите Отображать параметры как исходные данные. В столбце Параметры найдите интересующий Вас параметр и проанализируйте приходящие от него значения. В нашем случае это будет параметр температуры с наименованием param24.
Видно, что при снижении температуры и пересечении порога в 0 градусов появляются невероятно большие цифры вместо необходимых отрицательных.
Определение наибольшего значения
Сначала нужно определить максимальный порог этих чисел. Для этого возьмите любое из «невероятно больших цифр», которое встречается в значениях параметра, и введите его в калькулятор в инженерном режиме (Dec). После этого перейдите в шестнадцатеричное представление (Hex).
Посчитайте количество разрядов в полученном числе. Возможные значения: 2, 4, 8. Если разрядов получилось меньше, то делаем округление в бóльшую сторону (например, 5 нужно округлять до 8). В нашем случае получается 8 разрядов.
Теперь нужно ввести в калькуляторе в режиме Нех букву F столько раз, сколько получилось разрядов (после округления). После этого перейдите в режим Dec. Получившийся результат и есть максимально возможное число. Его необходимо запомнить или записать.
Таблица расчета датчика
Откройте свойства объекта и создайте датчик на основе этого параметра. Теперь нужно создать для него таблицу расчета. Для этого в свойствах датчика перейдите на вкладку Таблица расчета.
Мы выяснили, что весь интервал возможных значений — от 0 до 4294967295. Из них от 0 до половины максимального числа идут положительные значения, а после половины и до конца — отрицательные (причем максимальное число — это наименьшее отрицательное число по модулю). Делим максимальное значение на 2, получаем 4294967295 : 2 = 2147483647,5. То есть положительные значения будут идти от нуля до 2147483647, а отрицательные — от 2147483648 до 4294967295.
В таблице расчета Х — сырое значение, присылаемое параметром, а — коэффициент, b — необходимая коррекция. И все это необходимо для получения некоего Y — то есть реального значения температуры.
Используется ли коэффициент (a) для данного параметра, можно выяснить в спецификации оборудования. В нашем случае коэффициент равен 0.1, то есть, если оборудование присылает значение параметра 6, это будет означать, что реальная температура 0.6 градусов.
Для первого отрезка коррекция по b не нужна (т.е. 0), а для второго нужна, т.к. значения идут как бы в обратном порядке (максимальное число соответствует наименьшему отрицательному значению температуры по модулю). Для вычисления смещения b нужно прибавить к максимальному числу единицу (т.к. ноль у нас уже есть) и умножить на коэффициент. Получаем: (4294967295+1)х0.1 = 429496729.6. Получение значения надо будет отнимать, поэтому в таблицу расчета оно будет введено как отрицательное.
Теперь можно вводить оба интервала (для положительных и для отрицательных чисел) в таблицу расчета.
Расчеты можно производить и в режиме Hex. Для этого вводим латинскую букву F столько раз, сколько получили разрядов (в нашем случае 8), а дальше снова делим на 2. После этого переходим в режим Dec (десятичный цифр) и сохраняем или запоминаем полученное число. Это и будет максимальное положительное значение.
Анализ результата
Можно проанализировать полученную таблицу, перейдя на вкладку Таблица расчета и нажав на кнопку Обновить.
Кроме того, оценить настройку датчика можно на вкладке Сообщения. Закажите сообщения по объекту за тот же интервал времени, и на сей раз выберите Отображать параметры как значения датчиков.