Разбор ответа от расходомера
Добрый день!
Уважаемые профи, нужна ваша помощь в решение задачи, реализовать нужно на delphi.
Задача такая:
Программа работает через COM-порт с расходомером.
После запроса в ответ приходит набор байт.
В HEX ответ выглядит так: BB D2 C5 3E 14 5E 26 3E 78 42 43 00 FE 7A 08 00 03 00 55 F9
Нужно раскодировать этот ответ и получить значения расхода, объема и времени.
В идеале должны быть всего одна функция, которая будет возвращать необходимые значения
Нужна только расшифровка ответа!
Пишите по срокам и стоимости работы.
Из документации от производителя расходомера есть только это:
запрос текущих значений у прибора ЭХО-Р 02: AA 02
ответ: 04 47 3C 3E 13 A1 AF 3C 00 46 04 00 E0 7E 00 00 02 00 FF DD
значение расхода занимает с 5 по 8 байты: 13 A1 AF 3C
поскольку многобайтные коды передаются младшим байтом вперед, то переводим ответ в нормальную последовательность: 3C AF A1 13
в двоичном виде: 0011 1100 1010 1111 1010 0001 0001 0011
вычисляем мантиссу: 010 1111 1010 0001 0001 0011 / 111 1111 1111 1111 1111 1111 111 = 0,047
показатель степени: 111 1001 - 111 1111 = -6
расход: 2 ^ -6 * (1+0,047) = 0,0163 куб.м/сек или 58,68 куб.м/час
значение объема занимает с 9 по 12 байты: 00 46 04 00, множитель находится в 17 байте: 02
поскольку многобайтные коды передаются младшим байтом вперед, то переводим ответ в нормальную последовательность: 00 04 46 00
в десятичном виде: 280064
множитель: 10 ^ (02 - 3) = 0,1
объем: 280064 * 0,1 = 28006,4
значение времени учета занимает с 13 по 16 байты: E0 7E 00 00
поскольку многобайтные коды передаются младшим байтом вперед, то переводим ответ в нормальную последовательность: 00 00 7E E0
в десятичном виде: 32480 мин или 541 час 20 мин
код неисправности находится в 18 байте: 00,
что говорит об исправном приборе. Расшифровка кодов неисправности приведена в руководстве по эксплуатации.