EquieDeviceData/src/com/dev/data/Dev_UDPServer_Thread.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
EquieDeviceData/src/com/dev/data/InverterPowerUDPServer_Thread.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
EquieDeviceData/src/com/dev/data/SteamTurbineUDPServer_Thread.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
EquieDeviceData/src/com/version_inf/version_inf.txt | ●●●●● 补丁 | 查看 | 原始文档 | 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 各个通讯线程添加超时操作避免程序卡死等情况 同时添加通讯错误计数重启操作