iec61850_forFoShanAES_Model/bin/com/dec/fbs9100/BTS_61850_SocketClient.classBinary files differ
iec61850_forFoShanAES_Model/bin/com/dec/fbs9100/Sql_Mysql.classBinary files differ
iec61850_forFoShanAES_Model/bin/com/dec/fbs9100/main_BTS_APP_IEC61850.classBinary files differ
iec61850_forFoShanAES_Model/bin/log4j2_batt_61850_dev_x64.xml
@@ -63,7 +63,7 @@ </Appenders> <Loggers> <Root level="trace"> <Root level="info"> <AppenderRef ref="Console" /> <appenderRef ref="INFO" /> <appenderRef ref="ERROR" /> iec61850_forFoShanAES_Model/log4j2_batt_61850_dev_x64.xml
@@ -63,7 +63,7 @@ </Appenders> <Loggers> <Root level="trace"> <Root level="info"> <AppenderRef ref="Console" /> <appenderRef ref="INFO" /> <appenderRef ref="ERROR" /> iec61850_forFoShanAES_Model/src/com/dec/fbs9100/BTS_61850_SocketClient.java
@@ -161,7 +161,7 @@ // if(!FBSDeviceName.contains(m_ServerModel.getBaseDevName())) { // System.err.println("SSSSSSSSSSS"); // //与预加载的模型文件不一致时 // m_ServerModel = m_Association.retrieveModel(); m_ServerModel = m_Association.retrieveModel(); // } System.err.println("Dev_BASE:"+m_ServerModel.getBaseDevName());; @@ -811,7 +811,6 @@ events.clear(); if(0 == (numberDevState%3)) { System.out.println(); //---------------------------------Log Level.TRACE-------------------------------------// logger.printf(Level.TRACE, "m_ServerModel.getDataSet(%s/LLN0.dsBtseYc)", FBSDeviceName); //-------------------------------------------------------------------------------------// @@ -1078,6 +1077,13 @@ //-------------------------------------------------------------------------------------// comm_res = true; DataSet ds = m_ServerModel.getDataSet(FBSDeviceName + "/LLN0.dsDevState"); if(null == ds) { //兼容老版本协转数据 ds = m_ServerModel.getDataSet(FBSDeviceName + "/LLN0.dsBtseYc"); } if(null == ds) { return false; } int size_cnt = ds.getMembers().size(); //System.out.println(FBSDeviceName + "/LLN0.dsDevState 节点数:"+size_cnt); m_Association.getDataSetValues(ds); @@ -1090,7 +1096,7 @@ FcModelNode fc_mode = (FcModelNode) ds.getMembers().get(n).getChild("mag").getChild("f"); BasicDataBind<?> data = new Float32DataBind((BdaFloat32) fc_mode); //JTextField tf_t = (JTextField) data.getValueField(); //System.out.println("n:"+n+" "+fc_mode.toString1()); //System.out.println("n:"+n+" "+fc_mode.toString1()+"==="+((BdaFloat32) fc_mode).getFloat().intValue()); String fc_mode_str = fc_mode.toString1(); if(fc_mode_str.contains(FBSDeviceName + "/ncdGGIO1.StaNum.mag.f")){ int st = ((BdaFloat32) fc_mode).getFloat().intValue(); @@ -1256,7 +1262,7 @@ m_FBS_DiscParamFromDev.ChargeCurrSet = Float.parseFloat(tf_t.getText()); //m_FBS_DiscParamFromDev.ChargeCurrSet = readFloatNodeData(FBSDeviceName + "/ncdGGIO1.ChargeCurr.mag.f", Fc.MX); }else { System.out.println(fc_model_str); //System.out.println(fc_model_str); } } //测试时长 iec61850_forFoShanAES_Model/src/com/dec/fbs9100/Sql_Mysql.java
@@ -23,6 +23,8 @@ final public static String DB_BATT_HISTORY = "`db_batt_history`"; final public static String DB_DEV_TESTPARAM = "`db_dev_testparam`"; final public static String DB_IED_SCOUT = "`db_ied_scout`"; //--------------------------------------------------------------------------------------------// public final static String TB_HardDevSmsState = "tb_hard_dev_sms_state"; //--------------------------------------------------------------------------------------------// @@ -135,6 +137,10 @@ /***************************** db_dev_testparam 数据库 **********************************/ public final static String Batt_TestParam_Table = DB_DEV_TESTPARAM + ".tb_batt_testparam_"; /***************************** DB_IED_SCOUT 数据库 **********************************/ public final static String Connect_Inf_Table = DB_IED_SCOUT + ".tb_connect_inf"; //IED连接信息表 public final static String Ied_NodeState_Table = DB_IED_SCOUT + ".tb_ied_nodestate"; //设备信息表 public Connection mysql_con; public Logger logger = null; iec61850_forFoShanAES_Model/src/com/dec/fbs9100/main_BTS_APP_IEC61850.java
@@ -8,6 +8,7 @@ import com.base.AppConfig; import com.battdata_rt.BattData_RT_Array; import com.dec.fbs9100.AppParam; import com.iedscout.BTS61850_IEDScout_Task_Thread; /** * 佛山版本61850 @@ -146,6 +147,13 @@ batt_realdata.start(); } /*********************************************************************************/ /************************************ iedScout 调试工具 *********************************************/ { BTS61850_IEDScout_Task_Thread ied_thread = new BTS61850_IEDScout_Task_Thread(GB_MysqlConnPool); ied_thread.start(); } /*********************************************************************************/ while(true) { try { iec61850_forFoShanAES_Model/src/com/iedscout/BTS61850_IEDScout_Task.java
New file @@ -0,0 +1,298 @@ package com.iedscout; import java.io.File; import java.io.FileNotFoundException; import java.io.IOException; import java.io.UnsupportedEncodingException; import java.net.InetAddress; import java.util.Collection; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; import org.apache.logging.log4j.Level; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import org.openmuc.openiec61850.BasicDataAttribute; import org.openmuc.openiec61850.BdaBoolean; import org.openmuc.openiec61850.BdaFloat32; import org.openmuc.openiec61850.BdaFloat64; import org.openmuc.openiec61850.BdaInt128; import org.openmuc.openiec61850.BdaInt16; import org.openmuc.openiec61850.BdaInt16U; import org.openmuc.openiec61850.BdaInt32; import org.openmuc.openiec61850.BdaInt32U; import org.openmuc.openiec61850.BdaInt64; import org.openmuc.openiec61850.BdaInt8; import org.openmuc.openiec61850.BdaInt8U; import org.openmuc.openiec61850.BdaType; import org.openmuc.openiec61850.BdaUnicodeString; import org.openmuc.openiec61850.ClientAssociation; import org.openmuc.openiec61850.ClientSap; import org.openmuc.openiec61850.DataSet; import org.openmuc.openiec61850.Fc; import org.openmuc.openiec61850.FcModelNode; import org.openmuc.openiec61850.ModelNode; import org.openmuc.openiec61850.ServerModel; import org.openmuc.openiec61850.ServerSap; import org.openmuc.openiec61850.ServiceError; import com.dec.fbs9100.MysqlConnPool; import com.iedscout.BTS61850_IEDScout_Task_Thread.IEDScout_Param; public class BTS61850_IEDScout_Task { private MysqlConnPool pool; private IEDScout_Param param; private Logger logger = null; private ServerModel m_ServerModel = null; private ClientSap m_ClientSap; private ClientAssociation m_Association; private boolean m_App_IsConnect = true; private BTS_ScoutData_Array m_ScoutData; private boolean is_clear_data = false; private UpdateDataToMySQL_Task mySQL_Task; //数据更新线程 public BTS61850_IEDScout_Task(MysqlConnPool pool,IEDScout_Param param) { this.param = param; this.pool = pool; this.logger = LogManager.getFormatterLogger(); this.m_ScoutData = new BTS_ScoutData_Array(); this.mySQL_Task = new UpdateDataToMySQL_Task(m_ScoutData, pool); } public void connectIEDDevice() throws FileNotFoundException { try { while(m_App_IsConnect) { try { logger.info("BTS_IEC61850_Client Start to connect to device IP:" + param.target_ip + " Port:" + param.target_port); m_App_IsConnect = true; m_ClientSap = new ClientSap(); // m_ClientSap.setMaxMmsPduSize(65000); // m_ClientSap.setResponseTimeout(50000); // m_ClientSap.setMessageFragmentTimeout(50000); m_Association = m_ClientSap.associate(InetAddress.getByName(param.target_ip), param.target_port, null, null); } catch (Exception e) { logger.error(e.toString(), e); m_App_IsConnect = false; param.setFail_reasion(IEDScout_Param.FAILREASION_PARAMERROR); param.setConn_st(IEDScout_Param.CONN_STATE_FAIL); logger.info("BTS_IEC61850_Client Unable to connect to device IP:" + param.target_ip); break; } logger.info("Start Load ICD File '" + param.target_icd + "'"); File file = new File(param.target_icd); if(!file.exists()) { param.setFail_reasion(IEDScout_Param.FAILREASION_FILENOTFOUND); param.setConn_st(IEDScout_Param.CONN_STATE_FAIL); logger.info("ICD File '" + param.target_icd + "' Not EXISTS "); break; } try { //加载模型文件 List<ServerSap> serverSaps = ServerSap.getSapsFromSclFile(param.target_icd); m_ServerModel = serverSaps.get(0).serverModel; }catch (Exception e1) { param.setFail_reasion(IEDScout_Param.FAILREASION_FILEERROR); param.setConn_st(IEDScout_Param.CONN_STATE_FAIL); logger.info("Error Parsing ICD File: " + e1.getMessage()); break; } logger.info("Successfully Read Model "); List<BasicDataAttribute> ms = m_ServerModel.getBasicDataAttributes(); m_ScoutData.clear(); for (BasicDataAttribute basicData : ms) { //ModelNode mode = basicDataAttribute.getParent(); if(null == basicData) { continue; } ScoutData data = new ScoutData(); data.setNode_path(basicData.toString1()); //System.out.println(basicData.toString1() + "==" + basicData.getBasicType()); m_ScoutData.addScoutData(data); //System.out.println(basicDataAttribute.toString1()+"=="+basicDataAttribute.getParent().toString1()); // System.out.println(basicDataAttribute.toString1()+"=="+basicDataAttribute.getParent()); } //System.out.println("点位数量:"+m_ScoutData.getDataCount()); Collection<DataSet> m_DataSets = m_ServerModel.getDataSets(); // System.err.println("m_DataSets.size:"+m_DataSets.size()); // System.out.println("#######################"+m_App_IsConnect); if(m_App_IsConnect) { new Thread(mySQL_Task).start(); is_clear_data = true; } BTS61850_IEDScout_Task_Thread_SQL.updateConnect_Inf_Table(pool, param); while(m_App_IsConnect) { //读取数据集合 Iterator<DataSet> DataSetIt = m_DataSets.iterator(); while(null != DataSetIt && DataSetIt.hasNext()) { //System.out.println((null != DataSetIt)+"%%%%%%%%%%%%%%%%%%%%%%%"+DataSetIt.hasNext()); DataSet m_DataSet = DataSetIt.next(); //读取点位中的数据 //-------------------------------------------------------------------------------------// //logger.printf(Level.ERROR,m_DataSet.getReferenceStr(), m_DataSet.getReferenceStr()); //-------------------------------------------------------------------------------------// DataSet tmp_ds = m_ServerModel.getDataSet(m_DataSet.getReferenceStr()); if(null == tmp_ds) { continue; } DataSet ds = tmp_ds.copy(); m_Association.getDataSetValues(ds); List<FcModelNode> fcMode = ds.getMembers(); //System.err.println(fcMode.size()); if(null != fcMode && fcMode.size() >0) { for (int n = 0; n<fcMode.size(); n++) { FcModelNode fcData = fcMode.get(n); Collection<BasicDataAttribute> child = fcData.getBasicDataAttributes(); for (BasicDataAttribute modelNode : child) { //System.out.println(modelNode.toString1()); ScoutData data = m_ScoutData.getScoutData(modelNode.toString1()); if(null != data) { if(data.getNode_name().length() < 1 && !data.isRead_note()) { //读取中文注释 String zh_name = readUnicodeStringNodeData(fcData.toString1()+".dU",Fc.DC); //System.err.println(fcData.toString1()+"=="+fcData.getFc()+"-"+zh_name); data.setRead_note(true); if(null == zh_name) { continue; } data.setNode_name(zh_name); } data.setNode_path(modelNode.toString1()); data.setNode_value(getBasicDataAttributeData(modelNode)); // if(data.node_path.equals("ZJDYCPSS/btgGGIO1.AnIn1.mag.f")) { // System.out.println(data.getNode_name()+getBasicDataAttributeData(modelNode)); // } BTS61850_IEDScout_Task_Thread_SQL.updateupdateIed_NodeState_Table(pool, data); } } param.addCommNum(); } }else { param.addErrorNum(); } param.setConn_st(IEDScout_Param.CONN_STATE_SUCCESS); BTS61850_IEDScout_Task_Thread_SQL.updateConnect_Inf_Table(pool, param); ds = null; //BTS61850_IEDScout_Task_Thread_SQL.updateIed_NodeState_Table(pool, m_ScoutData); Thread.sleep(100); } if(is_clear_data) { is_clear_data = false; mySQL_Task.setM_initTask(true); } //手动停止连接 if(BTS61850_IEDScout_Task_Thread_SQL.queryIed_NodeState_TableStopConnect(pool)) { m_App_IsConnect = false; logger.error("DevIp:"+param.target_ip + " Remote DisConnect ... "); } if(null == DataSetIt) { param.addErrorNum(); } Thread.sleep(100); if(param.getErrcount() > 10) { param.setFail_reasion(IEDScout_Param.FAILREASION_TIMEOUT); logger.error("Error Comm Count OverMuch ,DisConnect to Device IP:" + param.target_ip); m_App_IsConnect = false; } } } } catch (Exception e) { logger.error(this.getClass() + e.getMessage()); } finally { //连接断开之后 mySQL_Task.setApp_UpdateAlive(false); param.setConn_st(IEDScout_Param.CONN_STATE_FAIL); BTS61850_IEDScout_Task_Thread_SQL.updateConnect_Inf_Table(pool, param); logger.error("DevIp:"+param.target_ip + " DisConnect ... "); } } public void setAppIsConnect(boolean state) { this.m_App_IsConnect = state; } public String readUnicodeStringNodeData(String reference, Fc fc) { FcModelNode fcModelNode = (FcModelNode)m_ServerModel.findModelNode(reference, fc); if(null == fcModelNode) { return ""; } String res = ""; try { m_Association.getDataValues(fcModelNode); res = new String(((BdaUnicodeString)fcModelNode).getValue(),"UTF-8"); } catch (ServiceError | IOException e1) { return ""; } return res; } public float getBasicDataAttributeData(BasicDataAttribute modelNode) { float f = 0; BdaType nodeType = modelNode.getBasicType(); if(BdaType.BOOLEAN == nodeType) { BdaBoolean bda = (BdaBoolean)modelNode; f = bda.getValue()?1:0; }else if(BdaType.INT8 == nodeType) { BdaInt8 bda = (BdaInt8)modelNode; f = bda.getValue(); }else if(BdaType.INT16 == nodeType) { BdaInt16 bda = (BdaInt16)modelNode; f = bda.getValue(); }else if(BdaType.INT32 == nodeType) { BdaInt32 bda = (BdaInt32)modelNode; f = bda.getValue(); }else if(BdaType.INT64 == nodeType) { BdaInt64 bda = (BdaInt64)modelNode; f = bda.getValue(); }else if(BdaType.INT128 == nodeType) { BdaInt128 bda = (BdaInt128)modelNode; f = bda.getValue(); }else if(BdaType.INT8U == nodeType) { BdaInt8U bda = (BdaInt8U)modelNode; f = bda.getValue(); }else if(BdaType.INT16U == nodeType) { BdaInt16U bda = (BdaInt16U)modelNode; f = bda.getValue(); }else if(BdaType.INT32U == nodeType) { BdaInt32U bda = (BdaInt32U)modelNode; f = bda.getValue(); }else if(BdaType.FLOAT32 == nodeType) { BdaFloat32 bda = (BdaFloat32)modelNode; f = bda.getFloat(); }else if(BdaType.FLOAT64 == nodeType) { BdaFloat64 bda = (BdaFloat64)modelNode; f = Float.parseFloat(Double.toHexString(bda.getDouble())); } return f; } public static void main(String[] args) { MysqlConnPool pool = new MysqlConnPool("192.168.10.82",3360,10); BTS61850_IEDScout_Task_Thread thread = new BTS61850_IEDScout_Task_Thread(pool); thread.start(); } } iec61850_forFoShanAES_Model/src/com/iedscout/BTS61850_IEDScout_Task_Thread.java
New file @@ -0,0 +1,170 @@ package com.iedscout; import org.apache.logging.log4j.Level; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import com.dec.fbs9100.MysqlConnPool; import com.iedscout.BTS61850_IEDScout_Task_Thread.IEDScout_Param; public class BTS61850_IEDScout_Task_Thread extends Thread{ private Logger logger = null; private MysqlConnPool pool; public BTS61850_IEDScout_Task_Thread(MysqlConnPool pool) { this.pool = pool; this.logger = LogManager.getFormatterLogger(); } @Override public void run() { logger.info("BTS61850_IEDScout_Task_Thread Start Monitor ... "); BTS61850_IEDScout_Task_Thread_SQL.insertConnect_Inf_Table(pool); IEDScout_Param param = new IEDScout_Param(); BTS61850_IEDScout_Task task = new BTS61850_IEDScout_Task(pool, param); while(true) { try { BTS61850_IEDScout_Task_Thread_SQL.queryConnect_Inf_Table(pool,param); if(IEDScout_Param.CONN_STATE_START == param.conn_st) { param.setConn_st(IEDScout_Param.CONN_STATE_CONNECT); param.setFail_reasion(IEDScout_Param.FAILREASION_NULL); BTS61850_IEDScout_Task_Thread_SQL.updateConnect_Inf_Table(pool, param); task.setAppIsConnect(true); logger.printf(Level.INFO,"BTS61850_IEDScout_Task Start Connect IP:%s,Port:%d",param.target_ip,param.target_port); task.connectIEDDevice(); } Thread.sleep(1000); } catch (Exception e) { logger.error(e.toString(), e); } } } /** * 连接参数信息 * @author DELL * */ public class IEDScout_Param{ public static final int CONN_STATE_NULL = 0; //默认 public static final int CONN_STATE_START = 1; //开始连接 public static final int CONN_STATE_CONNECT = 2; //连接中 public static final int CONN_STATE_SUCCESS = 3; //连接成功 public static final int CONN_STATE_FAIL = 4; //连接失败 public static final int FAILREASION_NULL = 0; //无 public static final int FAILREASION_FILENOTFOUND = 1; //文件不存在 public static final int FAILREASION_FILEERROR = 2; //文件不匹配 public static final int FAILREASION_PARAMERROR = 3; //IP或者端口错误 public static final int FAILREASION_TIMEOUT = 4; //连接超时 public String target_ip; //'目标IP地址', public int target_port; //'目的端口号', public String target_icd; //'目的设备icd文件路径', public int conn_st; //'连接状态0-默认 1-开始连接[平台设置] 2-连接中 3-连接成功 4-连接失败', public int fail_reasion; //'失败原因:0-无 1-ICD文件不存在 2-ICD文件不匹配', public long comm_num; //通信计数', public long error_num; //'通信错误计数', public long errcount; //连续通信错误计数 >10 断开连接 public int GetConnStateNull() { return CONN_STATE_NULL; } public int GetConnStateStart() { return CONN_STATE_START; } public int GetConnStateConnect() { return CONN_STATE_CONNECT; } public int GetConnStateSuccess() { return CONN_STATE_SUCCESS; } public int GetConnStateFail() { return CONN_STATE_FAIL; } public String getTarget_ip() { return target_ip; } public int getTarget_port() { return target_port; } public String getTarget_icd() { return target_icd; } public int getConn_st() { return conn_st; } public int getFail_reasion() { return fail_reasion; } public long getComm_num() { return comm_num; } public long getError_num() { return error_num; } public void setTarget_ip(String target_ip) { this.target_ip = target_ip; } public void setTarget_port(int target_port) { this.target_port = target_port; } public void setTarget_icd(String target_icd) { this.target_icd = target_icd; } public void setConn_st(int conn_st) { this.conn_st = conn_st; } public void setFail_reasion(int fail_reasion) { this.fail_reasion = fail_reasion; } public void setComm_num(long comm_num) { this.comm_num = comm_num; } public void setError_num(long error_num) { this.error_num = error_num; } /** * 累加通信计数 */ public void addCommNum() { if(this.comm_num < 999999990){ this.comm_num ++; errcount = 0; } } /** * 累加错误计数 */ public void addErrorNum() { if(this.error_num < 999999990){ this.error_num ++; } this.errcount ++; } public long getErrcount() { return errcount; } public void setErrcount(long errcount) { this.errcount = errcount; } } } iec61850_forFoShanAES_Model/src/com/iedscout/BTS61850_IEDScout_Task_Thread_SQL.java
New file @@ -0,0 +1,250 @@ package com.iedscout; import java.sql.ResultSet; import java.sql.SQLException; import com.dec.fbs9100.MysqlConnPool; import com.dec.fbs9100.Sql_Mysql; import com.iedscout.BTS61850_IEDScout_Task_Thread.IEDScout_Param; public class BTS61850_IEDScout_Task_Thread_SQL { /** * 插入默认的初始数据[超过1行数据是删除其余行数据] * @param pool */ public static void insertConnect_Inf_Table(MysqlConnPool pool) { String sql_str = "SELECT count(*)as count_num FROM " + Sql_Mysql.Connect_Inf_Table; ResultSet res = null; Sql_Mysql sql = new Sql_Mysql(pool); try { res = sql.sqlMysqlQuery(sql_str); if(res.next()) { int count_num = res.getInt("count_num"); if(count_num > 1) { sql.sqlMysqlExecute("DELETE FROM " + Sql_Mysql.Connect_Inf_Table); sql.sqlMysqlExecute("INSERT INTO " + Sql_Mysql.Connect_Inf_Table + "(num,target_ip,target_port,conn_st) VALUES(1,'127.0.0.1',102,0);"); }else if(count_num == 1){ sql.sqlMysqlExecute(" UPDATE " + Sql_Mysql.Connect_Inf_Table + " set conn_st = 0;"); }else { sql.sqlMysqlExecute("INSERT INTO " + Sql_Mysql.Connect_Inf_Table + "(num,target_ip,target_port,conn_st) VALUES(1,'127.0.0.1',102,0);"); } } } catch (SQLException e) { sql.logger.error("BTS61850_IEDScout_Task_Thread_SQL.insertIntoIed_NodeState_Table():" + e.toString(), e); } finally { if(null != res) { try { res.close(); } catch (SQLException e) { sql.logger.error("BTS61850_IEDScout_Task_Thread_SQL.insertIntoIed_NodeState_Table():" + e.toString(), e); } } sql.close_con(); } } /** * 查询当前连接状态 * @param pool * @param param */ public static void queryConnect_Inf_Table(MysqlConnPool pool, IEDScout_Param param) { String sql_str = "SELECT * FROM " + Sql_Mysql.Connect_Inf_Table; Sql_Mysql sql = new Sql_Mysql(pool); ResultSet res = null; try { res = sql.sqlMysqlQuery(sql_str); if(res.next()) { param.target_ip = res.getString("target_ip"); //'目标IP地址', param.target_port = res.getInt("target_port"); //'目的端口号', param.target_icd = res.getString("target_icd"); //'目的设备icd文件路径', param.conn_st = res.getInt("conn_st"); //'连接状态0-默认 1-开始连接[平台设置] 2-连接中 3-连接成功 4-连接失败', param.fail_reasion = res.getInt("fail_reasion"); //'失败原因:0-无 1-ICD文件不存在 2-ICD文件不匹配', param.comm_num = res.getLong("comm_num"); //通信计数', param.error_num = res.getLong("error_num"); //'通信错误计数', } } catch (SQLException e) { sql.logger.error("BTS61850_IEDScout_Task_Thread_SQL.queryIntoIed_NodeState_Table():" + e.toString(), e); } finally { if(null != res) { try { res.close(); } catch (SQLException e) { sql.logger.error("BTS61850_IEDScout_Task_Thread_SQL.queryIntoIed_NodeState_Table():" + e.toString(), e); } } sql.close_con(); } } /* * * 插入默认的数据 */ public static void inseartIed_NodeState_Table(MysqlConnPool pool,BTS_ScoutData_Array array) { final StringBuffer sql_str = new StringBuffer(); array.getDataMap().forEach((key, value) -> { if(null == value.node_name) { }else { Sql_Mysql sql = new Sql_Mysql(pool); ResultSet res = null; String sql_str_sel = "SELECT * FROM " + Sql_Mysql.Ied_NodeState_Table + " WHERE node_path = '" + value.getNode_path() + "';"; try { res = sql.sqlMysqlQuery(sql_str_sel); if(res.next()) { //sql.sqlMysqlExecute("UPDATE " + Sql_Mysql.Ied_NodeState_Table + " SET node_value = '" + value.node_value + "',node_name = '" + value.node_name + "' WHERE node_path = '" + value.node_path + "';"); }else { sql.sqlMysqlExecute("INSERT INTO " + Sql_Mysql.Ied_NodeState_Table + "(node_path,node_name,node_value) VALUES('" + value.node_path + "','" + value.node_name + "','" + value.node_value + "');"); } } catch (SQLException e) { sql.logger.error("BTS61850_IEDScout_Task_Thread_SQL.updateIed_NodeState_Table():" + e.toString(), e); } finally { if(null != res) { try { res.close(); } catch (SQLException e) { sql.logger.error("BTS61850_IEDScout_Task_Thread_SQL.updateIed_NodeState_Table():" + e.toString(), e); } } sql.close_con(); } } }); } /* * * 更新默认的数据 */ public static void updateIed_NodeState_Table(MysqlConnPool pool,BTS_ScoutData_Array array) { StringBuffer sql_str = new StringBuffer(" UPDATE " + Sql_Mysql.Ied_NodeState_Table + " SET "); boolean isEx = false; StringBuffer sql_str_val = new StringBuffer(); StringBuffer sql_str_name = new StringBuffer(); Sql_Mysql sql = new Sql_Mysql(pool); array.getDataMap().forEach((key, value) -> { if(null != value.node_name && value.node_name.trim().length() > 0) { //System.out.println("value.node_path:"+value.node_path); try { Thread.sleep(10); //sql_str_val.append(" WHEN '" + value.node_path + "' THEN " + value.node_value); sql_str_val.append(" WHEN '"); sql_str_val.append(value.node_path); sql_str_val.append("' THEN "); sql_str_val.append(value.node_value); // sql_str_name.append(" WHEN '" + value.node_path + "' THEN '" + value.node_name + "'"); sql_str_name.append(" WHEN '"); sql_str_name.append(value.node_path); sql_str_name.append("' THEN '"); sql_str_name.append(value.node_name + "'"); } catch (Exception e) { sql.logger.error("BTS61850_IEDScout_Task_Thread_SQL.updateIed_NodeState_Table():" + e.toString(), e); } } }); if(sql_str_val.length() > 0) { isEx = true; sql_str.append(" node_value = CASE node_path " + sql_str_val.toString() + " ELSE node_value END "); } if(sql_str_name.length() > 0) { isEx = true; sql_str.append(" ,node_name = CASE node_path " + sql_str_name.toString() + " ELSE node_name END "); } if(isEx) { try { //System.out.println(sql_str.toString()); sql.sqlMysqlExecute(sql_str.toString()); } catch (SQLException e) { sql.logger.error("BTS61850_IEDScout_Task_Thread_SQL.updateIed_NodeState_Table():" + e.toString(), e); } finally { sql.close_con(); } } } public static void updateupdateIed_NodeState_Table(MysqlConnPool pool,ScoutData data) { StringBuffer sql_str = new StringBuffer(" UPDATE " + Sql_Mysql.Ied_NodeState_Table + " SET node_value = " + data.node_value + ",node_name = '"+ data.node_name +"' where node_path = '"+ data.node_path +"';"); Sql_Mysql sql = new Sql_Mysql(pool); try { //System.out.println(sql_str.toString()); sql.sqlMysqlExecute(sql_str.toString()); } catch (SQLException e) { sql.logger.error("BTS61850_IEDScout_Task_Thread_SQL.updateupdateIed_NodeState_Table():" + e.toString(), e); } finally { sql.close_con(); } } /** * 清空'db_ied_scout.tb_ied_nodestate'表中的所有数据 * @param pool */ public static void clearIed_NodeState_Table(MysqlConnPool pool) { String sql_str = "TRUNCATE TABLE " + Sql_Mysql.Ied_NodeState_Table; Sql_Mysql sql = new Sql_Mysql(pool); try { sql.sqlMysqlExecute(sql_str); } catch (SQLException e) { sql.logger.error("BTS61850_IEDScout_Task_Thread_SQL.updateIed_NodeState_Table():" + e.toString(), e); } finally { sql.close_con(); } } /** * 清空'db_ied_scout.tb_ied_nodestate'表中的所有数据 * @param pool */ public static void updateConnect_Inf_Table(MysqlConnPool pool,IEDScout_Param param) { String sql_str = " update " + Sql_Mysql.Connect_Inf_Table + " SET conn_st = " + param.getConn_st() + " ,fail_reasion = " + param.getFail_reasion() + " ,comm_num = " + param.getComm_num() + " ,error_num = " + param.getError_num() + " where conn_st != " + IEDScout_Param.CONN_STATE_NULL; Sql_Mysql sql = new Sql_Mysql(pool); try { sql.sqlMysqlExecute(sql_str); } catch (SQLException e) { sql.logger.error("BTS61850_IEDScout_Task_Thread_SQL.updateConnect_Inf_Table():" + e.toString(), e); } finally { sql.close_con(); } } public static boolean queryIed_NodeState_TableStopConnect(MysqlConnPool pool) { String sql_str = "SELECT * FROM " + Sql_Mysql.Connect_Inf_Table +" where conn_st = 0;"; boolean flag = false; ResultSet res = null; Sql_Mysql sql = new Sql_Mysql(pool); try { res = sql.sqlMysqlQuery(sql_str); if(res.next()) { flag = true; } } catch (SQLException e) { sql.logger.error("BTS61850_IEDScout_Task_Thread_SQL.insertIntoIed_NodeState_Table():" + e.toString(), e); } finally { if(null != res) { try { res.close(); } catch (SQLException e) { sql.logger.error("BTS61850_IEDScout_Task_Thread_SQL.insertIntoIed_NodeState_Table():" + e.toString(), e); } } sql.close_con(); } return flag; } public static void main(String[] args) { MysqlConnPool pool = new MysqlConnPool("192.168.10.82", 3360, 5); System.out.println(queryIed_NodeState_TableStopConnect(pool));; } } iec61850_forFoShanAES_Model/src/com/iedscout/BTS_ScoutData_Array.java
New file @@ -0,0 +1,47 @@ package com.iedscout; import java.util.HashMap; import java.util.LinkedHashMap; import java.util.Map; public class BTS_ScoutData_Array { private Map<String,ScoutData> m_ScoutData = new LinkedHashMap<String,ScoutData>();; public void addScoutData(ScoutData data) { if(null != data.node_path && data.node_path.trim().length() > 0) { if(!data.node_path.endsWith("mag.f") && !data.node_path.endsWith(".stVal")) { return; } m_ScoutData.put(data.node_path, data); } } public ScoutData getScoutData(String path) { if(null != path) { return m_ScoutData.get(path); } return null; } public int getDataCount() { return m_ScoutData.size(); } public Map<String,ScoutData> getDataMap(){ return this.m_ScoutData; } /** * 清空集合 */ public void clear() { if(null != m_ScoutData) { m_ScoutData.clear(); } } } iec61850_forFoShanAES_Model/src/com/iedscout/ScoutData.java
New file @@ -0,0 +1,46 @@ package com.iedscout; public class ScoutData{ public String node_path; //'节点路径', public String node_name = ""; //'节点中文名称', public float node_value; //'节点值', public boolean read_note = false; //是否已经读取过注释 public ScoutData() { // TODO Auto-generated constructor stub } public String getNode_path() { return node_path; } public String getNode_name() { return node_name; } public boolean isRead_note() { return read_note; } public void setRead_note(boolean read_note) { this.read_note = read_note; } public float getNode_value() { return node_value; } public void setNode_path(String node_path) { this.node_path = node_path; } public void setNode_name(String node_name) { this.node_name = node_name; } public void setNode_value(float node_value) { this.node_value = node_value; } } iec61850_forFoShanAES_Model/src/com/iedscout/UpdateDataToMySQL_Task.java
New file @@ -0,0 +1,78 @@ package com.iedscout; import java.util.Date; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import com.base.Com; import com.dec.fbs9100.MysqlConnPool; /** * 数据库更新线程 * @author DELL * */ public class UpdateDataToMySQL_Task implements Runnable { private BTS_ScoutData_Array scoutData_Array; private MysqlConnPool pool; private boolean m_app_UpdateAlive = true; private Logger logger = null; private boolean m_initTask = false; public UpdateDataToMySQL_Task(BTS_ScoutData_Array scoutData_Array,MysqlConnPool pool) { this.pool = pool; this.scoutData_Array = scoutData_Array; this.logger = LogManager.getLogger(this); } @Override public void run() { logger.info("UpdateDataToMySQL_Task Start at " + Com.get_DTF(new Date(), Com.DTF_YMDhms)); m_app_UpdateAlive = true; BTS61850_IEDScout_Task_Thread_SQL.clearIed_NodeState_Table(pool); while(m_app_UpdateAlive) { try { // if(m_app_UpdateAlive) { // //清空数据库表 // // BTS61850_IEDScout_Task_Thread_SQL.inseartIed_NodeState_Table(pool, scoutData_Array); // // m_app_UpdateAlive = false; // } //System.err.println("UpdateDataToMySQL_Task : scoutData_Array.Count():" + scoutData_Array.getDataCount()); //BTS61850_IEDScout_Task_Thread_SQL.updateIed_NodeState_Table(pool, scoutData_Array); BTS61850_IEDScout_Task_Thread_SQL.inseartIed_NodeState_Table(pool, scoutData_Array); Thread.sleep(2000); } catch (Exception e) { logger.error("UpdateDataToMySQL_Task" + e.toString(), e); } } logger.info("UpdateDataToMySQL_Task Stop at " + Com.get_DTF(new Date(), Com.DTF_YMDhms)); } public void setApp_UpdateAlive(boolean flag) { this.m_app_UpdateAlive = flag; } public boolean isM_initTask() { return m_initTask; } public void setM_initTask(boolean m_initTask) { this.m_initTask = m_initTask; } }