package com.motor.conn;
|
|
import java.util.Date;
|
|
import com.base.Com;
|
import com.modbus.data.MyModbusMaster;
|
import com.modbus.data.MyModbusUtils;
|
import com.motor.data.Load_motor_state;
|
import com.motor.data.Motor_control;
|
import com.motor.data.Motor_inf;
|
import com.motor.data.Subject_motor_state;
|
import com.serotonin.modbus4j.BatchRead;
|
import com.serotonin.modbus4j.BatchResults;
|
import com.serotonin.modbus4j.code.DataType;
|
import com.sql.MysqlConnPool;
|
|
public class Motor_SocketClient_Thread implements Runnable{
|
public MysqlConnPool conn_pool;
|
public Motor_inf motor;
|
|
public Motor_control control;
|
public Load_motor_state load_state;
|
public Subject_motor_state subject_state;
|
|
public MyModbusMaster master;
|
|
public static final int MAX_READALARM_COUNT = 20; //Ò»´Î¶ÁÈ¡¸æ¾¯½ÚµãµÄ×î´óÊýÁ¿
|
public int read_alarm_index = 0; //¶ÁÈ¡¸æ¾¯Ë÷Òý
|
|
public Motor_SocketClient_Thread(Motor_inf motor,MysqlConnPool conn_pool) {
|
this.conn_pool = conn_pool;
|
this.motor = motor;
|
|
load_state = new Load_motor_state(motor.motor_id);
|
subject_state = new Subject_motor_state(motor.motor_id);
|
control = new Motor_control(motor.motor_id);
|
|
motor.load_state = load_state;
|
motor.subject_state = subject_state;
|
|
master = new MyModbusMaster(motor.motor_ip, MyModbusMaster.SLAVEID_DEFAULT);
|
}
|
|
@Override
|
public void run() {
|
int runCount = 0;
|
while(true) {
|
try {
|
/*Motor_Task_SQL.queryMotor_ControlTable(conn_pool, control);
|
//System.out.println(control.isControl_en()+"################33");
|
|
if(control.isControl_en()) {
|
*//************************** ¿ØÖÆÊä³ö *******************************//*
|
writeControlSignal(master,control);
|
Motor_Task_SQL.updateMotor_Control(conn_pool, control);
|
}*/
|
|
Date t1 = new Date();
|
Date t2 = new Date();
|
if(runCount %2 == 0) {
|
/*************************** ¸üмÓÔØµç»úÊý¾Ý ******************************/
|
//readLoadMotorSingnal(master,load_state);
|
readMutilLoadMotorSingnal(master,load_state);
|
Motor_Task_SQL.updateLoadMotor_State(conn_pool, load_state);
|
|
|
}
|
if(runCount %3 == 0) {
|
/**************************** ¶ÁÈ¡ÊÜÊÔµç»úÊý¾Ý *****************************/
|
//readSubjectMotorSingnal(master,subject_state);
|
readMutilSubjectMotorSingnal(master,subject_state);
|
//t2 = new Date();
|
Motor_Task_SQL.updateSubjectMotor_State(conn_pool, subject_state);
|
//System.out.println((new Date().getTime()-t2.getTime()));
|
}
|
//System.out.println((new Date().getTime()-t1.getTime())+"==="+(t2.getTime()-t1.getTime()));
|
if(runCount %5 == 0) {
|
/*************************** ¶ÁÈ¡¹ÊÕÏ״̬ÐÅÏ¢ ******************************/
|
//Date start = new Date();
|
//readMotorAlarmData(master,motor);
|
readMutilMotorAlarmData(master,motor);
|
//Date end = new Date();
|
//System.err.println((end.getTime()-start.getTime()));
|
}
|
//System.err.println(Com.getDateTimeFormat(new Date(), Com.DTF_YMDhms));
|
|
Motor_Task_SQL.insertOrUpdateDeviceConnectState(conn_pool, motor.motor_id, master);
|
if(runCount%10 == 0) {
|
//¸üе±Ç°É豸ip
|
master.setTarget_ip(motor.motor_ip);
|
}
|
if(runCount > 999900) {
|
runCount = 0;
|
}
|
runCount ++;
|
Thread.sleep(50);
|
} catch (Exception e) {
|
try {
|
Thread.sleep(1000);
|
} catch (InterruptedException e1) {
|
//e1.printStackTrace();
|
}
|
e.printStackTrace();
|
}
|
}
|
}
|
|
/**
|
* ¶ÁÈ¡É豸±¨¾¯ÐÅÏ¢
|
* @param master2
|
* @param motor2
|
*/
|
private void readMotorAlarmData(MyModbusMaster master2, Motor_inf motor2) {
|
for(int i=read_alarm_index ; i< motor2.alarms.size() && i< (read_alarm_index+MAX_READALARM_COUNT);i++) {
|
//Date start = new Date();
|
motor2.alarms.get(i).checkAlarm((int)master2.checkNullData(MyModbusUtils.readCoilStatus(12000+i*4, master2), motor2.alarms.get(i).alarm_state));
|
//Date end = new Date();
|
//System.err.println((end.getTime()-start.getTime())+"===="+i);
|
}
|
read_alarm_index += MAX_READALARM_COUNT;
|
if(read_alarm_index >= motor2.alarms.size()) {
|
read_alarm_index = 0;
|
}
|
}
|
|
/**
|
* ÅúÁ¿É豸±¨¾¯ÐÅÏ¢
|
* @param master2
|
* @param motor2
|
*/
|
private void readMutilMotorAlarmData(MyModbusMaster master2, Motor_inf motor2) {
|
BatchRead<Integer> batch = motor2.createBatchRead(master2);
|
BatchResults<Integer> res = MyModbusUtils.readMutilRegisters(batch, master2);
|
motor2.putBatchResult(res);
|
|
}
|
|
/**
|
* ¶ÁÈ¡ÊÜÊÔµç»úÐÅÏ¢
|
* @param master2
|
* @param subject_state2
|
*/
|
private void readSubjectMotorSingnal(MyModbusMaster master2, Subject_motor_state subject_state2) {
|
subject_state2.sensor_torque = (float) master2.checkNullData(MyModbusUtils.readHoldingRegister(330, DataType.TWO_BYTE_INT_SIGNED, master2), subject_state2.sensor_torque);; //´«¸ÐÆ÷ת¾Ø 330
|
subject_state2.sensor_power = (float)master2.checkNullData(MyModbusUtils.readHoldingRegister(514, DataType.TWO_BYTE_INT_UNSIGNED, master2), subject_state2.sensor_power); //´«¸ÐÆ÷¹¦ÂÊ 514
|
subject_state2.fault_confirm = (int)master2.checkNullData(MyModbusUtils.readCoilStatus(801, master2), subject_state2.fault_confirm); //¹ÊÕÏÈ·ÈÏ 801
|
subject_state2.gear_box_power = (float)master2.checkNullData(MyModbusUtils.readHoldingRegister(853, DataType.TWO_BYTE_INT_SIGNED, master2), subject_state2.gear_box_power); //³ÝÂÖÏäÖṦÂÊ 853
|
subject_state2.advance_power = (float)master2.checkNullData(MyModbusUtils.readHoldingRegister(854, DataType.TWO_BYTE_INT_SIGNED, master2), subject_state2.advance_power); //ÍÆ½øÖṦÂÊ 854
|
subject_state2.gear_box_tmp1 = (float)master2.checkNullData(MyModbusUtils.readHoldingRegister(1010, DataType.TWO_BYTE_INT_UNSIGNED, master2), subject_state2.gear_box_tmp1); //³ÝÂÖÏäÖá³ÐζÈ1 1010
|
subject_state2.gear_box_tmp2 = (float)master2.checkNullData(MyModbusUtils.readHoldingRegister(1011, DataType.TWO_BYTE_INT_UNSIGNED, master2), subject_state2.gear_box_tmp2); //³ÝÂÖÏäÖá³ÐζÈ2 1011
|
subject_state2.gear_box_tmp3 = (float)master2.checkNullData(MyModbusUtils.readHoldingRegister(1012, DataType.TWO_BYTE_INT_UNSIGNED, master2), subject_state2.gear_box_tmp3); //³ÝÂÖÏäÖá³ÐζÈ3 1012
|
subject_state2.gear_box_tmp4 = (float)master2.checkNullData(MyModbusUtils.readHoldingRegister(1013, DataType.TWO_BYTE_INT_UNSIGNED, master2), subject_state2.gear_box_tmp4); //³ÝÂÖÏäÖá³ÐζÈ4 1013
|
subject_state2.gear_box_tmp5 = (float)master2.checkNullData(MyModbusUtils.readHoldingRegister(1014, DataType.TWO_BYTE_INT_UNSIGNED, master2), subject_state2.gear_box_tmp5); //³ÝÂÖÏäÖá³ÐζÈ5 1014
|
subject_state2.gear_box_tmp6 = (float)master2.checkNullData(MyModbusUtils.readHoldingRegister(1015, DataType.TWO_BYTE_INT_UNSIGNED, master2), subject_state2.gear_box_tmp6); //³ÝÂÖÏäÖá³ÐζÈ6 1015
|
subject_state2.gas_station_start = (int)master2.checkNullData(MyModbusUtils.readCoilStatus(4480, master2), subject_state2.gas_station_start); //ÓÍÕ¾Æô¶¯ 4480
|
subject_state2.gas_station_stop = (int)master2.checkNullData(MyModbusUtils.readCoilStatus(4481, master2), subject_state2.gas_station_stop); //ÓÍվͣ»ú 4481
|
subject_state2.pow_control = (int)master2.checkNullData(MyModbusUtils.readCoilStatus(5683, master2), subject_state2.pow_control); //¹¦ÂÊ¿ØÖÆ 5683
|
subject_state2.torque_control = (int)master2.checkNullData(MyModbusUtils.readCoilStatus(5684, master2), subject_state2.torque_control); //ת¾Ø¿ØÖÆ 5684
|
subject_state2.transformer_hightmp_alarm = (int)master2.checkNullData(MyModbusUtils.readCoilStatus(16000, master2), subject_state2.transformer_hightmp_alarm); //±äѹÆ÷¸ßα¨¾¯ 16000
|
subject_state2.transformer_hightmp_fault = (int)master2.checkNullData(MyModbusUtils.readCoilStatus(16001, master2), subject_state2.transformer_hightmp_fault); //±äѹÆ÷¸ßιÊÕÏ 16001
|
subject_state2.transformer_lackphase_alarm = (int)master2.checkNullData(MyModbusUtils.readCoilStatus(16007, master2), subject_state2.transformer_lackphase_alarm); //±äѹÆ÷ȱÏ౨¾¯ 16007
|
subject_state2.lubrication_pump1_start = (int)master2.checkNullData(MyModbusUtils.readCoilStatus(16008, master2), subject_state2.lubrication_pump1_start); //È󻬱Ã1ÔËÐÐ 16008
|
subject_state2.lubrication_pump2_start = (int)master2.checkNullData(MyModbusUtils.readCoilStatus(16009, master2), subject_state2.lubrication_pump2_start); //È󻬱Ã2ÔËÐÐ 16009
|
subject_state2.lubrication_remote_start_allow = (int)master2.checkNullData(MyModbusUtils.readCoilStatus(16011, master2), subject_state2.lubrication_remote_start_allow); //Èó»¬ÔÊÐíÔ¶³ÌÆô¶¯ 16011
|
subject_state2.remote_control = (int)master2.checkNullData(MyModbusUtils.readCoilStatus(17056, master2), subject_state2.remote_control); //Ò£¿Ø/¾ÍµØ 17056
|
subject_state2.inverter_ready = (int)master2.checkNullData(MyModbusUtils.readCoilStatus(17065, master2), subject_state2.inverter_ready); //±äƵÆ÷¾ÍÐ÷ 17065
|
subject_state2.inverter_running = (int)master2.checkNullData(MyModbusUtils.readCoilStatus(17066, master2), subject_state2.inverter_running); //±äƵÆ÷ÔËÐÐ 17066
|
subject_state2.inverter_alarm = (int)master2.checkNullData(MyModbusUtils.readCoilStatus(17067, master2), subject_state2.inverter_alarm); //±äƵÆ÷±¨¾¯ 17067
|
subject_state2.inverter_fault = (int)master2.checkNullData(MyModbusUtils.readCoilStatus(17068, master2), subject_state2.inverter_fault); //±äƵÆ÷¹ÊÕÏ 17068
|
subject_state2.lubrication_host_running_allow = (int)master2.checkNullData(MyModbusUtils.readCoilStatus(17069, master2), subject_state2.lubrication_host_running_allow); //Èó»¬ÔÊÐíÖ÷»úÔËÐÐ 17069
|
subject_state2.main_switch_state = (int)master2.checkNullData(MyModbusUtils.readCoilStatus(17084, master2), subject_state2.main_switch_state); //Ö÷¿ª¹Ø×´Ì¬ 17084
|
subject_state2.subject_motor_running = (int)master2.checkNullData(MyModbusUtils.readCoilStatus(17091, master2), subject_state2.subject_motor_running); //ÊÜÊÔµç»úÔËÐÐ 17091
|
subject_state2.subject_motor_alarm = (int)master2.checkNullData(MyModbusUtils.readCoilStatus(17136, master2), subject_state2.subject_motor_alarm); //ÊÜÊÔµç»ú±¨¾¯ 17136
|
subject_state2.subject_motor_fault = (int)master2.checkNullData(MyModbusUtils.readCoilStatus(17346, master2), subject_state2.subject_motor_fault); //ÊÜÊÔµç»ú¹ÊÕÏ 17346
|
subject_state2.subject_motor_stop = (int)master2.checkNullData(MyModbusUtils.readCoilStatus(17347, master2), subject_state2.subject_motor_stop); //ÊÜÊÔµç»ú½ôÍ£ 17347
|
subject_state2.lubrication_falut = (int)master2.checkNullData(MyModbusUtils.readCoilStatus(17348, master2), subject_state2.lubrication_falut); //È󻬹ÊÕÏ 17348
|
subject_state2.lubrication_alarm = (int)master2.checkNullData(MyModbusUtils.readCoilStatus(17349, master2), subject_state2.lubrication_alarm); //È󻬱¨¾¯ 17349
|
subject_state2.record_time = new Date();
|
}
|
|
/**
|
* ÅúÁ¿¶ÁÈ¡ÊÜÊÔµç»úÐÅÏ¢
|
* @param master2
|
* @param subject_state2
|
*/
|
private void readMutilSubjectMotorSingnal(MyModbusMaster master2, Subject_motor_state subject_state2) {
|
BatchRead<Integer> batch = subject_state2.createBatchRead(master2);
|
BatchResults<Integer> res = MyModbusUtils.readMutilRegisters(batch, master2);
|
subject_state2.putBatchResult(res);
|
}
|
|
/**
|
* ¶ÁÈ¡¼ÓÔØµç»úÐÅÏ¢
|
* @param master2
|
* @param load_state2
|
*/
|
private void readLoadMotorSingnal(MyModbusMaster master2, Load_motor_state load_state2) {
|
load_state2.load_power = (float) master2.checkNullData(MyModbusUtils.readHoldingRegister(58, DataType.TWO_BYTE_INT_SIGNED, master2), load_state2.load_power); //¼ÓÔØ¹¦Âʸø¶¨ 58
|
load_state2.load_torque = (float)master2.checkNullData(MyModbusUtils.readHoldingRegister(364, DataType.TWO_BYTE_INT_SIGNED, master2), load_state2.load_torque); //¼ÓÔØ×ª¾Ø¸ø¶¨ 364
|
load_state2.load_motor_speed_limit = (float)master2.checkNullData(MyModbusUtils.readHoldingRegister(366, DataType.TWO_BYTE_INT_UNSIGNED_SWAPPED, master2), load_state2.load_motor_speed_limit); //¼ÓÔØµç»úתËÙÏÞÖÆ 366
|
load_state2.load_motor_torque_limit = (float)master2.checkNullData(MyModbusUtils.readHoldingRegister(367, DataType.TWO_BYTE_INT_SIGNED, master2), load_state2.load_motor_torque_limit); //¼ÓÔØµç»úת¾ØÏÞÖÆ 367
|
load_state2.load_step_length = (float)master2.checkNullData(MyModbusUtils.readHoldingRegister(505, DataType.TWO_BYTE_INT_UNSIGNED, master2), load_state2.load_step_length); //¼ÓÔØ²½³¤ 505
|
load_state2.load_motor_inwater_tmp = (float)master2.checkNullData(MyModbusUtils.readHoldingRegister(1006, DataType.TWO_BYTE_INT_UNSIGNED, master2), load_state2.load_motor_inwater_tmp); //¼ÓÔØµç»úË®Àä½øË®·çΠ1006
|
load_state2.load_motor_outwater_tmp = (float)master2.checkNullData(MyModbusUtils.readHoldingRegister(1008, DataType.TWO_BYTE_INT_UNSIGNED, master2), load_state2.load_motor_outwater_tmp); //¼ÓÔØµç»úË®Àä³öË®·çΠ1008
|
load_state2.load_motor_curr = (float)master2.checkNullData(MyModbusUtils.readHoldingRegister(1096, DataType.TWO_BYTE_INT_SIGNED, master2), load_state2.load_motor_curr); //¼ÓÔØµç»úµçÁ÷ 1096
|
load_state2.load_motor_power = (float)master2.checkNullData(MyModbusUtils.readHoldingRegister(1099, DataType.TWO_BYTE_INT_SIGNED, master2), load_state2.load_motor_power); //¼ÓÔØµç»ú¹¦ÂÊ 1099
|
load_state2.load_motor_speed = (float)master2.checkNullData(MyModbusUtils.readHoldingRegister(1101, DataType.TWO_BYTE_INT_SIGNED, master2), load_state2.load_motor_speed); //¼ÓÔØµç»úתËÙ 1101
|
load_state2.load_motor_vol = (float)master2.checkNullData(MyModbusUtils.readHoldingRegister(1103, DataType.TWO_BYTE_INT_SIGNED, master2), load_state2.load_motor_vol); //¼ÓÔØµç»úµçѹ 1103
|
load_state2.load_motor_wind_tmp1 = (float)master2.checkNullData(MyModbusUtils.readHoldingRegister(1119, DataType.TWO_BYTE_INT_SIGNED, master2), load_state2.load_motor_wind_tmp1); //¼ÓÔØµç»úÈÆ×éζÈ1 1119
|
load_state2.load_motor_wind_tmp2 = (float)master2.checkNullData(MyModbusUtils.readHoldingRegister(1120, DataType.TWO_BYTE_INT_SIGNED, master2), load_state2.load_motor_wind_tmp2); //¼ÓÔØµç»úÈÆ×éζÈ2 1120
|
load_state2.load_motor_wind_tmp3 = (float)master2.checkNullData(MyModbusUtils.readHoldingRegister(1121, DataType.TWO_BYTE_INT_SIGNED, master2), load_state2.load_motor_wind_tmp3); //¼ÓÔØµç»úÈÆ×éζÈ3 1121
|
load_state2.load_motor_bear_tmp1 = (float)master2.checkNullData(MyModbusUtils.readHoldingRegister(1122, DataType.TWO_BYTE_INT_SIGNED, master2), load_state2.load_motor_bear_tmp1); //¼ÓÔØµç»úÖá³ÐζÈ1 1122
|
load_state2.load_motor_bear_tmp2 = (float)master2.checkNullData(MyModbusUtils.readHoldingRegister(1123, DataType.TWO_BYTE_INT_SIGNED, master2), load_state2.load_motor_bear_tmp2); //¼ÓÔØµç»úÖá³ÐζÈ2 1123
|
load_state2.load_motor_out_tmp = (float)master2.checkNullData(MyModbusUtils.readHoldingRegister(1250, DataType.TWO_BYTE_INT_SIGNED, master2), load_state2.load_motor_out_tmp); //¼ÓÔØµç»ú³ö¿ÚÎÂ¶È 1250
|
load_state2.load_motor_into_tmp = (float)master2.checkNullData(MyModbusUtils.readHoldingRegister(1124, DataType.TWO_BYTE_INT_SIGNED, master2), load_state2.load_motor_into_tmp); //¼ÓÔØµç»ú½ø¿ÚÎÂ¶È 1124
|
load_state2.load_motor_torque = (float)master2.checkNullData(MyModbusUtils.readHoldingRegister(1251, DataType.TWO_BYTE_INT_SIGNED, master2), load_state2.load_motor_torque); //¼ÓÔØµç»úת¾Ø 1251
|
load_state2.load_motor_start = (int)master2.checkNullData(MyModbusUtils.readCoilStatus(5680, master2), load_state2.load_motor_start); //¼ÓÔØµç»úÆô¶¯ 5680
|
load_state2.load_motor_downtime = (int)master2.checkNullData(MyModbusUtils.readCoilStatus(5681, master2), load_state2.load_motor_downtime); //¼ÓÔØµç»úÍ£»ú 5681
|
load_state2.load_add = (int)master2.checkNullData(MyModbusUtils.readCoilStatus(8000, master2),load_state2.load_add); //¼ÓÔØ 8000
|
load_state2.load_reduct = (int)master2.checkNullData(MyModbusUtils.readCoilStatus(8001, master2), load_state2.load_reduct); //¼õÔØ 8001
|
load_state2.load_manual = (int)master2.checkNullData(MyModbusUtils.readCoilStatus(8040, master2), load_state2.load_manual); //ÊÖ¶¯¼ÓÔØ 8040
|
load_state2.load_motor_stop = (int)master2.checkNullData(MyModbusUtils.readCoilStatus(16005, master2), load_state2.load_motor_stop); //¼ÓÔØµç»ú½ôÍ£ 16005
|
load_state2.load_motor_fan_state = (int)master2.checkNullData(MyModbusUtils.readCoilStatus(17082, master2), load_state2.load_motor_fan_state); //¼ÓÔØµç»ú·ç»ú״̬ 17082
|
load_state2.record_time = new Date();
|
}
|
|
/**
|
* ÅúÁ¿¶ÁÈ¡¼ÓÔØµç»úÐÅÏ¢
|
* @param master2
|
* @param load_state2
|
*/
|
private void readMutilLoadMotorSingnal(MyModbusMaster master2, Load_motor_state load_state2) {
|
//BatchRead<Integer> batch = load_state2.createBatchRead(master2);
|
//BatchResults<Integer> res = MyModbusUtils.readMutilRegisters(batch, master2);
|
//load_state2.putBatchResult(res);
|
|
BatchRead<Integer> batch = load_state2.createHeadBatchRead(master2);
|
BatchResults<Integer> res = MyModbusUtils.readMutilRegisters(batch, master2);
|
load_state2.putHeadBatchResult(res);
|
|
batch = load_state2.createBodyBatchRead(master2);
|
res = MyModbusUtils.readMutilRegisters(batch, master2);
|
load_state2.putBodyBatchResult(res);
|
|
}
|
|
/**
|
* дÈë¿ØÖÆÁ¿ÐźÅ
|
* @param master2
|
* @param control2
|
*/
|
private void writeControlSignal(MyModbusMaster master2, Motor_control control2) {
|
System.out.println(control2);
|
if(control2.load_power >0) {
|
MyModbusUtils.writeHoldingRegister(58, control.load_power, DataType.TWO_BYTE_INT_UNSIGNED, master2);
|
}
|
if(control2.sensor_torque >0) {
|
MyModbusUtils.writeHoldingRegister(330, control.sensor_torque, DataType.TWO_BYTE_INT_UNSIGNED, master2);
|
}
|
if(control2.load_torque >0) {
|
MyModbusUtils.writeHoldingRegister(364, control.load_torque, DataType.TWO_BYTE_INT_UNSIGNED, master2);
|
}
|
if(control2.load_motor_speed_limit >0) {
|
MyModbusUtils.writeHoldingRegister(366, control.load_motor_speed_limit, DataType.TWO_BYTE_INT_UNSIGNED, master2);
|
}
|
if(control2.load_motor_torque_limit >0) {
|
MyModbusUtils.writeHoldingRegister(367, control.load_motor_torque_limit, DataType.TWO_BYTE_INT_UNSIGNED, master2);
|
}
|
if(control2.load_step_length >0) {
|
MyModbusUtils.writeHoldingRegister(505, control.load_step_length, DataType.TWO_BYTE_INT_UNSIGNED, master2);
|
}
|
if(control2.sensor_power >0) {
|
MyModbusUtils.writeHoldingRegister(514, control.sensor_power, DataType.TWO_BYTE_INT_UNSIGNED, master2);
|
}
|
if(control2.gear_box_power >0) {
|
MyModbusUtils.writeHoldingRegister(853, control.gear_box_power, DataType.TWO_BYTE_INT_UNSIGNED, master2);
|
}
|
if(control2.advance_power >0) {
|
MyModbusUtils.writeHoldingRegister(854, control.advance_power, DataType.TWO_BYTE_INT_UNSIGNED, master2);
|
}
|
control2.clear();
|
}
|
|
}
|