whyclxw
2020-11-02 f8b7ca9bc6b51c137053f16c1c7150a11aba13c4
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
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
package com.modbus.data;
 
import java.text.NumberFormat;
 
import com.serotonin.modbus4j.ModbusMaster;
import com.serotonin.modbus4j.ip.IpParameters;
 
public class MyModbusMaster {
    public final static int SLAVEID_DEFAULT = 2;
    
    public final static int MAX_ERROR_COUNT = 2;        //最大连续错误计数
    private ModbusMaster master;
    private int errcount;                                //错误计数    错误连续超过三个时重新获取master
    private int totalerr;                                //总的错误计数            //用于判别设备是否掉线
    private String target_ip;                            //目标ip
    private int slaveId;                                //设备ID
    
    public MyModbusMaster(String target_ip,int slaveId) {
        this.target_ip = target_ip;
        this.slaveId = slaveId;
        System.out.println(111);
        IpParameters params = new IpParameters();
        params.setHost(target_ip);
        System.out.println(params);
        this.master = MyModbusFactory.getMaster(params);
    }
    
    public void addErrorCount() {
        this.errcount++;
        if(this.errcount > MAX_ERROR_COUNT) {
            reConnect();
        }
        if(this.totalerr > 99999999) {
            this.totalerr = 5;
        }
        this.totalerr ++;
    }
    
    //清空错误计数
    public void clearError() {
        errcount = 0;
        totalerr = 0;
    }
    
    public void reConnect() {
        IpParameters params = new IpParameters();
        params.setHost(target_ip);
        if(this.master != null) {
            //清空上一个master
            this.master.destroy();
        }
        this.errcount = 0;
        this.master = MyModbusFactory.getMaster(params);
    }
    
    /**
     *     判断获取到的值是否为空
     * @param target
     * @param source
     * @return
     */
    public static Object checkNullData(Object target,Object source) {
        if(null == target) {
            return source;
        }
        try {
            if(target instanceof Number) {
                if(source instanceof Integer) {
                    return ((Number) target).intValue();
                }else if(source instanceof Float) {
                    return ((Number) target).floatValue();
                }
            }
            if(target instanceof Boolean) {
                //判断Boolean类型数据
                if((Boolean)target) {
                    target = 1;
                }else {
                    target = 0;
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return target;
        
    }
    
    public int getTotalerr() {
        return totalerr;
    }
 
    public void setTotalerr(int totalerr) {
        this.totalerr = totalerr;
    }
 
    public ModbusMaster getMaster() {
        return master;
    }
    public int getErrcount() {
        return errcount;
    }
    public void setMaster(ModbusMaster master) {
        this.master = master;
    }
    public void setErrcount(int errcount) {
        this.errcount = errcount;
    }
 
    public String getTarget_ip() {
        return target_ip;
    }
 
    public void setTarget_ip(String target_ip) {
        this.target_ip = target_ip;
    }
 
    public int getSlaveId() {
        return slaveId;
    }
 
    public void setSlaveId(int slaveId) {
        this.slaveId = slaveId;
    }
 
    @Override
    public String toString() {
        return "MyModbusMaster [SLAVEID_DEFAULT=" + SLAVEID_DEFAULT + ", master=" + master + ", errcount=" + errcount
                + ", target_ip=" + target_ip + ", slaveId=" + slaveId + "]";
    }
}