package com.dev.switchdev; import gnu.io.SerialPort; import gnu.io.UnsupportedCommOperationException; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.nio.ByteBuffer; import java.nio.ByteOrder; import java.util.Arrays; import java.util.Date; import javax.swing.JOptionPane; import javax.swing.JTextField; import org.apache.logging.log4j.Logger; import sp_comm.CommSerialPort; import sp_comm.Comm_Socket; import main.page_debug_inf; import com.Com; import com.ComFn; import com.PlaySound; import com.dev.bts.data.FBS9100_CapState; import com.dev.bts.data.FBS9100_ChargeState; import com.dev.bts.data.FBS9100_Cmd; import com.dev.bts.data.FBS9100_ComBase; import com.dev.bts.data.FBS9100_ComBuf; import com.dev.bts.data.FBS9100_DeviceInf; import com.dev.bts.data.FBS9100_ParamBatt; import com.dev.bts.data.FBS9100_ParamCharge; import com.dev.bts.data.FBS9100_ParamDischarge; import com.dev.bts.data.FBS9100_ParamSystem; import com.dev.bts.data.FBS9100_ResCapData; import com.dev.bts.data.FBS9100_ResState; import com.dev.bts.data.FBS9100_SysState; import com.dev.bts.data.FBS9100_VCData; import com.dev.bts4810.BTS_Ecb_Aes; import com.dev.fbs9600_mon.SPCommMon; import com.dev.switchdev.data.ModBus_RTU_Cmd; import com.dev.switchdev.data.SwitchDevice_ComBase; /** * È«¹¦ÄÜÇл»×°ÖÃÉ豸ͨÐÅÏß³Ì * @author LiJun * */ public class CommSwitchDevice implements Runnable/*, SerialPortEventListener*/ { public static final short CMD_TYPE_READ = 0x03; public static final short CMD_TYPE_WRITE = 0x05; public static final short CMD_TYPE_WRITE_MULTY = 0x10; public static final int DEV_PARAM_DATA_STATE_NULL = 0; // public static final int DEV_PARAM_DATA_STATE_DISQUERY = 1; //¶ÁÈ¡ºËÈݲÎÊý public static final int DEV_PARAM_DATA_STATE_BATTQUERY = 2; //¶ÁÈ¡µç³Ø²ÎÊý public static final int DEV_PARAM_DATA_STATE_SYSQUERY = 3; //¶Áȡϵͳ²ÎÊý public static final int DEV_PARAM_DATA_STATE_UPDATE = 4; //ÉèÖòÎÊý /*********************************************************************/ public static final int DEV_DATA_AUTO_READ = 0; //×Ô¶¯¶ÁÈ¡ public static final int DEV_DATA_MANUAL_SET = 1; //ÊÖ¶¯ÉèÖà public static final int DEV_DATA_AUTO_RANDOM = 2; //×Ô¶¯Ëæ»ú private boolean alearyMaxCurr = false; /*********************************************************************/ public int dev_data_type = DEV_DATA_AUTO_READ; /*********************************************************************/ public boolean DEV_DATA_ENCIPHER = true; //ͨÐÅÊý¾ÝÊÇ·ñ¼ÓÃÜ /*********************************************************************/ final public static String[] ZDHJ_OP_REST_INF_TEXT = new String[] { "ÎÞ²Ù×÷", }; // ÊäÈëÊä³öÁ÷ public static InputStream inputStream; public static OutputStream outputStream; // RS-232µÄ´®ÐÐ¿Ú public static SerialPort serialPort; private boolean CommThreadRunning = false; private boolean dt_dfu_en = false; BTS_Ecb_Aes my_aes = new BTS_Ecb_Aes(); private ByteBuffer CommRxBuffer = ByteBuffer.allocate(1500); private ByteBuffer CommTxBuffer = ByteBuffer.allocate(1048); public int comm_tx_cnt = 0; public int comm_rx_cnt = 0; private int comm_bautrate = 9600; public int dt_target_addr = 0; //--------------------------------------------------------// public int dev_param_data_state = DEV_PARAM_DATA_STATE_NULL; public int dev_param_addr = 0; public int[] dev_param_ch_mon_cnt = new int[5]; public int dev_param_curr_range = 0; public double dev_param_wenbo_curr_lev = 0; public int dev_param_auto_restest_interval = 0; public int dev_param_res_test_type = 0; //--------------------------------------------------------// public String dev_stat_version_Str = ""; public String dev_control_Str = ""; public String dev_jiaozhun_Str = ""; public int dev_stat_version = 0; public int dev_stat_state = 0; public double GroupVol = 0; public double BattCurr = 0; public int BattCurrDir = 0; public double AvgWenBoCurr = 0; public double PeakWenBoCurr = 0; //--------------------------------------------------------// public boolean m_discurr_jz_a = false; //È¡·ÅµçµçÁ÷A²ÉÑùÖÐ public boolean m_discurr_jz_b = false; //È¡·ÅµçµçÁ÷B²ÉÑùÖÐ public boolean m_chrcurr_jz_a = false; //È¡³äµçµçÁ÷A²ÉÑùÖÐ public boolean m_chrcurr_jz_b = false; //È¡³äµçµçÁ÷B²ÉÑùÖÐ //--------------------------------------------------------// @SuppressWarnings("unused") private JTextField dt_show_msg = new JTextField(); private int dt_cmd = FBS9100_ComBase.CMD_GetVIData; private int dt_usr_cmd = FBS9100_ComBase.CMD_NULL; private ByteBuffer dt_datatofbs9100 = ByteBuffer.allocate(0); private ModBus_RTU_Cmd modbus_RTU_Cmd; public int dt_cmd_ack = 0; public Date dt_cmd_ack_time = new Date(); private int dt_cmd_cnt = 0; public int m_BTSDevSoftType = 0; //--------------------------------------------------------// //--------------------------------------------------------// public FBS9100_Cmd m_FBS_Cmd = new FBS9100_Cmd(); public FBS9100_VCData m_FBS_VCData = new FBS9100_VCData(); public FBS9100_ParamBatt m_FBS_BattParam; public FBS9100_ParamSystem m_FBS_SystemParam; public FBS9100_ParamDischarge m_FBS_DiscParam = new FBS9100_ParamDischarge(); //ÉèÖõIJÎÊý public FBS9100_ParamDischarge m_FBS_DiscParamFromDev = new FBS9100_ParamDischarge(); //´ÓÉ豸¶ÁÈ¡µÄ²ÎÊý public FBS9100_ParamCharge m_FBS_ChargeParam = new FBS9100_ParamCharge(); public FBS9100_ResState m_ResTestState = new FBS9100_ResState(); public FBS9100_CapState m_CapTestState = new FBS9100_CapState(); public FBS9100_ChargeState m_ChrTestState = new FBS9100_ChargeState(); public FBS9100_ResCapData m_FBS_ResCapData = new FBS9100_ResCapData(); public ByteBuffer m_TaskList = ByteBuffer.allocate(1024); //--------------------------------------------------------// public ModBus_RTU_Cmd m_Bus_RTU_Cmd = new ModBus_RTU_Cmd(); public SwitchDevice_State m_SwitchDevice_State = new SwitchDevice_State(); public SwitchDevice_TestParm m_testParam = new SwitchDevice_TestParm(); public SwitchDevice_TestParm m_AppTestParam = new SwitchDevice_TestParm(); //appÉèÖõIJÎÊý[ÉèÖÃʱʹÓÃ] //--------------------------------------------------------// private page_debug_inf dt_debug_inf; private int m_COMM_PORT_TYPE = 0; private CommSerialPort m_SP_Comm = null; private Comm_Socket m_SocketComm = null; private Logger m_Log = null; //--------------------------------------------------------// public CommSwitchDevice(int addr_t, int bitrate, page_debug_inf debug, Logger log) { dt_target_addr = addr_t & 0x00FF; comm_bautrate = bitrate; dt_debug_inf = debug; m_Log = log; } public void setCommBautrate(int bt_rate) { if(SPCommMon.COMM_PORT_TYPE_Serial != m_COMM_PORT_TYPE) { return; } try { comm_bautrate = bt_rate; serialPort.setSerialPortParams(comm_bautrate, SerialPort.DATABITS_8, SerialPort.STOPBITS_1,SerialPort.PARITY_NONE); } catch (UnsupportedCommOperationException e) { e.printStackTrace(); } } //³õʼ»¯´®¿Ú public boolean OpenCommPort(int comm_port_type, String comm_name_or_ip, int bitrate_or_comm_port) { boolean res = false; m_COMM_PORT_TYPE = comm_port_type; if(SPCommMon.COMM_PORT_TYPE_Serial == m_COMM_PORT_TYPE) { m_SP_Comm = new CommSerialPort(bitrate_or_comm_port, m_Log); res = m_SP_Comm.OpenCommPort(comm_name_or_ip); } else { m_SocketComm = new Comm_Socket(comm_name_or_ip, bitrate_or_comm_port); res = true; } if(true == res) { CommTxBuffer.order(ByteOrder.BIG_ENDIAN); CommRxBuffer.order(ByteOrder.BIG_ENDIAN); comm_tx_cnt = 0; comm_rx_cnt = 0; CommThreadRunning = true; } return res; } private void makeCommTxData() { dt_cmd = SwitchDevice_ComBase.CMD_GetVIData; //¶ÁȡʵʱÊý¾Ý modbus_RTU_Cmd = new ModBus_RTU_Cmd(); if(SwitchDevice_ComBase.CMD_NULL == dt_usr_cmd) { if(++dt_cmd_cnt > 1000) { dt_cmd_cnt = 0; } modbus_RTU_Cmd.makeCmd(dt_target_addr, ModBus_RTU_Cmd.CMD_ReadHoldReg, SwitchDevice_ComBase.CMD_RealState_RegAddr,SwitchDevice_State.REG_COUNT); dt_datatofbs9100 = ByteBuffer.allocate(0); } else { dt_cmd = dt_usr_cmd; dt_usr_cmd = SwitchDevice_ComBase.CMD_NULL; /******************************* ¶àµãÉèÖà **************************************************/ if(SwitchDevice_ComBase.CMD_GetWorkParam == dt_cmd) { //¶ÁÈ¡¹¤×÷²ÎÊý modbus_RTU_Cmd.makeCmd(dt_target_addr, ModBus_RTU_Cmd.CMD_ReadHoldReg, SwitchDevice_ComBase.CMD_WorkMode_RegAddr,2); }else if(SwitchDevice_ComBase.CMD_SetWorkParam == dt_cmd) { //ÉèÖù¤×÷²ÎÊý modbus_RTU_Cmd.makeCmd(dt_target_addr, ModBus_RTU_Cmd.CMD_WriteMultiReg, SwitchDevice_ComBase.CMD_WorkMode_RegAddr,2); }else if(SwitchDevice_ComBase.CMD_GetTestParam == dt_cmd) { //¶ÁÈ¡²âÊÔ²ÎÊý modbus_RTU_Cmd.makeCmd(dt_target_addr, ModBus_RTU_Cmd.CMD_ReadHoldReg, SwitchDevice_ComBase.CMD_CurrRange_RegAddr,2); }else if(SwitchDevice_ComBase.CMD_SetTestParam == dt_cmd) { //ÉèÖòâÊÔ²ÎÊý modbus_RTU_Cmd.makeCmd(dt_target_addr, ModBus_RTU_Cmd.CMD_WriteMultiCoil, SwitchDevice_ComBase.CMD_CurrRange_RegAddr,2); } /*********************************************************************************/ else if(SwitchDevice_ComBase.CMD_SetWorkMode == dt_cmd) { //ÉèÖù¤×÷ģʽ modbus_RTU_Cmd.makeCmd(dt_target_addr, ModBus_RTU_Cmd.CMD_WriteSingleCoil, SwitchDevice_ComBase.CMD_WorkMode_RegAddr,1); dt_datatofbs9100 = modbus_RTU_Cmd.makeByteBuffer(m_AppTestParam.getWorkMode()); }else if(SwitchDevice_ComBase.CMD_SetTestCurr == dt_cmd) { //ÉèÖòâÊÔµçÁ÷ modbus_RTU_Cmd.makeCmd(dt_target_addr, ModBus_RTU_Cmd.CMD_WriteSingleCoil, SwitchDevice_ComBase.CMD_TestCurr_RegAddr,1); dt_datatofbs9100 = modbus_RTU_Cmd.makeByteBuffer(m_AppTestParam.getTestCurr()); }else if(SwitchDevice_ComBase.CMD_SetCurrRange == dt_cmd) { //ÉèÖõçÁ÷Á¿³Ì modbus_RTU_Cmd.makeCmd(dt_target_addr, ModBus_RTU_Cmd.CMD_WriteSingleReg, SwitchDevice_ComBase.CMD_CurrRange_RegAddr,1); dt_datatofbs9100 = modbus_RTU_Cmd.makeByteBuffer(m_AppTestParam.getCurrRange()); }else if(SwitchDevice_ComBase.CMD_SetLoadCount == dt_cmd) { //ÉèÖøºÔظöÊý modbus_RTU_Cmd.makeCmd(dt_target_addr, ModBus_RTU_Cmd.CMD_WriteSingleReg, SwitchDevice_ComBase.CMD_LoadCount_RegAddr,1); dt_datatofbs9100 = modbus_RTU_Cmd.makeByteBuffer(m_AppTestParam.getLoadCount()); //ϵͳ²ÎÊýÉèÖÃÎÞ·µ»Ø dev_control_Str = "ÉèÖòâÊÔÅäÖóɹ¦" + Com.get_DTF(new Date(), Com.DTF_YMDhms); }else if(SwitchDevice_ComBase.CMD_ControDisRelay == dt_cmd) { //¿ØÖƷŵç¼ÌµçÆ÷ modbus_RTU_Cmd.makeCmd(dt_target_addr, ModBus_RTU_Cmd.CMD_WriteSingleCoil, SwitchDevice_ComBase.CMD_DisRelay_RegAddr,1); dt_datatofbs9100 = modbus_RTU_Cmd.makeByteBuffer(0xBBBB); }else if(SwitchDevice_ComBase.CMD_ControChrRelay == dt_cmd) { //¿ØÖƳä¼ÌµçÆ÷ modbus_RTU_Cmd.makeCmd(dt_target_addr, ModBus_RTU_Cmd.CMD_WriteSingleCoil, SwitchDevice_ComBase.CMD_ChrRelay_RegAddr,1); dt_datatofbs9100 = modbus_RTU_Cmd.makeByteBuffer(0xBBBB); }else if(SwitchDevice_ComBase.CMD_ControResetRelay == dt_cmd) { //¿ØÖƸ´Î»¼ÌµçÆ÷ modbus_RTU_Cmd.makeCmd(dt_target_addr, ModBus_RTU_Cmd.CMD_WriteSingleCoil, SwitchDevice_ComBase.CMD_ResetRelay_RegAddr,1); dt_datatofbs9100 = modbus_RTU_Cmd.makeByteBuffer(0xBBBB); }else if(SwitchDevice_ComBase.CMD_StartDisTest == dt_cmd) { //Æô¶¯·Åµç²âÊÔ modbus_RTU_Cmd.makeCmd(dt_target_addr, ModBus_RTU_Cmd.CMD_WriteSingleCoil, SwitchDevice_ComBase.CMD_DisTest_RegAddr,1); dt_datatofbs9100 = modbus_RTU_Cmd.makeByteBuffer(0xBBBB); //Æô¶¯·Åµç²âÊÔÎÞ·µ»Ø dev_control_Str = "Æô¶¯·Åµç²âÊԳɹ¦" + Com.get_DTF(new Date(), Com.DTF_YMDhms); }else if(SwitchDevice_ComBase.CMD_StopDisTest == dt_cmd) { //Í£Ö¹·Åµç²âÊÔ modbus_RTU_Cmd.makeCmd(dt_target_addr, ModBus_RTU_Cmd.CMD_WriteSingleCoil, SwitchDevice_ComBase.CMD_DisTest_RegAddr,1); dt_datatofbs9100 = modbus_RTU_Cmd.makeByteBuffer(0xEEEE); }else if(SwitchDevice_ComBase.CMD_StartChrTest == dt_cmd) { //Æô¶¯³äµç²âÊÔ modbus_RTU_Cmd.makeCmd(dt_target_addr, ModBus_RTU_Cmd.CMD_WriteSingleCoil, SwitchDevice_ComBase.CMD_ChrTest_RegAddr,1); dt_datatofbs9100 = modbus_RTU_Cmd.makeByteBuffer(0xBBBB); //Æô¶¯³äµç²âÊÔÎÞ·µ»Ø dev_control_Str = "Æô¶¯³äµç²âÊԳɹ¦" + Com.get_DTF(new Date(), Com.DTF_YMDhms); }else if(SwitchDevice_ComBase.CMD_StopChrTest == dt_cmd) { //Í£Ö¹³äµç²âÊÔ modbus_RTU_Cmd.makeCmd(dt_target_addr, ModBus_RTU_Cmd.CMD_WriteSingleCoil, SwitchDevice_ComBase.CMD_ChrTest_RegAddr,1); dt_datatofbs9100 = modbus_RTU_Cmd.makeByteBuffer(0xEEEE); }else if(SwitchDevice_ComBase.CMD_OnlineVolJiaoZhun == dt_cmd) { //ÔÚÏßµçѹУ׼ modbus_RTU_Cmd.makeCmd(dt_target_addr, ModBus_RTU_Cmd.CMD_WriteSingleCoil, SwitchDevice_ComBase.CMD_OnlineVol_RegAddr,1); dt_datatofbs9100 = modbus_RTU_Cmd.makeByteBuffer(m_AppTestParam.getOnlineVol()*10); }else if(SwitchDevice_ComBase.CMD_GroupVolJiaoZhun == dt_cmd) { //×é¶ËµçѹУ׼ modbus_RTU_Cmd.makeCmd(dt_target_addr, ModBus_RTU_Cmd.CMD_WriteSingleCoil, SwitchDevice_ComBase.CMD_GroupVol_RegAddr,1); dt_datatofbs9100 = modbus_RTU_Cmd.makeByteBuffer(m_AppTestParam.getGroupVol()*10); }else if(SwitchDevice_ComBase.CMD_DevTmpJiaoZhun == dt_cmd) { //É豸ζÈУ׼ modbus_RTU_Cmd.makeCmd(dt_target_addr, ModBus_RTU_Cmd.CMD_WriteSingleCoil, SwitchDevice_ComBase.CMD_DevTmp_RegAddr,1); dt_datatofbs9100 = modbus_RTU_Cmd.makeByteBuffer(m_AppTestParam.getDevTmp()*10 + 100); }else if(SwitchDevice_ComBase.CMD_DisCurrClear == dt_cmd) { //Õý¼«µçÁ÷ÇåÁã modbus_RTU_Cmd.makeCmd(dt_target_addr, ModBus_RTU_Cmd.CMD_WriteSingleCoil, SwitchDevice_ComBase.CMD_PosiCurrrZore_RegAddr,1); dt_datatofbs9100 = modbus_RTU_Cmd.makeByteBuffer(0); }else if(SwitchDevice_ComBase.CMD_DisCurrReset == dt_cmd) { //Õý¼«µçÁ÷¸´Î» dt_datatofbs9100 = modbus_RTU_Cmd.makeByteBuffer(m_testParam.getDevTmp()); }else if(SwitchDevice_ComBase.CMD_DisCurrReset == dt_cmd) { //Õý¼«µçÁ÷У׼ }else if(SwitchDevice_ComBase.CMD_ChrCurrClear == dt_cmd) { //¸º¼«µçÁ÷ÇåÁã modbus_RTU_Cmd.makeCmd(dt_target_addr, ModBus_RTU_Cmd.CMD_WriteSingleCoil, SwitchDevice_ComBase.CMD_NegaCurrrZore_RegAddr,1); dt_datatofbs9100 = modbus_RTU_Cmd.makeByteBuffer(0); }else if(SwitchDevice_ComBase.CMD_ChrCurrReset == dt_cmd) { //Õý¼«µçÁ÷¸´Î» }else if(SwitchDevice_ComBase.CMD_ChrCurrJiaoZhun == dt_cmd) { //Õý¼«µçÁ÷У׼ }else if(SwitchDevice_ComBase.CMD_DisCurrSlopeReset == dt_cmd) { //·ÅµçµçÁ÷бÂʸ´Î» modbus_RTU_Cmd.makeCmd(dt_target_addr, ModBus_RTU_Cmd.CMD_WriteSingleCoil, SwitchDevice_ComBase.CMD_DisCurrrSlope_RegAddr,1); dt_datatofbs9100 = modbus_RTU_Cmd.makeByteBuffer(10000); }else if(SwitchDevice_ComBase.CMD_DisCurrSkewReset == dt_cmd) { //·ÅµçµçÁ÷Æ«ÒÆ¸´Î» modbus_RTU_Cmd.makeCmd(dt_target_addr, ModBus_RTU_Cmd.CMD_WriteSingleCoil, SwitchDevice_ComBase.CMD_DisCurrrSkew_RegAddr,1); dt_datatofbs9100 = modbus_RTU_Cmd.makeByteBuffer(0); }else if(SwitchDevice_ComBase.CMD_SetDisCurrSlope == dt_cmd) { //System.err.println("###############"+m_AppTestParam.getDisCurrSlope()); //ÉèÖ÷ŵçµçÁ÷бÂÊ modbus_RTU_Cmd.makeCmd(dt_target_addr, ModBus_RTU_Cmd.CMD_WriteSingleCoil, SwitchDevice_ComBase.CMD_DisCurrrSlope_RegAddr,1); dt_datatofbs9100 = modbus_RTU_Cmd.makeByteBuffer(m_AppTestParam.getDisCurrSlope()*10000); }else if(SwitchDevice_ComBase.CMD_SetDisCurrSkew == dt_cmd) { //ÉèÖ÷ŵçµçÁ÷Æ«ÒÆ modbus_RTU_Cmd.makeCmd(dt_target_addr, ModBus_RTU_Cmd.CMD_WriteSingleCoil, SwitchDevice_ComBase.CMD_DisCurrrSkew_RegAddr,1); dt_datatofbs9100 = modbus_RTU_Cmd.makeByteBuffer(m_AppTestParam.getDisCurrSkew()*10); }else if(SwitchDevice_ComBase.CMD_ChrCurrSlopeReset == dt_cmd) { //³äµçÁ÷бÂʸ´Î» modbus_RTU_Cmd.makeCmd(dt_target_addr, ModBus_RTU_Cmd.CMD_WriteSingleCoil, SwitchDevice_ComBase.CMD_ChrCurrrSlope_RegAddr,1); dt_datatofbs9100 = modbus_RTU_Cmd.makeByteBuffer(10000); }else if(SwitchDevice_ComBase.CMD_ChrCurrSkewReset == dt_cmd) { //³äµçµçÁ÷Æ«ÒÆ¸´Î» modbus_RTU_Cmd.makeCmd(dt_target_addr, ModBus_RTU_Cmd.CMD_WriteSingleCoil, SwitchDevice_ComBase.CMD_ChrCurrrSkew_RegAddr,1); dt_datatofbs9100 = modbus_RTU_Cmd.makeByteBuffer(0); }else if(SwitchDevice_ComBase.CMD_SetChrCurrSlope == dt_cmd) { //ÉèÖóäµçµçÁ÷бÂÊ modbus_RTU_Cmd.makeCmd(dt_target_addr, ModBus_RTU_Cmd.CMD_WriteSingleCoil, SwitchDevice_ComBase.CMD_ChrCurrrSlope_RegAddr,1); dt_datatofbs9100 = modbus_RTU_Cmd.makeByteBuffer(m_AppTestParam.getChrCurrSlope()*10000); }else if(SwitchDevice_ComBase.CMD_SetChrCurrSkew == dt_cmd) { //ÉèÖóäµçµçÁ÷Æ«ÒÆ modbus_RTU_Cmd.makeCmd(dt_target_addr, ModBus_RTU_Cmd.CMD_WriteSingleCoil, SwitchDevice_ComBase.CMD_ChrCurrrSkew_RegAddr,1); dt_datatofbs9100 = modbus_RTU_Cmd.makeByteBuffer(m_AppTestParam.getChrCurrSkew()*10); } } ByteBuffer buf_t = modbus_RTU_Cmd.makeFbs9100CommBuf(dt_datatofbs9100); //System.err.println("@@@"+ComFn.bytesToHexString(buf_t.array(), buf_t.array().length)); byte[] plain_tx_t = new byte[buf_t.limit()]; buf_t.get(plain_tx_t); //System.err.println("@@@"+ComFn.bytesToHexString(plain_tx_t, plain_tx_t.length)); CommTxBuffer = ByteBuffer.allocate(plain_tx_t.length); CommTxBuffer.put(plain_tx_t); CommTxBuffer.flip(); } public void tr_Msg(ByteBuffer bbf_tx, ByteBuffer bbf_rx, boolean showdat) { if(++comm_tx_cnt > 32500) { comm_tx_cnt = 0; } if(SPCommMon.COMM_PORT_TYPE_Serial == m_COMM_PORT_TYPE) { m_SP_Comm.SP_Comm(bbf_tx, bbf_rx, CommSerialPort.mutycomm_Type_Samd09, dt_debug_inf, showdat); } else { m_SocketComm.SocketComm(bbf_tx, bbf_rx, dt_debug_inf, showdat); } } public void exitCommPortThread() { CommThreadRunning = false; } private void closeCommPort() { if(SPCommMon.COMM_PORT_TYPE_Serial == m_COMM_PORT_TYPE) { m_SP_Comm.serialPort.close(); } else { m_SocketComm.socketClose(); } } public void setCommCmd(int cmd, ByteBuffer data_buf) { dt_usr_cmd = cmd; dt_datatofbs9100 = data_buf; } public void setCommCmd_DFU(boolean dfu_en, String dfu_file, JTextField show_area) { dt_dfu_en = dfu_en; dt_show_msg = show_area; } public void setDataType(int datatype) { this.dev_data_type = datatype; } public void setCommCmdAck(int ack_t) { dt_cmd_ack = ack_t; dt_cmd_ack_time = new Date(); String wav_f = "6133.wav"; if(ack_t%2 == 0) { wav_f = "4577.wav"; } if(ack_t > 0) { new PlaySound(wav_f); } } public void sendFBS9100Data(int cmd, ByteBuffer bbf_tx) throws IOException { ByteBuffer bf_t = FBS9100_ComBuf.makeFbs9100CommBuf(255, cmd, bbf_tx, true); byte[] cipher_tx_t = new byte[bf_t.limit()]; bf_t.get(cipher_tx_t); //byte[] bt_t = FBS9100_ComBuf.makeFbs9100CommBuf(21, 0x15, ByteBuffer.allocate(0)).array(); //byte[] cipher_tx_t = new byte[bf_t.limit()]; //my_aes.ecb_encrypt(plain_tx_t, cipher_tx_t, plain_tx_t.length); //System.out.println(ComFn.bytesToHexString(plain_tx_t, plain_tx_t.length)); outputStream.write(cipher_tx_t); if(++comm_tx_cnt > 1000000) { comm_tx_cnt = 0; } } public void run() { System.out.println("CommThreadRunning:"+CommThreadRunning); while(true == CommThreadRunning) { try { if(false == dt_dfu_en) { //sendMsg(makeCommTxData()); //readMsg(CommRxBuffer); makeCommTxData(); tr_Msg(CommTxBuffer, CommRxBuffer, true); //System.out.println("·¢ËÍÊý¾Ý£º" + ComFn.bytesToHexString(CommTxBuffer.array(), CommTxBuffer.array().length)); byte[] plain_buf = new byte[CommRxBuffer.limit()]; CommRxBuffer.get(plain_buf); //System.out.println("½ÓÊÕÊý¾Ý£º" + ComFn.bytesToHexString(plain_buf, plain_buf.length)); getDataFromCommBuf(plain_buf); Thread.sleep(500); } } catch (Exception e) { m_Log.error(e.toString(), e); exitCommPortThread(); JOptionPane.showMessageDialog(null, "BTS ÉÏλ»ú´®¿ÚÒì³£: " + e.getMessage()); } } /******************************************/ closeCommPort(); /******************************************/ m_Log.error("SwitchDevice CommPort is quit!"); } /*********************************************************************************************/ /*********************************************************************************************/ /*********************************************************************************************/ /*********************************************************************************************/ public String getDataFromCommBuf(final byte[] bytes) { boolean comm_res = false; ByteBuffer bf = ByteBuffer.allocate(bytes.length); bf.order(ByteOrder.BIG_ENDIAN); bf.put(bytes); bf.flip(); //System.err.println(ComFn.bytesToHexString(bytes, bytes.length)); String msg = ""; if(true == m_Bus_RTU_Cmd.putByteBuffer(bf)) { //System.out.println(SwitchDevice_ComBase.CMD_GetVIData+"@@@@@@@@@@@@@@"+dt_cmd); //------------------- ¶ÁÈ¡FBS9100µçѹµçÁ÷Êý¾Ý -------------------- if(SwitchDevice_ComBase.CMD_GetVIData == dt_cmd) { if(true == m_SwitchDevice_State.putByteBuffer(bf)) { //System.out.println("¶ÁÈ¡¹¤×÷״̬³É¹¦"); dev_stat_version_Str = m_SwitchDevice_State.getDevVerSionStr(); comm_res = true; } } if(SwitchDevice_ComBase.CMD_GetWorkParam == dt_cmd) { if(true == m_testParam.putByteBufferWorkParam(bf)) { dt_cmd_ack = SwitchDevice_ComBase.CMD_GetWorkParam_Ack; dev_control_Str = "¶ÁÈ¡¹¤×÷²ÎÊý³É¹¦!"+Com.get_DTF(new Date(), Com.DTF_YMDhms); comm_res = true; } }else if(SwitchDevice_ComBase.CMD_SetWorkParam == dt_cmd) { if(SwitchDevice_ComBase.CMD_RES_SUCCESS == m_Bus_RTU_Cmd.Result_val) { dt_cmd_ack = SwitchDevice_ComBase.CMD_SetWorkParam_Ack; dev_control_Str = "ÉèÖù¤×÷²ÎÊý³É¹¦!"+Com.get_DTF(new Date(), Com.DTF_YMDhms); comm_res = true; } }else if(SwitchDevice_ComBase.CMD_GetTestParam == dt_cmd) { if(true == m_testParam.putByteBufferTestParam(bf)) { dt_cmd_ack = SwitchDevice_ComBase.CMD_GetTestParam_Ack; dev_control_Str = "¶ÁÈ¡²âÊÔÅäÖóɹ¦!"+Com.get_DTF(new Date(), Com.DTF_YMDhms); comm_res = true; } }else if(SwitchDevice_ComBase.CMD_SetTestParam == dt_cmd) { if(SwitchDevice_ComBase.CMD_RES_SUCCESS == m_Bus_RTU_Cmd.Result_val) { dt_cmd_ack = SwitchDevice_ComBase.CMD_SetTestParam_Ack; dev_control_Str = "ÉèÖòâÊÔÅäÖóɹ¦!"+Com.get_DTF(new Date(), Com.DTF_YMDhms); comm_res = true; } }else if(SwitchDevice_ComBase.CMD_SetWorkMode == dt_cmd) { if(SwitchDevice_ComBase.CMD_RES_SUCCESS == m_Bus_RTU_Cmd.Result_val) { dt_cmd_ack = SwitchDevice_ComBase.CMD_SetWorkMode_Ack; dev_control_Str = "ÉèÖù¤×÷ģʽ³É¹¦!"+Com.get_DTF(new Date(), Com.DTF_YMDhms); comm_res = true; } }else if(SwitchDevice_ComBase.CMD_SetTestCurr == dt_cmd) { if(SwitchDevice_ComBase.CMD_RES_SUCCESS == m_Bus_RTU_Cmd.Result_val) { dt_cmd_ack = SwitchDevice_ComBase.CMD_SetTestCurr_Ack; dev_control_Str = "ÉèÖÃÉ趨µçÁ÷³É¹¦!"+Com.get_DTF(new Date(), Com.DTF_YMDhms); comm_res = true; } }else if(SwitchDevice_ComBase.CMD_SetCurrRange == dt_cmd) { if(SwitchDevice_ComBase.CMD_RES_SUCCESS == m_Bus_RTU_Cmd.Result_val) { dt_cmd_ack = SwitchDevice_ComBase.CMD_SetCurrRange_Ack; dev_control_Str = "ÉèÖõçÁ÷Á¿³Ì³É¹¦!"+Com.get_DTF(new Date(), Com.DTF_YMDhms); comm_res = true; } }else if(SwitchDevice_ComBase.CMD_SetLoadCount == dt_cmd) { if(SwitchDevice_ComBase.CMD_RES_SUCCESS == m_Bus_RTU_Cmd.Result_val) { dt_cmd_ack = SwitchDevice_ComBase.CMD_SetLoadCount_Ack; dev_control_Str = "ÉèÖøºÔØÊýÁ¿³É¹¦!"+Com.get_DTF(new Date(), Com.DTF_YMDhms); comm_res = true; } }else if(SwitchDevice_ComBase.CMD_ControDisRelay == dt_cmd) { if(SwitchDevice_ComBase.CMD_RES_SUCCESS == m_Bus_RTU_Cmd.Result_val) { dt_cmd_ack = SwitchDevice_ComBase.CMD_ControDisRelay_Ack; dev_control_Str = "¿ØÖƷŵç¼ÌµçÆ÷³É¹¦!"+Com.get_DTF(new Date(), Com.DTF_YMDhms); comm_res = true; } }else if(SwitchDevice_ComBase.CMD_ControChrRelay == dt_cmd) { if(SwitchDevice_ComBase.CMD_RES_SUCCESS == m_Bus_RTU_Cmd.Result_val) { dt_cmd_ack = SwitchDevice_ComBase.CMD_ControChrRelay_Ack; dev_control_Str = "¿ØÖƳäµç¼ÌµçÆ÷³É¹¦!"+Com.get_DTF(new Date(), Com.DTF_YMDhms); comm_res = true; } }else if(SwitchDevice_ComBase.CMD_ControResetRelay == dt_cmd) { if(SwitchDevice_ComBase.CMD_RES_SUCCESS == m_Bus_RTU_Cmd.Result_val) { dt_cmd_ack = SwitchDevice_ComBase.CMD_ControResetRelay_Ack; dev_control_Str = "¸´Î»¼ÌµçÆ÷³É¹¦!"+Com.get_DTF(new Date(), Com.DTF_YMDhms); comm_res = true; } }else if(SwitchDevice_ComBase.CMD_StartDisTest == dt_cmd) { //if(SwitchDevice_ComBase.CMD_RES_SUCCESS == m_Bus_RTU_Cmd.Result_val) { dt_cmd_ack = SwitchDevice_ComBase.CMD_StartDisTest_Ack; dev_control_Str = "Æô¶¯·Åµç²âÊԳɹ¦!"+Com.get_DTF(new Date(), Com.DTF_YMDhms); comm_res = true; //} }else if(SwitchDevice_ComBase.CMD_StopDisTest == dt_cmd) { //if(SwitchDevice_ComBase.CMD_RES_SUCCESS == m_Bus_RTU_Cmd.Result_val) { dt_cmd_ack = SwitchDevice_ComBase.CMD_StopDisTest_Ack; dev_control_Str = "Í£Ö¹·Åµç²âÊԳɹ¦!"+Com.get_DTF(new Date(), Com.DTF_YMDhms); comm_res = true; //} }else if(SwitchDevice_ComBase.CMD_StartChrTest == dt_cmd) { //if(SwitchDevice_ComBase.CMD_RES_SUCCESS == m_Bus_RTU_Cmd.Result_val) { dt_cmd_ack = SwitchDevice_ComBase.CMD_StartChrTest_Ack; dev_control_Str = "Æô¶¯³äµç²âÊԳɹ¦!"+Com.get_DTF(new Date(), Com.DTF_YMDhms); comm_res = true; //} }else if(SwitchDevice_ComBase.CMD_StopChrTest == dt_cmd) { //if(SwitchDevice_ComBase.CMD_RES_SUCCESS == m_Bus_RTU_Cmd.Result_val) { dt_cmd_ack = SwitchDevice_ComBase.CMD_StopChrTest_Ack; dev_control_Str = "Í£Ö¹³äµç²âÊԳɹ¦!"+Com.get_DTF(new Date(), Com.DTF_YMDhms); comm_res = true; //} }else if(SwitchDevice_ComBase.CMD_OnlineVolJiaoZhun == dt_cmd) { if(SwitchDevice_ComBase.CMD_RES_SUCCESS == m_Bus_RTU_Cmd.Result_val) { dt_cmd_ack = SwitchDevice_ComBase.CMD_OnlineVolJiaoZhun_Ack; dev_jiaozhun_Str = "ÔÚÏßµçѹУ׼³É¹¦!"+Com.get_DTF(new Date(), Com.DTF_YMDhms); comm_res = true; } }else if(SwitchDevice_ComBase.CMD_GroupVolJiaoZhun == dt_cmd) { if(SwitchDevice_ComBase.CMD_RES_SUCCESS == m_Bus_RTU_Cmd.Result_val) { dt_cmd_ack = SwitchDevice_ComBase.CMD_GroupVolJiaoZhun_Ack; dev_jiaozhun_Str = "×é¶ËµçѹУ׼³É¹¦!"+Com.get_DTF(new Date(), Com.DTF_YMDhms); comm_res = true; } }else if(SwitchDevice_ComBase.CMD_DevTmpJiaoZhun == dt_cmd) { if(SwitchDevice_ComBase.CMD_RES_SUCCESS == m_Bus_RTU_Cmd.Result_val) { dt_cmd_ack = SwitchDevice_ComBase.CMD_DevTmpJiaoZhun_Ack; dev_jiaozhun_Str = "É豸ζÈУ׼³É¹¦!"+Com.get_DTF(new Date(), Com.DTF_YMDhms); comm_res = true; } }else if(SwitchDevice_ComBase.CMD_DisCurrClear == dt_cmd) { if(SwitchDevice_ComBase.CMD_RES_SUCCESS == m_Bus_RTU_Cmd.Result_val) { dt_cmd_ack = SwitchDevice_ComBase.CMD_DisCurrClear_Ack; dev_jiaozhun_Str = "Õý¼«µçÁ÷ÇåÁã³É¹¦!"+Com.get_DTF(new Date(), Com.DTF_YMDhms); comm_res = true; } }else if(SwitchDevice_ComBase.CMD_ChrCurrClear == dt_cmd) { if(SwitchDevice_ComBase.CMD_RES_SUCCESS == m_Bus_RTU_Cmd.Result_val) { dt_cmd_ack = SwitchDevice_ComBase.CMD_ChrCurrClear_Ack; dev_jiaozhun_Str = "¸º¼«µçÁ÷ÇåÁã³É¹¦!"+Com.get_DTF(new Date(), Com.DTF_YMDhms); comm_res = true; } }else if(SwitchDevice_ComBase.CMD_DisCurrSlopeReset == dt_cmd) { if(SwitchDevice_ComBase.CMD_RES_SUCCESS == m_Bus_RTU_Cmd.Result_val) { dt_cmd_ack = SwitchDevice_ComBase.CMD_DisCurrSlopeReset_Ack; dev_jiaozhun_Str = "·ÅµçµçÁ÷¸´Î»Ð£×¼²ÎÊý³É¹¦!"+Com.get_DTF(new Date(), Com.DTF_YMDhms); comm_res = true; } }else if(SwitchDevice_ComBase.CMD_DisCurrSkewReset == dt_cmd) { if(SwitchDevice_ComBase.CMD_RES_SUCCESS == m_Bus_RTU_Cmd.Result_val) { dt_cmd_ack = SwitchDevice_ComBase.CMD_DisCurrSkewReset_Ack; dev_jiaozhun_Str = "·ÅµçµçÁ÷¸´Î»Ð£×¼²ÎÊý³É¹¦!"+Com.get_DTF(new Date(), Com.DTF_YMDhms); comm_res = true; } }else if(SwitchDevice_ComBase.CMD_ChrCurrSlopeReset == dt_cmd) { if(SwitchDevice_ComBase.CMD_RES_SUCCESS == m_Bus_RTU_Cmd.Result_val) { dt_cmd_ack = SwitchDevice_ComBase.CMD_ChrCurrSlopeReset_Ack; dev_jiaozhun_Str = "³äµçµçÁ÷¸´Î»Ð£×¼²ÎÊý³É¹¦!"+Com.get_DTF(new Date(), Com.DTF_YMDhms); comm_res = true; } }else if(SwitchDevice_ComBase.CMD_ChrCurrSkewReset == dt_cmd) { if(SwitchDevice_ComBase.CMD_RES_SUCCESS == m_Bus_RTU_Cmd.Result_val) { dt_cmd_ack = SwitchDevice_ComBase.CMD_ChrCurrSkewReset_Ack; dev_jiaozhun_Str = "³äµçµçÁ÷¸´Î»Ð£×¼²ÎÊý³É¹¦!"+Com.get_DTF(new Date(), Com.DTF_YMDhms); comm_res = true; } }else if(SwitchDevice_ComBase.CMD_SetDisCurrSlope == dt_cmd) { //·ÅµçµçÁ÷бÂÊУ׼ if(SwitchDevice_ComBase.CMD_RES_SUCCESS == m_Bus_RTU_Cmd.Result_val) { dt_cmd_ack = SwitchDevice_ComBase.CMD_SetDisCurrSlope_Ack; dev_jiaozhun_Str = "·ÅµçµçÁ÷У׼²ÎÊýÏ·¢³É¹¦!"+Com.get_DTF(new Date(), Com.DTF_YMDhms); comm_res = true; } }else if(SwitchDevice_ComBase.CMD_SetDisCurrSkew == dt_cmd) { //·ÅµçµçÁ÷Æ«ÒÆÁ¿Ð£×¼ if(SwitchDevice_ComBase.CMD_RES_SUCCESS == m_Bus_RTU_Cmd.Result_val) { dt_cmd_ack = SwitchDevice_ComBase.CMD_SetDisCurrSkew_Ack; dev_jiaozhun_Str = "·ÅµçµçÁ÷У׼²ÎÊýÏ·¢³É¹¦!"+Com.get_DTF(new Date(), Com.DTF_YMDhms); comm_res = true; } }else if(SwitchDevice_ComBase.CMD_SetChrCurrSlope == dt_cmd) { //³äµçµçÁ÷бÂÊУ׼ if(SwitchDevice_ComBase.CMD_RES_SUCCESS == m_Bus_RTU_Cmd.Result_val) { dt_cmd_ack = SwitchDevice_ComBase.CMD_SetChrCurrSlope_Ack; dev_jiaozhun_Str = "³äµçµçÁ÷У׼²ÎÊýÏ·¢³É¹¦!"+Com.get_DTF(new Date(), Com.DTF_YMDhms); comm_res = true; } }else if(SwitchDevice_ComBase.CMD_SetChrCurrSkew == dt_cmd) { //³äµçµçÁ÷Æ«ÒÆÁ¿Ð£×¼ if(SwitchDevice_ComBase.CMD_RES_SUCCESS == m_Bus_RTU_Cmd.Result_val) { dt_cmd_ack = SwitchDevice_ComBase.CMD_SetChrCurrSkew_Ack; dev_jiaozhun_Str = "·ÅµçµçÁ÷У׼²ÎÊýÏ·¢³É¹¦!"+Com.get_DTF(new Date(), Com.DTF_YMDhms); comm_res = true; } } } if(true == comm_res) { if(++comm_rx_cnt > 1000000) { comm_rx_cnt = 0; } } return msg; } /*********************************************************************************************/ public void makeRandomData(int dt_cmd) { float targetCurr = 0; int testGroupNum = m_FBS_VCData.m_SysState.TestGroupNum; //²âÊÔ×éºÅ int workState = m_FBS_VCData.m_SysState.WorkState; //É豸¹¤×÷״̬ float groupVolLimit = 0; //×é¶Ëµçѹ int eveBattGroupNum = 0; //ÿ×éµ¥Ìå¸öÊý eveBattGroupNum = m_FBS_VCData.battSum/m_FBS_VCData.battGroup; boolean isTest = false; if(m_FBS_VCData.m_SysState.WorkState == FBS9100_SysState.SYS_STATE_DISCHARGING) { //·Åµç²âÊÔ targetCurr = m_FBS_DiscParamFromDev.DisCurr; groupVolLimit = 35f; isTest = true; alearyMaxCurr = false; }else if(m_FBS_VCData.m_SysState.WorkState == FBS9100_SysState.SYS_STATE_CHARGING){ //³äµç²âÊÔ targetCurr = m_FBS_DiscParamFromDev.ChargeCurrSet; groupVolLimit = 53.5f; isTest = true; if(Math.abs(m_FBS_VCData.battcurr[testGroupNum-1] - targetCurr) <= 0.5) { alearyMaxCurr = true; targetCurr = 1; } }else if(m_FBS_VCData.m_SysState.WorkState == FBS9100_SysState.SYS_STATE_STOPPED){ //¸¡³äʱ alearyMaxCurr = false; } System.err.println("Start:"+alearyMaxCurr); // System.err.println("ϵͳ¹¤×÷״̬£º"+m_FBS_VCData.m_SysState.WorkState + "\t±»²â×éºÅ£º" + m_FBS_VCData.m_SysState.TestGroupNum+ // "\n ·ÅµçµçÁ÷£º"+m_FBS_DiscParamFromDev.DisCurr + "\tÏÞÖÆµçÁ÷£º"+targetCurr) ; for(int i = 0 ; i< m_FBS_VCData.onlinevol.length;i++) { if((i+1) == testGroupNum && (workState == FBS9100_SysState.SYS_STATE_CHARGING || workState == FBS9100_SysState.SYS_STATE_DISCHARGING)) { //²âÊÔʱ m_FBS_VCData.onlinevol[i] = (double)FBS9100_ComBase.CreateIntRanDom(5350,5360)/100; m_FBS_VCData.batttemp[i] = (double)FBS9100_ComBase.CreateIntRanDom(200,400)/10; //m_FBS_VCData.groupvol[i] = (double)FBS9100_ComBase.CreateIntRanDom(5310,5690)/100; //m_FBS_VCData.battcurr[i] = (double)FBS9100_ComBase.CreateIntRanDom(0,30)/10; if(workState == FBS9100_SysState.SYS_STATE_CHARGING && alearyMaxCurr) { //³äµçʱ£¬ÈôÔÚÏßµçѹºÍ×é¶Ëµçѹѹ²îСÓÚµÈÓÚ4V,Ä£ÄâµçÁ÷ϽµÖÁ1A×óÓÒ float testCurr = 0; double test_curr = m_FBS_VCData.battcurr[testGroupNum-1]; if(test_curr > (testCurr+1)) { m_FBS_VCData.battcurr[testGroupNum-1] = m_FBS_VCData.battcurr[testGroupNum-1] - (double)FBS9100_ComBase.CreateIntRanDom(0,5)/10; }else { m_FBS_VCData.battcurr[testGroupNum-1] = testCurr + (double)FBS9100_ComBase.CreateIntRanDom(0,10)/10; } }else { m_FBS_VCData.setRandomTestCurr(testGroupNum, targetCurr); } }else { m_FBS_VCData.onlinevol[i] = (double)FBS9100_ComBase.CreateIntRanDom(5350,5360)/100; //m_FBS_VCData.groupvol[i] = (double)FBS9100_ComBase.CreateIntRanDom(5310,5690)/100; m_FBS_VCData.battcurr[i] = (double)FBS9100_ComBase.CreateIntRanDom(0,30)/10; m_FBS_VCData.batttemp[i] = (double)FBS9100_ComBase.CreateIntRanDom(200,400)/10; } } if(FBS9100_ComBase.CMD_SetVIData == dt_cmd) { for(int i = 0 ;i= (testGroupNum-1)*eveBattGroupNum) && (i<(testGroupNum)*eveBattGroupNum)) { if(m_FBS_VCData.m_SysState.WorkState == FBS9100_SysState.SYS_STATE_DISCHARGING) { //·Åµçʱµ¥Ìåµçѹ m_FBS_VCData.vol[i] = RandomDisMonVol(m_FBS_VCData.vol[i]); //System.out.println("·Åµç²âÊÔÖÐ#"+(i+1)+":"+m_FBS_VCData.vol[i]); }else{ //³äµçʱµ¥Ìåµçѹ m_FBS_VCData.vol[i] = RandomChrMonVol(m_FBS_VCData.vol[i]); //System.out.println("³äµç²âÊÔÖÐ#"+(i+1)+":"+m_FBS_VCData.vol[i]); } }else { m_FBS_VCData.vol[i] = (double)FBS9100_ComBase.CreateIntRanDom(2229,2231)/1000; } } for(int n = 0;n= 2.230) { return (double)FBS9100_ComBase.CreateIntRanDom(2229,2231)/1000; }else { return monvol + (double)FBS9100_ComBase.CreateIntRanDom(0,10)/10000; } } public static void main(String[] args) { for(int i =0 ;i<100;i++) { System.out.println(RandomDisMonVol(2.16)); } } }