package com.dev.modbus;
|
|
import java.nio.ByteBuffer;
|
|
import com.ComBase;
|
import com.Crc16;
|
|
public class MyModBusRtu {
|
public static final int BYTE_LEN = 5;
|
|
public static final short CMD_TYPE_READ = 0x03; //¶Á
|
|
public static final short CMD_TYPE_WRITE_YC = 0x05;
|
public static final short CMD_TYPE_WRITE_STD = 0x06; //µ¥µãдÈë
|
public static final short CMD_TYPE_WRITE_MULTY = 0x10; //¶àµãдÈë
|
|
public static final short CMD_TYPE_Read_UpdateFile = 0x23; //¶ÁÈ¡Éý¼¶Îļþ
|
public static final short CMD_TYPE_WRITE_SysUpdate = 0x26; //ϵͳÉý¼¶Ïà¹Ø¿ØÖÆ
|
|
public int addr; //É豸µØÖ·
|
public int Cmd; //¹¦ÄÜÂë
|
public int reg_addr; //¼Ä´æÆ÷µØÖ·
|
public int reg_count; //¼Ä´æÆ÷ÊýÁ¿
|
|
public int data_count; //Êý¾ÝÇø×Ö½ÚÊýÁ¿
|
|
public int result; //·µ»Ø²Ù×÷½á¹û
|
|
public int crc; //crcУÑé
|
|
public MyModBusRtu() {
|
|
}
|
|
public MyModBusRtu(int Cmd,int reg_addr) {
|
this.Cmd = Cmd;
|
this.reg_addr = reg_addr;
|
}
|
|
public void clear() {
|
this.addr = 0; //É豸µØÖ·
|
this.Cmd = 0; //¹¦ÄÜÂë
|
this.reg_addr = 0; //¼Ä´æÆ÷µØÖ·
|
this.reg_count = 0; //¼Ä´æÆ÷ÊýÁ¿
|
|
this.data_count = 0; //Êý¾ÝÇø×Ö½ÚÊýÁ¿
|
this.result = 0; //·µ»Ø²Ù×÷½á¹û
|
}
|
|
public boolean putByteBuffer(final ByteBuffer bf)
|
{
|
if(bf.limit() < BYTE_LEN)
|
return false;
|
|
ByteBuffer tmpbuf = bf;
|
int crc0 = tmpbuf.getShort(bf.limit()-2) & 0xFFFF;
|
|
int crc1 = Crc16.CalCRC16(tmpbuf, bf.limit()-2) & 0xFFFF;
|
if(crc0 != crc1) {
|
System.err.println("CRC error "+crc0+"==="+crc1);
|
return false;
|
}
|
tmpbuf.position(0);
|
|
this.addr = tmpbuf.get()&0xFF; //É豸µØÖ·
|
this.Cmd = tmpbuf.get()&0xFF; //¹¦ÄÜÂë
|
|
if(CMD_TYPE_READ == this.Cmd) {
|
this.data_count = tmpbuf.get()&0xFF;
|
|
}else if(CMD_TYPE_WRITE_STD == this.Cmd || CMD_TYPE_WRITE_MULTY == this.Cmd || CMD_TYPE_WRITE_SysUpdate == this.Cmd){
|
|
this.reg_addr = tmpbuf.getShort()&0xFFFF; //¼Ä´æÆ÷µØÖ·
|
this.result = tmpbuf.getShort()&0xFFFF;
|
}else if(CMD_TYPE_Read_UpdateFile == this.Cmd) {
|
//ºóÃæ¼´Éý¼¶°ü
|
this.result = tmpbuf.getShort()&0xFFFF; //Êý¾Ý°üË÷Òý
|
}
|
|
tmpbuf.compact();
|
tmpbuf.flip();
|
|
return true;
|
}
|
|
}
|