long
2023-09-02 e379948bb83ebcc9ce0c467a7b970f74bc00e9a1
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
package cn.stylefeng.guns.plcserver.server.BOP040.callback;
 
import cn.stylefeng.guns.plcserver.opc.GlobalVariable;
import cn.stylefeng.guns.plcserver.opc.OPCComm;
import cn.stylefeng.guns.plcserver.opc.unit.OPCUnit;
import org.jinterop.dcom.common.JIException;
import org.jinterop.dcom.core.JIVariant;
import org.openscada.opc.lib.da.DataCallback;
import org.openscada.opc.lib.da.Item;
import org.openscada.opc.lib.da.ItemState;
 
public class DataCallBack_BOP040_F_HEART_BEAT implements DataCallback {
 
    private OPCComm opc = OPCComm.getInstance();
    private int count = 0;
 
    @Override
    public void changed(Item item, ItemState itemState) {
        // 读取心跳变量的值
        try {
            if (itemState.getValue().getType() == JIVariant.VT_BOOL) {
                boolean value = itemState.getValue().getObjectAsBoolean();
                setHeartbeat(value);
            }
        } catch (JIException e) {
            e.printStackTrace();
        }
    }
 
    /**
     * 设置心跳标志位,保存到全局变量
     */
    public void setHeartbeat(boolean value) {
        if (!value) {
            OPCUnit.write(opc.getBOP040_F_HEART_BEAT(), "true");
            GlobalVariable.BOP040_F_HEART_BEAT = true;
            count = 0;
        } else {
            count++;
        }
        // 循环读取频率是:500ms一次,如果超过6次,也就是3s认定超时
        if (count >  GlobalVariable.HEART_MAX_COUNT) {
            GlobalVariable.BOP040_F_HEART_BEAT = false;
        }
    }
 
}