1

Разделение параметра на несколько виртуальных датчиков.

Topic: Разделение параметра на несколько виртуальных датчиков.

Добрый день, от терминала приходит сообщение например  param 705010.
Можно ли разделить его на три датчика что бы получилось
sens1 10
sens2 50
sens3 70
?

2

Разделение параметра на несколько виртуальных датчиков.

Re: Разделение параметра на несколько виртуальных датчиков.

Evgen51 почитайте эту страницу руководства, думаю вам нужен побитовый контроль
http://docs.gurtam.com/ru/hosting/cms/u … sors/param

Безопасность превыше всего
AN-Security Direct
3

Разделение параметра на несколько виртуальных датчиков.

(edited by Evgen51 20/01/2016 15:02:24)

Re: Разделение параметра на несколько виртуальных датчиков.

Спасибо, но побитовый он для цифровых датчиков, а тут нужно в одно сообщение уместить показания трех цифровых термодатчиков.
То есть выделить 1,2 и 3 байты.

4

Разделение параметра на несколько виртуальных датчиков.

Re: Разделение параметра на несколько виртуальных датчиков.

Evgen51 так побитовый контроль как раз позволяет выделить из параметра нужные биты

Безопасность превыше всего
AN-Security Direct
5

Разделение параметра на несколько виртуальных датчиков.

Re: Разделение параметра на несколько виртуальных датчиков.

Побитно/побайтно поможет, если это HEX. А если десятичное? Нужна команда отброса дробной части в математику датчика.

6

Разделение параметра на несколько виртуальных датчиков.

Re: Разделение параметра на несколько виртуальных датчиков.

Для того, чтобы разобрать число 705010 на три 70 50 и 10 нужно сделать две вещи:
- первое, нам необходимо добиться округления.
Для этого можно воспользоваться таблицей расчета - просто добавить для каждой единицы точку
X=1 a=0 b=1
X=2 a=0 b=2
и так далее до нужного вам количества. По итогу график будет выглядеть примерно как в аттаче. Для каждого такого датчика соответственно нужно добавить такую же таблицу.

- второе - нам необходимо настроить выделение нужных разрядов в передаваемых таблице параметрах Х (она в свою очередь будет бороться с дробной частью)
Допустим нам нужны три датчика sens1, sens2 и sens3 а наименование параметра у нас param
Из исходного числа 70 - это 705010/10000 = 70,5010
соответственно для первого датчика формула param/const10000
для второго уже (param-[sens1]*const10000)/const100
а для третьего param-[sens1]*const10000-[sens2]*const100

В итоге все три датчика получат корректные округленные значения.
Кстати - примерно такой же подход используется при разборе параметров по can-log, с той лишь разницей, что там в одном числе может быть сразу несколько событий, а деление не по числам, кратным 10, а по своим.

7

Разделение параметра на несколько виртуальных датчиков.

Re: Разделение параметра на несколько виртуальных датчиков.

serd wrote:

Для того, чтобы разобрать число 705010 на три 70 50 и 10 нужно сделать две вещи:
- первое, нам необходимо добиться округления.
Для этого можно воспользоваться таблицей расчета - просто добавить для каждой единицы точку
X=1 a=0 b=1
X=2 a=0 b=2
и так далее до нужного вам количества. По итогу график будет выглядеть примерно как в аттаче. Для каждого такого датчика соответственно нужно добавить такую же таблицу.

- второе - нам необходимо настроить выделение нужных разрядов в передаваемых таблице параметрах Х (она в свою очередь будет бороться с дробной частью)
Допустим нам нужны три датчика sens1, sens2 и sens3 а наименование параметра у нас param
Из исходного числа 70 - это 705010/10000 = 70,5010
соответственно для первого датчика формула param/const10000
для второго уже (param-[sens1]*const10000)/const100
а для третьего param-[sens1]*const10000-[sens2]*const100

В итоге все три датчика получат корректные округленные значения.
Кстати - примерно такой же подход используется при разборе параметров по can-log, с той лишь разницей, что там в одном числе может быть сразу несколько событий, а деление не по числам, кратным 10, а по своим.

Сергей, здравствуйте. А не можете подсказать точнее, как разобрать параметр can_a1, в котором по описанию следующее:
Младший байт: уровень топлива, значение
надо умножить на 0,4.
Второй байт: температура охлаждающей
жидкости, из значения надо вычесть 40.
Третий и четвёртый байты: обороты
двигателя, значение надо умножить на 0,125.
Пример данных из шины в порядке
получения: FA 72 50 25.
Уровень топлива: 100%.
Температура 74C
Обороты: 1194 об/мин.
К примеру, ко мне прилетает значение 10240 в десятичной системе.

8

Разделение параметра на несколько виртуальных датчиков.

Re: Разделение параметра на несколько виртуальных датчиков.

Разбираете значение побитово, как написано в документации. Из битов собираете нужный байт и делаете с ним операции приведения к значению.

9

Разделение параметра на несколько виртуальных датчиков.

Re: Разделение параметра на несколько виртуальных датчиков.

SanderAMC wrote:

Разбираете значение побитово, как написано в документации. Из битов собираете нужный байт и делаете с ним операции приведения к значению.

Подниму тему, чтобы не создавать новую.
Не подскажете, как именно из битов собрать нужный байт?
То есть, меня интересует не отдельный бит, а параметр, который передаётся, например, 3-мя битами. Как получить его значение? И каким образом потом в десятичную перевести?

10

Разделение параметра на несколько виртуальных датчиков.

Re: Разделение параметра на несколько виртуальных датчиков.

gofk wrote:

То есть, меня интересует не отдельный бит, а параметр, который передаётся, например, 3-мя битами. Как получить его значение? И каким образом потом в десятичную перевести?

Пример для трехбитного параметра (передаваемого 6-ым, 5-ым и 4-ым битом):
const4*param:6+const2*param:5+param:4

Сергей Чубаров.
Директор ООО "Ратеос".
www.rateos.ru   rateos@rateos.ru
+7 (499) 731-4390, 731-9716