package com.dev.fbs9600;
|
|
import com.base.Com;
|
import com.battdata_rt.BattData_RT;
|
import com.battdata_rt.BattData_RT_Array;
|
import com.battdata_rt.BattData_RT_SQL;
|
import com.battdata_rt.BattStatData;
|
import com.battdata_rt.MonVolData;
|
import com.dev.fbs9100.ComFn;
|
import com.dev.fbs9100.FBS9100_ComBase;
|
import com.dev.modbus4j.MyModbusFactory;
|
import com.dev.modbus4j.MyModbusMaster;
|
import com.dev.modbus4j.MyModbusUtils;
|
import com.serotonin.modbus4j.BatchRead;
|
import com.serotonin.modbus4j.BatchResults;
|
import com.serotonin.modbus4j.code.DataType;
|
import com.sql.MysqlConnPool;
|
import java.io.IOException;
|
import java.io.InputStream;
|
import java.io.OutputStream;
|
import java.net.InetSocketAddress;
|
import java.net.Socket;
|
import java.util.ArrayList;
|
import java.util.Date;
|
|
import org.apache.logging.log4j.LogManager;
|
import org.apache.logging.log4j.Logger;
|
|
|
public class FBS9600_SocketClient2 extends Thread {
|
private static final int ReadRateDefault = 10; //默认读取速率
|
private static final int ReadRateTest = 1; //测试读取速率
|
|
|
private static final int BATT_MAXGOROUP_COUNT = 16;
|
private static final String TAG = "FBS9600_SocketClient2";
|
private String socketServerIp = "192.168.0.66";
|
private FBS9600_State m_FBS9600_State;
|
private FBS9600_CommData m_CommDataOut = new FBS9600_CommData();
|
private FBS9600_CommData m_CommDataIn = new FBS9600_CommData();
|
|
private BattData_RT[] m_RTData = new BattData_RT[BATT_MAXGOROUP_COUNT];
|
public int m_FBSDevId = 0;
|
private final boolean m_IsTcpModbus;
|
private int m_BattMonCount = 0;
|
|
private byte m_ModbusCmd_Usr = 0;
|
private short m_ReadRegAddr_Usr = 0;
|
|
private short m_ReadRegAddr = 4;
|
private short m_ReadRegCount = 0;
|
private MysqlConnPool conn = null;
|
private ArrayList<FBS9600_State> al_stat;
|
private int[] a_BattMonCount = new int[4]; //每组电池的单体个数
|
private int batt_Group_Num = 0;
|
private int data_Num = 0; //电池组组数
|
private int[] reg_count_arr = new int[4];
|
private int reg_count_last = 0;
|
private Socket m_socket;
|
private MyModbusMaster master;
|
private Logger logger;
|
private BattData_RT_Array m_Data;
|
private boolean S_thread_run_flag;
|
private int ReadRate = ReadRateTest;
|
|
public boolean initFBS9611CommDev() {
|
boolean reg_in_st = false;
|
for(int cnt=0; cnt<3; cnt++) {
|
try {
|
boolean f = readDev_IdFromModbus(master);
|
//System.out.println(((m_FBS9600_State.check_dev_id/100000) == 9611)+"==="+f);
|
if(((m_FBS9600_State.check_dev_id/10000000) == 96) && f) {
|
//if(((m_FBS9600_State.check_dev_id/100000) == 4019) && f) {
|
logger.trace("m_StatAndParam.check_dev_id:" + m_FBS9600_State.check_dev_id);
|
for(int i=0; i<m_Data.getItemCount(); i++) {
|
int dev_id_t = m_Data.getItem(i).FBSDeviceId;
|
if(m_Data.getItem(i).FBSDeviceId == m_FBS9600_State.check_dev_id) {
|
m_FBS9600_State.dev_id = dev_id_t;
|
reg_in_st = true;
|
}
|
}
|
logger.trace("reg_in_st:" + reg_in_st);
|
|
if(true == reg_in_st) {
|
m_FBS9600_State.ip_addr = this.m_socket.getInetAddress().getHostAddress().toString();
|
logger.trace("devid:" + m_FBS9600_State.dev_id
|
+ ", 数据库中匹配devid成功!!!!!, IP:" + this.m_socket.getInetAddress().getHostAddress());
|
} else {
|
logger.trace("devid:" + m_FBS9600_State.check_dev_id
|
+ ", 数据库中未找到匹配的devid, IP:" + this.m_socket.getInetAddress().getHostAddress());
|
break;
|
}
|
|
} else {
|
logger.trace(this.getName() + " initFBS9611CommDev() devid:" + m_FBS9600_State.check_dev_id
|
+ ", 识别FBS9611设备失败 ");
|
reg_in_st = false;
|
}
|
|
if(true == reg_in_st) {
|
break;
|
}
|
Thread.sleep(1000);
|
} catch (InterruptedException e) {
|
logger.error(e.toString(), e);
|
}
|
}
|
return reg_in_st;
|
}
|
|
@Override
|
public void run() {
|
this.setName(TAG + ": " + this.getId());
|
logger.info("识别当前的机器是否是FBS9611设备");
|
S_thread_run_flag = initFBS9611CommDev();
|
if(S_thread_run_flag) {
|
this.m_FBSDevId = this.m_FBS9600_State.dev_id;
|
this.socketServerIp = this.m_FBS9600_State.ip_addr;
|
this.al_stat = new ArrayList();
|
this.al_stat.add(this.m_FBS9600_State);
|
for (int n = 0; n < BATT_MAXGOROUP_COUNT; n++)
|
this.m_RTData[n] = null;
|
for (int n = 0; n < m_Data.getItemCount(); n++) {
|
if (m_Data.getItem(n).FBSDeviceId == this.m_FBSDevId) {
|
this.m_RTData[(m_Data.getItem(n).GroupIndexInFBSDevice % BATT_MAXGOROUP_COUNT)] = m_Data.getItem(n);
|
this.data_Num = (m_Data.getItem(n).GroupIndexInFBSDevice % BATT_MAXGOROUP_COUNT)+1;
|
|
this.a_BattMonCount[(m_Data.getItem(n).GroupIndexInFBSDevice % BATT_MAXGOROUP_COUNT)] = m_Data.getItem(n).MonCount;
|
}
|
}
|
//System.out.println();
|
if (this.m_BattMonCount > 392) {
|
this.m_BattMonCount = 392;
|
}
|
FBS9600_State_SQL.queryFBS9100State_Table(conn, m_FBS9600_State);
|
|
|
|
this.m_ReadRegAddr = getbattGroupAddr((short) 4, this.batt_Group_Num);
|
this.m_ReadRegCount = 0;
|
|
FBS9600_State_SQL.insertFBS9100SetParam_Table(conn, m_FBS9600_State);
|
|
FBS9600_State_SQL.insertFBS9600SetParam_Table(conn, m_FBS9600_State);
|
|
FBS9600_State_SQL.insertFBS9100State_Table(conn, m_FBS9600_State);
|
|
logger.info("设备ID:"+this.m_FBSDevId+"\t电池组组数:"+this.data_Num+"\t"+Com.getDateTimeFormat(new Date(), Com.DTF_YMDhms));
|
}
|
|
if(this.data_Num < 1) {
|
this.data_Num = 1;
|
}
|
|
int run_count = 0;
|
int read_group_index = 0;
|
int read_mon_index = 0;
|
while(S_thread_run_flag) {
|
try {
|
if(run_count %(14*ReadRate/this.data_Num) == 0) {
|
//System.out.println("读取单体数据组号:"+(read_mon_index+1) + " = " + Com.getDateTimeFormat(new Date(), Com.DTF_YMDhms));
|
if(null != m_RTData[read_mon_index]) {
|
readMonData(m_RTData[read_mon_index],read_mon_index);
|
//System.out.println("读取单体数据:"+(read_mon_index+1)+ "\t MonCount:"+ m_RTData[read_group_index].MonCount + "\t" +Com.getDateTimeFormat(new Date(), Com.DTF_YMDhms));
|
Thread.sleep(100);
|
}
|
read_mon_index ++;
|
if(!(read_mon_index < data_Num)) {
|
read_mon_index = 0;
|
}
|
|
}
|
|
if(run_count % (14/this.data_Num) == 0) {
|
//读取组端数据信息
|
if(null != m_RTData[read_group_index]) {
|
//System.out.println("读取组端数据" +(read_mon_index+1)+ "\t MonCount:"+ m_RTData[read_group_index].MonCount + "\t" +Com.getDateTimeFormat(new Date(), Com.DTF_YMDhms));
|
readGroupData(m_RTData[read_group_index],read_group_index);
|
|
//Thread.sleep(50);
|
}
|
read_group_index++;
|
if(!(read_group_index < data_Num)) {
|
read_group_index = 0;
|
}
|
/*
|
* 更新当前设备状态,避免平台拓扑图充放电时没有变化
|
*/
|
m_FBS9600_State.setWorkState(getDevWorkState());
|
|
|
FBS9600_State_SQL.updateFBS9100State_Table(conn,m_FBS9600_State);
|
}
|
// if(getDevWorkState() > 0) {
|
// ReadRate = ReadRateTest;
|
// }else {
|
// ReadRate = ReadRateDefault;
|
// }
|
|
FBS9600_State_SQL.queryFBS9600SetParamTable(conn, m_FBS9600_State);
|
if(m_FBS9600_State.getFBS9600Cmd() == FBS9600_CommData.CMD_StartResTest ||
|
m_FBS9600_State.getFBS9600Cmd() == FBS9600_CommData.CMD_StopResTest ) {
|
if(m_FBS9600_State.getFBS9600Cmd() == FBS9600_CommData.CMD_StartResTest) {
|
//启动内阻测试
|
boolean success = writeResTestControl(m_FBS9600_State.BattGroupNum,true);
|
if(success) {
|
m_FBS9600_State.setFBS9600Cmd(FBS9600_CommData.CMD_StartResTestAck);
|
}else {
|
m_FBS9600_State.setFBS9600Cmd(FBS9600_CommData.CMD_Test_NULL_Ack);
|
}
|
logger.info(m_FBS9600_State.dev_id + " 启动组"+m_FBS9600_State.BattGroupNum+"内阻测试:"+success);
|
}else if(m_FBS9600_State.getFBS9600Cmd() == FBS9600_CommData.CMD_StopResTest) {
|
//停止内阻测试
|
boolean success = writeResTestControl(m_FBS9600_State.BattGroupNum,false);
|
if(success) {
|
m_FBS9600_State.setFBS9600Cmd(FBS9600_CommData.CMD_StopResTestAck);
|
}else {
|
m_FBS9600_State.setFBS9600Cmd(FBS9600_CommData.CMD_Test_NULL_Ack);
|
}
|
logger.info(m_FBS9600_State.dev_id + " 停止组"+m_FBS9600_State.BattGroupNum+"内阻测试:"+success);
|
}
|
FBS9600_State_SQL.updateFBS9600SetParamTable(conn, m_FBS9600_State);
|
}
|
|
FBS9600_State_SQL.queryFBS9100SetParam_Table(conn, m_FBS9600_State);
|
if(m_FBS9600_State.getFBS9600Cmd() == FBS9600_CommData.CMD_StartResTest) {
|
//if(param.TestCmd == Concentrator_ComBase.CMD_StartResDischarge) {
|
if(m_FBS9600_State.BattGroupNum < 1) {
|
m_FBS9600_State.BattGroupNum = 1;
|
}
|
boolean success = writeResTestControl(m_FBS9600_State.BattGroupNum,true);
|
if(success) {
|
m_FBS9600_State.setFBS9600Cmd(FBS9600_CommData.CMD_StartResTestAck);
|
}else {
|
m_FBS9600_State.setFBS9600Cmd(FBS9600_CommData.CMD_Test_NULL_Ack);
|
}
|
logger.info(m_FBS9600_State.dev_id + " 启动组"+m_FBS9600_State.BattGroupNum+"内阻测试:"+success);
|
FBS9600_State_SQL.updateFBS9100SetParam_Table(conn, m_FBS9600_State);
|
//}
|
}else if(m_FBS9600_State.getFBS9600Cmd() == FBS9600_CommData.CMD_StopResTest) {
|
//停止内阻测试
|
if(m_FBS9600_State.BattGroupNum < 1) {
|
m_FBS9600_State.BattGroupNum = 1;
|
}
|
//停止内阻测试
|
boolean success = writeResTestControl(m_FBS9600_State.BattGroupNum,false);
|
if(success) {
|
m_FBS9600_State.setFBS9600Cmd(FBS9600_CommData.CMD_StopResTestAck);
|
}else {
|
m_FBS9600_State.setFBS9600Cmd(FBS9600_CommData.CMD_Test_NULL_Ack);
|
}
|
logger.info(m_FBS9600_State.dev_id + " 停止组"+m_FBS9600_State.BattGroupNum+"内阻测试:"+success);
|
FBS9600_State_SQL.updateFBS9100SetParam_Table(conn, m_FBS9600_State);
|
}
|
|
|
run_count++;
|
if(run_count > 9999999) {
|
run_count = 0;
|
}
|
|
|
m_FBS9600_State.setCommData(master);
|
if(master.getConnectState() == 0) {
|
//通讯超时
|
S_thread_run_flag = false;
|
}
|
|
Thread.sleep(100);
|
} catch (Exception e) {
|
e.printStackTrace();
|
}
|
}
|
master.destory();
|
logger.trace(m_FBS9600_State.dev_id+" Disconnect at " + Com.getDateTimeFormat(new Date(), Com.DTF_YMDhms));
|
}
|
|
private boolean writeResTestControl(int battGroupNum, boolean b) {
|
if(battGroupNum < 1) {
|
battGroupNum = 1;
|
}
|
int offset = (battGroupNum-1)*0x1000+0x0FF7;
|
return MyModbusUtils.writeHoldingRegister(offset,b?1:0, DataType.TWO_BYTE_INT_UNSIGNED, master);
|
}
|
|
private void readGroupData(BattData_RT battData_RT,int index) {
|
BatchRead<Integer> batch = m_FBS9600_State.createGruopBatchRead(master,index);
|
BatchResults<Integer> res = MyModbusUtils.readMutilRegisters(batch, master);
|
if(m_FBS9600_State.putGroupBatchResult(res,index,battData_RT)) {
|
battData_RT.updata_BattRtSate_To_RamDb(); //更新电池组端数据
|
}
|
if(m_FBS9600_State.batt_type[index] == 1) {
|
//读取锂电池数据
|
batch = m_FBS9600_State.createLithiumBatchRead(master,index);
|
res = MyModbusUtils.readMutilRegisters(batch, master);
|
if(m_FBS9600_State.putLithiumBatchResult(res,index,battData_RT)) {
|
FBS9600_State_SQL.insertOrUpdate(conn, m_FBS9600_State.lidata[index]); //更新锂电池实时数据
|
}
|
}
|
}
|
|
private void readMonData(BattData_RT battData_RT,int index) {
|
try {
|
//Date start = new Date();
|
BatchRead<Integer> batch1 = m_FBS9600_State.createMonVolBatchRead(master,index,battData_RT.MonCount);
|
BatchResults<Integer> res1 = MyModbusUtils.readMutilRegisters(batch1, master);
|
m_FBS9600_State.putMonVolBatchResult(res1,index,battData_RT);
|
|
Thread.sleep(50);
|
|
BatchRead<Integer> batch2 = m_FBS9600_State.createMonResBatchRead(master,index,battData_RT.MonCount);
|
BatchResults<Integer> res2 = MyModbusUtils.readMutilRegisters(batch2, master);
|
m_FBS9600_State.putMonResBatchResult(res2,index,battData_RT);
|
|
Thread.sleep(50);
|
|
//System.out.println("index"+index+"\tMonCount:"+battData_RT.MonCount);
|
BatchRead<Integer> batch3 = m_FBS9600_State.createMonTmpBatchRead(master,index,battData_RT.MonCount);
|
BatchResults<Integer> res3 = MyModbusUtils.readMutilRegisters(batch3, master);
|
m_FBS9600_State.putMonTmpBatchResult(res3,index,battData_RT);
|
|
|
Thread.sleep(50);
|
{
|
//读取单体均衡电流
|
BatchRead<Integer> batch4 = m_FBS9600_State.createMonJhCurrBatchRead(master,index,battData_RT.MonCount);
|
BatchResults<Integer> res4 = MyModbusUtils.readMutilRegisters(batch4, master);
|
m_FBS9600_State.putMonJhCurrBatchResult(res4,index,battData_RT);
|
|
//Thread.sleep(50);
|
|
//读取单体漏液电压
|
|
}
|
} catch (Exception e) {
|
logger.error(e.toString(), e);
|
}
|
|
//Date end = new Date();
|
//logger.info("读取单体数据耗时"+(end.getTime()-start.getTime()));
|
battData_RT.updata_BattRtData_To_RamDb(); //更新电池组端数据
|
}
|
|
public FBS9600_SocketClient2(Socket m_socket,BattData_RT_Array AL_RTdata, MysqlConnPool mConnPool) {
|
this.m_socket = m_socket;
|
this.m_Data = AL_RTdata;
|
this.master = new MyModbusMaster(m_socket, MyModbusFactory.ModBus_RTU, 0xFF);
|
this.m_FBS9600_State = new FBS9600_State(m_socket.getInetAddress().toString(), 961100001);
|
this.logger = LogManager.getLogger(this);
|
this.conn = mConnPool;
|
this.m_IsTcpModbus = false;
|
|
}
|
|
private void checkAndSetUsrCmdAndRegAddr() {
|
try {
|
FBS9600_State_SQL.queryFbs9600UsrCmd(this.conn, this.al_stat);
|
Thread.sleep(100L);
|
} catch (InterruptedException localInterruptedException) {
|
|
}
|
if ((81 == this.m_FBS9600_State.getFBS9600Cmd()) && (!this.m_FBS9600_State.getFBS9600CmdAckFromDev())) {
|
this.m_ModbusCmd_Usr = 6;
|
|
this.m_ReadRegAddr_Usr = getbattGroupAddr((short) 4087, this.batt_Group_Num);
|
}
|
}
|
|
private void clearInputStream(InputStream is) throws InterruptedException, IOException {
|
for (int n = 0; n < 20; n++) {
|
Thread.sleep(10L);
|
while (is.available() > 0) {
|
is.read();
|
}
|
}
|
}
|
|
private boolean read_data(InputStream is, byte[] buf, int rx_cnt) throws InterruptedException, IOException {
|
int rx_sum = rx_cnt;
|
if (rx_sum > buf.length) {
|
rx_sum = buf.length;
|
}
|
int rx_count = 0;
|
|
boolean comm_ok = true;
|
for (rx_count = 0; rx_count < rx_sum; rx_count++) {
|
int time_out_count = 0;
|
while (is.available() < 1) {
|
Thread.sleep(40L);
|
time_out_count++;
|
if (time_out_count > 100) {
|
comm_ok = false;
|
break;
|
}
|
}
|
|
if (!comm_ok) {
|
break;
|
}
|
buf[rx_count] = ((byte) is.read());
|
}
|
System.out.println("接收数据" + ComFn.bytesToHexString(buf, buf.length));
|
return comm_ok;
|
}
|
|
public boolean lanchSocket(byte cmd_t, short reg_count, short rx_datacount, int reg_count_last) {
|
boolean comm_ok = false;
|
for (int cnt = 0; cnt < 10; cnt++) {
|
Socket socket = this.m_socket;
|
InputStream mInStream = null;
|
OutputStream mOutStream = null;
|
try {
|
//socket.connect(new InetSocketAddress(this.socketServerIp, 9600), 5000);
|
socket.setSoTimeout(5000);
|
mInStream = socket.getInputStream();
|
mOutStream = socket.getOutputStream();
|
|
byte[] tx_buf = this.m_CommDataOut.makeDataToByteArray(this.m_IsTcpModbus, (byte) 1, cmd_t,
|
this.m_ReadRegAddr, reg_count);
|
|
mOutStream.write(tx_buf);
|
mOutStream.flush();
|
System.out.println("发送数据" + ComFn.bytesToHexString(tx_buf, tx_buf.length));
|
if (read_data(mInStream, this.m_CommDataIn.data_byte_rx, rx_datacount))
|
comm_ok = this.m_CommDataIn.getDataFromByteArray(this.m_IsTcpModbus, this.m_ReadRegAddr, reg_count,
|
rx_datacount, reg_count_last);
|
else {
|
comm_ok = false;
|
}
|
clearInputStream(mInStream);
|
} catch (IOException | InterruptedException e) {
|
comm_ok = false;
|
} finally {
|
if(!comm_ok) {
|
|
}
|
}
|
}
|
|
return comm_ok;
|
}
|
|
public boolean lanchSocketOld(byte cmd_t, short reg_count, short rx_datacount, int reg_count_last) {
|
boolean comm_ok = false;
|
for (int cnt = 0; cnt < 10; cnt++) {
|
Socket socket = new Socket();
|
InputStream mInStream = null;
|
OutputStream mOutStream = null;
|
try {
|
socket.connect(new InetSocketAddress(this.socketServerIp, 9600), 5000);
|
socket.setSoTimeout(5000);
|
mInStream = socket.getInputStream();
|
mOutStream = socket.getOutputStream();
|
|
byte[] tx_buf = this.m_CommDataOut.makeDataToByteArray(this.m_IsTcpModbus, (byte) 1, cmd_t,
|
this.m_ReadRegAddr, reg_count);
|
|
mOutStream.write(tx_buf);
|
mOutStream.flush();
|
System.out.println("发送数据" + ComFn.bytesToHexString(tx_buf, tx_buf.length));
|
if (read_data(mInStream, this.m_CommDataIn.data_byte_rx, rx_datacount))
|
comm_ok = this.m_CommDataIn.getDataFromByteArray(this.m_IsTcpModbus, this.m_ReadRegAddr, reg_count,
|
rx_datacount, reg_count_last);
|
else {
|
comm_ok = false;
|
}
|
clearInputStream(mInStream);
|
} catch (IOException | InterruptedException e) {
|
comm_ok = false;
|
try {
|
socket.close();
|
mInStream.close();
|
mOutStream.close();
|
} catch (IOException localIOException) {
|
}
|
if (comm_ok)
|
break;
|
try {
|
Thread.sleep(1000L);
|
} catch (InterruptedException e1) {
|
e1.printStackTrace();
|
}
|
} finally {
|
try {
|
socket.close();
|
mInStream.close();
|
mOutStream.close();
|
} catch (IOException localIOException1) {
|
}
|
if (comm_ok)
|
break;
|
try {
|
Thread.sleep(1000L);
|
} catch (InterruptedException e) {
|
e.printStackTrace();
|
}
|
}
|
}
|
|
return comm_ok;
|
}
|
|
public void updateVersion_Infor(MysqlConnPool mConnPool) {
|
BattData_RT_SQL.updateVersion_Infor_Table(mConnPool);
|
}
|
|
public void updateThread_Time(MysqlConnPool mConnPool) {
|
BattData_RT_SQL.updateThread_Time_Table(mConnPool);
|
}
|
|
private short getbattGroupAddr(short addr, int num) {
|
int all_addr = addr + num * 4096;
|
short batt_group_addr = (short) all_addr;
|
return batt_group_addr;
|
}
|
|
private void getBattMonCount() {
|
if (this.batt_Group_Num > this.data_Num)
|
this.batt_Group_Num = 0;
|
int h = 0;
|
if (h < 4) {
|
if (this.a_BattMonCount[(h + this.batt_Group_Num)] != 0)
|
this.m_BattMonCount = this.a_BattMonCount[(h + this.batt_Group_Num)];
|
}
|
}
|
|
public void run1() {
|
updateVersion_Infor(this.conn);
|
while (true) {
|
try {
|
getBattMonCount();
|
updateThread_Time(this.conn);
|
|
checkAndSetUsrCmdAndRegAddr();
|
|
byte cmd_t = 3;
|
short reg_count = this.m_ReadRegCount;
|
if (4160 == this.m_ReadRegAddr)
|
reg_count = 1;
|
else if ((getbattGroupAddr((short) 4, this.batt_Group_Num) == this.m_ReadRegAddr)
|
|| (getbattGroupAddr((short) 6, this.batt_Group_Num) == this.m_ReadRegAddr)) {
|
reg_count = 1;
|
}
|
short rx_datacount = (short) (reg_count * 2 + 3 + 2);
|
if (this.m_IsTcpModbus) {
|
rx_datacount = (short) (reg_count * 2 + 11);
|
}
|
if (this.m_ModbusCmd_Usr != 0) {
|
cmd_t = this.m_ModbusCmd_Usr;
|
this.m_ReadRegAddr = this.m_ReadRegAddr_Usr;
|
reg_count = 1;
|
rx_datacount = 8;
|
if (this.m_IsTcpModbus) {
|
rx_datacount = 14;
|
}
|
|
}
|
|
if ((this.m_ReadRegAddr < getbattGroupAddr((short) 1236, this.batt_Group_Num) + this.m_BattMonCount)
|
|| (this.m_ReadRegAddr == getbattGroupAddr((short) 4087, this.batt_Group_Num))) {
|
if (lanchSocket(cmd_t, reg_count, rx_datacount, this.reg_count_last))
|
this.m_FBS9600_State.setComCountInc();
|
else {
|
this.m_FBS9600_State.setComErrCountInc();
|
}
|
}
|
|
if (getbattGroupAddr((short) 4, this.batt_Group_Num) == this.m_ReadRegAddr) {
|
this.m_ReadRegCount = 0;
|
}
|
|
if (getbattGroupAddr((short) 4087, this.batt_Group_Num) == this.m_ReadRegAddr) {
|
if (this.m_CommDataIn.getUsrWriteCmdAck()) {
|
this.m_FBS9600_State.setFBS9600CmdAckFromDev(true);
|
this.m_ModbusCmd_Usr = 0;
|
this.m_ReadRegAddr_Usr = 0;
|
}
|
this.m_ReadRegAddr = 4160;
|
this.m_ReadRegCount = 0;
|
} else {
|
if (4160 == this.m_ReadRegAddr) {
|
this.m_ReadRegAddr = getbattGroupAddr((short) 4, this.batt_Group_Num);
|
this.m_ReadRegCount = 0;
|
continue;
|
}
|
|
this.m_ReadRegAddr = ((short) (this.m_ReadRegAddr + this.m_ReadRegCount));
|
this.m_ReadRegCount = ((short) this.m_BattMonCount);
|
|
if (getbattGroupAddr((short) 4, this.batt_Group_Num) == this.m_ReadRegAddr) {
|
this.m_ReadRegAddr = getbattGroupAddr((short) 6, this.batt_Group_Num);
|
}
|
if ((this.m_ReadRegAddr >= getbattGroupAddr((short) 6, this.batt_Group_Num))
|
&& (this.m_ReadRegAddr <= getbattGroupAddr((short) 6, this.batt_Group_Num)
|
+ this.m_BattMonCount)) {
|
if (this.m_ReadRegAddr < getbattGroupAddr((short) 6, this.batt_Group_Num) + this.m_BattMonCount)
|
this.m_ReadRegCount = ((short) (getbattGroupAddr((short) 6, this.batt_Group_Num)
|
+ this.m_BattMonCount - this.m_ReadRegAddr));
|
else {
|
this.m_ReadRegAddr = getbattGroupAddr((short) 28, this.batt_Group_Num);
|
}
|
|
}
|
|
if ((this.m_ReadRegAddr >= getbattGroupAddr((short) 28, this.batt_Group_Num))
|
&& (this.m_ReadRegAddr < getbattGroupAddr((short) 327, this.batt_Group_Num))) {
|
if (this.m_ReadRegAddr < getbattGroupAddr((short) 28, this.batt_Group_Num)
|
+ this.m_BattMonCount)
|
this.m_ReadRegCount = ((short) (getbattGroupAddr((short) 28, this.batt_Group_Num)
|
+ this.m_BattMonCount - this.m_ReadRegAddr));
|
else {
|
this.m_ReadRegAddr = getbattGroupAddr((short) 632, this.batt_Group_Num);
|
}
|
}
|
|
if ((this.m_ReadRegAddr >= getbattGroupAddr((short) 632, this.batt_Group_Num))
|
&& (this.m_ReadRegAddr < getbattGroupAddr((short) 931, this.batt_Group_Num))) {
|
if (this.m_ReadRegAddr < getbattGroupAddr((short) 632, this.batt_Group_Num)
|
+ this.m_BattMonCount)
|
this.m_ReadRegCount = ((short) (getbattGroupAddr((short) 632, this.batt_Group_Num)
|
+ this.m_BattMonCount - this.m_ReadRegAddr));
|
else {
|
this.m_ReadRegAddr = getbattGroupAddr((short) 1236, this.batt_Group_Num);
|
}
|
}
|
|
if ((this.m_ReadRegAddr >= getbattGroupAddr((short) 1236, this.batt_Group_Num))
|
&& (this.m_ReadRegAddr < getbattGroupAddr((short) 1535, this.batt_Group_Num))) {
|
if (this.m_ReadRegAddr < getbattGroupAddr((short) 1236, this.batt_Group_Num)
|
+ this.m_BattMonCount) {
|
this.m_ReadRegCount = ((short) (getbattGroupAddr((short) 1236, this.batt_Group_Num)
|
+ this.m_BattMonCount - this.m_ReadRegAddr));
|
} else {
|
if ((this.batt_Group_Num < this.data_Num) && (this.batt_Group_Num >= 0)) {
|
this.reg_count_arr[this.batt_Group_Num] = reg_count;
|
int n = 0;
|
// continue;
|
|
if (this.reg_count_arr[n] != 0)
|
this.reg_count_last += this.reg_count_arr[n];
|
n++;
|
if (n < this.reg_count_arr.length) {
|
continue;
|
}
|
|
}
|
|
this.batt_Group_Num += 1;
|
this.m_ReadRegAddr = getbattGroupAddr((short) 4, this.batt_Group_Num);
|
|
if (this.batt_Group_Num > this.data_Num) {
|
getFBS9600MonData(this.m_CommDataIn);
|
this.reg_count_arr = null;
|
this.reg_count_arr = new int[4];
|
this.reg_count_last = 0;
|
try {
|
Thread.sleep(500L);
|
} catch (InterruptedException localInterruptedException) {
|
}
|
this.batt_Group_Num = 0;
|
this.m_ReadRegAddr = getbattGroupAddr((short) 4, this.batt_Group_Num);
|
}
|
}
|
|
}
|
|
if (this.m_ReadRegCount > 120) {
|
this.m_ReadRegCount = 120;
|
}
|
}
|
|
Thread.sleep(250L);
|
} catch (Exception e) {
|
this.m_FBS9600_State.setComErrCountInc();
|
try {
|
Thread.sleep(1000L);
|
} catch (InterruptedException localInterruptedException1) {
|
}
|
}
|
}
|
}
|
|
private boolean readDev_IdFromModbus(MyModbusMaster master2) {
|
BatchRead<Integer> batch = m_FBS9600_State.createBatchRead(master);
|
BatchResults<Integer> res = MyModbusUtils.readMutilRegisters(batch, master);
|
return m_FBS9600_State.putBatchResult(res);
|
}
|
|
private void getFBS9600MonData(FBS9600_CommData c_data) {
|
int mon_index = 0;
|
for (int n = 0; n < 4; n++) {
|
if (this.m_RTData[n] != null) {
|
float curr = c_data.battcurr[n];
|
|
if (1 == c_data.battcurrdir[n]) {
|
curr *= -1.0F;
|
}
|
|
this.m_RTData[n].mTestData.updateCurrFrom_FBSDev(curr);
|
this.m_RTData[n].mTestData.updateGroupVolFrom_FBSDev(c_data.groupvol[n]);
|
|
for (int index = 0; index < this.m_RTData[n].MonCount; index++) {
|
if (mon_index >= 512)
|
break;
|
MonVolData tmp_m_data = (MonVolData) this.m_RTData[n].al_MonVol.get(index);
|
tmp_m_data.monVol = c_data.battvol[mon_index];
|
tmp_m_data.monTmp = c_data.batttmp[mon_index];
|
|
tmp_m_data.monRes = c_data.battres[mon_index];
|
tmp_m_data.connRes = c_data.battres[mon_index];
|
if ((tmp_m_data.monRes > 0.01D) && (tmp_m_data.monVol > 0.1D)
|
&& (this.m_RTData[n].MonStdVol > 0.1D))
|
tmp_m_data.monSer = (1000.0F / tmp_m_data.monRes * (this.m_RTData[n].MonStdVol / 2.0F));
|
else {
|
tmp_m_data.monSer = 0.0F;
|
}
|
mon_index++;
|
}
|
|
for (int index = 0; index < this.m_RTData[n].MonCount; index++) {
|
((MonVolData) this.m_RTData[n].al_MonVol.get(index)).connRes = 0.0F;
|
}
|
this.m_RTData[n].updata_BattRtData_To_RamDb();
|
this.m_RTData[n].updata_BattRtSate_To_RamDb();
|
}
|
}
|
}
|
|
/**
|
* 获取当前设备状态
|
* @return
|
*/
|
public int getDevWorkState() {
|
int devWorkState = FBS9100_ComBase.SYS_STATE_STOPPED; //浮充
|
for(int i = 0;i<this.m_RTData.length;i++) {
|
if(null != m_RTData[i]) {
|
if(BattStatData.BATTDATA_DISCHARGE == m_RTData[i].mTestData.battState) {
|
devWorkState = FBS9100_ComBase.SYS_STATE_DISCHARGING; //放电
|
}else if(BattStatData.BATTDATA_CHARGE == m_RTData[i].mTestData.battState &&
|
FBS9100_ComBase.SYS_STATE_DISCHARGING != devWorkState) {
|
//没有电池组在放电测试时
|
devWorkState = FBS9100_ComBase.SYS_STATE_CHARGING;
|
}
|
}
|
}
|
return devWorkState;
|
}
|
|
}
|