package com.dev.fbs9009;
|
|
import java.io.IOException;
|
import java.io.InputStream;
|
import java.io.OutputStream;
|
import java.net.Socket;
|
import java.nio.ByteBuffer;
|
import java.nio.ByteOrder;
|
import java.util.Date;
|
|
import org.apache.logging.log4j.Logger;
|
|
import com.base.Com;
|
import com.battdata_rt.BattData_RT;
|
import com.battdata_rt.BattData_RT_Array;
|
import com.dev.fbs9009.BaseData;
|
import com.dev.fbs9100.ComFn;
|
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.sql.MysqlConnPool;
|
|
public class MyModBusSocketThread extends Thread{
|
private MysqlConnPool mysql_pool;
|
private Socket socket;
|
private BattData_RT_Array batt_Data;
|
private ByteBuffer bytebuffer_for_socket_RX = ByteBuffer.allocate(1500);
|
boolean S_thread_run_flag = true;
|
private BaseData baseData;
|
private MyModBusData devinfo;
|
private BattData_RT battData_rt; //µ±Ç°µç³Ø×éµÄ¶ÔÏó
|
private boolean isLD9Device = false;
|
private LD_updateState upState; //É豸¸üжÔÏó
|
private int rx_errcount_for_live_of_thread = 0; //ÓÃÓÚͳ¼ÆsocketͨÐÅÖеÄÒì³£´ÎÊýͳ¼Æ
|
private String gprsinf = null;
|
private MyModbusMaster master;
|
private Logger logger;
|
|
public MyModBusSocketThread(MysqlConnPool m_ConnPool, BattData_RT_Array m_Data, Socket tmp_socket) {
|
this.batt_Data = m_Data;
|
this.mysql_pool = m_ConnPool;
|
this.socket = tmp_socket;
|
this.baseData = new BaseData();
|
this.devinfo = new MyModBusData();
|
this.master = new MyModbusMaster(tmp_socket, MyModbusFactory.ModBus_RTU, 1);
|
}
|
|
//¼ì²éÉ豸µÄÀàÐÍ
|
public void checkDevType(){
|
boolean isMyModBusDevice = false;
|
//¶ÁÈ¡É豸µÄµØÖ·,È»ºóÓëÊý¾Ý¿âÖеÄÒѾ´æÔÚµÄÊý¾Ý½øÐбÈ
|
try {
|
for(int i = 0;i<3 && !isMyModBusDevice;i++){
|
if(readSystemDeversion()){
|
for(int j=0; j<batt_Data.getItemCount(); j++) {
|
if(batt_Data.getItem(j).FBSDeviceId == devinfo.getLd_version().getSys_dev_id()){
|
|
battData_rt = batt_Data.getItem(j);
|
if(battData_rt.myModBusData != null){
|
battData_rt.myModBusData.setLd_version(devinfo.getLd_version());
|
devinfo = battData_rt.myModBusData;
|
}else{
|
battData_rt.myModBusData = devinfo;
|
}
|
devinfo.setDev_id(batt_Data.getItem(j).FBSDeviceId);
|
devinfo.setDev_ip(this.socket.getInetAddress().toString());
|
devinfo.init(batt_Data.getItem(j).MonCount);
|
upState = new LD_updateState(devinfo.getDev_id());
|
|
devinfo.setBattgroupid(battData_rt.BattGroupId);
|
isMyModBusDevice = true;
|
break;
|
}
|
}
|
}
|
Thread.sleep(300);
|
}
|
} catch (Exception e) {
|
e.printStackTrace();
|
} finally{
|
if(isMyModBusDevice){
|
devinfo.setComent_errorcount(0);
|
logger.info(devinfo.getDev_id()+" ʶ±ð³É¹¦,¿ªÊ¼Í¨Ñ¶"+Com.getDateTimeFormat(new Date(), Com.DTF_YMDhms));
|
S_thread_run_flag = true; //ʶ±ðÉ豸³É¹¦
|
}else{
|
logger.info(devinfo.getLd_version().getSys_dev_id()+" ʶ±ðʧ°Ü,µÈ´ý½áÊøÍ¨Ñ¶"+Com.getDateTimeFormat(new Date(), Com.DTF_YMDhms));
|
S_thread_run_flag = false; //ʶ±ðÉ豸ʧ°Ü
|
}
|
}
|
}
|
|
@Override
|
public void run() {
|
|
try {
|
//System.out.println(this.getName()+":MyModBusSocketThread at"+Com.getDateTimeFormat(new Date(), Com.DTF_YMDhms));
|
|
checkDevType(); //ʶ±ðÁ¬ÈëµÄÉ豸
|
|
if(S_thread_run_flag && devinfo.getDev_id()>0){
|
|
|
//³õʼ»¯Êý¾Ý¿â±íÖеÄÐÅÏ¢
|
MyModBusSocketThread_SQL.insertOrUpdateLd9StateByDev_id(mysql_pool, devinfo); //³õʼ»¯»òÕß´´½¨É豸״̬±í
|
|
MyModBusSocketThread_SQL.insertOrUpdateLd9_setParamByDev_id(mysql_pool, devinfo); //³õʼ»¯»òÕ߼ǼÉ豸µÄ²ÎÊý±í
|
|
MyModBusSocketThread_SQL.insertOrUpdateConcentratState(mysql_pool, devinfo.getConcenState(), devinfo.getDev_id()); //³õʼ»¯»ã¼¯Æ÷״̬±í
|
|
MyModBusSocketThread_SQL.updateConcentratParam(mysql_pool,devinfo.getDev_id(),devinfo.getConcenParam()); //³õʼ»¯»ã¼¯Æ÷²ÎÊý±í
|
|
}else{
|
return;
|
}
|
int runCount = 0;
|
|
int sys_count = 0;
|
int batt_count = 0;
|
int mon_count = 0;
|
while(S_thread_run_flag){
|
try {
|
if(runCount%19 == 0){
|
/************************ »ñȡϵͳ״̬*****************************************/
|
int res_index = sys_count%(devinfo.getDev_count()); //»ñÈ¡µ±Ç°ËùÊôµÄÉ豸µÄϵͳ״̬
|
//¶ÁÈ¡É豸ϵͳ״̬
|
if(readSystemState(res_index)) {
|
//¸üÐÂϵͳµçѹµçÁ÷״̬
|
MyModBusSocketThread_SQL.updateBattState_RT_RamDB_Table(mysql_pool,devinfo);
|
}
|
if(devinfo.getLd_sys() != null){
|
MyModBusSocketThread_SQL.insertOrUpdateLd9StateByDev_id(mysql_pool,devinfo); //¸üÐÂÉ豸״̬
|
}
|
sys_count++;
|
}
|
|
if(runCount%21 == 0){
|
/************************ »ñÈ¡µç³Ø×´Ì¬ÐÅÏ¢ *****************************************/
|
int res_index = batt_count%(devinfo.getDev_count());
|
if(readBattaryState(res_index)) {
|
MyModBusSocketThread_SQL.updateBattData_RT_RamDB_Table(mysql_pool, battData_rt.BattGroupId,devinfo.getLd_batt_states()[res_index],res_index);
|
}
|
batt_count ++;
|
}
|
|
if(runCount%39 == 0) {
|
/************************ »ñÈ¡µ¥ÌåζÈÄÚ×èÊý¾Ý *****************************************/
|
int res_index = mon_count%(devinfo.getDev_count());
|
|
if(readMonData(res_index)) {
|
MyModBusSocketThread_SQL.updateBattMonData_RT_RamDB_Table(mysql_pool, battData_rt.BattGroupId,devinfo.getLd_batt_states()[res_index],res_index);
|
}
|
mon_count++;
|
}
|
|
MyModBusSocketThread_SQL.searchLd9_setParamByDev_id(mysql_pool, devinfo); //¼à²â¶ÁÈ¡Êý¾Ý¿âÖеķŵç²ÎÊý
|
|
if(runCount%1 == 0){
|
if(devinfo.getLd_param() != null){
|
LD_param param = devinfo.getLd_param();
|
if(param.getOp_cmd() == MyModBusCom.LD9_CMD_GETPARAM){
|
//System.err.println("»ñÈ¡²ÎÊý");
|
/************************ ¶ÁÈ¡¹¤×÷²ÎÊý *****************************************/
|
if(readDisChargeParam()) {
|
logger.info(devinfo.getDev_id()+"»ñÈ¡²âÊÔ²ÎÊý³É¹¦"+param);
|
param.setOp_cmd(MyModBusCom.LD9_CMD_GETPARAM_ACK);
|
}else {
|
param.setOp_cmd(MyModBusCom.LD9_CMD_DEFAULT);
|
}
|
MyModBusSocketThread_SQL.UpdateLd9_setParamByDev_id(mysql_pool,devinfo);
|
}
|
|
if(param.getOp_cmd() == MyModBusCom.LD9_CMD_SETPARAM){
|
//System.err.println("ÉèÖòÎÊý");
|
/*********************** ÉèÖ÷ŵç²ÎÊý³É¹¦ ************************************/
|
if(param.setUpDisChargeParam(master)) {
|
logger.info(devinfo.getDev_id()+"ÉèÖòÎÊý³É¹¦"+param);
|
//ÉèÖù¤×÷²ÎÊý³É¹¦
|
param.setOp_cmd(MyModBusCom.LD9_CMD_SETPARAM_ACK); //Ð޸ĵ±Ç°É豸µÄ·µ»ØÂë
|
}else {
|
param.setOp_cmd(MyModBusCom.LD9_CMD_DEFAULT);
|
}
|
MyModBusSocketThread_SQL.UpdateLd9CmdByDev_id(mysql_pool,devinfo);
|
}
|
|
if(param.getOp_cmd() == MyModBusCom.LD9_CMD_STARTTEST){
|
//System.err.println("Æô¶¯·Åµç");
|
/************************* Æô¶¯·Åµç ************************************/
|
if(param.controlLDcontrol(master,MyModBusCom.LD_CMD_START_TEST_ADDR,MyModBusCom.LD_CMD_STARTSTOP_VALUE)) {
|
logger.info(devinfo.getDev_id()+"Æô¶¯·Åµç³É¹¦");
|
//Æô¶¯·Åµç³É¹¦
|
param.setOp_cmd(MyModBusCom.LD9_CMD_STARTTEST_ACK); //Æô¶¯²âÊԳɹ¦
|
}else {
|
param.setOp_cmd(MyModBusCom.LD9_CMD_DEFAULT);
|
}
|
MyModBusSocketThread_SQL.UpdateLd9CmdByDev_id(mysql_pool,devinfo);
|
}
|
|
if(param.getOp_cmd() == MyModBusCom.LD9_CMD_STOPTEST){
|
//System.err.println("Í£Ö¹·Åµç");
|
/************************* Í£Ö¹·Åµç ************************************/
|
if(param.controlLDcontrol(master, MyModBusCom.LD_CMD_STOP_TEST_ADDR, MyModBusCom.LD_CMD_STARTSTOP_VALUE)) {
|
logger.info(devinfo.getDev_id()+"Í£Ö¹·Åµç³É¹¦");
|
//Í£Ö¹·Åµç³É¹¦
|
param.setOp_cmd(MyModBusCom.LD9_CMD_STOPTEST_ACK); //Í£Ö¹²âÊԳɹ¦
|
}else {
|
param.setOp_cmd(MyModBusCom.LD9_CMD_DEFAULT);
|
}
|
MyModBusSocketThread_SQL.UpdateLd9CmdByDev_id(mysql_pool,devinfo);
|
}
|
|
if(param.getOp_cmd() == MyModBusCom.LD9_CMD_STARTRESTEST) {
|
/************************* Æô¶¯ÄÚ×è²âÊÔ ************************************/
|
if(param.controlLDcontrol(master, MyModBusCom.LD9_CMD_STARTRESTEST_ARRR, MyModBusCom.LD_CMD_STARTSTOP_VALUE)) {
|
logger.info(devinfo.getDev_id()+"Æô¶¯ÄÚ×è·Åµç³É¹¦");
|
//Æô¶¯·Åµç³É¹¦
|
param.setOp_cmd(MyModBusCom.LD9_CMD_STARTRESTEST_ACK); //Æô¶¯²âÊԳɹ¦
|
}else {
|
param.setOp_cmd(MyModBusCom.LD9_CMD_DEFAULT);
|
}
|
MyModBusSocketThread_SQL.UpdateLd9CmdByDev_id(mysql_pool,devinfo);
|
}
|
|
if(param.getOp_cmd() == MyModBusCom.LD9_CMD_ResetSystem) {
|
/************************* ÖØÆôϵͳ ************************************/
|
if(param.controlLDcontrol(master, MyModBusCom.LD9_CMD_RESTART_ADDR, MyModBusCom.LD_CMD_STARTSTOP_VALUE)) {
|
logger.info(devinfo.getDev_id()+" ÖØÆôÉ豸³É¹¦ ");
|
param.setOp_cmd(MyModBusCom.LD9_CMD_ResetSystemAck); //ÖØÆôÉ豸³É¹¦
|
}else {
|
param.setOp_cmd(MyModBusCom.LD9_CMD_DEFAULT);
|
}
|
MyModBusSocketThread_SQL.UpdateLd9CmdByDev_id(mysql_pool,devinfo);
|
}
|
}
|
}
|
|
|
/******************************** BTS GPRSÄ£¿éÐÅÏ¢²éѯ **********************************/
|
if(runCount%2 == 0) {
|
int cmd_gprs = MyModBusSocketThread_SQL.queryBTSGPRSCmdBydev_id(mysql_pool,devinfo.getDev_id());
|
if(MyModBusCom.CMD_ReadGPRSCSQ == cmd_gprs) {
|
String gprs_cmd = MyModBusSocketThread_SQL.queryBTSGPRS_ATCmd_Bydev_id(mysql_pool, devinfo.getDev_id());
|
System.out.println(this.getName() + " DevId: " + devinfo.getDev_id()
|
+ " ¶ÁÈ¡GPRSÄ£¿é²ÎÊý:" + gprs_cmd + Com.getNowTimeWithAt());
|
ByteBuffer gprs_bf = ByteBuffer.allocate(gprs_cmd.length()+10);
|
gprs_bf.put(gprs_cmd.getBytes());
|
gprs_bf.put((byte) 0x0D);
|
gprs_bf.put((byte) 0x0A);
|
gprs_bf.flip();
|
|
gprsinf = null;
|
|
int op_cmd_ack = MyModBusCom.CMD_ReadGPRSCSQ;
|
baseData.makeCmd(MyModBusCom.CMD_ReadGPRSCSQ, MyModBusCom.CMD_READ_MODBUS, 0);
|
if(false == SocketComm(baseData, gprs_bf, socket)) {
|
System.out.println(this.getName() + " DevId: " + devinfo.getDev_id()
|
+ " ¶ÁÈ¡GPRSÄ£¿é²ÎÊýʧ°Ü." + Com.getNowTimeWithAt());
|
|
} else {
|
op_cmd_ack = MyModBusCom.CMD_ReadGPRSCSQAck;
|
System.out.println(this.getName() + " DevId: " + devinfo.getDev_id()
|
+ " ¶ÁÈ¡GPRSÄ£¿é²ÎÊý³É¹¦:" + Com.getNowTimeWithAt());
|
}
|
MyModBusSocketThread_SQL.updateBTSGPRSSateBydev_id(mysql_pool, devinfo.getDev_id(), op_cmd_ack, gprsinf);
|
}
|
}
|
/******************************** BTS GPRSÄ£¿éÐÅÏ¢²éѯ **********************************/
|
|
/************************ ÉèÖÃÉ豸µÄʱ¼ä *****************************************/
|
/*if(true){
|
baseData.makeCmd(MyModBusCom.LD_DATE_TIME_ADDR, MyModBusCom.CMD_MULTI_WRITE_MODBUS, LD_date_time.BYTE_LEN);
|
if(SocketComm(baseData, ByteBuffer.allocate(0),this.socket)){
|
|
}
|
|
baseData.makeCmd(MyModBusCom.LD_DATE_TIME_ADDR, MyModBusCom.CMD_READ_MODBUS, LD_date_time.BYTE_LEN);
|
if(SocketComm(baseData, ByteBuffer.allocate(0),this.socket)){
|
|
}
|
}*/
|
if(runCount%7 == 0){
|
MyModBusUpdateThread_SQL.queryLD9_Update_StateByDev_id(mysql_pool, upState);
|
if(upState.isUpdate_en() && devinfo.getLd_sys()[0].getSys_state() == MyModBusCom.SYS_STATE_STOP){
|
MyModBusUpdateThread upthread = new MyModBusUpdateThread(mysql_pool, upState, socket);
|
if(upthread.checkDevIsCanUpdate()){
|
upState.setSend_upfile_ok(false);
|
if(upthread.runLD9Update()){
|
upState.setSend_upfile_ok(upthread.UpdateLd9Device()); //Éý¼¶É豸
|
if(upState.isSend_upfile_ok())
|
upState.setUpdatetime(new Date()); //
|
}
|
upState.setUpdate_en(false);
|
}
|
MyModBusUpdateThread_SQL.updateLD9_Update_StateByDev_id(mysql_pool, upState);
|
}
|
}
|
|
//´Ó25°æ±¾¿ªÊ¼É豸²ÅÖ§³ÖÔ¶³Ì¶ÁÈ¡»ã¼¯Æ÷״̬ÒÔ¼°²ÎÊýÐÅÏ¢
|
if(devinfo.getLd_version().getSys_software_version() >= 25) {
|
if(runCount%30 == 0){
|
//************************ »ñÈ¡»ã¼¯Æ÷״̬ÐÅÏ¢ *****************************************//*
|
if(readConcenState()) {
|
MyModBusSocketThread_SQL.UpdateConcentratState(mysql_pool, devinfo.getConcenState(),devinfo.getDev_id() );
|
|
battData_rt.mTestData.batt_res_test_cnt = devinfo.getConcenState().getResTestCount(); //ÉèÖõ±Ç°µÄÄÚ×è²âÊÔ´ÎÊý
|
}
|
}
|
|
ConcentratorParam param = MyModBusSocketThread_SQL.queryConcentratParam(mysql_pool, devinfo.getDev_id());
|
if(param.getOp_cmd() == MyModBusCom.LD9_CMD_GETCONCENPARAM ||
|
param.getOp_cmd() == MyModBusCom.LD9_CMD_SETCONCENPARAM) {
|
|
if(param.getOp_cmd() == MyModBusCom.LD9_CMD_GETCONCENPARAM) {
|
//¶ÁÈ¡»ã¼¯Æ÷µÄ²ÎÊý
|
baseData.makeCmd(MyModBusCom.LD_BATT_COLLECTIO_PARAM_ADDR, MyModBusCom.CMD_READ_MODBUS, ConcentratorParam.BYTE_LEN);
|
SocketComm(baseData, ByteBuffer.allocate(0),this.socket);
|
if(readConcenParam()) {
|
logger.info(devinfo.getDev_id()+"¶ÁÈ¡»ã¼¯Æ÷²ÎÊý³É¹¦");
|
devinfo.getConcenParam().setOp_cmd(MyModBusCom.LD9_CMD_GETCONCENPARAM_ACK);
|
}else {
|
devinfo.getConcenParam().setOp_cmd(MyModBusCom.LD9_CMD_DEFAULT);
|
}
|
MyModBusSocketThread_SQL.updateConcentratParamNew(mysql_pool, devinfo.getDev_id(), devinfo.getConcenParam());
|
}
|
|
if(param.getOp_cmd() == MyModBusCom.LD9_CMD_SETCONCENPARAM) {
|
//ÉèÖû㼯Æ÷µÄ²ÎÊý
|
baseData.setConcentratorparam(param);
|
baseData.makeCmd(MyModBusCom.LD_BATT_COLLECTIO_PARAM_ADDR, MyModBusCom.CMD_MULTI_WRITE_MODBUS, ConcentratorParam.BYTE_LEN);
|
SocketComm(baseData, ByteBuffer.allocate(0),this.socket);
|
}
|
}
|
}
|
|
sleep(200);
|
runCount++;
|
if(runCount >= 300){
|
runCount = 1;
|
}
|
} catch (Exception e) {
|
e.printStackTrace();
|
}
|
}
|
} catch (Exception e) {
|
e.printStackTrace();
|
} finally{
|
System.out.println("LD9:"+devinfo.getDev_id()+"ͨѶ½áÊø:"+Com.getDateTimeFormat(new Date(), Com.DTF_YMDhms));
|
if(devinfo.getDev_id() > 0){
|
devinfo.setCmd(MyModBusCom.LD9_CMD_DEFAULT);
|
//System.err.println("@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@");
|
MyModBusSocketThread_SQL.UpdateLd9CmdByDev_id(mysql_pool,devinfo); //½«Êý¾Ý¿âÖеIJÎÊýÉèÖóÉĬÈÏÖµ
|
}
|
if(socket != null){
|
try {
|
socket.close();
|
} catch (IOException e) {
|
e.printStackTrace();
|
}
|
}
|
}
|
}
|
|
//¶ÁÈ¡É豸°æ±¾ºÅ
|
public boolean readSystemDeversion() {
|
BatchRead<Integer> batch = devinfo.getLd_version().createLDVersionBatchRead(master);
|
BatchResults<Integer> res = MyModbusUtils.readMutilRegisters(batch, master);
|
return devinfo.getLd_version().putLDVersionBatchResult(res);
|
}
|
|
//¶Áȡϵͳ״̬
|
public boolean readSystemState(int index) {
|
BatchRead<Integer> batch = devinfo.getLd_sys()[index].createLDSysStateBatchRead(master,index);
|
BatchResults<Integer> res = MyModbusUtils.readMutilRegisters(batch, master);
|
return devinfo.getLd_sys()[index].putLDSysStateBatchResult(res);
|
}
|
|
//¶ÁÈ¡µç³Ø×´Ì¬
|
public boolean readBattaryState(int index) {
|
BatchRead<Integer> batch = devinfo.getLd_batt_states()[index].createLDBattStateBatchRead(master,index);
|
BatchResults<Integer> res = MyModbusUtils.readMutilRegisters(batch, master);
|
return devinfo.getLd_batt_states()[index].putLDBattStateBatchResult(res);
|
}
|
|
//¶ÁÈ¡µ¥ÌåÊý¾Ý
|
public boolean readMonData(int index) {
|
BatchRead<Integer> batch = devinfo.getLd_batt_states()[index].createLDMonDataBatchRead(master,index);
|
BatchResults<Integer> res = MyModbusUtils.readMutilRegisters(batch, master);
|
return devinfo.getLd_batt_states()[index].putLDMonDataBatchResult(res);
|
}
|
|
//¶ÁÈ¡µ¥ÌåÊý¾Ý
|
public boolean readDisChargeParam() {
|
BatchRead<Integer> batch = devinfo.getLd_param().createLDDisChargeParam(master);
|
BatchResults<Integer> res = MyModbusUtils.readMutilRegisters(batch, master);
|
return devinfo.getLd_param().putLDDisChargeParamBatchResult(res);
|
}
|
|
//¶ÁÈ¡»ã¼¯Æ÷״̬
|
public boolean readConcenState() {
|
BatchRead<Integer> batch = devinfo.getConcenState().createConcenStateBatchRead(master);
|
BatchResults<Integer> res = MyModbusUtils.readMutilRegisters(batch, master);
|
return devinfo.getConcenState().putConcenStateBatchResult(res);
|
}
|
|
//¶ÁÈ¡»ã¼¯Æ÷²ÎÊý
|
public boolean readConcenParam() {
|
BatchRead<Integer> batch = devinfo.getConcenParam().createConcenParamBatchRead(master);
|
BatchResults<Integer> res = MyModbusUtils.readMutilRegisters(batch, master);
|
return devinfo.getConcenParam().putConcenParamBatchResult(res);
|
}
|
|
/**
|
* ÏòÖ¸¶¨µÄsocketͨµÀ·¢ËÍÊý¾Ý£¬ÒÔ¼°½ÓÊÕÊý¾Ý
|
* @param cmd
|
* @param bf
|
* @return
|
* @throws InterruptedException
|
*/
|
|
public boolean SocketComm(BaseData data, ByteBuffer bf, Socket socket)
|
{
|
boolean res_t = false;
|
try
|
{
|
if(S_thread_run_flag)
|
{
|
InputStream in = socket.getInputStream();
|
OutputStream out = socket.getOutputStream();
|
//----------------- clear rx buff for tcp resend packet ----------------//
|
|
byte[] rx_buf_t = new byte[1024];
|
int buf_clr_read_count = 0;
|
while(in.available() > 0) {
|
int len = in.read(rx_buf_t);
|
if(++buf_clr_read_count >= 10) {
|
System.err.println("error_count:"+len);
|
S_thread_run_flag = false;
|
res_t = false;
|
return res_t;
|
}
|
try {
|
sleep(50);
|
} catch (Exception e) {
|
e.printStackTrace();
|
}
|
}
|
//----------------------------------------------------------------------//
|
//--------------------- socket write -----------------------------------//
|
byte[] cipher_tx_t = null;
|
if(data.CMD == MyModBusCom.CMD_ReadGPRSCSQ) {
|
cipher_tx_t = new byte[bf.limit()];
|
bf.get(cipher_tx_t);
|
}else {
|
cipher_tx_t = data.getByteBuffer().array();
|
}
|
|
//=====================================================================//
|
Date d1 = new Date();
|
if(data.RES_Index == MyModBusCom.LD9_CMD_RESTART_ADDR) {
|
//System.out.println("·¢ËÍÊý¾Ý:"+ComFn.bytesToHexString(cipher_tx_t, cipher_tx_t.length)+Com.getDateTimeFormat(new Date(), Com.DTF_YMDhms));
|
}
|
int rx_read_time_out = 0;
|
out.write(cipher_tx_t);
|
out.flush();
|
|
bytebuffer_for_socket_RX.order(ByteOrder.BIG_ENDIAN);
|
bytebuffer_for_socket_RX.clear();
|
while(true) {
|
if(in.available() > 0) {
|
rx_read_time_out = 0;
|
int rx_len_t = in.read(rx_buf_t);
|
if((bytebuffer_for_socket_RX.position()+rx_len_t)
|
< (bytebuffer_for_socket_RX.capacity()-1)) {
|
bytebuffer_for_socket_RX.put(rx_buf_t, 0, rx_len_t);
|
}
|
} else {
|
rx_read_time_out += 1;
|
if(bytebuffer_for_socket_RX.position() >= 8 && rx_read_time_out > 20){
|
break;
|
}
|
if(rx_read_time_out > 300) {
|
break;
|
}
|
}
|
Thread.sleep(10);
|
}
|
|
bytebuffer_for_socket_RX.flip();
|
//byte[] plain_tx_t = bytebuffer_for_socket_RX.array();
|
//System.out.println("½ÓÊÕÊý¾Ý:"+data.CMD+"\t¶ÁÈ¡Êý¾Ý"+ComFn.bytesToHexString(bytebuffer_for_socket_RX.array(), bytebuffer_for_socket_RX.limit()));
|
// Date d2 = new Date();
|
// long comm_tms = (d2.getTime() - d1.getTime());
|
// if(comm_tms < 200) {
|
// Thread.sleep(200 - comm_tms);
|
// }
|
|
/*devinfo.setCmd(data.RES_Index);
|
if((bytebuffer_for_socket_RX.limit()>=8) && (true == baseData.putByteBuffer(bytebuffer_for_socket_RX))){
|
if(data.CMD == MyModBusCom.CMD_READ_MODBUS) {
|
if(devinfo.checkData(bytebuffer_for_socket_RX)) {
|
res_t = true;
|
}
|
} else if(data.CMD == MyModBusCom.CMD_MULTI_WRITE_MODBUS){
|
//System.err.println("дÈëÉ豸Êý¾Ý");
|
//System.out.println(ComFn.bytesToHexString(bytebuffer_for_socket_RX.array(), bytebuffer_for_socket_RX.limit()));
|
if(devinfo.getDataFromTcp(bytebuffer_for_socket_RX,data.getByteCount())) {
|
res_t = true;
|
}
|
//System.out.println("дÈëÉ豸Êý¾Ý"+res_t);
|
}
|
}*/
|
//System.err.println(baseData.RES_Index+"======"+res_t);
|
byte[] cipher_buf = new byte[bytebuffer_for_socket_RX.limit()];
|
bytebuffer_for_socket_RX.get(cipher_buf);
|
|
if(data.RES_Index == MyModBusCom.LD9_CMD_RESTART_ADDR) {
|
//System.out.println("·¢ËÍÊý¾Ý:"+ComFn.bytesToHexString(cipher_buf, cipher_buf.length)+Com.getDateTimeFormat(new Date(), Com.DTF_YMDhms));
|
}
|
if(baseData.CMD == MyModBusCom.CMD_ReadGPRSCSQ){
|
if(bytebuffer_for_socket_RX.limit() > 2) {
|
rx_errcount_for_live_of_thread = 0;
|
res_t = true;
|
|
gprsinf = new String(cipher_buf);
|
//System.out.println("this.getName() + " + " DevId: " + m_StatAndParam.dev_id
|
// + " GPRS RF Level:" + m_StatAndParam.m_GPRS_CSQ);
|
}
|
}else if(bytebuffer_for_socket_RX.limit()>=8 && checkReciveData(bytebuffer_for_socket_RX)) {
|
res_t = true;
|
devinfo.setComent_totalcountIncrease();
|
rx_errcount_for_live_of_thread = 0;
|
}else {
|
//System.err.println("½ÓÊÕÊý¾Ý:"+data.CMD+"\t¶ÁÈ¡Êý¾Ý"+ComFn.bytesToHexString(bytebuffer_for_socket_RX.array(), bytebuffer_for_socket_RX.limit()));
|
rx_errcount_for_live_of_thread ++;
|
devinfo.setComent_errorcountIncrease();
|
//System.err.println(data.getRES_Index()+"errrrrrrrrrrrrrrrrr");
|
}
|
}
|
} catch (IOException | InterruptedException e) {
|
S_thread_run_flag = false;
|
} finally {
|
//ÈôÔÚͨÐŵĹý³ÌÖгöÏÖ5´ÎͨÐÅÒì³£¹Ø±ÕÁ¬½Ó
|
if(rx_errcount_for_live_of_thread >= 5){
|
S_thread_run_flag = false;
|
}
|
}
|
return res_t;
|
}
|
|
/**
|
* ¼à²â»ñÈ¡µ½µÄͨѶÊý¾Ý
|
* @return
|
*/
|
public boolean checkReciveData(ByteBuffer bytebuff){
|
boolean isSuccess = false;
|
BaseData myBaseData = new BaseData();
|
if((bytebuff.limit()>=8) && (true == myBaseData.putByteBuffer(bytebuff))){
|
|
devinfo.setCmd_addr(myBaseData.getRES_Index());
|
if(myBaseData.CMD == MyModBusCom.CMD_READ_MODBUS) { //¶ÁÈ¡Êý¾Ý
|
//System.err.println(myBaseData.getRES_Index()+ComFn.bytesToHexString(bytebuffer_for_socket_RX.array(), bytebuffer_for_socket_RX.array().length));
|
|
if(devinfo.checkData(bytebuffer_for_socket_RX)) {
|
int dev_index = -1;
|
/********************* »ñȡϵͳ״̬³É¹¦ *********************/
|
if((dev_index = MyModBusData.getDev_indexBySysReg_index(myBaseData.getRES_Index(),MyModBusData.SYS_STATE_ADDR_INDEX))> -1){
|
//System.err.println(dev_index+":"+devinfo.getLd_sys()[dev_index]);
|
//System.err.println("¶Áȡϵͳ״̬³É¹¦");
|
MyModBusSocketThread_SQL.updateBattState_RT_RamDB_Table(mysql_pool,devinfo);
|
}
|
|
/********************* »ñÈ¡µç³Ø×´Ì¬³É¹¦ *********************/
|
if((dev_index = MyModBusData.getDev_indexBySysReg_index(myBaseData.getRES_Index(), MyModBusData.BATT_STATE_ADDR_INDEX)) > -1){
|
MyModBusSocketThread_SQL.updateBattData_RT_RamDB_Table(mysql_pool, battData_rt.BattGroupId,devinfo.getLd_batt_states()[dev_index],dev_index);
|
//System.out.println("×éºÅ£º"+dev_index+"£º"+devinfo.getLd_batt_states()[dev_index]);
|
//System.err.println("»ñÈ¡µç³Ø×´Ì¬ÐÅÏ¢³É¹¦");
|
devinfo.setThreadRunTime(new Date()); //¼Ç¼Ï̵߳ĵ±Ç°Ê±¼ä
|
}
|
|
/********************* »ñÈ¡µç³Øµ¥ÌåζÈÄÚ×èÊý¾Ý³É¹¦ *********************/
|
|
if((dev_index = MyModBusData.getDev_indexBySysReg_index(myBaseData.getRES_Index(), MyModBusData.BATT_MON_DATA_ADDR_INDEX))>-1){
|
MyModBusSocketThread_SQL.updateBattMonData_RT_RamDB_Table(mysql_pool, battData_rt.BattGroupId,devinfo.getLd_batt_states()[dev_index],dev_index);
|
//System.err.println("»ñÈ¡µç³Ø×´Ì¬ÐÅÏ¢³É¹¦");
|
devinfo.setThreadRunTime(new Date()); //¼Ç¼Ï̵߳ĵ±Ç°Ê±¼ä
|
}
|
|
/********************* »ñÈ¡²âÊÔ²ÎÊý *********************/
|
if(myBaseData.getRES_Index() == MyModBusCom.LD_PARM_ADDR){
|
System.out.println(devinfo.getDev_id()+"»ñÈ¡²âÊÔ²ÎÊý³É¹¦"+Com.getDateTimeFormat(new Date(), Com.DTF_YMDhms));
|
LD_param param = devinfo.getLd_param();
|
param.setOp_cmd(MyModBusCom.LD9_CMD_GETPARAM_ACK);
|
MyModBusSocketThread_SQL.insertOrUpdateLd9_setParamByDev_id(mysql_pool,devinfo);
|
MyModBusSocketThread_SQL.UpdateLd9CmdByDev_id(mysql_pool,devinfo);
|
}
|
|
/********************* »ñÈ¡É豸µÄ°æ±¾ÐÅÏ¢ *********************/
|
if(myBaseData.getRES_Index() == MyModBusCom.LD_CMD_SYS_VERSION_ADDR){
|
//System.err.println("»ñÈ¡°æ±¾ÐÅÏ¢³É¹¦");
|
this.isLD9Device = true;
|
}
|
|
/********************* »ñÈ¡»ã¼¯Æ÷ʵʱ״̬³É¹¦ *********************/
|
if(myBaseData.getRES_Index() == MyModBusCom.LD_BATT_COLLECTIO_DATA_ADDR) {
|
//System.err.println("¶ÁÈ¡»ã¼¯Æ÷״̬³É¹¦");
|
|
MyModBusSocketThread_SQL.insertOrUpdateConcentratState(mysql_pool, devinfo.getConcenState(),devinfo.getDev_id() );
|
|
battData_rt.mTestData.batt_res_test_cnt = devinfo.getConcenState().getResTestCount(); //ÉèÖõ±Ç°µÄÄÚ×è²âÊÔ´ÎÊý
|
}
|
|
/********************* »ñÈ¡»ã¼¯Æ÷²ÎÊý³É¹¦ *********************/
|
if(myBaseData.getRES_Index() == MyModBusCom.LD_BATT_COLLECTIO_PARAM_ADDR) {
|
System.err.println(devinfo.getDev_id()+"¶ÁÈ¡»ã¼¯Æ÷²ÎÊý³É¹¦"+Com.getDateTimeFormat(new Date(), Com.DTF_YMDhms));
|
devinfo.getConcenParam().setOp_cmd(MyModBusCom.LD9_CMD_GETCONCENPARAM_ACK);
|
|
MyModBusSocketThread_SQL.updateConcentratParam(mysql_pool, devinfo.getDev_id(), devinfo.getConcenParam());
|
|
|
}
|
|
|
|
isSuccess = true;
|
}
|
} else if(myBaseData.CMD == MyModBusCom.CMD_MULTI_WRITE_MODBUS){
|
int regcount = getRegCount(myBaseData.getRES_Index()); //»ñÈ¡¼Ä´æÆ÷ÊýÁ¿
|
if(devinfo.getDataFromTcp(bytebuffer_for_socket_RX,regcount)) {
|
LD_param param = devinfo.getLd_param();
|
|
/******************** ÉèÖòÎÊý³É¹¦ ******************************/
|
if(myBaseData.getRES_Index() == MyModBusCom.LD_PARM_ADDR){
|
System.err.println(devinfo.getDev_id()+"ÉèÖòÎÊý³É¹¦"+Com.getDateTimeFormat(new Date(), Com.DTF_YMDhms));
|
//ÉèÖù¤×÷²ÎÊý³É¹¦
|
param.setOp_cmd(MyModBusCom.LD9_CMD_SETPARAM_ACK); //Ð޸ĵ±Ç°É豸µÄ·µ»ØÂë
|
MyModBusSocketThread_SQL.UpdateLd9CmdByDev_id(mysql_pool,devinfo);
|
}
|
|
/******************** Æô¶¯ºËÈݲâÊԳɹ¦ ******************************/
|
if(myBaseData.getRES_Index() == MyModBusCom.LD_CMD_START_TEST_ADDR){
|
System.err.println(devinfo.getDev_id()+"Æô¶¯·Åµç³É¹¦");
|
//Æô¶¯·Åµç³É¹¦
|
param.setOp_cmd(MyModBusCom.LD9_CMD_STARTTEST_ACK); //Æô¶¯²âÊԳɹ¦
|
MyModBusSocketThread_SQL.UpdateLd9CmdByDev_id(mysql_pool,devinfo);
|
}
|
/******************** Æô¶¯ÄÚ×è²âÊԳɹ¦ ******************************/
|
if(myBaseData.getRES_Index() == MyModBusCom.LD9_CMD_STARTRESTEST_ARRR){
|
System.err.println(devinfo.getDev_id()+"Æô¶¯ÄÚ×è·Åµç³É¹¦"+Com.getDateTimeFormat(new Date(), Com.DTF_YMDhms));
|
//Æô¶¯·Åµç³É¹¦
|
param.setOp_cmd(MyModBusCom.LD9_CMD_STARTRESTEST_ACK); //Æô¶¯²âÊԳɹ¦
|
MyModBusSocketThread_SQL.UpdateLd9CmdByDev_id(mysql_pool,devinfo);
|
}
|
|
|
/******************** Í£Ö¹²âÊԳɹ¦ ******************************/
|
if(myBaseData.getRES_Index() == MyModBusCom.LD_CMD_STOP_TEST_ADDR){
|
System.err.println(devinfo.getDev_id()+"Í£Ö¹·Åµç³É¹¦"+Com.getDateTimeFormat(new Date(), Com.DTF_YMDhms));
|
//Í£Ö¹·Åµç³É¹¦
|
param.setOp_cmd(MyModBusCom.LD9_CMD_STOPTEST_ACK); //Í£Ö¹²âÊԳɹ¦
|
MyModBusSocketThread_SQL.UpdateLd9CmdByDev_id(mysql_pool,devinfo);
|
}
|
|
/******************** ÉèÖû㼯Æ÷²ÎÊý³É¹¦ ******************************/
|
if(myBaseData.getRES_Index() == MyModBusCom.LD_BATT_COLLECTIO_PARAM_ADDR) {
|
System.out.println(devinfo.getDev_id()+"ÉèÖû㼯Æ÷²ÎÊý³É¹¦"+Com.getDateTimeFormat(new Date(), Com.DTF_YMDhms));
|
ConcentratorParam cparam = devinfo.getConcenParam();
|
cparam.setOp_cmd(MyModBusCom.LD9_CMD_SETCONCENPARAM_ACK);
|
|
MyModBusSocketThread_SQL.updateConcentratParamCmdBydev_id(mysql_pool, cparam, devinfo.getDev_id());
|
}
|
|
/******************** ÖØÆôÉ豸³É¹¦ ******************************/
|
if(myBaseData.getRES_Index() == MyModBusCom.LD9_CMD_RESTART_ADDR) {
|
System.out.println(devinfo.getDev_id()+" ÖØÆôÉ豸³É¹¦ "+Com.getDateTimeFormat(new Date(), Com.DTF_YMDhms));
|
param.setOp_cmd(MyModBusCom.LD9_CMD_ResetSystemAck); //ÖØÆôÉ豸³É¹¦
|
MyModBusSocketThread_SQL.UpdateLd9CmdByDev_id(mysql_pool,devinfo);
|
}
|
|
|
/******************** Éý¼¶ÏµÍ³ ***********************************/
|
isSuccess = true;
|
}
|
|
//System.out.println("дÈëÉ豸Êý¾Ý"+res_t);
|
}
|
}
|
return isSuccess;
|
}
|
|
|
|
/**
|
* ¸ù¾Ý¼Ä´æÆ÷µÄÆäʵµØÖ·»ñÈ¡¼Ä´æÆ÷µÄ¸öÊý
|
* @param reg_addr
|
* @return
|
*/
|
public int getRegCount(int reg_addr){
|
int regcount = 0;
|
if(reg_addr == MyModBusCom.LD_PARM_ADDR){
|
regcount = LD_param.BYTE_LEN;
|
}else if(reg_addr == MyModBusCom.LD_CMD_START_TEST_ADDR){
|
regcount = MyModBusCom.LD_CMD_STARTSTOP_BYTECOUNT;
|
}else if(reg_addr == MyModBusCom.LD_CMD_STOP_TEST_ADDR){
|
regcount = MyModBusCom.LD_CMD_STARTSTOP_BYTECOUNT;
|
}else if(reg_addr == MyModBusCom.LD9_CMD_STARTRESTEST_ARRR) {
|
regcount = MyModBusCom.LD_CMD_STARTSTOP_BYTECOUNT;
|
}else if(reg_addr == MyModBusCom.LD9_CMD_RESTART_ADDR){
|
regcount = MyModBusCom.LD_CMD_STARTSTOP_BYTECOUNT;
|
} if(reg_addr == MyModBusCom.LD_BATT_COLLECTIO_PARAM_ADDR) {
|
regcount = ConcentratorParam.BYTE_LEN;
|
}
|
return regcount;
|
}
|
}
|