Форум АСУ в Україні

форум з автоматизації для викладачів, студентів та спеціалістів
Сьогодні: 17 вересня 2019, 01:12

Часовий пояс UTC + 2 годин [ DST ]




Створити нову тему Відповісти  [ 1 повідомлення ] 
Автор Повідомлення
 Тема повідомлення: Розрахунок CRC на 1200-ці
ПовідомленняДодано: 15 січня 2015, 01:06 
Офлайн
Викладач

З нами з: 29 листопада 2013, 17:11
Повідомлення: 4989
Прийшлось зробити ФБ для розрахунку CRC
Код:
FUNCTION_BLOCK "CRC_CALC"
{ S7_Optimized_Access := 'TRUE' }
VERSION : 0.1
   VAR_INPUT
      Bufer : Array[0..255] of Byte;
      StartByte : UInt;
      Count : UInt;
   END_VAR

   VAR_OUTPUT
      CRC : Word;
   END_VAR

   VAR
      arCRCHi : Array[0..255] of Byte := 16#0000, 16#00C1, 16#0081, 16#0040, 16#0001, 16#00C0, 16#0080, 16#0041, 16#0001, 16#00C0, 16#0080, 16#0041, 16#0000, 16#00C1, 16#0081, 16#0040, 16#0001, 16#00C0, 16#0080, 16#0041, 16#0000, 16#00C1, 16#0081, 16#0040, 16#0000, 16#00C1, 16#0081, 16#0040, 16#0001, 16#00C0, 16#0080, 16#0041, 16#0001, 16#00C0, 16#0080, 16#0041, 16#0000, 16#00C1, 16#0081, 16#0040, 16#0000, 16#00C1, 16#0081, 16#0040, 16#0001, 16#00C0, 16#0080, 16#0041, 16#0000, 16#00C1, 16#0081, 16#0040, 16#0001, 16#00C0, 16#0080, 16#0041, 16#0001, 16#00C0, 16#0080, 16#0041, 16#0000, 16#00C1, 16#0081, 16#0040, 16#0001, 16#00C0, 16#0080, 16#0041, 16#0000, 16#00C1, 16#0081, 16#0040, 16#0000, 16#00C1, 16#0081, 16#0040, 16#0001, 16#00C0, 16#0080, 16#0041, 16#0000, 16#00C1, 16#0081, 16#0040, 16#0001, 16#00C0, 16#0080, 16#0041, 16#0001, 16#00C0, 16#0080, 16#0022, 16#0000, 16#00C1, 16#0081, 16#0040, 16#0000, 16#00C1, 16#0081, 16#0040, 16#0001, 16#00C0, 16#0080, 16#0041, 16#0001, 16#00C0, 16#0080, 16#0041, 16#0000, 16#00C1, 16#0081, 16#0040, 16#0001, 16#00C0, 16#0080, 16#0041, 16#0000, 16#00C1, 16#0081, 16#0040, 16#0000, 16#00C1, 16#0081, 16#0040, 16#0001, 16#00C0, 16#0080, 16#0041, 16#0001, 16#00C0, 16#0080, 16#0041, 16#0000, 16#00C1, 16#0081, 16#0040, 16#0000, 16#00C1, 16#0081, 16#0040, 16#0001, 16#00C0, 16#0080, 16#0041, 16#0000, 16#00C1, 16#0081, 16#0040, 16#0001, 16#00C0, 16#0080, 16#0041, 16#0001, 16#00C0, 16#0080, 16#0041, 16#0000, 16#00C1, 16#0081, 16#0040, 16#0000, 16#00C1, 16#0081, 16#0040, 16#0001, 16#00C0, 16#0080, 16#0041, 16#0001, 16#00C0, 16#0080, 16#0041, 16#0000, 16#00C1, 16#0081, 16#0040, 16#0001, 16#00C0, 16#0080, 16#0041, 16#0000, 16#00C1, 16#0081, 16#0040, 16#0000, 16#00C1, 16#0081, 16#0040, 16#0001, 16#00C0, 16#0080, 16#0041, 16#0000, 16#00C1, 16#0081, 16#0040, 16#0001, 16#00C0, 16#0080, 16#0041, 16#0000, 16#00C0, 16#0080, 16#0041, 16#0000, 16#00C1, 16#0081, 16#0040, 16#0001, 16#00C0, 16#0080, 16#0041, 16#0000, 16#00C1, 16#0081, 16#0040, 16#0000, 16#00C1, 16#0081, 16#0040, 16#0001, 16#00C0, 16#0080, 16#0041, 16#0001, 16#00C0, 16#0080, 16#0041, 16#0000, 16#00C1, 16#0081, 16#0040, 16#0000, 16#00C1, 16#0081, 16#0040, 16#0001, 16#00C0, 16#0080, 16#0041, 16#0000, 16#00C1, 16#0081, 16#0040, 16#0001, 16#00C0, 16#0080, 16#0041, 16#0001, 16#00C0, 16#0080, 16#0041, 16#0000, 16#00C1, 16#0081, 16#0040;
      arCRCLo : Array[0..255] of Byte := 16#0000, 16#00C0, 16#00C1, 16#0001, 16#00C3, 16#0003, 16#0002, 16#00C2, 16#00C6, 16#0006, 16#0007, 16#00C7, 16#0005, 16#00C5, 16#00C4, 16#0004, 16#00CC, 16#000C, 16#000D, 16#00CD, 16#000F, 16#00CF, 16#00CE, 16#000E, 16#000A, 16#00CA, 16#00CB, 16#000B, 16#00C9, 16#0009, 16#0008, 16#00C8, 16#00D8, 16#0018, 16#0019, 16#00D9, 16#001B, 16#00DB, 16#00DA, 16#001A, 16#001E, 16#00DE, 16#00DF, 16#001F, 16#00DD, 16#001D, 16#001C, 16#00DC, 16#0014, 16#00D4, 16#00D5, 16#0015, 16#00D7, 16#0017, 16#0016, 16#00D6, 16#00D2, 16#0012, 16#0013, 16#00D3, 16#0011, 16#00D1, 16#00D0, 16#0010, 16#00F0, 16#0030, 16#0031, 16#00F1, 16#0033, 16#00F3, 16#00F2, 16#0032, 16#0036, 16#00F6, 16#00F7, 16#0037, 16#00F5, 16#0035, 16#0034, 16#00F4, 16#003C, 16#00FC, 16#00FD, 16#003D, 16#00FF, 16#003F, 16#003E, 16#00FE, 16#00FA, 16#003A, 16#003B, 16#00FB, 16#0039, 16#00F9, 16#00F8, 16#0038, 16#0028, 16#00E8, 16#00E9, 16#0029, 16#00EB, 16#002B, 16#002A, 16#00EA, 16#00EE, 16#002E, 16#002F, 16#00EF, 16#002D, 16#00ED, 16#00EC, 16#002C, 16#00E4, 16#0024, 16#0025, 16#00E5, 16#0027, 16#00E7, 16#00E6, 16#0026, 16#0022, 16#00E2, 16#00E3, 16#0023, 16#00E1, 16#0021, 16#0020, 16#00E0, 16#00A0, 16#0060, 16#0061, 16#00A1, 16#0063, 16#00A3, 16#00A2, 16#0062, 16#0066, 16#00A6, 16#00A7, 16#0067, 16#00A5, 16#0065, 16#0064, 16#00A4, 16#006C, 16#00AC, 16#00AD, 16#006D, 16#00AF, 16#006F, 16#006E, 16#00AE, 16#00AA, 16#006A, 16#006B, 16#00AB, 16#0069, 16#00A9, 16#00A8, 16#0068, 16#0078, 16#00B8, 16#00B9, 16#0079, 16#00BB, 16#007B, 16#007A, 16#00BA, 16#00BE, 16#007E, 16#007F, 16#00BF, 16#007D, 16#00BD, 16#00BC, 16#007C, 16#00B4, 16#0074, 16#0075, 16#00B5, 16#0077, 16#00B7, 16#00B6, 16#0076, 16#0072, 16#00B2, 16#00B3, 16#0073, 16#00B1, 16#0071, 16#0070, 16#00B0, 16#0050, 16#0090, 16#0091, 16#0051, 16#0093, 16#0053, 16#0052, 16#0092, 16#0096, 16#0056, 16#0057, 16#0097, 16#0055, 16#0095, 16#0094, 16#0054, 16#009C, 16#005C, 16#005D, 16#009D, 16#005F, 16#009F, 16#009E, 16#005E, 16#005A, 16#009A, 16#009B, 16#005B, 16#0099, 16#0059, 16#0058, 16#0098, 16#0088, 16#0048, 16#0049, 16#0089, 16#004B, 16#008B, 16#008A, 16#004A, 16#004E, 16#008E, 16#008F, 16#004F, 16#008D, 16#004D, 16#004C, 16#008C, 16#0044, 16#0084, 16#0085, 16#0045, 16#0087, 16#0047, 16#0046, 16#0086, 16#0082, 16#0042, 16#0043, 16#0083, 16#0041, 16#0081, 16#0080, 16#0040;
   END_VAR

   VAR_TEMP
      CRCHi : Byte;
      CRCLo : Byte;
      i : Int;
      Index : Byte;
   END_VAR


