package com.dev.bmp7100;
|
|
import java.nio.ByteBuffer;
|
import java.nio.ByteOrder;
|
|
import com.base.Crc16;
|
|
public class bpm7100_CommData {
|
//------------------------------------------------------------------------//
|
final public static short REGADDR_NULL = 0x0000;
|
final public static short REGADDR_START = 0x0100;
|
//------------------------------------------------------------------------//
|
final public static byte MB_CMD_NULL = 0x00;
|
final public static byte MB_CMD_READ = 0x03;
|
final public static byte MB_CMD_WRITE = 0x05;
|
//------------------------------------------------------------------------//
|
final public static int CURR_DIR_CHARGE = 0;
|
final public static int CURR_DIR_DISCHARGE = 1;
|
//------------------------------------------------------------------------//
|
final public static int BATTSTATE_NULL = 0;
|
final public static int BATTSTATE_FLOAT = 1;
|
final public static int BATTSTATE_CHARGE = 2;
|
final public static int BATTSTATE_DISCHARGE = 3;
|
|
final public static int CMD_GET_BATT_VOL = 1;
|
final public static int CMD_GET_BATT_STATE = 2;
|
//------------------------------------------------------------------------//
|
final public static int BATT_COUNT_PER_DEV = 24;
|
final public static int BATT_GROUP_COUNT_MAX = 100;
|
final public static int BATT_MON_COUNT_MAX = 500;
|
//------------------------------------------------------------------------//
|
private boolean m_UsrWriteCmdAck = false;
|
//------------------------------------------------------------------------//
|
boolean batt_test_state = false;
|
//------------------------------------------------------------------------//
|
int rs485_addr = 0;
|
float module_version = 0;
|
float groupvol = 0;
|
float battcurr = 0;
|
float grouptmp = 0;
|
float[] battvol = new float[BATT_MON_COUNT_MAX];
|
short crc16 = 0;
|
//------------------------------------------------------------------------//
|
byte[] data_byte_tx;
|
byte[] data_byte_rx;
|
ByteBuffer data_bf;
|
//------------------------------------------------------------------------//
|
public bpm7100_CommData()
|
{
|
data_byte_tx = new byte[8];
|
data_byte_rx = new byte[256];
|
data_bf = ByteBuffer.allocate(512);
|
data_bf.order(ByteOrder.BIG_ENDIAN);
|
}
|
//------------------------------------------------------------------------//
|
public boolean getUsrWriteCmdAck()
|
{
|
return m_UsrWriteCmdAck;
|
}
|
//------------------------------------------------------------------------//
|
void makeDataToByteArray(byte addr, byte cmd, short reg_addr, short reg_count)
|
{
|
data_bf.clear();
|
if(MB_CMD_READ == cmd)
|
{
|
data_bf.put(addr);
|
data_bf.put(cmd);
|
data_bf.putShort(reg_addr);
|
data_bf.putShort(reg_count);
|
int crc = Crc16.CalCRC16(data_bf, 6)&0xFFFF;
|
data_bf.putShort((short) ((crc<<8) + (crc>>8)));
|
}
|
else if(MB_CMD_WRITE == cmd)
|
{
|
m_UsrWriteCmdAck = false;
|
data_bf.put(addr);
|
data_bf.put(cmd);
|
data_bf.putShort(reg_addr);
|
data_bf.putShort((short) 1);
|
int crc = Crc16.CalCRC16(data_bf, 6)&0xFFFF;
|
data_bf.putShort((short) ((crc<<8) + (crc>>8)));
|
}
|
|
data_bf.position(0);
|
data_bf.get(data_byte_tx);
|
}
|
//------------------------------------------------------------------------//
|
public boolean getDataFromByteArray(int rx_datacount)
|
{
|
boolean res = false;
|
|
data_bf.clear();
|
data_bf.put(data_byte_rx);
|
data_bf.flip();
|
/*********************************************************/
|
int crc = Crc16.CalCRC16(data_bf, rx_datacount-2)&0xFFFF;
|
crc = ((short) ((crc<<8) + (crc>>8)));
|
|
data_bf.position(rx_datacount-2);
|
short tmp_crc = data_bf.getShort();
|
/*********************************************************/
|
if(crc == tmp_crc)
|
{
|
data_bf.position(0);
|
|
data_bf.get();
|
byte cmd = data_bf.get();
|
data_bf.get();
|
|
rs485_addr = 0;
|
if(MB_CMD_READ == cmd)
|
{
|
rs485_addr = (data_bf.getShort()&0xFFFF);
|
module_version = (float)(data_bf.getShort()&0xFFFF) / 10;
|
grouptmp = ((float)(data_bf.getShort()&0xFFFF) / 10) - 10;
|
|
battcurr = ((float)(data_bf.getShort()&0xFFFF) / 1000) - 20;
|
groupvol = (float)(data_bf.getShort()&0xFFFF) / 10;
|
|
for(int n=0; n<BATT_COUNT_PER_DEV; n++) {
|
battvol[n] = ((float)(data_bf.getShort()&0xFFFF) / 1000) - 20;
|
}
|
|
res = true;
|
}
|
}
|
|
return res;
|
}
|
//------------------------------------------------------------------------//
|
public void clearData() {
|
grouptmp = 0;
|
battcurr = 0;
|
groupvol = 0;
|
|
for(int n=0; n<BATT_COUNT_PER_DEV; n++) {
|
battvol[n] = 0;
|
}
|
}
|
//------------------------------------------------------------------------//
|
}
|