AntonioVillanueva

CRC16 MODBUS KOTLIN

Nov 23rd, 2021 (edited)
402
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Kotlin 4.50 KB | None | 0 0
  1. //Calculo CRC-16 MODBUS KOTLIN  con tablas pre-calculadas Antonio Villanueva Segura
  2. fun main() {
  3.  
  4.     //Test https://crccalc.com/  a,b,c,d,e,f,g input type ASCII res=0xE9C2
  5.     var dato=arrayOf<UByte>(0x61U,0x62U,0x63U,0x64U,0x65U,0x66U,0x67U)
  6.     println ("Test CRC16")
  7.     var res=crc16(dato)
  8.  
  9.     println ("Hex 0x%x".format(res.toInt()))//Hex conversion
  10. }
  11.  
  12.  
  13. fun crc16(puchMsg:Array<UByte>):UShort{
  14.     var uchCRCHi:UByte=0xFFU
  15.     var uchCRCLo:UByte=0xFFU
  16.     var uIndex:UByte
  17.  
  18.     //Recorre el array de puchMsg lee los bytes del mensaje
  19.     for (elem in puchMsg){
  20.         uIndex=uchCRCHi xor elem
  21.         println ()
  22.         uchCRCHi=uchCRCLo xor auchCRCHi[uIndex.toInt()]
  23.         uchCRCLo=auchCRCLo[uIndex.toInt()]
  24.     }
  25.  
  26.     return ( (uchCRCLo.toInt().shl(8)) or uchCRCHi.toInt()  ).toUShort()
  27. }
  28.  
  29.  
  30. var auchCRCHi=arrayOf<UByte>(0x0U,0xC1U, 0x81U, 0x40U, 0x1U, 0xC0U, 0x80U, 0x41U, 0x1U, 0xC0U, 0x80U, 0x41U,
  31.     0x0U, 0xC1U, 0x81U, 0x40U, 0x1U, 0xC0U, 0x80U, 0x41U, 0x0U, 0xC1U, 0x81U, 0x40U,
  32.     0x0U, 0xC1U, 0x81U, 0x40U, 0x1U, 0xC0U, 0x80U, 0x41U, 0x1U, 0xC0U, 0x80U, 0x41U,
  33.     0x0U, 0xC1U, 0x81U, 0x40U, 0x0U, 0xC1U, 0x81U, 0x40U,
  34.     0x1U, 0xC0U, 0x80U, 0x41U, 0x0U, 0xC1U, 0x81U, 0x40U, 0x1U, 0xC0U, 0x80U, 0x41U,
  35.     0x1U, 0xC0U, 0x80U, 0x41U, 0x0U, 0xC1U, 0x81U, 0x40U, 0x1U, 0xC0U, 0x80U, 0x41U,
  36.     0x0U, 0xC1U, 0x81U, 0x40U, 0x0U, 0xC1U, 0x81U, 0x40U, 0x1U, 0xC0U, 0x80U, 0x41U,
  37.     0x0U, 0xC1U, 0x81U, 0x40U, 0x1U, 0xC0U, 0x80U, 0x41U, 0x1U, 0xC0U, 0x80U, 0x41U,
  38.     0x0U, 0xC1U, 0x81U, 0x40U, 0x0U, 0xC1U, 0x81U, 0x40U, 0x1U, 0xC0U, 0x80U, 0x41U,
  39.     0x1U, 0xC0U, 0x80U, 0x41U, 0x0U, 0xC1U, 0x81U, 0x40U, 0x1U, 0xC0U, 0x80U, 0x41U,
  40.     0x0U, 0xC1U, 0x81U, 0x40U, 0x0U, 0xC1U, 0x81U, 0x40U, 0x1U, 0xC0U, 0x80U, 0x41U,
  41.     0x1U, 0xC0U, 0x80U, 0x41U, 0x0U, 0xC1U, 0x81U, 0x40U, 0x0U, 0xC1U, 0x81U, 0x40U,
  42.     0x1U, 0xC0U, 0x80U, 0x41U, 0x0U, 0xC1U, 0x81U, 0x40U, 0x1U, 0xC0U, 0x80U, 0x41U,
  43.     0x1U, 0xC0U, 0x80U, 0x41U, 0x0U, 0xC1U, 0x81U, 0x40U, 0x0U, 0xC1U, 0x81U, 0x40U,
  44.     0x1U, 0xC0U, 0x80U, 0x41U, 0x1U, 0xC0U, 0x80U, 0x41U, 0x0U, 0xC1U, 0x81U, 0x40U,
  45.     0x1U, 0xC0U, 0x80U, 0x41U, 0x0U, 0xC1U, 0x81U, 0x40U, 0x0U, 0xC1U, 0x81U, 0x40U,
  46.     0x1U, 0xC0U, 0x80U, 0x41U, 0x0U, 0xC1U, 0x81U, 0x40U, 0x1U, 0xC0U, 0x80U, 0x41U,
  47.     0x1U, 0xC0U, 0x80U, 0x41U, 0x0U, 0xC1U, 0x81U, 0x40U, 0x1U, 0xC0U, 0x80U, 0x41U,
  48.     0x0U, 0xC1U, 0x81U, 0x40U, 0x0U, 0xC1U, 0x81U, 0x40U, 0x1U, 0xC0U, 0x80U, 0x41U,
  49.     0x1U, 0xC0U, 0x80U, 0x41U, 0x0U, 0xC1U, 0x81U, 0x40U, 0x0U, 0xC1U, 0x81U, 0x40U,
  50.     0x1U, 0xC0U, 0x80U, 0x41U, 0x0U, 0xC1U, 0x81U, 0x40U, 0x1U, 0xC0U, 0x80U, 0x41U,
  51.     0x1U, 0xC0U, 0x80U, 0x41U, 0x0U, 0xC1U, 0x81U, 0x40U )
  52.  
  53. var auchCRCLo = arrayOf<UByte> (0x0U, 0xC0U, 0xC1U, 0x1U, 0xC3U, 0x3U, 0x2U, 0xC2U, 0xC6U, 0x6U, 0x7U, 0xC7U,
  54.     0x5U, 0xC5U, 0xC4U, 0x4U, 0xCCU, 0xCU, 0xDU, 0xCDU, 0xFU, 0xCFU, 0xCEU, 0xEU,
  55.     0xAU, 0xCAU, 0xCBU, 0xBU, 0xC9U, 0x9U, 0x8U, 0xC8U, 0xD8U, 0x18U, 0x19U, 0xD9U,
  56.     0x1BU, 0xDBU, 0xDAU, 0x1AU, 0x1EU, 0xDEU, 0xDFU, 0x1FU, 0xDDU, 0x1DU, 0x1CU, 0xDCU,
  57.     0x14U, 0xD4U, 0xD5U, 0x15U, 0xD7U, 0x17U, 0x16U, 0xD6U, 0xD2U, 0x12U, 0x13U, 0xD3U,
  58.     0x11U, 0xD1U, 0xD0U, 0x10U, 0xF0U, 0x30U, 0x31U, 0xF1U, 0x33U, 0xF3U, 0xF2U, 0x32U,
  59.     0x36U, 0xF6U, 0xF7U, 0x37U, 0xF5U, 0x35U, 0x34U, 0xF4U, 0x3CU, 0xFCU, 0xFDU, 0x3DU,
  60.     0xFFU, 0x3FU, 0x3EU, 0xFEU, 0xFAU, 0x3AU, 0x3BU, 0xFBU, 0x39U, 0xF9U, 0xF8U, 0x38U,
  61.     0x28U, 0xE8U, 0xE9U, 0x29U, 0xEBU, 0x2BU, 0x2AU, 0xEAU, 0xEEU, 0x2EU, 0x2FU, 0xEFU,
  62.     0x2DU, 0xEDU, 0xECU, 0x2CU, 0xE4U, 0x24U, 0x25U, 0xE5U, 0x27U, 0xE7U, 0xE6U, 0x26U,
  63.     0x22U, 0xE2U, 0xE3U, 0x23U, 0xE1U, 0x21U, 0x20U, 0xE0U, 0xA0U, 0x60U, 0x61U, 0xA1U,
  64.     0x63U, 0xA3U, 0xA2U, 0x62U, 0x66U, 0xA6U, 0xA7U, 0x67U, 0xA5U, 0x65U, 0x64U, 0xA4U,
  65.     0x6CU, 0xACU, 0xADU, 0x6DU, 0xAFU, 0x6FU, 0x6EU, 0xAEU, 0xAAU, 0x6AU, 0x6BU, 0xABU,
  66.     0x69U, 0xA9U, 0xA8U, 0x68U, 0x78U, 0xB8U, 0xB9U, 0x79U, 0xBBU, 0x7BU, 0x7AU, 0xBAU,
  67.     0xBEU, 0x7EU, 0x7FU, 0xBFU, 0x7DU, 0xBDU, 0xBCU, 0x7CU, 0xB4U, 0x74U, 0x75U, 0xB5U,
  68.     0x77U, 0xB7U, 0xB6U, 0x76U, 0x72U, 0xB2U, 0xB3U, 0x73U, 0xB1U, 0x71U, 0x70U, 0xB0U,
  69.     0x50U, 0x90U, 0x91U, 0x51U, 0x93U, 0x53U, 0x52U, 0x92U, 0x96U, 0x56U, 0x57U, 0x97U,
  70.     0x55U, 0x95U, 0x94U, 0x54U, 0x9CU, 0x5CU, 0x5DU, 0x9DU, 0x5FU, 0x9FU, 0x9EU, 0x5EU,
  71.     0x5AU, 0x9AU, 0x9BU, 0x5BU, 0x99U, 0x59U, 0x58U, 0x98U, 0x88U, 0x48U, 0x49U, 0x89U,
  72.     0x4BU, 0x8BU, 0x8AU, 0x4AU, 0x4EU, 0x8EU, 0x8FU, 0x4FU, 0x8DU, 0x4DU, 0x4CU, 0x8CU,
  73.     0x44U, 0x84U, 0x85U, 0x45U, 0x87U, 0x47U, 0x46U, 0x86U, 0x82U, 0x42U, 0x43U, 0x83U,
  74.     0x41U, 0x81U, 0x80U, 0x40U )
  75.  
Add Comment
Please, Sign In to add comment