BEGIN
   #CRCHi:=16#FF; #CRCLo:=16#ff;
   FOR #i := 0 TO UINT_TO_INT(#Count)-1 DO
     #Index:=#CRCLo XOR #Bufer [#StartByte+INT_TO_UINT(#i)];
     #CRCLo:=#CRCHi XOR #arCRCHi[#Index];
     #CRCHi:=#arCRCLo[#Index];
   END_FOR;
   
   #CRC:= SHL(IN := BYTE_TO_WORD(#CRCHi), N := 8) OR #CRCLo; 
END_FUNCTION_BLOCK



Догори
 Профіль  
 
Відображати повідомлення за:  Сортувати за  
Створити нову тему Відповісти  [ 1 повідомлення ] 

Часовий пояс UTC + 2 годин [ DST ]



Хто зараз онлайн

Зараз переглядають цей форум: Немає зареєстрованих користувачів і 1 гість


Ви не можете створювати нові теми у цьому форумі
Ви не можете відповідати на теми у цьому форумі
Ви не можете редагувати ваші повідомлення у цьому форумі
Ви не можете видаляти ваші повідомлення у цьому форумі
Ви не можете додавати файли у цьому форумі

Знайти:
Вперед:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Вы можете бесплатно создать форум PHPBB2 на MyBB2.ru, Также возможно создать форум бесплатно PHPBB3 на Getbb.ru
Український переклад © 2005-2007 Українська підтримка phpBB