BACnet接入示例_物联网平台_边缘计算网关

一、准备工作:

PS:BACnet须准备两台电脑,模拟器需要安装在一台独立的电脑上

1、安装BACnet模拟器【Yabe】

2、启动模拟器【Room Control Simulator】

二、在ThingsKit Edge中BACnet读写【固定值实现】

1、读写AnalogValue【模拟值】示例【单个参数】

PS:导入示例代码

示例代码:

[{"id":"863b5c82.8792c","type":"debug","z":"b387cb.56722838","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":730,"y":320,"wires":[]},{"id":"34f61fc019d1a72e","type":"BACnet-Write","z":"b387cb.56722838","name":"写AV-1","objectType":"2","instance":"ef226397.1987f","valueTag":"4","valueValue":"25.59","propertyId":"85","priority":"16","device":"7adbdd83.bce224","server":"e0bf099a.ee8468","multipleWrite":false,"x":490,"y":340,"wires":[["863b5c82.8792c"]]},{"id":"c7ec07f506bade9d","type":"inject","z":"b387cb.56722838","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"","payloadType":"date","x":270,"y":340,"wires":[["34f61fc019d1a72e"]]},{"id":"78bc17d80fea8272","type":"inject","z":"b387cb.56722838","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"","payloadType":"date","x":270,"y":280,"wires":[["289cff1e8c6a2b04"]]},{"id":"289cff1e8c6a2b04","type":"BACnet-Read","z":"b387cb.56722838","name":"读 AV-1","objectType":"2","instance":"ef226397.1987f","propertyId":"85","device":"7adbdd83.bce224","server":"e0bf099a.ee8468","multipleRead":false,"x":500,"y":280,"wires":[["863b5c82.8792c"]]},{"id":"45f1cc2759460290","type":"comment","z":"b387cb.56722838","name":"单个读写AV","info":"","x":290,"y":220,"wires":[]},{"id":"ef226397.1987f","type":"BACnet-Instance","name":"Temperature Water-1","instanceAddress":"1"},{"id":"7adbdd83.bce224","type":"BACnet-Device","name":"Windows VM","deviceAddress":"192.168.1.5"},{"id":"e0bf099a.ee8468","type":"BACnet-Client","name":"Client-47","adpuTimeout":"3000","port":"47808","interface":"192.168.1.47","broadcastAddress":"192.168.1.255"}]

2、详细介绍读写节点

2-1、BACnet-Read节点介绍

type】——BACnet寄存器类型

下列为:常用寄存器类型:

寄存器类型

行业简写

组件中数字替换

ANALOG_INPUT

AI

用【数字0】代表

ANALOG_OUTPUT

AO

用【数字1】代表

ANALOG_VALUE

AV

用【数字2】代表

BINARY_INPUT

BI

用【数字3】代表

BINARY_OUTPUT

BO

用【数字4】代表

BINARY_VALUE

BV

用【数字5】代表

MULTI_STATE_INPUT

MSI

用【数字13】代表

MULTI_STATE_OUTPUT

MSO

用【数字14】代表

MULTI_STATE_VALUE

MSV

用【数字19】代表

【Instance】——BACnet寄存器地址

【Property Id】——BAC指定对象的属性ID

常用ID: 用数字【85】代表【PRESENT_VALUE

【其他对象的属性ID】:

数字代表

BAC指定对象的属性ID【含义】

0

【ACKED_TRANSITIONS】

1

【ACK_REQUIRED】

2

【ACTION】

3

【ACTION_TEXT】

4

【ACTIVE_TEXT】

5

【ACTIVE_VT_SESSIONS】

6

【ALARM_VALUE】

7

【ALARM_VALUES】

8

【ALL】

9

【ALL_WRITES_SUCCESSFUL】

10

【APU_SEGMENT_TIMEOUT】

……

……

85

【PRESENT_VALUE】

【Device】——代表访问的BACnet设备

