/********************************* head of file SocketClient.java ***********************************/
|
package com.dev.fbs9100;
|
import java.io.IOException;
|
import java.io.InputStream;
|
import java.io.OutputStream;
|
import java.net.InetSocketAddress;
|
import java.net.Socket;
|
import java.nio.ByteBuffer;
|
import java.nio.ByteOrder;
|
import com.dev.fbs9100.FBS9100_CapState;
|
import com.dev.fbs9100.FBS9100_ChargeState;
|
import com.dev.fbs9100.FBS9100_Cmd;
|
import com.dev.fbs9100.FBS9100_ComBase;
|
import com.dev.fbs9100.FBS9100_ComBuf;
|
import com.dev.fbs9100.FBS9100_ParamBatt;
|
import com.dev.fbs9100.FBS9100_ParamCharge;
|
import com.dev.fbs9100.FBS9100_ParamDischarge;
|
import com.dev.fbs9100.FBS9100_ParamSystem;
|
import com.dev.fbs9100.FBS9100_ResCapData;
|
import com.dev.fbs9100.FBS9100_ResState;
|
import com.dev.fbs9100.FBS9100_VCData;
|
/****************************************************************************************************/
|
public class FBS9100_SocketClient extends Thread
|
{
|
private FBS9100_Cmd m_FBS_Cmd = new FBS9100_Cmd();
|
private FBS9100_VCData m_FBS_VCData = null;
|
private FBS9100_ParamBatt m_FBS_BattParam = new FBS9100_ParamBatt();
|
private FBS9100_ParamSystem m_FBS_SystemParam = new FBS9100_ParamSystem();
|
private FBS9100_ParamDischarge m_FBS_DiscParam = null;
|
private FBS9100_ParamDischarge m_FBS_DiscParamFromDev = null;
|
private FBS9100_ParamCharge m_FBS_ChargeParam = new FBS9100_ParamCharge();
|
private FBS9100_ResState m_ResTestState = new FBS9100_ResState();
|
private FBS9100_CapState m_CapTestState = new FBS9100_CapState();
|
private FBS9100_ChargeState m_ChrTestState = new FBS9100_ChargeState();
|
private FBS9100_ResCapData m_FBS_ResCapData = new FBS9100_ResCapData();
|
|
private FBS9100_StatAndParam m_StatAndParam = null;
|
private BattData_RT m_RTData = new BattData_RT();
|
private String mDevIp = "192.168.0.18";
|
private static final String TAG = "SocketClient_Thread";
|
|
/*********************************************************************************************/
|
public FBS9100_SocketClient(FBS9100_StatAndParam stat_param)
|
{
|
m_StatAndParam = stat_param;
|
m_FBS_VCData = m_StatAndParam.m_FBS_VCData;
|
m_FBS_DiscParam = m_StatAndParam.m_FBS_DiscParam;
|
m_FBS_DiscParamFromDev = m_StatAndParam.m_FBS_DiscParamFromDev;
|
|
mDevIp = m_StatAndParam.dev_ipaddr;
|
}
|
|
/*********************************************************************************************/
|
public void run()
|
{
|
this.setName(TAG);
|
System.out.println(this.getName() + " - FBS9100_SocketClientThread Started ...");
|
while(true)
|
{
|
try {
|
SocketComm(FBS9100_ComBase.CMD_GetVIData, ByteBuffer.allocate(0));
|
sleep(200);
|
|
if(FBS9100_ComBase.CMD_NULL == m_StatAndParam.op_cmd)
|
{
|
if(FBS9100_ComBase.CMD_SetDischargeParm == m_StatAndParam.m_FBS_DiscParam.op_cmd) {
|
if(true == SocketComm(FBS9100_ComBase.CMD_SetDischargeParm , m_StatAndParam.m_FBS_DiscParam.getByteBuffer()))
|
{
|
m_StatAndParam.op_cmd = FBS9100_ComBase.CMD_SetDischargeParmAck;
|
}
|
} else if( FBS9100_ComBase.CMD_Start == m_FBS_DiscParam.op_cmd ) {
|
int cmd = FBS9100_ComBase.CMD_StartDischarge;
|
if(cmd != m_FBS_DiscParam.test_cmd) {
|
cmd = FBS9100_ComBase.CMD_StartResDischarge;
|
}
|
if(true == SocketComm(cmd, ByteBuffer.allocate(0))) {
|
m_StatAndParam.op_cmd = FBS9100_ComBase.CMD_StartAck;
|
}
|
} else if(FBS9100_ComBase.CMD_Stop == m_FBS_DiscParam.op_cmd) {
|
if(true == SocketComm(FBS9100_ComBase.CMD_Stop, ByteBuffer.allocate(0))) {
|
m_StatAndParam.op_cmd = FBS9100_ComBase.CMD_StopAck;
|
}
|
} else if(FBS9100_ComBase.CMD_GetDischargeParm == m_FBS_DiscParam.op_cmd) {
|
if(true == SocketComm(FBS9100_ComBase.CMD_GetDischargeParm, ByteBuffer.allocate(0))) {
|
m_StatAndParam.op_cmd = FBS9100_ComBase.CMD_GetDischargeParmAck;
|
}
|
}
|
}
|
|
//-----------------------------------------------------------------------------------//
|
//-----------------------------------------------------------------------------------//
|
if(FBS9100_ComBase.BattState_Discharge == m_FBS_VCData.m_SysState.WorkState)
|
{
|
//------------- Èç¹ûÊÇÄÚ×è²âÊÔ,Ôò×Ô¶¯¶Áȡһ´ÎFBS9100É豸ÉϵIJÎÊý -----------//
|
if(FBS9100_ComBase.TestType_RES == m_FBS_VCData.m_SysState.TestType) {
|
if ((FBS9100_ComBase.TestType_RES != m_StatAndParam.test_type)
|
&& (FBS9100_ComBase.CMD_NULL == m_StatAndParam.op_cmd)) {
|
if(true == SocketComm(FBS9100_ComBase.CMD_GetDischargeParm, ByteBuffer.allocate(0))) {
|
m_StatAndParam.op_cmd = FBS9100_ComBase.CMD_GetDischargeParmAck;
|
m_StatAndParam.test_type = FBS9100_ComBase.TestType_RES;
|
}
|
}
|
} else {//------ Èç¹ûÊÇÈÝÁ¿·Åµç²âÊÔ,Ôò×Ô¶¯¶Áȡһ´ÎFBS9100É豸ÉϵIJÎÊý ------//
|
if ((FBS9100_ComBase.TestType_CAP != m_StatAndParam.test_type)
|
&&(FBS9100_ComBase.CMD_NULL == m_StatAndParam.op_cmd)) {
|
if(true == SocketComm(FBS9100_ComBase.CMD_GetDischargeParm, ByteBuffer.allocate(0))) {
|
m_StatAndParam.op_cmd = FBS9100_ComBase.CMD_GetDischargeParmAck;
|
m_StatAndParam.test_type = FBS9100_ComBase.TestType_CAP;
|
}
|
}
|
}
|
}
|
|
sleep(100);
|
SocketComm(FBS9100_ComBase.CMD_GetMonomerRES, ByteBuffer.allocate(0));
|
sleep(200);
|
SocketComm(FBS9100_ComBase.CMD_GetMonomerTMP, ByteBuffer.allocate(0));
|
|
if(FBS9100_ComBase.TestType_RES == m_StatAndParam.test_type)
|
{
|
sleep(100);
|
if(true == SocketComm(FBS9100_ComBase.CMD_GetResTestState, ByteBuffer.allocate(0)))
|
{
|
m_FBS_VCData.m_SysState.ResBattIndexMax = m_ResTestState.ResBattIndexMax;
|
m_FBS_VCData.m_SysState.ResBattIndex = m_ResTestState.ResBattIndex;
|
}
|
|
//------ ÄÚ×è²âÊÔÍ£Ö¹µÄʱºò,×Ô¶¯¼Ç¼һ´ÎÄÚ×èÖµµ½Êý¾Ý¿â ------//
|
if(FBS9100_ComBase.TestType_RES != m_FBS_VCData.m_SysState.TestType)
|
{
|
m_StatAndParam.test_type = FBS9100_ComBase.TestType_NULL;
|
/*
|
int index = m_ResTestState.BattGroupNum - 1;
|
if((index >= 0) && (index<m_RTData.length) && (null != m_RTData[index])) {
|
m_RTData[index].setStoreBattRes_DataEnStat(true);
|
}
|
*/
|
}
|
} else if (FBS9100_ComBase.TestType_CAP == m_StatAndParam.test_type) {
|
if(FBS9100_ComBase.TestType_CAP != m_FBS_VCData.m_SysState.TestType)
|
{
|
m_StatAndParam.test_type = FBS9100_ComBase.TestType_NULL;
|
}
|
}
|
//-----------------------------------------------------------------------------------//
|
//-----------------------------------------------------------------------------------//
|
|
sleep(100);
|
|
} catch (InterruptedException e) {
|
//e.printStackTrace();
|
try {
|
sleep(2000);
|
} catch (InterruptedException e1) {
|
// TODO Auto-generated catch block
|
//e1.printStackTrace();
|
}
|
}
|
}
|
}
|
/*********************************************************************************************/
|
/*********************************************************************************************/
|
/**
|
* ʹÓÃsocket Á¬½ÓÖ¸¶¨µÄipÉ豸µÄ9001¶Ë¿Ú²¢ÇÒ·¢ËÍÊý¾Ý£¬ÒÔ¼°½ÓÊÕÊý¾Ý
|
* @param cmd
|
* @param bf
|
* @return
|
* @throws InterruptedException
|
*/
|
public boolean SocketComm(int cmd, ByteBuffer bf) throws InterruptedException
|
{
|
boolean res = false;
|
try
|
{
|
Socket socket = new Socket();
|
socket.connect(new InetSocketAddress(mDevIp, 9001), 3000);
|
if(socket.isConnected())
|
{
|
InputStream in = socket.getInputStream();
|
OutputStream out = socket.getOutputStream();
|
|
out.write(makeCommBuf(cmd, bf));
|
|
for(int n=0; n<100; n++)
|
{
|
sleep(10);
|
int len1 = in.available();
|
if(len1 <= 0)
|
continue;
|
|
sleep(10);
|
|
if(in.available() == len1)
|
break;
|
}
|
|
byte[] buffer = new byte[in.available()];
|
in.read(buffer);
|
|
getDataFromCommBuf(buffer);
|
|
in.close();
|
socket.close();
|
res = true;
|
|
if(buffer.length > 8) {
|
m_FBS_VCData.m_SysState.setCommCountInc();
|
} else {
|
m_FBS_VCData.m_SysState.setErrCommCountInc();
|
}
|
} else {
|
m_FBS_VCData.m_SysState.setErrCommCountInc();
|
}
|
}
|
catch (IOException e)
|
{
|
//e.printStackTrace();
|
m_FBS_VCData.m_SysState.setErrCommCountInc();
|
}
|
|
return res;
|
}
|
/*********************************************************************************************/
|
/*********************************************************************************************/
|
public byte[] makeCommBuf(final int cmd, ByteBuffer bf)
|
{
|
return (FBS9100_ComBuf.makeFbs9100CommBuf(0, cmd, bf).array());
|
}
|
/*********************************************************************************************/
|
public String getDataFromCommBuf(final byte[] bytes)
|
{
|
ByteBuffer bf = ByteBuffer.allocate(bytes.length);
|
bf.order(ByteOrder.LITTLE_ENDIAN);
|
bf.put(bytes);
|
bf.flip();
|
|
String msg = "";
|
if(true == m_FBS_Cmd.putByteBuffer(bf))
|
{
|
//------------------- ¶ÁÈ¡FBS9100µçѹµçÁ÷Êý¾Ý --------------------
|
if(FBS9100_ComBase.CMD_GetVIData == m_FBS_Cmd.CMD)
|
{
|
if(true == m_FBS_VCData.m_SysState.putByteBuffer(bf))
|
{
|
if(true == m_FBS_VCData.putByteBuffer(bf))
|
{
|
getFBS9100MonVolData(m_FBS_VCData);
|
}
|
}
|
}
|
//------------------- ¶ÁÈ¡FBS9100ÄÚ×è²âÊÔ״̬ -----------------------
|
if(FBS9100_ComBase.CMD_GetResTestState == m_FBS_Cmd.CMD)
|
{
|
if(true == m_ResTestState.putByteBuffer(bf))
|
msg = "Get ResTest State from FBS9100 OK!!!";
|
}
|
//------------------- ¶ÁÈ¡FBS9100ÈÝÁ¿²âÊÔ״̬ -----------------------
|
if(FBS9100_ComBase.CMD_GetDischargeState == m_FBS_Cmd.CMD)
|
{
|
if(true == m_CapTestState.putByteBuffer(bf))
|
msg = "Get CapTest State from FBS9100 OK!!!";
|
}
|
//------------------- ¶ÁÈ¡FBS9100³äµç²âÊÔ״̬ -----------------------
|
if(FBS9100_ComBase.CMD_GetChargeState == m_FBS_Cmd.CMD)
|
{
|
if(true == m_ChrTestState.putByteBuffer(bf))
|
msg = "Get ChrTest State from FBS9100 OK!!!";
|
}
|
//------------------- ¶ÁÈ¡FBS9100µç³Ø²ÎÊý -------------------------
|
else if(FBS9100_ComBase.CMD_GetBattParam == m_FBS_Cmd.CMD)
|
{
|
if(true == m_FBS_BattParam.putByteBuffer(bf))
|
msg = "Get battparam from FBS9100 OK!!!";
|
}
|
//------------------- ÉèÖÃFBS9100µç³Ø²ÎÊý -------------------------
|
else if(FBS9100_ComBase.CMD_SetBattParam == m_FBS_Cmd.CMD) {
|
if(true == m_FBS_BattParam.putByteBuffer(bf))
|
msg = "Set battparam to FBS9100 OK!!!";
|
}
|
//------------------- ¶ÁÈ¡FBS9100ϵͳ²ÎÊý -------------------------
|
else if(FBS9100_ComBase.CMD_GetSYSSetParam == m_FBS_Cmd.CMD)
|
{
|
if(true == m_FBS_SystemParam.putByteBuffer(bf))
|
msg = "Get sysparam from FBS9100 OK!!!";
|
}
|
//------------------- ÉèÖÃFBS9100ϵͳ²ÎÊý -------------------------
|
else if(FBS9100_ComBase.CMD_SetSYSSetParam == m_FBS_Cmd.CMD)
|
{
|
if(true == m_FBS_SystemParam.putByteBuffer(bf))
|
msg = "Set sysparam to FBS9100 OK!!!";
|
}
|
//------------------- ¶ÁÈ¡FBS9100·Åµç²ÎÊý -------------------------
|
else if(FBS9100_ComBase.CMD_GetDischargeParm == m_FBS_Cmd.CMD)
|
{
|
if(true == m_FBS_DiscParamFromDev.putByteBuffer(bf))
|
msg = "Get DischargeParm from FBS9100 OK!!!";
|
}
|
//------------------- ÉèÖÃFBS9100·Åµç²ÎÊý -------------------------
|
else if(FBS9100_ComBase.CMD_SetDischargeParm == m_FBS_Cmd.CMD)
|
{
|
if(true == m_FBS_DiscParam.putByteBuffer(bf))
|
msg = "Set DischargeParam to FBS9100 OK!!!";
|
}
|
//------------------- ¶ÁÈ¡FBS9100³äµç²ÎÊý -------------------------
|
else if(FBS9100_ComBase.CMD_GetChargeParm == m_FBS_Cmd.CMD)
|
{
|
if(true == m_FBS_ChargeParam.putByteBuffer(bf))
|
msg = "Get ChargeParam from FBS9100 OK!!!";
|
}
|
//------------------- ÉèÖÃFBS9100³äµç²ÎÊý -------------------------
|
else if(FBS9100_ComBase.CMD_SetChargeParm == m_FBS_Cmd.CMD)
|
{
|
if(true == m_FBS_ChargeParam.putByteBuffer(bf))
|
msg = "Set ChargeParam to FBS9100 OK!!!";
|
}
|
//------------------- ¶ÁÈ¡FBS9100ÈÝÁ¿ÄÚ×è²âÊÔÊý¾Ý ------------------
|
else if((FBS9100_ComBase.CMD_GetMonomerRES == m_FBS_Cmd.CMD)
|
||(FBS9100_ComBase.CMD_GetMonomerTMP == m_FBS_Cmd.CMD)
|
/*||(FBS_ComBase.CMD_GetMonomerCAP == m_FBS_Cmd.CMD)
|
||(FBS_ComBase.CMD_GetMonomerChargeCAP == m_FBS_Cmd.CMD)*/)
|
{
|
if(true == m_FBS_ResCapData.putByteBuffer(bf, m_FBS_Cmd.CMD))
|
{
|
getFBS9100MonResData(m_FBS_Cmd.CMD, m_FBS_ResCapData);
|
//msg = "Get MonomerCAP or MonomerRES from FBS9100 OK!!!";
|
}
|
}
|
}
|
|
return msg;
|
}
|
/*********************************************************************************************/
|
private void getFBS9100MonVolData(FBS9100_VCData vc_data)
|
{
|
int mon_index = 0;
|
for(int n=0; n<FBS9100_ComBase.BattGroupCountMax; n++)
|
{
|
if(null != m_RTData)
|
{
|
if(FBS9100_ComBase.BattState_Discharge == vc_data.battstate[n])
|
{
|
vc_data.battcurr[n] *= -1;
|
}
|
|
m_RTData.mTestData.updateCurrFrom_FBSDev((float) vc_data.battcurr[n]);
|
m_RTData.mTestData.updateGroupVolFrom_FBSDev((float) vc_data.groupvol[n]);
|
for(int index=0; index<m_RTData.MonCount; index++)
|
{
|
if(mon_index >= FBS9100_ComBase.MonomerCountMax) {
|
break;
|
}
|
m_RTData.al_MonVol.get(index).monVol = (float) vc_data.vol[mon_index];
|
mon_index++;
|
}
|
}
|
}
|
}
|
/*********************************************************************************************/
|
private void getFBS9100MonResData(int cmd, FBS9100_ResCapData res_data)
|
{
|
int mon_index = 0;
|
for(int n=0; n<FBS9100_ComBase.BattGroupCountMax; n++)
|
{
|
if(null != m_RTData)
|
{
|
for(int index=0; index<m_RTData.MonCount; index++)
|
{
|
if(mon_index >= FBS9100_ComBase.MonomerCountMax)
|
break;
|
|
if(FBS9100_ComBase.CMD_GetMonomerRES == cmd) {
|
m_RTData.al_MonVol.get(index).monRes = (float) res_data.m_DATA[mon_index];
|
} else if(FBS9100_ComBase.CMD_GetMonomerTMP == cmd) {
|
m_RTData.al_MonVol.get(index).monTmp = (float) res_data.m_DATA[mon_index];
|
}
|
|
mon_index++;
|
}
|
}
|
}
|
}
|
/*********************************************************************************************/
|
}
|
/********************************* end of file SocketClient.java *************************************/
|