whyclxw
2020-12-28 ccab4911b9e8cedb15cef8845a96d7431ada1df7
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
package com.data.comm;
 
import com.data.Motor_inf;
import com.data.Rectifier_control;
import com.data.Rectifier_power;
import com.modbus.data.MyModbusMaster;
import com.modbus.data.MyModbusUtils;
import com.serotonin.modbus4j.BatchRead;
import com.serotonin.modbus4j.BatchResults;
import com.sql.MysqlConnPool;
 
public class Rectifier_power_SocketClient_Thread extends Thread{
    public static int Dev_Type_Rectifier_power = 30001;            //4WM´ó¹¦ÂÊÕûÁ÷µçÔ´
    
    private MysqlConnPool pool;
    private Motor_inf motor;
    private MyModbusMaster master;
    
    public Rectifier_power_SocketClient_Thread(MysqlConnPool pool, Motor_inf motor) {
        this.motor = motor;
        this.pool = pool;
        
        master = new MyModbusMaster(motor.getDev_ip(), MyModbusMaster.SLAVEID_DEFAULT);
    }
    @Override
    public void run() {
        int run_count = 0;
        while(true) {
            try { 
                if(run_count % 2 == 0) {
                    if(Dev_Type_Rectifier_power == motor.getDev_id()) {
                        //¶ÁÈ¡4mw´ó¹¦ÂÊÕûÁ÷µçÔ´
                        readRectifier_power(motor.rPower);
                        Rectifier_power_SQL.insertOrUpdateTb_Rectifier_power(pool, motor.rPower);
                    }                    
                }    
                //¿ØÖÆ4MW´ó¹¦ÂÊÕûÁ÷µçÔ´
                Rectifier_power_SQL.queryTb_rectifier_power_control(pool, motor.rControl);
                if(motor.rControl.control_en>0) {
                    writeRectifier_control(motor.rControl);
                    
                    Rectifier_power_SQL.updateTb_rectifier_power_control(pool,motor.rControl);            
                }
                
                motor.conn_state = master.getConnectState();
                if(run_count > 999909) {
                    run_count = 0;
                }
                run_count ++;                
                Thread.sleep(200);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }        
    }
    /**
     * ½«ÊµÊ±¶ÁÈ¡µÄ¿ØÖÆÐÅϢд¸øÉ豸
     * */
    private void writeRectifier_control(Rectifier_control rControl) {
        if(rControl.getEmergency_stop()>0) {
            MyModbusUtils.writeCoil(1, true, master);
        }
        if(rControl.getRemote_stop()>0) {
            MyModbusUtils.writeCoil(1, true, master);
        }
        rControl.reset();
    }
    /**
     *     ¶ÁÈ¡4mw´ó¹¦ÂÊÕûÁ÷µçÔ´
     * @param stdata
     */
    public void readRectifier_power(Rectifier_power rpower) {
        BatchRead<Integer> batch = rpower.createBatchRead(master);    
        BatchResults<Integer> res = MyModbusUtils.readMutilRegisters(batch, master);
        rpower.putBatchResult(res);
    }
}