【Client】——客户端,即自己

2-2、BACnet-Write节点介绍

type】——BACnet寄存器类型【同上】

【Instance】——BACnet寄存器地址【同上】

【App-Tag】写入数据类型

数字代表

写入数据类型

0

代表NULL

1

代表BOOLEAN

2

代表UNSIGNED_INTEGER

3

代表SIGNED_INTEGER

4

代表REAL

5

代表DOUBLE

6

代表OCTET_STRING

7

代表CHARACTER_STRING

8

代表BIT_STRING

9

代表ENUMERATED

10

代表DATE

11

代表TIME

【Value】写入数据值

【Property Id】——BAC指定对象的属性ID【同上】

【Priority】优先权等级,常用16

数字代表

优先权等级名称

1

manual-life-safety

2

automatic-life-safety

3

available-3

4

available-4

5

cnitical-equipment-control

6

minimum-on/off

7

available-7

8

manual-operator

9

available-9

10

available-10

11

available-11

12

available-12

13

available-13

14

external-value

15

algorithm-value

16

available-16

3、读写效果图

3-1、第一次读取效果

3-2、修改写入参数,并执行

执行写入

注意:修改节点的写入值,需要单击【部署】按钮,方可生效。

3-3、第二次读取效果

三、BACnet读写单个【动态数据实现】

效果图如下:

示例代码如下:

