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

Avatar
  • обновлен

Image 2136

Адаптер измерительный АДИ1-1 Термотроник

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

Avatar

День добрый.

Пришлите значения что прилетают в этих регистрах, попробуем на примере их разобрать число.

Avatar
Anatoly

Приращение раз в секунду при опросе 100мс

Image 2138

Image 2139

Avatar
  //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. 
Avatar
Anatoly
Цитата от СИМП Лайт (тех поддержка)
  //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. 

Спасибо