From 8295ec1295eb6b0db77d5079ab6f324513ade80d Mon Sep 17 00:00:00 2001 From: DELL <DELL@WIN-3EOIPEE9ML1> Date: 星期四, 07 三月 2024 13:10:21 +0800 Subject: [PATCH] 南瑞版本新增iedscout调试工具功能 --- iec61850_forFoShanAES_Model/src/com/dec/fbs9100/Sql_Mysql.java | 6 iec61850_forFoShanAES_Model/src/com/dec/fbs9100/main_BTS_APP_IEC61850.java | 8 iec61850_forFoShanAES_Model/src/com/iedscout/ScoutData.java | 46 ++ iec61850_forFoShanAES_Model/bin/com/dec/fbs9100/Sql_Mysql.class | 0 iec61850_forFoShanAES_Model/src/com/dec/fbs9100/BTS_61850_SocketClient.java | 14 iec61850_forFoShanAES_Model/src/com/iedscout/BTS61850_IEDScout_Task_Thread.java | 170 ++++++++++ iec61850_forFoShanAES_Model/src/com/iedscout/UpdateDataToMySQL_Task.java | 78 ++++ iec61850_forFoShanAES_Model/src/com/iedscout/BTS61850_IEDScout_Task.java | 298 ++++++++++++++++++ iec61850_forFoShanAES_Model/bin/log4j2_batt_61850_dev_x64.xml | 2 iec61850_forFoShanAES_Model/log4j2_batt_61850_dev_x64.xml | 2 iec61850_forFoShanAES_Model/src/com/iedscout/BTS_ScoutData_Array.java | 47 ++ iec61850_forFoShanAES_Model/bin/com/dec/fbs9100/BTS_61850_SocketClient.class | 0 iec61850_forFoShanAES_Model/src/com/iedscout/BTS61850_IEDScout_Task_Thread_SQL.java | 250 +++++++++++++++ iec61850_forFoShanAES_Model/bin/com/dec/fbs9100/main_BTS_APP_IEC61850.class | 0 14 files changed, 915 insertions(+), 6 deletions(-) diff --git a/iec61850_forFoShanAES_Model/bin/com/dec/fbs9100/BTS_61850_SocketClient.class b/iec61850_forFoShanAES_Model/bin/com/dec/fbs9100/BTS_61850_SocketClient.class index 66f451b..fe37df1 100644 --- a/iec61850_forFoShanAES_Model/bin/com/dec/fbs9100/BTS_61850_SocketClient.class +++ b/iec61850_forFoShanAES_Model/bin/com/dec/fbs9100/BTS_61850_SocketClient.class Binary files differ diff --git a/iec61850_forFoShanAES_Model/bin/com/dec/fbs9100/Sql_Mysql.class b/iec61850_forFoShanAES_Model/bin/com/dec/fbs9100/Sql_Mysql.class index ac4ebba..e163d47 100644 --- a/iec61850_forFoShanAES_Model/bin/com/dec/fbs9100/Sql_Mysql.class +++ b/iec61850_forFoShanAES_Model/bin/com/dec/fbs9100/Sql_Mysql.class Binary files differ diff --git a/iec61850_forFoShanAES_Model/bin/com/dec/fbs9100/main_BTS_APP_IEC61850.class b/iec61850_forFoShanAES_Model/bin/com/dec/fbs9100/main_BTS_APP_IEC61850.class index fe8b206..62544c4 100644 --- a/iec61850_forFoShanAES_Model/bin/com/dec/fbs9100/main_BTS_APP_IEC61850.class +++ b/iec61850_forFoShanAES_Model/bin/com/dec/fbs9100/main_BTS_APP_IEC61850.class Binary files differ diff --git a/iec61850_forFoShanAES_Model/bin/log4j2_batt_61850_dev_x64.xml b/iec61850_forFoShanAES_Model/bin/log4j2_batt_61850_dev_x64.xml index 8aabf0e..358800b 100644 --- a/iec61850_forFoShanAES_Model/bin/log4j2_batt_61850_dev_x64.xml +++ b/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" /> diff --git a/iec61850_forFoShanAES_Model/log4j2_batt_61850_dev_x64.xml b/iec61850_forFoShanAES_Model/log4j2_batt_61850_dev_x64.xml index 8aabf0e..358800b 100644 --- a/iec61850_forFoShanAES_Model/log4j2_batt_61850_dev_x64.xml +++ b/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" /> diff --git a/iec61850_forFoShanAES_Model/src/com/dec/fbs9100/BTS_61850_SocketClient.java b/iec61850_forFoShanAES_Model/src/com/dec/fbs9100/BTS_61850_SocketClient.java index df4e5aa..cca511b 100644 --- a/iec61850_forFoShanAES_Model/src/com/dec/fbs9100/BTS_61850_SocketClient.java +++ b/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); } } //娴嬭瘯鏃堕暱 diff --git a/iec61850_forFoShanAES_Model/src/com/dec/fbs9100/Sql_Mysql.java b/iec61850_forFoShanAES_Model/src/com/dec/fbs9100/Sql_Mysql.java index db7a558..462b859 100644 --- a/iec61850_forFoShanAES_Model/src/com/dec/fbs9100/Sql_Mysql.java +++ b/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; diff --git a/iec61850_forFoShanAES_Model/src/com/dec/fbs9100/main_BTS_APP_IEC61850.java b/iec61850_forFoShanAES_Model/src/com/dec/fbs9100/main_BTS_APP_IEC61850.java index c8181d3..2a50833 100644 --- a/iec61850_forFoShanAES_Model/src/com/dec/fbs9100/main_BTS_APP_IEC61850.java +++ b/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 { diff --git a/iec61850_forFoShanAES_Model/src/com/iedscout/BTS61850_IEDScout_Task.java b/iec61850_forFoShanAES_Model/src/com/iedscout/BTS61850_IEDScout_Task.java new file mode 100644 index 0000000..37d82fc --- /dev/null +++ b/iec61850_forFoShanAES_Model/src/com/iedscout/BTS61850_IEDScout_Task.java @@ -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(); + + } +} diff --git a/iec61850_forFoShanAES_Model/src/com/iedscout/BTS61850_IEDScout_Task_Thread.java b/iec61850_forFoShanAES_Model/src/com/iedscout/BTS61850_IEDScout_Task_Thread.java new file mode 100644 index 0000000..f9170cb --- /dev/null +++ b/iec61850_forFoShanAES_Model/src/com/iedscout/BTS61850_IEDScout_Task_Thread.java @@ -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鎴栬�呯鍙i敊璇� + 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; + } + + + + } + +} diff --git a/iec61850_forFoShanAES_Model/src/com/iedscout/BTS61850_IEDScout_Task_Thread_SQL.java b/iec61850_forFoShanAES_Model/src/com/iedscout/BTS61850_IEDScout_Task_Thread_SQL.java new file mode 100644 index 0000000..2395682 --- /dev/null +++ b/iec61850_forFoShanAES_Model/src/com/iedscout/BTS61850_IEDScout_Task_Thread_SQL.java @@ -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));; + + } +} diff --git a/iec61850_forFoShanAES_Model/src/com/iedscout/BTS_ScoutData_Array.java b/iec61850_forFoShanAES_Model/src/com/iedscout/BTS_ScoutData_Array.java new file mode 100644 index 0000000..dd34cdb --- /dev/null +++ b/iec61850_forFoShanAES_Model/src/com/iedscout/BTS_ScoutData_Array.java @@ -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(); + } + } + + +} diff --git a/iec61850_forFoShanAES_Model/src/com/iedscout/ScoutData.java b/iec61850_forFoShanAES_Model/src/com/iedscout/ScoutData.java new file mode 100644 index 0000000..8df8f5e --- /dev/null +++ b/iec61850_forFoShanAES_Model/src/com/iedscout/ScoutData.java @@ -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; + } + +} \ No newline at end of file diff --git a/iec61850_forFoShanAES_Model/src/com/iedscout/UpdateDataToMySQL_Task.java b/iec61850_forFoShanAES_Model/src/com/iedscout/UpdateDataToMySQL_Task.java new file mode 100644 index 0000000..137e4d6 --- /dev/null +++ b/iec61850_forFoShanAES_Model/src/com/iedscout/UpdateDataToMySQL_Task.java @@ -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; + } + + + +} -- Gitblit v1.9.1