[{"id":"e796f1095da2016c","type":"group","z":"c0df05c4edaff7ac","style":{"stroke":"#bbbbbb","stroke-opacity":"1","fill":"#f3f3f3","fill-opacity":"0.5","label":true,"label-position":"nw","color":"#555555"},"nodes":["351ab70ba4608e64","ec34d15c93f39eea","652ef61d49d7a2d5","55edefcac90f2a25","54f36b55694a1008","850808d0198ed7f4","c4fd8db46d51c3a5","5addca8f66dc9104","66507a1fa997813b","6adbd8cdaa7c5d33","ac589a606b3acf4f"],"x":14,"y":179,"w":872,"h":262},{"id":"351ab70ba4608e64","type":"inject","z":"c0df05c4edaff7ac","g":"e796f1095da2016c","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"","payloadType":"date","x":110,"y":260,"wires":[["55edefcac90f2a25"]]},{"id":"ec34d15c93f39eea","type":"BACnet-Read","z":"c0df05c4edaff7ac","g":"e796f1095da2016c","name":"BACnet读 AV-1","objectType":"2","instance":"ef226397.1987f","propertyId":"85","device":"7adbdd83.bce224","server":"e0bf099a.ee8468","multipleRead":false,"x":460,"y":260,"wires":[["54f36b55694a1008"]]},{"id":"652ef61d49d7a2d5","type":"comment","z":"c0df05c4edaff7ac","g":"e796f1095da2016c","name":"通过传递配置数据,单个读写AnalogValue-1","info":"","x":210,"y":220,"wires":[]},{"id":"55edefcac90f2a25","type":"function","z":"c0df05c4edaff7ac","g":"e796f1095da2016c","name":"读取单个【AV-1】","func":"msg.payload = { requestArray: [] }nn//AV-1nmsg.payload.requestArray = [n    //AV--type=2n    {n        objectId: { type: 2, instance: 1 },//type代表寄存器类型,instance代表寄存器地址n        properties: [{ id: 85 }]n    }n    n]nnreturn msg;","outputs":1,"timeout":0,"noerr":0,"initialize":"","finalize":"","libs":[],"x":270,"y":260,"wires":[["ec34d15c93f39eea"]]},{"id":"54f36b55694a1008","type":"function","z":"c0df05c4edaff7ac","g":"e796f1095da2016c","name":"处理数据","func":"var array = msg.payload.values;nlet jsonObject = {};nn//1、判断是否有查询结果nif(array.length>0){            n    //定义namen    let newKey = "Setpoint1";//填写您的标识符,如:shidu,wendu……n    //定义valuen    let newValue = array[0].value;n    if (newValue+"".indexOf(".") != -1){ n        //为真,作用保留2位小数n        newValue = newValue.toFixed(2);n    }n    jsonObject[newKey] = newValue;n}nnmsg.payload = jsonObject;nnreturn msg;","outputs":1,"timeout":"","noerr":0,"initialize":"","finalize":"","libs":[],"x":620,"y":260,"wires":[["850808d0198ed7f4"]]},{"id":"850808d0198ed7f4","type":"debug","z":"c0df05c4edaff7ac","g":"e796f1095da2016c","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":770,"y":260,"wires":[]},{"id":"c4fd8db46d51c3a5","type":"inject","z":"c0df05c4edaff7ac","g":"e796f1095da2016c","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"11.11","payloadType":"num","x":110,"y":360,"wires":[["5addca8f66dc9104"]]},{"id":"5addca8f66dc9104","type":"function","z":"c0df05c4edaff7ac","g":"e796f1095da2016c","name":"函数处理","func":"//将上一个节点传递过来的payload值,push到节点的values中nlet values = {type:4,value:msg.payload}nmsg.payload = { propertyId:85,values:[]}nmsg.payload.values.push(values)nreturn msg;","outputs":1,"timeout":"","noerr":0,"initialize":"","finalize":"","libs":[],"x":280,"y":380,"wires":[["6adbd8cdaa7c5d33"]]},{"id":"66507a1fa997813b","type":"inject","z":"c0df05c4edaff7ac","g":"e796f1095da2016c","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"12.12","payloadType":"num","x":110,"y":400,"wires":[["5addca8f66dc9104"]]},{"id":"6adbd8cdaa7c5d33","type":"BACnet-Write","z":"c0df05c4edaff7ac","g":"e796f1095da2016c","name":"BACnet写 AV-1","objectType":"2","instance":"ef226397.1987f","valueTag":"4","valueValue":"","propertyId":"85","priority":"","device":"7adbdd83.bce224","server":"e0bf099a.ee8468","multipleWrite":false,"x":460,"y":380,"wires":[["ac589a606b3acf4f"]]},{"id":"ac589a606b3acf4f","type":"debug","z":"c0df05c4edaff7ac","g":"e796f1095da2016c","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":770,"y":380,"wires":[]},{"id":"ef226397.1987f","type":"BACnet-Instance","name":"SetPoint-1","instanceAddress":"1"},{"id":"7adbdd83.bce224","type":"BACnet-Device","name":"Windows VM","deviceAddress":"192.168.1.5"},{"id":"e0bf099a.ee8468","type":"BACnet-Client","name":"Client-47","adpuTimeout":"3000","port":"47808","interface":"192.168.1.47","broadcastAddress":"192.168.1.255"}]

四、BACnet读多个【通过数据传递实现】

效果图如下:

代码如下:

[{"id":"6a698d10f0260490","type":"group","z":"f217c08a9f80deb4","style":{"stroke":"#bbbbbb","stroke-opacity":"1","fill":"#f3f3f3","fill-opacity":"0.5","label":true,"label-position":"nw","color":"#555555"},"nodes":["f9637ba082d051f0","ca7dcc1fbb0777cd","7639ecced9ebb4d5","3c07ea56c14a9820","2b387417cc39df87","06171f3e81fb9933"],"x":54,"y":239,"w":812,"h":142},{"id":"f9637ba082d051f0","type":"function","z":"f217c08a9f80deb4","g":"6a698d10f0260490","name":"读取多个","func":"msg.payload = { requestArray: [] }n//AI-0n//AI-1n//AI-2n//AV-0n//AV-1nmsg.payload.requestArray = [n    //AI--type=0n    {n        objectId: { type: 0, instance: 0 },n        properties: [{ id: 85 }]n    },n    {n        objectId: { type: 0, instance: 1 },n        properties: [{ id: 85 }]n    },n    {n        objectId: { type: 0, instance: 2 },n        properties: [{ id: 85 }]n    },n    //AV--type=2n    {n        objectId: { type: 2, instance: 0 },n        properties: [{ id: 85 }]n    },n    {n        objectId: { type: 2, instance: 1 },n        properties: [{ id: 85 }]n    },n    {n        objectId: { type: 2, instance: 2 },n        properties: [{ id: 85 }]n    }n]nnreturn msg;","outputs":1,"timeout":0,"noerr":0,"initialize":"","finalize":"","libs":[],"x":280,"y":340,"wires":[["7639ecced9ebb4d5"]]},{"id":"ca7dcc1fbb0777cd","type":"comment","z":"f217c08a9f80deb4","g":"6a698d10f0260490","name":"读取多个对象","info":"","x":150,"y":280,"wires":[]},{"id":"7639ecced9ebb4d5","type":"BACnet-Read","z":"f217c08a9f80deb4","g":"6a698d10f0260490","name":"","objectType":"8","instance":"ef226397.1987f","propertyId":"85","device":"7adbdd83.bce224","server":"e0bf099a.ee8468","multipleRead":true,"x":440,"y":340,"wires":[["06171f3e81fb9933"]]},{"id":"3c07ea56c14a9820","type":"debug","z":"f217c08a9f80deb4","g":"6a698d10f0260490","name":"debug 3","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","statusVal":"","statusType":"auto","x":760,"y":340,"wires":[]},{"id":"2b387417cc39df87","type":"inject","z":"f217c08a9f80deb4","g":"6a698d10f0260490","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"","payloadType":"date","x":150,"y":340,"wires":[["f9637ba082d051f0"]]},{"id":"06171f3e81fb9933","type":"function","z":"f217c08a9f80deb4","g":"6a698d10f0260490","name":"处理数据","func":"var array = msg.payload.values;nlet jsonObject = {};nn// AI——type: 0t    【0,1,2】n// AV——type: 2t    【0,1, 2】nn//定义查询对象nvar selectDataArray = [n{ type: 0, instance: 0, name: "室内温度" },n{ type: 0, instance: 1, name: "水箱温度" },n{ type: 0, instance: 2, name: "室外温度" },nn{ type: 2, instance: 0, name: "设定值" },n{ type: 2, instance: 1, name: "设定值1" },n{ type: 2, instance: 2, name: "设定值2" }];nn//1、遍历查询出来的结果nfor(let i =0;i< array.length;i++){n    var obj = array[i];nn    //2、遍历所需查询对象n    for (let j = 0; j < selectDataArray.length; j++) {n        var json = selectDataArray[j];n        if (obj.objectId.type == json.type && obj.objectId.instance == json.instance) {n            //定义keyn            let newKey = json.name;n            //定义valuen            let newValue = obj.values[0].value[0].value;n            if (newValue+"".indexOf(".") != -1){ n                //为真n                newValue = newValue.toFixed(2);n            }n            jsonObject[newKey] = newValue;n        }n    }    n}nnmsg.payload = jsonObject;nnreturn msg;","outputs":1,"timeout":"","noerr":0,"initialize":"","finalize":"","libs":[],"x":600,"y":340,"wires":[["3c07ea56c14a9820"]]},{"id":"ef226397.1987f","type":"BACnet-Instance","name":"SetPoint-1","instanceAddress":"1"},{"id":"7adbdd83.bce224","type":"BACnet-Device","name":"Windows VM","deviceAddress":"192.168.1.5"},{"id":"e0bf099a.ee8468","type":"BACnet-Client","name":"Client-47","adpuTimeout":"3000","port":"47808","interface":"192.168.1.47","broadcastAddress":"192.168.1.255"}]
本文通过 YUQUE WORDPRESS 同步自语雀
云腾五洲-AI助理