Считывание 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.
Спасибо
День добрый.
Пришлите значения что прилетают в этих регистрах, попробуем на примере их разобрать число.