更新时间:2024-04-08 GMT+08:00
分享

代码解析

项目结构如下

表1 类相关说明

类名称

描述

Device

设备类,包含设备的id,产品id,slaveId及能力定义。

Main

主启动类。

ModbusCfg

modbus配置。

ModbusDriver

业务主体类,该类含边侧设备添加,设备同步,数据收集及上报等演示。

Property

设备属性。

Service

设备能力。

ModbusDriver代码解析

片段一

通过DriverClient.createFromEnv初始化客户端,调用driverClient来完成数据的发送。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
    public ModbusDriver() throws GeneraException {
        driverClient = DriverClient.createFromEnv();
    }

    public void start() throws Exception {
        //设置回调,打开客户端
        driverClient.setGatewayCallback(this);
        driverClient.open();
        loadConfig();
        startCollection();
    }

片段二

此为从变量points中获取设备数采结果,进行设备数据上报。

 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
    private void startCollection() {
    scheduler.scheduleAtFixedRate(new Runnable() {
        @Override
        public void run() {
            //todo 采集modbus点位数据,保存到points

            //上报数据
            List<DeviceService> devices = new LinkedList<>();
            for (Device device : modbusCfg.getDevices()) {
                List<ServiceData> services = new LinkedList<>();
                for (Service service : device.getServices()) {
                    Map<String, Object> properties = new HashMap<>();
                    for (Property property : service.getProperties()) {
                        String key = device.getId() + "." + service.getServiceId() + "." + property.getPropertyName();
                        properties.put(property.getPropertyName(), points.get(key));
                    }
                    services.add(new ServiceData(service.getServiceId(), properties, ZonedDateTime.now()));
                }
                String deviceId = deviceIds.get(device.getId());
                if (deviceId != null) {
                    devices.add(new DeviceService(deviceId, services));
                }
            }
            try {
                driverClient.reportSubDevicesProperties(new SubDevicesPropsReport(devices));
            } catch (Exception e) {
                System.out.println(e.getMessage());
            }
        }
    }, 0, modbusCfg.getPeriod(), TimeUnit.SECONDS);

}

片段三

查看“modbus.json”文件,点位上报数据关系对应:设备id.模型id.服务id.属性名;设备id需要与添加边缘设备时设置的“设备标识码”一致。

{
  "period": 10,
  "server": "192.168.1.2:502",
  "devices": [{
    "id": "8616ac9b-1e66-4fbf-8871-1ca4cb7103fc",
    "product_id": "c6b39067b0325db34663d3ef421a42f6",
    "name": "light_1",
    "slave_id": 1,
    "services": [{
      "service_id": "light",
      "properties": [{
        "property_name": "switch",
        "register_address": 1234,
        "data_type": "bool"
      }]
    }]
  }, {
    "id": "c1ae5e25-23c6-4e01-b64f-7b00b4066667",
    "product_id": "c6b39067b0325db34663d3ef421a42f6",
    "name": "light_2",
    "slave_id": 2,
    "services": [{
      "service_id": "light",
      "properties": [{
        "property_name": "switch",
        "register_address": 5678,
        "data_type": "bool"
      }]
    }]
  }]
}

片段四

查看“device_ids.json”文件,设备id需要与添加边缘设备时设置的“设备标识码”一致。

{
  "8616ac9b-1e66-4fbf-8871-1ca4cb7103fc": "bf40f0c4-4022-41c6-a201-c5133122054a"
}
分享:

    相关文档

    相关产品