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