2012-06-20 38 views
1

如何在java中通過CRC16 modbus計算長度?如何在java中通過CRC16 modbus計算長度?

我已發現在鏈接下面的方法:

http://www.codeproject.com/Articles/19214/CRC-16-Calculation

如何在第二個參數傳遞長度值。

public int crc16(byte[] modbusframe,int Length) 
{ 
    int i; 
    int index; 
    int crc_Low = 0xFF; 
    int crc_High = 0xFF; 

    for (i = 0; i<Length; i++) 
    { 
     index = crc_High^(char)modbusframe[i]; 
     crc_High = crc_Low^crc_table[index]; 
     crc_Low = (byte)crc_table[index+ 256];        
    } 

    return crc_High*256+crc_Low;   
} 

預先感謝..

+2

我不明白你的問題,因爲你已經將長度作爲第二個參數傳遞了。請注意,你並不需要通過它,你可以改爲使用modbusframe.length。 – PhiLho

+0

我從codeproject網站獲得。我不知道如何計算CRC。所以我問這個。我通過了16,modbusframe.length,並且所有我都遇到了錯誤。 –

+0

定義'出錯'。那裏有更好的計算版本。您不需要分別計算高字節和低字節。 – EJP

回答

0

初始化變量陣列modbusframe的數量。

modbus_bytes[**0**]=device_address; 
modbus_bytes[**1**]=data_type; 
modbus_bytes[**2**]=(byte)start_address_higer; 
modbus_bytes[**3**]=(byte)start_address_lower; 
modbus_bytes[**4**]=0x00; 
modbus_bytes[**5**]=length; 

int crc_result=CRC.crc16(modbus_bytes,**6**);