From 8a214b4adecbbcabd8ac69c0603cea271295111f Mon Sep 17 00:00:00 2001
From: lxw <lxw@DESKTOP-KTNVQ89>
Date: 星期二, 21 七月 2020 10:32:06 +0800
Subject: [PATCH] 修改

---
 src/com/data/PowerArk_SocketCliet_Thread.java |  929 +++++++++++++++++++++++++++++-----------------------------
 1 files changed, 465 insertions(+), 464 deletions(-)

diff --git a/src/com/data/PowerArk_SocketCliet_Thread.java b/src/com/data/PowerArk_SocketCliet_Thread.java
index 7103e46..95fdf17 100644
--- a/src/com/data/PowerArk_SocketCliet_Thread.java
+++ b/src/com/data/PowerArk_SocketCliet_Thread.java
@@ -1,464 +1,465 @@
-package com.data;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.net.InetSocketAddress;
-import java.net.Socket;
-import java.net.SocketException;
-import java.nio.ByteBuffer;
-import java.nio.ByteOrder;
-import java.util.Date;
-
-import com.base.ComFn;
-import com.dev.base.data.Dynamicload_button;
-import com.dev.base.data.Dynamicload_control;
-import com.dev.base.data.Dynamicload_inf;
-import com.dev.base.data.Dynamicload_state;
-import com.modbus.util.BaseData;
-import com.modbus.util.Modbus_ComBase;
-import com.sql.MysqlConnPool;
-
-public class PowerArk_SocketCliet_Thread implements Runnable{
-	public static final int CONTROL_ON = 1;
-	public static final int CONTROL_OFF = 0;
-	
-	private ByteBuffer bytebuffer_for_socket_RX = ByteBuffer.allocate(1500);
-	public static int PowerArk_Port = 502;
-	public String   dev_ip;
-	public MysqlConnPool conn_pool;
-	public Dynamicload_inf dyna_inf;
-	public Dynamicload_button button;			//设备按钮
-	public Dynamicload_control control;			//设备控制
-	public Dynamicload_state state;				//设备状态
-	public int connerrCount = 0;				//总错误计数		
-	public int connCount = 0;					//总通讯计数
-	public int errCount = 0;					//连续错误通讯计数
-	public Socket socket;
-	public BaseData basedata;
-	
-	
-	public PowerArk_SocketCliet_Thread(MysqlConnPool conn_pool,Dynamicload_inf dyna_inf) {
-		this.conn_pool = conn_pool;
-		this.dyna_inf = dyna_inf;
-		
-		dev_ip = dyna_inf.dev_ip;
-		button = dyna_inf.button;
-		control = dyna_inf.control;
-		state = dyna_inf.state;		
-	}
-	
-	
-	@Override
-	public void run() {	
-		int run_count = 0;
-		while(true) {
-			try {
-				/******************************************  读状态   **********************************************/
-				/******************************************  读状态   **********************************************/
-				{
-					if(run_count % 10 == 0) {					
-						//读取反馈信息0x4013-0x4030信息
-						basedata = new BaseData(Modbus_ComBase.READ_COIL_STATUS, Modbus_ComBase.OverTmp_Start_Addr, 18);
-						if(SocketComm(basedata.createReadData(), socket)) {
-							//读取反馈信息成功
-							PowerArk_ServerSocket_Thread_SQL.updateDynamicload_StateTable(conn_pool, state);
-						}
-					}
-					
-					if(run_count % 9 == 0) {
-						//读取状态信息      0x01-0x12
-						basedata = new BaseData(Modbus_ComBase.READ_COIL_STATUS, Modbus_ComBase.AutoProcess1_Start_Addr, 12);
-						if(SocketComm(basedata.createReadData(), socket)) {
-							//M区状态成功 
-							PowerArk_ServerSocket_Thread_SQL.updateDynamicload_StateTable(conn_pool, state);
-						}
-					}
-					
-					if(run_count % 8 == 0) {
-						//读取状态信息      0x8000-8013
-						basedata = new BaseData(Modbus_ComBase.READ_COIL_STATUS, Modbus_ComBase.ButtonOutPut_Start_Addr, 14);
-						if(SocketComm(basedata.createReadData(), socket)) {
-							//读取Q区状态成功 
-							PowerArk_ServerSocket_Thread_SQL.updateDynamicload_ButtonTable(conn_pool, button);
-						}
-					}
-					
-					if(run_count % 10 ==0 ) {
-						//读取各个按钮状态  0x40-x0160
-						basedata = new BaseData(Modbus_ComBase.READ_COIL_STATUS, Modbus_ComBase.LocalControl_Start_Addr, 121);
-						if(SocketComm(basedata.createReadData(), socket)) {
-							//读取Q区状态成功 
-							PowerArk_ServerSocket_Thread_SQL.updateDynamicload_ButtonTable(conn_pool, button);
-						}
-					}
-					
-					if(run_count % 10 ==0 ) {
-						//读取V区各个按钮状态  0x02-x18
-						basedata = new BaseData(Modbus_ComBase.READ_HOLDING_REGISTER, Modbus_ComBase.LocalControl_Start_Addr, 17);
-						if(SocketComm(basedata.createReadData(), socket)) {
-							//读取V区状态成功 
-							PowerArk_ServerSocket_Thread_SQL.updateDynamicload_StateTable(conn_pool, state);
-						}
-					}
-				}
-				
-				/******************************************  写状态   **********************************************/
-				{
-					PowerArk_SocketClient_Thread_SQL.queryPowerArkControl(conn_pool, control);
-					if(control.FZ_b1 >= CONTROL_ON) {
-						//打开按钮1
-						basedata = new BaseData(Modbus_ComBase.WRITE_SINGLE_COIL, Modbus_ComBase.Button_Start_Addr, 1);						
-						control.FZ_b1 = CONTROL_OFF;
-						SocketComm(basedata.createWiriteData(BaseData.createButtonByte(control.FZ_b1)), socket);
-					}
-					
-					if(control.FZ_b2 >= CONTROL_ON) {
-						//打开按钮2
-						basedata = new BaseData(Modbus_ComBase.WRITE_SINGLE_COIL, Modbus_ComBase.Button_Start_Addr+1, 1);						
-						control.FZ_b2 = CONTROL_OFF;
-						SocketComm(basedata.createWiriteData(BaseData.createButtonByte(control.FZ_b2)), socket);
-					}
-					
-					if(control.FZ_b3 >= CONTROL_ON) {
-						//打开按钮3
-						basedata = new BaseData(Modbus_ComBase.WRITE_SINGLE_COIL, Modbus_ComBase.Button_Start_Addr+2, 1);						
-						control.FZ_b3 = CONTROL_OFF;
-						SocketComm(basedata.createWiriteData(BaseData.createButtonByte(control.FZ_b3)), socket);
-					}
-					
-					if(control.FZ_b4 >= CONTROL_ON) {
-						//打开按钮4
-						basedata = new BaseData(Modbus_ComBase.WRITE_SINGLE_COIL, Modbus_ComBase.Button_Start_Addr+3, 1);						
-						control.FZ_b4 = CONTROL_OFF;
-						SocketComm(basedata.createWiriteData(BaseData.createButtonByte(control.FZ_b4)), socket);
-					}
-					
-					if(control.FZ_b5 >= CONTROL_ON) {
-						//打开按钮5
-						basedata = new BaseData(Modbus_ComBase.WRITE_SINGLE_COIL, Modbus_ComBase.Button_Start_Addr+4, 1);						
-						control.FZ_b5 = CONTROL_OFF;
-						SocketComm(basedata.createWiriteData(BaseData.createButtonByte(control.FZ_b5)), socket);
-					}
-					
-					if(control.FZ_b6 >= CONTROL_ON) {
-						//打开按钮6
-						basedata = new BaseData(Modbus_ComBase.WRITE_SINGLE_COIL, Modbus_ComBase.Button_Start_Addr+5, 1);						
-						control.FZ_b6 = CONTROL_OFF;
-						SocketComm(basedata.createWiriteData(BaseData.createButtonByte(control.FZ_b6)), socket);
-					}
-					
-					if(control.FZ_b7 >= CONTROL_ON) {
-						//打开按钮7
-						basedata = new BaseData(Modbus_ComBase.WRITE_SINGLE_COIL, Modbus_ComBase.Button_Start_Addr+6, 1);						
-						control.FZ_b7 = CONTROL_OFF;
-						SocketComm(basedata.createWiriteData(BaseData.createButtonByte(control.FZ_b7)), socket);
-					}
-					
-					if(control.FZ_b8 >= CONTROL_ON) {
-						//打开按钮8
-						basedata = new BaseData(Modbus_ComBase.WRITE_SINGLE_COIL, Modbus_ComBase.Button_Start_Addr+7, 1);						
-						control.FZ_b8 = CONTROL_OFF;
-						SocketComm(basedata.createWiriteData(BaseData.createButtonByte(control.FZ_b8)), socket);
-					}
-					
-					if(control.FZ_b9 >= CONTROL_ON) {
-						//打开按钮9
-						basedata = new BaseData(Modbus_ComBase.WRITE_SINGLE_COIL, Modbus_ComBase.Button_Start_Addr+8, 1);						
-						control.FZ_b9 = CONTROL_OFF;
-						SocketComm(basedata.createWiriteData(BaseData.createButtonByte(control.FZ_b9)), socket);
-					}
-					
-					if(control.FZ_b10 >= CONTROL_ON) {
-						//打开按钮10
-						basedata = new BaseData(Modbus_ComBase.WRITE_SINGLE_COIL, Modbus_ComBase.Button_Start_Addr+9, 1);						
-						control.FZ_b10 = CONTROL_OFF;
-						SocketComm(basedata.createWiriteData(BaseData.createButtonByte(control.FZ_b10)), socket);
-					}
-					
-					if(control.FZ_b11 >= CONTROL_ON) {
-						//打开按钮11
-						basedata = new BaseData(Modbus_ComBase.WRITE_SINGLE_COIL, Modbus_ComBase.Button_Start_Addr+10, 1);						
-						control.FZ_b11 = CONTROL_OFF;
-						SocketComm(basedata.createWiriteData(BaseData.createButtonByte(control.FZ_b11)), socket);
-					}
-					
-					if(control.start_auto >= CONTROL_ON) {
-						//启动自动加载
-						basedata = new BaseData(Modbus_ComBase.WRITE_SINGLE_COIL, Modbus_ComBase.StartAutoLoad_Start_Addr, 1);						
-						control.start_auto = CONTROL_OFF;
-						SocketComm(basedata.createWiriteData(BaseData.createButtonByte(control.start_auto)), socket);
-					}
-					
-					if(control.stop_auto >= CONTROL_ON) {
-						//停止自动加载
-						basedata = new BaseData(Modbus_ComBase.WRITE_SINGLE_COIL, Modbus_ComBase.StopAutoLoad_Start_Addr, 1);						
-						control.stop_auto = CONTROL_OFF;
-						SocketComm(basedata.createWiriteData(BaseData.createButtonByte(control.stop_auto)), socket);
-					}
-					
-					if(control.sudden_crease >= CONTROL_ON) {
-						//突加突卸
-						basedata = new BaseData(Modbus_ComBase.WRITE_SINGLE_COIL, Modbus_ComBase.SuddenCrease_Start_Addr, 1);						
-						control.sudden_crease = CONTROL_OFF;
-						SocketComm(basedata.createWiriteData(BaseData.createButtonByte(control.sudden_crease)), socket);
-					}
-					
-					if(control.all_open >= CONTROL_ON) {
-						//全部分闸
-						basedata = new BaseData(Modbus_ComBase.WRITE_SINGLE_COIL, Modbus_ComBase.AllOpenBreak_Start_Addr, 1);						
-						control.all_open = CONTROL_OFF;
-						SocketComm(basedata.createWiriteData(BaseData.createButtonByte(control.all_open)), socket);
-					}
-					
-					if(control.FZ_autostate1 >= CONTROL_ON) {
-						//FZ自动状态1
-						basedata = new BaseData(Modbus_ComBase.WRITE_SINGLE_COIL, Modbus_ComBase.AutoProcess1_Start_Addr, 1);						
-						control.FZ_autostate1 = CONTROL_OFF;
-						SocketComm(basedata.createWiriteData(BaseData.createButtonByte(control.FZ_autostate1)), socket);
-					}
-					
-					if(control.FZ_autostate2 >= CONTROL_ON) {
-						//FZ自动状态2
-						basedata = new BaseData(Modbus_ComBase.WRITE_SINGLE_COIL, Modbus_ComBase.AutoProcess2_Start_Addr, 1);						
-						control.FZ_autostate2 = CONTROL_OFF;
-						SocketComm(basedata.createWiriteData(BaseData.createButtonByte(control.FZ_autostate2)), socket);
-					}
-					
-					if(control.FZ_autostate3 >= CONTROL_ON) {
-						//FZ自动状态3
-						basedata = new BaseData(Modbus_ComBase.WRITE_SINGLE_COIL, Modbus_ComBase.AutoProcess3_Start_Addr, 1);						
-						control.FZ_autostate3 = CONTROL_OFF;
-						SocketComm(basedata.createWiriteData(BaseData.createButtonByte(control.FZ_autostate3)), socket);
-					}
-					
-					if(control.FZ_autostate4 >= CONTROL_ON) {
-						//FZ自动状态4
-						basedata = new BaseData(Modbus_ComBase.WRITE_SINGLE_COIL, Modbus_ComBase.AutoProcess4_Start_Addr, 1);						
-						control.FZ_autostate4 = CONTROL_OFF;
-						SocketComm(basedata.createWiriteData(BaseData.createButtonByte(control.FZ_autostate4)), socket);
-					}
-					
-					if(control.FZ_autostate5 >= CONTROL_ON) {
-						//FZ自动状态5
-						basedata = new BaseData(Modbus_ComBase.WRITE_SINGLE_COIL, Modbus_ComBase.AutoProcess5_Start_Addr, 1);						
-						control.FZ_autostate5 = CONTROL_OFF;
-						SocketComm(basedata.createWiriteData(BaseData.createButtonByte(control.FZ_autostate5)), socket);
-					}
-					
-					if(control.local_control >= CONTROL_ON) {
-						//就地控制
-						basedata = new BaseData(Modbus_ComBase.WRITE_SINGLE_COIL, Modbus_ComBase.LocalControl_Start_Addr, 1);						
-						control.local_control = CONTROL_OFF;
-						SocketComm(basedata.createWiriteData(BaseData.createButtonByte(control.local_control)), socket);
-					}
-					
-					if(control.back_control >= CONTROL_ON) {
-						//后台控制
-						basedata = new BaseData(Modbus_ComBase.WRITE_SINGLE_COIL, Modbus_ComBase.BackControl_Start_Addr, 1);						
-						control.back_control = CONTROL_OFF;
-						SocketComm(basedata.createWiriteData(BaseData.createButtonByte(control.back_control)), socket);
-					}
-					
-					if(control.central_control >= CONTROL_ON) {
-						//中控控制
-						basedata = new BaseData(Modbus_ComBase.WRITE_SINGLE_COIL, Modbus_ComBase.CenterControl_Start_Addr, 1);						
-						control.central_control = CONTROL_OFF;
-						SocketComm(basedata.createWiriteData(BaseData.createButtonByte(control.central_control)), socket);
-					}
-					
-					if(control.inter_volume_M200 >= CONTROL_ON) {
-						//中控控制
-						basedata = new BaseData(Modbus_ComBase.WRITE_SINGLE_COIL, Modbus_ComBase.Middle_Start_Addr, 1);						
-						control.inter_volume_M200 = CONTROL_OFF;
-						SocketComm(basedata.createWiriteData(BaseData.createButtonByte(control.inter_volume_M200)), socket);
-					}
-					
-					if(control.fan_button >= CONTROL_ON) {
-						//风机按钮
-						basedata = new BaseData(Modbus_ComBase.WRITE_SINGLE_COIL, Modbus_ComBase.Fan_Button_Start_Addr, 1);						
-						control.fan_button = CONTROL_OFF;
-						SocketComm(basedata.createWiriteData(BaseData.createButtonByte(control.fan_button)), socket);
-					}
-					
-					if(control.set_power >= CONTROL_ON) {
-						//设定功率
-						basedata = new BaseData(Modbus_ComBase.WRITE_MULTIPLE_REGISTER, Modbus_ComBase.SetPower_Start_Addr, 1);						
-						control.set_power = CONTROL_OFF;
-						SocketComm(basedata.createWiriteData(BaseData.createFloatByte(control.set_power)), socket);
-					}
-					PowerArk_ServerSocket_Thread_SQL.updateDynamicload_ControlTable(conn_pool, control);					
-				}
-				
-				if(connerrCount >89999999) {
-					connerrCount = 0;
-				}
-				if(connCount > 8999999) {
-					connCount = 0;
-				}
-				run_count ++;
-				if(run_count > 8999999) {
-					run_count = 0;
-				}
-				Thread.sleep(50);
-			} catch (Exception e) {
-				//e.printStackTrace();
-			}
-		}
-	}
-	
-	public boolean SocketComm(byte[] bytedata,Socket socket) throws InterruptedException
-    { 
-		boolean res_t = false;
-		try
-		{
-			reConnectClient();
-	        if(socket != null)
-	        {
-	        	socket.setSoTimeout(3000);
-	        	InputStream in = socket.getInputStream();
-		        OutputStream out = socket.getOutputStream();
-		        //----------------- clear rx buff for tcp resend packet ----------------//
-		        byte[] rx_buf_t = new byte[1024];
-		        //----------------------------------------------------------------------//
-		        bytebuffer_for_socket_RX.order(ByteOrder.BIG_ENDIAN);
-		        bytebuffer_for_socket_RX.clear();
-		        //--------------------- socket write -----------------------------------//
-		        //byte[] b = makeCommBuf(cmd, bf);
-		        System.err.println(ComFn.bytesToHexString(bytedata, bytedata.length));
-		        Date d1 = new Date();
-		      
-		        
-		        int rx_read_time_out = 0; 
-		        //int rx_len = 0;
-		        //System.err.println("TX: " + ComFn.bytesToHexString(b, b.length));
-		        out.write(bytedata);
-		        out.flush();
-		        while(true) {
-		        	if(in.available() > 0) { 
-		        		rx_read_time_out = 0; 
-		        		int rx_len_t = in.read(rx_buf_t);
-		        		if((bytebuffer_for_socket_RX.position()+rx_len_t) 
-		        				< (bytebuffer_for_socket_RX.capacity()-1)) {
-			        		bytebuffer_for_socket_RX.put(rx_buf_t, 0, rx_len_t);
-		        		}
-		        	} else { 
-		        		rx_read_time_out++;
-		        		if((bytebuffer_for_socket_RX.position()>8) && (rx_read_time_out>10)){
-		        			break;
-		        		}
-		        		if(rx_read_time_out > 220) { 
-		        			break; 
-		        		} 
-		        	}
-		        	Thread.sleep(10);
-		        }
-		        bytebuffer_for_socket_RX.flip();
-		        Date d2 = new Date();
-		        long comm_tms = (d2.getTime() - d1.getTime());
-		        if(comm_tms < 200) {
-		        	Thread.sleep(200 - comm_tms);
-		        }
-		        byte[] buffer = new byte[bytebuffer_for_socket_RX.limit()];
-		        bytebuffer_for_socket_RX.get(buffer);
-		        if(true == getDataFromCommBuf(buffer)) {
-		        	connCount ++;
-		        	res_t = true;
-		        } else {
-		        	errCount ++;
-		        	connerrCount ++;
-		        	res_t = false;
-		        }
-	        }
-	    } catch (IOException e) {
-	        errCount++;
-	        connerrCount++;
-	    } finally {
-	    	
-	    }		
-		return res_t;
-    }
-	
-	public boolean getDataFromCommBuf(byte[] bytes) {
-		boolean issuccess = false;
-		ByteBuffer bf = ByteBuffer.allocate(bytes.length);
-        bf.order(ByteOrder.BIG_ENDIAN);
-        bf.put(bytes);
-        bf.flip();
-        BaseData baseData = new BaseData();
-        if(baseData.putByteBuffer(bf)) {
-        	//获取返回数据成功
-        	if(baseData.funcode == Modbus_ComBase.READ_COIL_STATUS) {
-        		//读取线圈数据成功[4013-4030]
-        		if(baseData.addrstart == Modbus_ComBase.OverTmp_Start_Addr) {
-        			if(dyna_inf.putReadIBackByteBuffer(bf)) {
-        				System.out.println("读取I区数据成功4013-4030");
-        				issuccess = true;
-        			} 			
-        		}
-        		
-        		//读取M区状态成功[01 - 12]
-        		if(baseData.addrstart == Modbus_ComBase.AutoProcess1_Start_Addr) {
-        			if(dyna_inf.putReadMBackByteBuffer(bf)) {
-        				System.out.println("读取M区数据成功01-12");
-        				issuccess = true;
-        			} 
-        		}
-        	
-        		//读取Q区状态成功[8000-8013]
-        		if(baseData.addrstart == Modbus_ComBase.ButtonOutPut_Start_Addr) {
-        			if(dyna_inf.putReadQBackByteBuffer(bf)) {
-        				System.out.println("读取Q区数据成功8000-8013");
-        				issuccess = true;
-        			} 
-        		}
-        		
-        		//读取M区各个控制的状态[0040-0160]
-        		if(baseData.addrstart == Modbus_ComBase.LocalControl_Start_Addr) {
-        			if(dyna_inf.putReadMControlStateByteBuffer(bf)) {
-        				System.out.println("读取M区数据成功0040-0160");
-        				issuccess = true;
-        			} 
-        		}
-        		
-        		
-        		
-        	}else if(baseData.funcode == Modbus_ComBase.READ_HOLDING_REGISTER) {
-        		if(baseData.addrstart == Modbus_ComBase.ActualSetPower_Start_Addr) {
-        			//读取V区各个数据状态[02-18]
-        			if(dyna_inf.putReadVBackByteBuffer(bf)) {
-        				System.out.println("读取V区数据成功02-18");
-        				issuccess = true;
-        			}
-        		}
-        		
-        	}
-        	
-        	
-        	
-        }       
-		return issuccess;
-	}
-	
-	
-	/**
-	 * 	重新获取连接对象
-	 */
-	public void reConnectClient() {
-		try {
-			if(socket == null || socket.isClosed() || errCount > 4) {
-				if(socket != null) {
-					socket.close();
-				}
-				socket = new Socket();
-				socket.connect(new InetSocketAddress(dev_ip, PowerArk_Port), 5000);
-				socket.setSoTimeout(5000);
-				errCount = 0;
-			}
-		} catch (SocketException e) {
-			e.printStackTrace();
-		} catch (IOException e) {
-			e.printStackTrace();
-		}
-	}
-}
+package com.data;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.net.InetSocketAddress;
+import java.net.Socket;
+import java.net.SocketException;
+import java.nio.ByteBuffer;
+import java.nio.ByteOrder;
+import java.util.Date;
+
+import com.base.ComFn;
+import com.dev.base.data.Dynamicload_button;
+import com.dev.base.data.Dynamicload_control;
+import com.dev.base.data.Dynamicload_inf;
+import com.dev.base.data.Dynamicload_state;
+import com.modbus.util.BaseData;
+import com.modbus.util.Modbus_ComBase;
+import com.sql.MysqlConnPool;
+
+public class PowerArk_SocketCliet_Thread implements Runnable{
+	public static final int CONTROL_ON = 1;
+	public static final int CONTROL_OFF = 0;
+	
+	private ByteBuffer bytebuffer_for_socket_RX = ByteBuffer.allocate(1500);
+	public static int PowerArk_Port = 502;
+	public String   dev_ip;
+	public MysqlConnPool conn_pool;
+	public Dynamicload_inf dyna_inf;
+	public Dynamicload_button button;			//设备按钮
+	public Dynamicload_control control;			//设备控制
+	public Dynamicload_state state;				//设备状态
+	public int connerrCount = 0;				//总错误计数		
+	public int connCount = 0;					//总通讯计数
+	public int errCount = 0;					//连续错误通讯计数
+	public Socket socket;
+	public BaseData basedata;
+	
+	
+	public PowerArk_SocketCliet_Thread(MysqlConnPool conn_pool,Dynamicload_inf dyna_inf) {
+		this.conn_pool = conn_pool;
+		this.dyna_inf = dyna_inf;
+		
+		dev_ip = dyna_inf.dev_ip;
+		button = dyna_inf.button;
+		control = dyna_inf.control;
+		state = dyna_inf.state;		
+	}
+	
+	
+	@Override
+	public void run() {	
+		int run_count = 0;
+		while(true) {
+			try {
+				/******************************************  读状态   **********************************************/
+				/******************************************  读状态   **********************************************/
+				{
+					/*if(run_count % 10 == 0) {					
+						//读取反馈信息0x4013-0x4030信息
+						basedata = new BaseData(Modbus_ComBase.READ_COIL_STATUS, Modbus_ComBase.OverTmp_Start_Addr, 18);
+						if(SocketComm(basedata.createReadData(), socket)) {
+							//读取反馈信息成功
+							PowerArk_ServerSocket_Thread_SQL.updateDynamicload_StateTable(conn_pool, state);
+						}
+					}
+					
+					if(run_count % 9 == 0) {
+						//读取状态信息      0x01-0x12
+						basedata = new BaseData(Modbus_ComBase.READ_COIL_STATUS, Modbus_ComBase.AutoProcess1_Start_Addr, 12);
+						if(SocketComm(basedata.createReadData(), socket)) {
+							//M区状态成功 
+							PowerArk_ServerSocket_Thread_SQL.updateDynamicload_StateTable(conn_pool, state);
+						}
+					}*/
+					
+					if(run_count % 8 == 0) {
+						//读取状态信息      0x8000-8013
+						basedata = new BaseData(Modbus_ComBase.READ_COIL_STATUS, Modbus_ComBase.ButtonOutPut_Start_Addr, 14);
+						if(SocketComm(basedata.createReadData(), socket)) {
+							//读取Q区状态成功 
+							PowerArk_ServerSocket_Thread_SQL.updateDynamicload_ButtonTable(conn_pool, button);
+						}
+					}
+					
+					/*if(run_count % 10 ==0 ) {
+						//读取各个按钮状态  0x40-x0160
+						basedata = new BaseData(Modbus_ComBase.READ_COIL_STATUS, Modbus_ComBase.LocalControl_Start_Addr, 121);
+						if(SocketComm(basedata.createReadData(), socket)) {
+							//读取Q区状态成功 
+							PowerArk_ServerSocket_Thread_SQL.updateDynamicload_ButtonTable(conn_pool, button);
+						}
+					}
+					
+					if(run_count % 10 ==0 ) {
+						//读取V区各个按钮状态  0x02-x18
+						basedata = new BaseData(Modbus_ComBase.READ_HOLDING_REGISTER, Modbus_ComBase.LocalControl_Start_Addr, 17);
+						if(SocketComm(basedata.createReadData(), socket)) {
+							//读取V区状态成功 
+							PowerArk_ServerSocket_Thread_SQL.updateDynamicload_StateTable(conn_pool, state);
+						}
+					}*/
+				}
+				
+				/******************************************  写状态   **********************************************/
+				{
+					PowerArk_SocketClient_Thread_SQL.queryPowerArkControl(conn_pool, control);
+					if(control.FZ_b1 >= CONTROL_ON) {
+						//打开按钮1
+						basedata = new BaseData(Modbus_ComBase.WRITE_SINGLE_COIL, Modbus_ComBase.Button_Start_Addr, 1);						
+						control.FZ_b1 = CONTROL_OFF;
+						SocketComm(basedata.createWiriteData(BaseData.createButtonByte(control.FZ_b1)), socket);
+					}
+					
+					if(control.FZ_b2 >= CONTROL_ON) {
+						//打开按钮2
+						basedata = new BaseData(Modbus_ComBase.WRITE_SINGLE_COIL, Modbus_ComBase.Button_Start_Addr+1, 1);						
+						control.FZ_b2 = CONTROL_OFF;
+						SocketComm(basedata.createWiriteData(BaseData.createButtonByte(control.FZ_b2)), socket);
+					}
+					
+					if(control.FZ_b3 >= CONTROL_ON) {
+						//打开按钮3
+						basedata = new BaseData(Modbus_ComBase.WRITE_SINGLE_COIL, Modbus_ComBase.Button_Start_Addr+2, 1);						
+						control.FZ_b3 = CONTROL_OFF;
+						SocketComm(basedata.createWiriteData(BaseData.createButtonByte(control.FZ_b3)), socket);
+					}
+					
+					if(control.FZ_b4 >= CONTROL_ON) {
+						//打开按钮4
+						basedata = new BaseData(Modbus_ComBase.WRITE_SINGLE_COIL, Modbus_ComBase.Button_Start_Addr+3, 1);						
+						control.FZ_b4 = CONTROL_OFF;
+						SocketComm(basedata.createWiriteData(BaseData.createButtonByte(control.FZ_b4)), socket);
+					}
+					
+					if(control.FZ_b5 >= CONTROL_ON) {
+						//打开按钮5
+						basedata = new BaseData(Modbus_ComBase.WRITE_SINGLE_COIL, Modbus_ComBase.Button_Start_Addr+4, 1);						
+						control.FZ_b5 = CONTROL_OFF;
+						SocketComm(basedata.createWiriteData(BaseData.createButtonByte(control.FZ_b5)), socket);
+					}
+					
+					if(control.FZ_b6 >= CONTROL_ON) {
+						//打开按钮6
+						basedata = new BaseData(Modbus_ComBase.WRITE_SINGLE_COIL, Modbus_ComBase.Button_Start_Addr+5, 1);						
+						control.FZ_b6 = CONTROL_OFF;
+						SocketComm(basedata.createWiriteData(BaseData.createButtonByte(control.FZ_b6)), socket);
+					}
+					
+					if(control.FZ_b7 >= CONTROL_ON) {
+						//打开按钮7
+						basedata = new BaseData(Modbus_ComBase.WRITE_SINGLE_COIL, Modbus_ComBase.Button_Start_Addr+6, 1);						
+						control.FZ_b7 = CONTROL_OFF;
+						SocketComm(basedata.createWiriteData(BaseData.createButtonByte(control.FZ_b7)), socket);
+					}
+					
+					if(control.FZ_b8 >= CONTROL_ON) {
+						//打开按钮8
+						basedata = new BaseData(Modbus_ComBase.WRITE_SINGLE_COIL, Modbus_ComBase.Button_Start_Addr+7, 1);						
+						control.FZ_b8 = CONTROL_OFF;
+						SocketComm(basedata.createWiriteData(BaseData.createButtonByte(control.FZ_b8)), socket);
+					}
+					
+					if(control.FZ_b9 >= CONTROL_ON) {
+						//打开按钮9
+						basedata = new BaseData(Modbus_ComBase.WRITE_SINGLE_COIL, Modbus_ComBase.Button_Start_Addr+8, 1);						
+						control.FZ_b9 = CONTROL_OFF;
+						SocketComm(basedata.createWiriteData(BaseData.createButtonByte(control.FZ_b9)), socket);
+					}
+					
+					if(control.FZ_b10 >= CONTROL_ON) {
+						//打开按钮10
+						basedata = new BaseData(Modbus_ComBase.WRITE_SINGLE_COIL, Modbus_ComBase.Button_Start_Addr+9, 1);						
+						control.FZ_b10 = CONTROL_OFF;
+						SocketComm(basedata.createWiriteData(BaseData.createButtonByte(control.FZ_b10)), socket);
+					}
+					
+					if(control.FZ_b11 >= CONTROL_ON) {
+						//打开按钮11
+						basedata = new BaseData(Modbus_ComBase.WRITE_SINGLE_COIL, Modbus_ComBase.Button_Start_Addr+10, 1);						
+						control.FZ_b11 = CONTROL_OFF;
+						SocketComm(basedata.createWiriteData(BaseData.createButtonByte(control.FZ_b11)), socket);
+					}
+					
+					if(control.start_auto >= CONTROL_ON) {
+						//启动自动加载
+						basedata = new BaseData(Modbus_ComBase.WRITE_SINGLE_COIL, Modbus_ComBase.StartAutoLoad_Start_Addr, 1);						
+						control.start_auto = CONTROL_OFF;
+						SocketComm(basedata.createWiriteData(BaseData.createButtonByte(control.start_auto)), socket);
+					}
+					
+					if(control.stop_auto >= CONTROL_ON) {
+						//停止自动加载
+						basedata = new BaseData(Modbus_ComBase.WRITE_SINGLE_COIL, Modbus_ComBase.StopAutoLoad_Start_Addr, 1);						
+						control.stop_auto = CONTROL_OFF;
+						SocketComm(basedata.createWiriteData(BaseData.createButtonByte(control.stop_auto)), socket);
+					}
+					
+					if(control.sudden_crease >= CONTROL_ON) {
+						//突加突卸
+						basedata = new BaseData(Modbus_ComBase.WRITE_SINGLE_COIL, Modbus_ComBase.SuddenCrease_Start_Addr, 1);						
+						control.sudden_crease = CONTROL_OFF;
+						SocketComm(basedata.createWiriteData(BaseData.createButtonByte(control.sudden_crease)), socket);
+					}
+					
+					if(control.all_open >= CONTROL_ON) {
+						//全部分闸
+						basedata = new BaseData(Modbus_ComBase.WRITE_SINGLE_COIL, Modbus_ComBase.AllOpenBreak_Start_Addr, 1);						
+						control.all_open = CONTROL_OFF;
+						SocketComm(basedata.createWiriteData(BaseData.createButtonByte(control.all_open)), socket);
+					}
+					
+					if(control.FZ_autostate1 >= CONTROL_ON) {
+						//FZ自动状态1
+						basedata = new BaseData(Modbus_ComBase.WRITE_SINGLE_COIL, Modbus_ComBase.AutoProcess1_Start_Addr, 1);						
+						control.FZ_autostate1 = CONTROL_OFF;
+						SocketComm(basedata.createWiriteData(BaseData.createButtonByte(control.FZ_autostate1)), socket);
+					}
+					
+					if(control.FZ_autostate2 >= CONTROL_ON) {
+						//FZ自动状态2
+						basedata = new BaseData(Modbus_ComBase.WRITE_SINGLE_COIL, Modbus_ComBase.AutoProcess2_Start_Addr, 1);						
+						control.FZ_autostate2 = CONTROL_OFF;
+						SocketComm(basedata.createWiriteData(BaseData.createButtonByte(control.FZ_autostate2)), socket);
+					}
+					
+					if(control.FZ_autostate3 >= CONTROL_ON) {
+						//FZ自动状态3
+						basedata = new BaseData(Modbus_ComBase.WRITE_SINGLE_COIL, Modbus_ComBase.AutoProcess3_Start_Addr, 1);						
+						control.FZ_autostate3 = CONTROL_OFF;
+						SocketComm(basedata.createWiriteData(BaseData.createButtonByte(control.FZ_autostate3)), socket);
+					}
+					
+					if(control.FZ_autostate4 >= CONTROL_ON) {
+						//FZ自动状态4
+						basedata = new BaseData(Modbus_ComBase.WRITE_SINGLE_COIL, Modbus_ComBase.AutoProcess4_Start_Addr, 1);						
+						control.FZ_autostate4 = CONTROL_OFF;
+						SocketComm(basedata.createWiriteData(BaseData.createButtonByte(control.FZ_autostate4)), socket);
+					}
+					
+					if(control.FZ_autostate5 >= CONTROL_ON) {
+						//FZ自动状态5
+						basedata = new BaseData(Modbus_ComBase.WRITE_SINGLE_COIL, Modbus_ComBase.AutoProcess5_Start_Addr, 1);						
+						control.FZ_autostate5 = CONTROL_OFF;
+						SocketComm(basedata.createWiriteData(BaseData.createButtonByte(control.FZ_autostate5)), socket);
+					}
+					
+					if(control.local_control >= CONTROL_ON) {
+						//就地控制
+						basedata = new BaseData(Modbus_ComBase.WRITE_SINGLE_COIL, Modbus_ComBase.LocalControl_Start_Addr, 1);						
+						control.local_control = CONTROL_OFF;
+						SocketComm(basedata.createWiriteData(BaseData.createButtonByte(control.local_control)), socket);
+					}
+					
+					if(control.back_control >= CONTROL_ON) {
+						//后台控制
+						basedata = new BaseData(Modbus_ComBase.WRITE_SINGLE_COIL, Modbus_ComBase.BackControl_Start_Addr, 1);						
+						control.back_control = CONTROL_OFF;
+						SocketComm(basedata.createWiriteData(BaseData.createButtonByte(control.back_control)), socket);
+					}
+					
+					if(control.central_control >= CONTROL_ON) {
+						//中控控制
+						basedata = new BaseData(Modbus_ComBase.WRITE_SINGLE_COIL, Modbus_ComBase.CenterControl_Start_Addr, 1);						
+						control.central_control = CONTROL_OFF;
+						SocketComm(basedata.createWiriteData(BaseData.createButtonByte(control.central_control)), socket);
+					}
+					
+					if(control.inter_volume_M200 >= CONTROL_ON) {
+						//中控控制
+						basedata = new BaseData(Modbus_ComBase.WRITE_SINGLE_COIL, Modbus_ComBase.Middle_Start_Addr, 1);						
+						control.inter_volume_M200 = CONTROL_OFF;
+						SocketComm(basedata.createWiriteData(BaseData.createButtonByte(control.inter_volume_M200)), socket);
+					}
+					
+					if(control.fan_button >= CONTROL_ON) {
+						//风机按钮
+						basedata = new BaseData(Modbus_ComBase.WRITE_SINGLE_COIL, Modbus_ComBase.Fan_Button_Start_Addr, 1);						
+						control.fan_button = CONTROL_OFF;
+						SocketComm(basedata.createWiriteData(BaseData.createButtonByte(control.fan_button)), socket);
+					}
+					
+					if(control.set_power >= CONTROL_ON) {
+						//设定功率
+						basedata = new BaseData(Modbus_ComBase.WRITE_MULTIPLE_REGISTER, Modbus_ComBase.SetPower_Start_Addr, 1);						
+						control.set_power = CONTROL_OFF;
+						SocketComm(basedata.createWiriteData(BaseData.createFloatByte(control.set_power)), socket);
+					}
+					PowerArk_ServerSocket_Thread_SQL.updateDynamicload_ControlTable(conn_pool, control);					
+				}
+				
+				if(connerrCount >89999999) {
+					connerrCount = 0;
+				}
+				if(connCount > 8999999) {
+					connCount = 0;
+				}
+				run_count ++;
+				if(run_count > 8999999) {
+					run_count = 0;
+				}
+				Thread.sleep(50);
+			} catch (Exception e) {
+				//e.printStackTrace();
+			}
+		}
+	}
+	
+	public boolean SocketComm(byte[] bytedata,Socket socket) throws InterruptedException
+    { 
+		boolean res_t = false;
+		try
+		{
+			reConnectClient();
+	        if(socket != null)
+	        {
+	        	socket.setSoTimeout(3000);
+	        	InputStream in = socket.getInputStream();
+		        OutputStream out = socket.getOutputStream();
+		        //----------------- clear rx buff for tcp resend packet ----------------//
+		        byte[] rx_buf_t = new byte[1024];
+		        //----------------------------------------------------------------------//
+		        bytebuffer_for_socket_RX.order(ByteOrder.BIG_ENDIAN);
+		        bytebuffer_for_socket_RX.clear();
+		        //--------------------- socket write -----------------------------------//
+		        //byte[] b = makeCommBuf(cmd, bf);
+		        System.err.println(ComFn.bytesToHexString(bytedata, bytedata.length));
+		        Date d1 = new Date();
+		      
+		        
+		        int rx_read_time_out = 0; 
+		        //int rx_len = 0;
+		        //System.err.println("TX: " + ComFn.bytesToHexString(b, b.length));
+		        out.write(bytedata);
+		        out.flush();
+		        while(true) {
+		        	if(in.available() > 0) { 
+		        		rx_read_time_out = 0; 
+		        		int rx_len_t = in.read(rx_buf_t);
+		        		if((bytebuffer_for_socket_RX.position()+rx_len_t) 
+		        				< (bytebuffer_for_socket_RX.capacity()-1)) {
+			        		bytebuffer_for_socket_RX.put(rx_buf_t, 0, rx_len_t);
+		        		}
+		        	} else { 
+		        		rx_read_time_out++;
+		        		if((bytebuffer_for_socket_RX.position()>8) && (rx_read_time_out>10)){
+		        			break;
+		        		}
+		        		if(rx_read_time_out > 220) { 
+		        			break; 
+		        		} 
+		        	}
+		        	Thread.sleep(10);
+		        }
+		        bytebuffer_for_socket_RX.flip();
+		        Date d2 = new Date();
+		        long comm_tms = (d2.getTime() - d1.getTime());
+		        if(comm_tms < 200) {
+		        	Thread.sleep(200 - comm_tms);
+		        }
+		        byte[] buffer = new byte[bytebuffer_for_socket_RX.limit()];
+		        bytebuffer_for_socket_RX.get(buffer);
+		        System.err.println(ComFn.bytesToHexString(buffer, buffer.length));       
+		        if(true == getDataFromCommBuf(buffer)) {
+		        	connCount ++;
+		        	res_t = true;
+		        } else {
+		        	errCount ++;
+		        	connerrCount ++;
+		        	res_t = false;
+		        }
+	        }
+	    } catch (IOException e) {
+	        errCount++;
+	        connerrCount++;
+	    } finally {
+	    	
+	    }		
+		return res_t;
+    }
+	
+	public boolean getDataFromCommBuf(byte[] bytes) {
+		boolean issuccess = false;
+		ByteBuffer bf = ByteBuffer.allocate(bytes.length);
+        bf.order(ByteOrder.BIG_ENDIAN);
+        bf.put(bytes);
+        bf.flip();
+        BaseData baseData = new BaseData();
+        if(baseData.putByteBuffer(bf)) {
+        	//获取返回数据成功
+        	if(baseData.funcode == Modbus_ComBase.READ_COIL_STATUS) {
+        		//读取线圈数据成功[4013-4030]
+        		if(baseData.addrstart == Modbus_ComBase.OverTmp_Start_Addr) {
+        			if(dyna_inf.putReadIBackByteBuffer(bf)) {
+        				System.out.println("读取I区数据成功4013-4030");
+        				issuccess = true;
+        			} 			
+        		}
+        		
+        		//读取M区状态成功[01 - 12]
+        		if(baseData.addrstart == Modbus_ComBase.AutoProcess1_Start_Addr) {
+        			if(dyna_inf.putReadMBackByteBuffer(bf)) {
+        				System.out.println("读取M区数据成功01-12");
+        				issuccess = true;
+        			} 
+        		}
+        	
+        		//读取Q区状态成功[8000-8013]
+        		if(baseData.addrstart == Modbus_ComBase.ButtonOutPut_Start_Addr) {
+        			if(dyna_inf.putReadQBackByteBuffer(bf)) {
+        				System.out.println("读取Q区数据成功8000-8013");
+        				issuccess = true;
+        			} 
+        		}
+        		
+        		//读取M区各个控制的状态[0040-0160]
+        		if(baseData.addrstart == Modbus_ComBase.LocalControl_Start_Addr) {
+        			if(dyna_inf.putReadMControlStateByteBuffer(bf)) {
+        				System.out.println("读取M区数据成功0040-0160");
+        				issuccess = true;
+        			} 
+        		}
+        		
+        		
+        		
+        	}else if(baseData.funcode == Modbus_ComBase.READ_HOLDING_REGISTER) {
+        		if(baseData.addrstart == Modbus_ComBase.ActualSetPower_Start_Addr) {
+        			//读取V区各个数据状态[02-18]
+        			if(dyna_inf.putReadVBackByteBuffer(bf)) {
+        				System.out.println("读取V区数据成功02-18");
+        				issuccess = true;
+        			}
+        		}
+        		
+        	}
+        	
+        	
+        	
+        }       
+		return issuccess;
+	}
+	
+	
+	/**
+	 * 	重新获取连接对象
+	 */
+	public void reConnectClient() {
+		try {
+			if(socket == null || socket.isClosed() || errCount > 4) {
+				if(socket != null) {
+					socket.close();
+				}
+				socket = new Socket();
+				socket.connect(new InetSocketAddress(dev_ip, PowerArk_Port), 5000);
+				socket.setSoTimeout(5000);
+				errCount = 0;
+			}
+		} catch (SocketException e) {
+			e.printStackTrace();
+		} catch (IOException e) {
+			e.printStackTrace();
+		}
+	}
+}

--
Gitblit v1.9.1