whyclj
2020-09-15 eb890124f507df1d1e4eb36f00afb22a05754acd
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
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
package com.modbus.data;
 
import com.serotonin.modbus4j.BatchRead;
import com.serotonin.modbus4j.BatchResults;
import com.serotonin.modbus4j.ModbusMaster;
import com.serotonin.modbus4j.code.DataType;
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;
        IpParameters params = new IpParameters();
        params.setHost(target_ip);
        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() {
        System.out.println(target_ip);
        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 + "]";
    }
    
    
    public static void main(String[] args) {
        MyModbusMaster master = new MyModbusMaster("192.168.2.22", 2);
        //float t1 = MyModbusUtils.readShortToFloat(MyModbusUtils.readHoldingRegister(1119, DataType.TWO_BYTE_INT_SIGNED, master));
        BatchRead<Integer> batch = new BatchRead<Integer>();
        batch.addLocator(0,MyModbusUtils.createBaseLocator(58, DataType.TWO_BYTE_INT_SIGNED, master));                //¼ÓÔØ¹¦Âʸø¶¨        58    
        batch.addLocator(1,MyModbusUtils.createBaseLocator(364, DataType.TWO_BYTE_INT_SIGNED, master));                //¼ÓÔØ×ª¾Ø¸ø¶¨        364
        batch.addLocator(2,MyModbusUtils.createBaseLocator(366, DataType.TWO_BYTE_INT_UNSIGNED_SWAPPED, master));    //¼ÓÔØµç»úתËÙÏÞÖÆ    366
        batch.addLocator(3,MyModbusUtils.createBaseLocator(367, DataType.TWO_BYTE_INT_SIGNED, master));                //¼ÓÔØµç»úת¾ØÏÞÖÆ    367
        batch.addLocator(4,MyModbusUtils.createBaseLocator(505, DataType.TWO_BYTE_INT_UNSIGNED, master));            //¼ÓÔØ²½³¤            505
        batch.addLocator(5,MyModbusUtils.createBaseLocator(1006, DataType.TWO_BYTE_INT_UNSIGNED, master));            //¼ÓÔØµç»úË®Àä½øË®·çÎÂ1006
        batch.addLocator(6,MyModbusUtils.createBaseLocator(1008, DataType.TWO_BYTE_INT_UNSIGNED, master));            //¼ÓÔØµç»úË®Àä³öË®·çÎÂ1008
        batch.addLocator(7,MyModbusUtils.createBaseLocator(1096, DataType.TWO_BYTE_INT_SIGNED, master));            //¼ÓÔØµç»úµçÁ÷        1096
        batch.addLocator(8,MyModbusUtils.createBaseLocator(1099, DataType.TWO_BYTE_INT_SIGNED, master));            //¼ÓÔØµç»ú¹¦ÂÊ        1099
        batch.addLocator(9,MyModbusUtils.createBaseLocator(1101, DataType.TWO_BYTE_INT_SIGNED, master));            //¼ÓÔØµç»úתËÙ        1101
        batch.addLocator(10,MyModbusUtils.createBaseLocator(1103, DataType.TWO_BYTE_INT_SIGNED, master));            //¼ÓÔØµç»úµçѹ        1103
//        batch.addLocator(11,MyModbusUtils.createBaseLocator(1119, DataType.TWO_BYTE_INT_SIGNED, master));            //¼ÓÔØµç»úÈÆ×éζÈ1    1119
//        batch.addLocator(12,MyModbusUtils.createBaseLocator(1120, DataType.TWO_BYTE_INT_SIGNED, master));            //¼ÓÔØµç»úÈÆ×éζÈ2    1120
//        batch.addLocator(13,MyModbusUtils.createBaseLocator(1121, DataType.TWO_BYTE_INT_SIGNED, master));            //¼ÓÔØµç»úÈÆ×éζÈ3    1121
//        batch.addLocator(14,MyModbusUtils.createBaseLocator(1122, DataType.TWO_BYTE_INT_SIGNED, master));            //¼ÓÔØµç»úÖá³ÐζÈ1    1122
//        batch.addLocator(15,MyModbusUtils.createBaseLocator(1123, DataType.TWO_BYTE_INT_SIGNED, master));            //¼ÓÔØµç»úÖá³ÐζÈ2    1123
//        batch.addLocator(16,MyModbusUtils.createBaseLocator(1250, DataType.TWO_BYTE_INT_SIGNED, master));            //¼ÓÔØµç»ú³ö¿ÚζȠ   1250
//        batch.addLocator(17,MyModbusUtils.createBaseLocator(1124, DataType.TWO_BYTE_INT_SIGNED, master));            //¼ÓÔØµç»ú½ø¿ÚζȠ   1124
        batch.addLocator(18,MyModbusUtils.createBaseLocator(1251, DataType.TWO_BYTE_INT_SIGNED, master));            //¼ÓÔØµç»úת¾Ø        1251
        batch.addLocator(19,MyModbusUtils.createBaseLocator(5680, master));                                            //¼ÓÔØµç»úÆô¶¯        5680
        batch.addLocator(20,MyModbusUtils.createBaseLocator(5681, master));                                            //¼ÓÔØµç»úÍ£»ú        5681
        batch.addLocator(21,MyModbusUtils.createBaseLocator(8000, master));                                            //¼ÓÔØ            8000
        batch.addLocator(22,MyModbusUtils.createBaseLocator(8001, master));                                            //¼õÔØ            8001
        batch.addLocator(23,MyModbusUtils.createBaseLocator(8040, master));                                            //ÊÖ¶¯¼ÓÔØ            8040
        batch.addLocator(24,MyModbusUtils.createBaseLocator(16005, master));                                        //¼ÓÔØµç»ú½ôÍ£        16005
        batch.addLocator(25,MyModbusUtils.createBaseLocator(17082, master));                                        //¼ÓÔØµç»ú·ç»ú״̬    17082
        BatchResults<Integer> res = MyModbusUtils.readMutilRegisters(batch, master);
        System.out.println(res.getValue(0));
    }
}