DELL
2024-03-07 8295ec1295eb6b0db77d5079ab6f324513ade80d
南瑞版本新增iedscout调试工具功能
8个文件已修改
6个文件已添加
921 ■■■■■ 已修改文件
iec61850_forFoShanAES_Model/bin/com/dec/fbs9100/BTS_61850_SocketClient.class 补丁 | 查看 | 原始文档 | blame | 历史
iec61850_forFoShanAES_Model/bin/com/dec/fbs9100/Sql_Mysql.class 补丁 | 查看 | 原始文档 | blame | 历史
iec61850_forFoShanAES_Model/bin/com/dec/fbs9100/main_BTS_APP_IEC61850.class 补丁 | 查看 | 原始文档 | blame | 历史
iec61850_forFoShanAES_Model/bin/log4j2_batt_61850_dev_x64.xml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
iec61850_forFoShanAES_Model/log4j2_batt_61850_dev_x64.xml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
iec61850_forFoShanAES_Model/src/com/dec/fbs9100/BTS_61850_SocketClient.java 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iec61850_forFoShanAES_Model/src/com/dec/fbs9100/Sql_Mysql.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iec61850_forFoShanAES_Model/src/com/dec/fbs9100/main_BTS_APP_IEC61850.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iec61850_forFoShanAES_Model/src/com/iedscout/BTS61850_IEDScout_Task.java 298 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iec61850_forFoShanAES_Model/src/com/iedscout/BTS61850_IEDScout_Task_Thread.java 170 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iec61850_forFoShanAES_Model/src/com/iedscout/BTS61850_IEDScout_Task_Thread_SQL.java 250 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iec61850_forFoShanAES_Model/src/com/iedscout/BTS_ScoutData_Array.java 47 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iec61850_forFoShanAES_Model/src/com/iedscout/ScoutData.java 46 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iec61850_forFoShanAES_Model/src/com/iedscout/UpdateDataToMySQL_Task.java 78 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
iec61850_forFoShanAES_Model/bin/com/dec/fbs9100/BTS_61850_SocketClient.class
Binary files differ
iec61850_forFoShanAES_Model/bin/com/dec/fbs9100/Sql_Mysql.class
Binary files differ
iec61850_forFoShanAES_Model/bin/com/dec/fbs9100/main_BTS_APP_IEC61850.class
Binary 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;
    }
}