Считывание unsigned char(6)

Адаптер измерительный АДИ1-1 Термотроник
Можно ли победить этот тип, как его собрать в нормальное отражение? Считываю адреса 320, 321, 322 int16. 320 изменяет значения. Как их сшить? не знаю.

Адаптер измерительный АДИ1-1 Термотроник
Можно ли победить этот тип, как его собрать в нормальное отражение? Считываю адреса 320, 321, 322 int16. 320 изменяет значения. Как их сшить? не знаю.
//BCD (Binary-Coded Decimal) - это способ представления десятичных чисел в двоичной
//системе, при котором каждый десятичный разряд кодируется четырёхбитным
//двоичным числом.
function BCDToDecimal(BCDByte: Byte): Byte;
begin
Result := ((BCDByte shr 4) * 10) + (BCDByte and $0F);
end;
var
YearMonth, DayHour, MinSec: Word;
Year, Month, Day, Hour, Min, Sec: Byte;
DateTimeStr: string;
begin
// Пример BCD значений
YearMonth := 9478; // 322 регистр
DayHour := 9993; // 321 регистр
MinSec := 12803; // 320 регистр
// YearMonth
Year := BCDToDecimal( (YearMonth shr 8) and $FF ); // старший байт — год
Month := BCDToDecimal( YearMonth and $FF ); // младший байт — месяц
// DayHour
Day := BCDToDecimal( (DayHour shr 8) and $FF ); // старший байт — день
Hour := BCDToDecimal( DayHour and $FF ); // младший байт — часы
// MinSec
Min := BCDToDecimal( (MinSec shr 8) and $FF ); // старший байт — минуты
Sec := BCDToDecimal( MinSec and $FF ); // младший байт — секунды
// Формируем строку в формате "чч:мм:сс дд:мм:гг"
DateTimeStr := Format('%2.2d:%2.2d:%2.2d %2.2d:%2.2d:%2.2d',
[Hour, Min, Sec, Day, Month, Year]);
WriteValue('Строковый канал для вывода времени', DateTimeStr);
end.
//BCD (Binary-Coded Decimal) - это способ представления десятичных чисел в двоичной
//системе, при котором каждый десятичный разряд кодируется четырёхбитным
//двоичным числом.
function BCDToDecimal(BCDByte: Byte): Byte;
begin
Result := ((BCDByte shr 4) * 10) + (BCDByte and $0F);
end;
var
YearMonth, DayHour, MinSec: Word;
Year, Month, Day, Hour, Min, Sec: Byte;
DateTimeStr: string;
begin
// Пример BCD значений
YearMonth := 9478; // 322 регистр
DayHour := 9993; // 321 регистр
MinSec := 12803; // 320 регистр
// YearMonth
Year := BCDToDecimal( (YearMonth shr 8) and $FF ); // старший байт — год
Month := BCDToDecimal( YearMonth and $FF ); // младший байт — месяц
// DayHour
Day := BCDToDecimal( (DayHour shr 8) and $FF ); // старший байт — день
Hour := BCDToDecimal( DayHour and $FF ); // младший байт — часы
// MinSec
Min := BCDToDecimal( (MinSec shr 8) and $FF ); // старший байт — минуты
Sec := BCDToDecimal( MinSec and $FF ); // младший байт — секунды
// Формируем строку в формате "чч:мм:сс дд:мм:гг"
DateTimeStr := Format('%2.2d:%2.2d:%2.2d %2.2d:%2.2d:%2.2d',
[Hour, Min, Sec, Day, Month, Year]);
WriteValue('Строковый канал для вывода времени', DateTimeStr);
end.
Спасибо
День добрый.
Пришлите значения что прилетают в этих регистрах, попробуем на примере их разобрать число.