whyclxw
2020-08-27 5563293e54259b6baeb98ec9785f747aa3fbdc6a
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
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
package com.dev.base.data;
 
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
 
import com.data.PowerArk_Task_SQL;
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 Dynamicload_SocketClient_Thread implements Runnable {
    public MysqlConnPool conn_pool;
    public Dynamicload_inf dinf;
 
    public Dynamicload_button dbutton;
    public Dynamicload_control dcontrol;
    public Dynamicload_state dstate;
 
    public MyModbusMaster master;
 
    public Dynamicload_SocketClient_Thread(Dynamicload_inf dinf, MysqlConnPool conn_pool) {
        this.conn_pool = conn_pool;
        this.dinf = dinf;
 
        dbutton = new Dynamicload_button(dinf.getDev_id());
        dcontrol = new Dynamicload_control(dinf.getDev_id());
        dstate = new Dynamicload_state(dinf.getDev_id(),dinf.getFZ_button_num());
        master = new MyModbusMaster(dinf.getDev_ip(), MyModbusMaster.SLAVEID_DEFAULT);
    }
 
    @Override
    public void run() {
        // TODO Auto-generated method stub
        int runCount = 0;
        Date last = new Date();
        while (true) {
            try {
                if (runCount % 2 == 0) {
                    // *************************** ¸üиºÔذ´Å¥ÐÅÏ¢******************************//*
 
                    // Date t1 = new Date();
                    readMutilElectrical_button(master, dbutton);
                    PowerArk_Task_SQL.updateDynamicload_ButtonTable(conn_pool, dbutton);
                    // System.out.println("RT:"+(new Date().getTime() - t1.getTime()));
 
                    // Date t2 = new Date();
                    // **************************** ¸üиºÔØ×´Ì¬ÐÅÏ¢ *****************************//*
                    readMutilElectrical_state(master, dstate);
                    PowerArk_Task_SQL.updateDynamicload_StateTable(conn_pool, dstate);
                    // System.out.println("State:"+(new Date().getTime() - t2.getTime()));
                }
 
                //System.err.println(dinf.dev_id + "=====" + ((new Date()).getTime() - last.getTime()));
                last = new Date();
 
                if (runCount % 10 == 0) {
                    // ¸üе±Ç°É豸ip
                    master.setTarget_ip(dinf.dev_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 master
     * @param dbutton
     */
    public void readMutilElectrical_button(MyModbusMaster master, Dynamicload_button dbutton) {
        BatchRead<Integer> batch = dbutton.createBatchRead(master);        
        BatchResults<Integer> res = MyModbusUtils.readMutilRegisters(batch, master);
        dbutton.putBatchResult(res);
    }
    
    /**
     * ¸üиºÔØ×´Ì¬ÐÅÏ¢ 
     * @param master
     * @param dstate
     */
    public void readMutilElectrical_state(MyModbusMaster master, Dynamicload_state dstate) {
        BatchRead<Integer> batch = dstate.createBatchRead(master,dstate.fz_button_num);        
        BatchResults<Integer> res = MyModbusUtils.readMutilRegisters(batch, master);
        dstate.putBatchResult(res);
    }
}