whyclj
2020-10-20 40436887f67d5ea4713908ff9dcbd07121b62d86
修改
4个文件已修改
252 ■■■■■ 已修改文件
EquieDeviceData/src/com/dev/data/Dev_UDPServer_Thread.java 129 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
EquieDeviceData/src/com/dev/data/InverterPowerUDPServer_Thread.java 66 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
EquieDeviceData/src/com/dev/data/SteamTurbineUDPServer_Thread.java 51 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
EquieDeviceData/src/com/version_inf/version_inf.txt 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
EquieDeviceData/src/com/dev/data/Dev_UDPServer_Thread.java
@@ -8,6 +8,7 @@
import java.nio.ByteBuffer;
import java.nio.ByteOrder;
import java.util.Date;
import java.util.Enumeration;
import java.util.List;
import com.base.BaseData;
@@ -52,13 +53,17 @@
                    InetAddress heartgroup = null;
                    DatagramPacket heartpack = null;
                    MulticastSocket socket1 = null;
                    int heart_error_count = 0;                    //通讯错误计数
                    while(true) {
                        try {
                            heartgroup = InetAddress.getByName(server_ip);
                            heartpack = new DatagramPacket(new byte[0], 0, heartgroup, port);                 // 目的端口和MulticastSocket端口一样!!
                            socket1 = createMulticastGroupAndJoin(heartgroup,port);
                            boolean isNewThread = true;
                            String last = Com.getDateTimeFormat(new Date(2000,1,1), Com.DTF_Y_M_D);            //上一次建表的ymd
                            socket1.setSoTimeout(4000);;
                            heart_error_count = 0;
                            //boolean isNewThread = true;
                            //String last = Com.getDateTimeFormat(new Date(2000,1,1), Com.DTF_Y_M_D);            //上一次建表的ymd
                            while(true) {
                                //发送心跳包
                                try {
@@ -79,9 +84,18 @@
                                    byte[] buf = BaseData.createHeartData();
                                    heartpack.setData(buf);
                                    socket1.send(heartpack);
                                    //System.err.println(Com.getDateTimeFormat(new Date(), Com.DTF_YMDhms));
//                                    System.out.println(socket1.getNetworkInterface().getInetAddresses());
//                                    Enumeration<InetAddress> ips = socket1.getNetworkInterface().getInetAddresses();
//                                    while(ips.hasMoreElements()) {
//                                        System.out.println(ips.nextElement().getHostAddress());
//                                    }
                                    //System.err.println("发送心跳包"+socket1.isConnected()+"==="+socket1.isClosed()+"=="+socket1.isBound()+Com.getDateTimeFormat(new Date(), Com.DTF_YMDhms));
                                    Thread.sleep(5000);
                                    if(heart_error_count >10) {
                                        break;
                                    }
                                } catch (Exception e) {
                                    heart_error_count++;
                                    try {
                                        Thread.sleep(1000);
                                    } catch (InterruptedException e1) {
@@ -112,64 +126,73 @@
            }).start(); 
            byte[] data = null;
            DatagramPacket packet= null;
            int conn_error_count = 0;
            while(true) {
                try {
                    data = new byte[MAX_DATA_COUNT];
                    group = InetAddress.getByName(server_ip);         
                    socket = createMulticastGroupAndJoin(group,port);  //加入组播组,设置组播组的监听端口为6556  
                    socket.setSoTimeout(5000);
                    DatagramPacket outpack = new DatagramPacket(new byte[0], 0, group, port); // 目的端口和MulticastSocket端口一样!!
                    packet = new DatagramPacket(data, data.length);  
                    while(true) {
                        socket.receive(packet);         // 通过MulticastSocket实例端口从组播组接收数据
                        byte[] headCount = new byte[2];
                        System.arraycopy(data, 0, headCount, 0, headCount.length);
                        //System.out.println("数据包长度"+createPackHeadCount(data));
                        int dataCount = BaseData.createPackHeadCount(headCount);
                        if(dataCount > data.length) {
                            continue;            //数据量超标数据帧
                        }
                        ByteBuffer bf = ByteBuffer.allocate(dataCount);
                        bf.order(ByteOrder.LITTLE_ENDIAN);
                        bf.put(data,0,dataCount);
                        bf.flip();
                        //System.out.println(ComBase.calchecksum(bf.array()));
                        //System.out.println("接收到数据:"+ComFn.bytesToHexString(bf.array(), bf.array().length));
                        BaseData baseData = new BaseData();
                        if(baseData.putByteBuffer(bf,cfg.isEquie_device_udppackage_cheak())) {
                            //System.err.println("packtype:"+baseData.packtype);
                            if(BaseData.ClildStood_DevType == baseData.packtype) {
                                //子站类型数据包
                                if(baseData.devident >= 0x0701 && baseData.devident <= 0x0707) {
                                    String client_ip = packet.getSocketAddress().toString();
                                    RecordUDPPackage.RecordUDPPackageData(RecordUDPPackage.PackageType_ChildStood, client_ip, bf.array());
                                    ChildStoodParse_Thread childthread = new ChildStoodParse_Thread(conn_pool, devices,configs, baseData,ZIZHAN_DATATYPE);
                                    new Thread(childthread).start();
                                }
                                //ChildStoodParse_Thread childthread = new ChildStoodParse_Thread(conn_pool, devices,configs, baseData,ZIZHAN_DATATYPE);
                                //new Thread(childthread).start();
                                thread_count ++;
                            }else if(BaseData.Battery_DevType == baseData.packtype) {
                                //蓄电池组类型数据包
                                String client_ip = packet.getSocketAddress().toString();
                                RecordUDPPackage.RecordUDPPackageData(RecordUDPPackage.PackageType_Battery, client_ip, bf.array());
                                BatteryParse_Thread battthread = new BatteryParse_Thread(conn_pool, devices, baseData);
                                new Thread(battthread).start();
                                thread_count ++;
                            }else if(BaseData.SwitchBoard_DevType == baseData.packtype) {
                                String client_ip = packet.getSocketAddress().toString();
                                RecordUDPPackage.RecordUDPPackageData(RecordUDPPackage.PackageType_SwitchBoard, client_ip, bf.array(),baseData.getDateFromDate());
                                //开关量板类型数据包
                                SwitchBoardParse_Thread switchthread = new SwitchBoardParse_Thread(conn_pool, devices, baseData);
                                new Thread(switchthread).start();
                                thread_count ++;
                    conn_error_count = 0;
                    while(true) {
                        try {
                            socket.receive(packet);         // 通过MulticastSocket实例端口从组播组接收数据
                            byte[] headCount = new byte[2];
                            System.arraycopy(data, 0, headCount, 0, headCount.length);
                            //System.out.println("数据包长度"+createPackHeadCount(data));
                            int dataCount = BaseData.createPackHeadCount(headCount);
                            if(dataCount > data.length) {
                                continue;            //数据量超标数据帧
                            }
                            ByteBuffer bf = ByteBuffer.allocate(dataCount);
                            bf.order(ByteOrder.LITTLE_ENDIAN);
                            bf.put(data,0,dataCount);
                            bf.flip();
                            //System.out.println(ComBase.calchecksum(bf.array()));
                            //System.out.println("接收到数据:"+ComFn.bytesToHexString(bf.array(), bf.array().length));
                            BaseData baseData = new BaseData();
                            if(baseData.putByteBuffer(bf,cfg.isEquie_device_udppackage_cheak())) {
                                //System.err.println("packtype:"+baseData.packtype);
                                if(BaseData.ClildStood_DevType == baseData.packtype) {
                                    //子站类型数据包
                                    if(baseData.devident >= 0x0701 && baseData.devident <= 0x0707) {
                                        String client_ip = packet.getSocketAddress().toString();
                                        RecordUDPPackage.RecordUDPPackageData(RecordUDPPackage.PackageType_ChildStood, client_ip, bf.array());
                                        ChildStoodParse_Thread childthread = new ChildStoodParse_Thread(conn_pool, devices,configs, baseData,ZIZHAN_DATATYPE);
                                        new Thread(childthread).start();
                                    }
                                    //ChildStoodParse_Thread childthread = new ChildStoodParse_Thread(conn_pool, devices,configs, baseData,ZIZHAN_DATATYPE);
                                    //new Thread(childthread).start();
                                    thread_count ++;
                                }else if(BaseData.Battery_DevType == baseData.packtype) {
                                    //蓄电池组类型数据包
                                    String client_ip = packet.getSocketAddress().toString();
                                    RecordUDPPackage.RecordUDPPackageData(RecordUDPPackage.PackageType_Battery, client_ip, bf.array());
                                    BatteryParse_Thread battthread = new BatteryParse_Thread(conn_pool, devices, baseData);
                                    new Thread(battthread).start();
                                    thread_count ++;
                                }else if(BaseData.SwitchBoard_DevType == baseData.packtype) {
                                    String client_ip = packet.getSocketAddress().toString();
                                    RecordUDPPackage.RecordUDPPackageData(RecordUDPPackage.PackageType_SwitchBoard, client_ip, bf.array(),baseData.getDateFromDate());
                                    //开关量板类型数据包
                                    SwitchBoardParse_Thread switchthread = new SwitchBoardParse_Thread(conn_pool, devices, baseData);
                                    new Thread(switchthread).start();
                                    thread_count ++;
                                }
                            }
                        } catch (Exception e) {
                            conn_error_count ++;
                            if(conn_error_count >6) {
                                break;
                            }
                            e.printStackTrace();
                        }
                        //测试程序正常运行异常情况下异常情况
                        //System.out.println(1/0);
EquieDeviceData/src/com/dev/data/InverterPowerUDPServer_Thread.java
@@ -41,6 +41,7 @@
        System.out.println("InverterPowerUDPServer_Thread start at "+Com.getDateTimeFormat(new Date(), Com.DTF_YMDhms));
        try {
            byte[] data = null;
            int conn_error_count = 0;
            while(true) {
                DatagramSocket ds = null;
                try {
@@ -48,42 +49,51 @@
                    DatagramPacket packet = new DatagramPacket(data, data.length);
                    //监听指定的端口号
                    ds = new DatagramSocket(server_port);
                    //ds.setSoTimeout(5000);
                    ds.setSoTimeout(5000);
                    conn_error_count = 0;
                    while (true) {
                        ds.receive(packet);
                        byte[] headCount = new byte[2];
                        System.arraycopy(data, 0, headCount, 0, headCount.length);
                        BaseData basedata = new BaseData();
                        ByteBuffer bf = ByteBuffer.allocate(createPackHeadCount(data));
                        if(createPackHeadCount(data) > data.length) {
                            continue;            //数据帧超标判断
                        }
                        bf.order(ByteOrder.LITTLE_ENDIAN);
                        bf.put(data,0,createPackHeadCount(data));
                        bf.flip();
                        //BaseData.udpCheck(bf.array());
                        //System.out.println(packet.getSocketAddress());
                        //System.out.println(ds.getLocalSocketAddress().toString());
                        //System.out.println("接收到逆变电源系统:"+ComFn.bytesToHexString(data, createPackHeadCount(data)));
                        //System.out.println("");
                        if(basedata.putNiBianByteBuffer(bf,cfg.isEquie_device_udppackage_cheak())) {
                            //System.out.println(basedata.data.length);
                            String client_ip = packet.getSocketAddress().toString();
                            if(basedata.packtype == BaseData.NiBianPower_DevType) {
                                RecordUDPPackage.RecordUDPPackageData(RecordUDPPackage.PackageType_InverPower, client_ip, bf.array());
                                InverterPower_Thread power_thread = new InverterPower_Thread(conn_pool, devices, basedata,client_ip);
                                new Thread(power_thread).start();
                                Dev_UDPServer_Thread.thread_count++;
                        try {
                            ds.receive(packet);
                            byte[] headCount = new byte[2];
                            System.arraycopy(data, 0, headCount, 0, headCount.length);
                            BaseData basedata = new BaseData();
                            ByteBuffer bf = ByteBuffer.allocate(createPackHeadCount(data));
                            if(createPackHeadCount(data) > data.length) {
                                continue;            //数据帧超标判断
                            }
                            bf.order(ByteOrder.LITTLE_ENDIAN);
                            bf.put(data,0,createPackHeadCount(data));
                            bf.flip();
                            //BaseData.udpCheck(bf.array());
                            //System.out.println(packet.getSocketAddress());
                            //System.out.println(ds.getLocalSocketAddress().toString());
                            //System.out.println("接收到逆变电源系统:"+ComFn.bytesToHexString(data, createPackHeadCount(data)));
                            //System.out.println("");
                            if(basedata.putNiBianByteBuffer(bf,cfg.isEquie_device_udppackage_cheak())) {
                                //System.out.println(basedata.data.length);
                                String client_ip = packet.getSocketAddress().toString();
                                if(basedata.packtype == BaseData.NiBianPower_DevType) {
                                    RecordUDPPackage.RecordUDPPackageData(RecordUDPPackage.PackageType_InverPower, client_ip, bf.array());
                                    InverterPower_Thread power_thread = new InverterPower_Thread(conn_pool, devices, basedata,client_ip);
                                    new Thread(power_thread).start();
                                    Dev_UDPServer_Thread.thread_count++;
                                }
                            }
                        } catch (Exception e) {
                            conn_error_count ++;
                            if(conn_error_count >=6) {
                                break;
                            }
                            e.printStackTrace();
                        }
                        //测试程序异常情况下,程序能否继续运行
                        //System.out.println(1/0);
                        Thread.sleep(10);
                    }
                } catch (Exception e) {
                    Thread.sleep(1000);
                    Thread.sleep(100);
                    e.printStackTrace();
                } finally {
                    if(ds != null) {
EquieDeviceData/src/com/dev/data/SteamTurbineUDPServer_Thread.java
@@ -44,6 +44,7 @@
        System.out.println("SteamTurbineUDPServer_Thread start at "+Com.getDateTimeFormat(new Date(), Com.DTF_YMDhms));
        try {
            byte[] data = null;
            int conn_error_count = 0;
            while(true) {
                DatagramSocket ds = null;
                try {
@@ -51,27 +52,37 @@
                    DatagramPacket packet = new DatagramPacket(data, data.length);
                    //监听指定的端口
                    ds = new DatagramSocket(server_port);
                    ds.setSoTimeout(5000);
                    conn_error_count = 0;
                    while (true) {
                        ds.receive(packet);
                        byte[] headCount = new byte[2];
                        System.arraycopy(data, 0, headCount, 0, headCount.length);
                        //System.out.println("数据包长度"+createPackHeadCount(data));
                        BaseData basedata = new BaseData();
                        ByteBuffer bf = ByteBuffer.allocate(createPackHeadCount(data));
                        if(createPackHeadCount(data) > data.length) {
                            continue;        //过滤超标数据帧
                        }
                        bf.order(ByteOrder.LITTLE_ENDIAN);
                        bf.put(data,0,createPackHeadCount(data));
                        bf.flip();
                        //System.out.println(ComFn.bytesToHexString(data, createPackHeadCount(data)));
                        if(basedata.putSteamTurByteBuffer(bf,cfg.isEquie_device_udppackage_cheak())) {
                            String client_ip = packet.getSocketAddress().toString();
                            RecordUDPPackage.RecordUDPPackageData(RecordUDPPackage.PackageType_SteamTurbine, client_ip, bf.array());
                            SteamTurbine_Thread steam_thread = new SteamTurbine_Thread(conn_pool, devices,cfgdatas,basedata);
                            new Thread(steam_thread).start();
                            //System.out.println(basedata);
                        try {
                            ds.receive(packet);
                            byte[] headCount = new byte[2];
                            System.arraycopy(data, 0, headCount, 0, headCount.length);
                            //System.out.println("数据包长度"+createPackHeadCount(data));
                            BaseData basedata = new BaseData();
                            ByteBuffer bf = ByteBuffer.allocate(createPackHeadCount(data));
                            if(createPackHeadCount(data) > data.length) {
                                continue;        //过滤超标数据帧
                            }
                            bf.order(ByteOrder.LITTLE_ENDIAN);
                            bf.put(data,0,createPackHeadCount(data));
                            bf.flip();
                            //System.out.println(ComFn.bytesToHexString(data, createPackHeadCount(data)));
                            if(basedata.putSteamTurByteBuffer(bf,cfg.isEquie_device_udppackage_cheak())) {
                                String client_ip = packet.getSocketAddress().toString();
                                RecordUDPPackage.RecordUDPPackageData(RecordUDPPackage.PackageType_SteamTurbine, client_ip, bf.array());
                                SteamTurbine_Thread steam_thread = new SteamTurbine_Thread(conn_pool, devices,cfgdatas,basedata);
                                new Thread(steam_thread).start();
                                //System.out.println(basedata);
                            }
                        } catch (Exception e) {
                            conn_error_count++;
                            if(conn_error_count > 6) {
                                break;
                            }
                            //e.printStackTrace();
                        }
                        //测试程序接收异常情况下,是否能正常运行
                        //System.out.println(1/0);
EquieDeviceData/src/com/version_inf/version_inf.txt
@@ -10,4 +10,8 @@
    
V1.203
    蓄电池组的电压/1.638
    蓄电池组的温度/1.6
    蓄电池组的温度/1.6
V1.204
    各个通讯线程添加超时操作避免程序卡死等情况
    同时添加通讯错误计数重启操作