0

有人可以告诉我如何在 Bacmove 中使用 JSInterface.readDeviceObjectProperty 吗?他们的文档毫无用处。我的代码:

function main() {

    var OBJECTS_TYPES = {
        ANALOG_INPUT: 0, 
        ANALOG_OUTPUT: 1, 
        ANALOG_VALUE: 2, 
        BINARY_INPUT: 3, 
        BINARY_OUTPUT: 4, 
        BINARY_VALUE: 5, 
        MULTI_STATE_INPUT: 13, 
        MULTI_STATE_OUTPUT: 14, 
        MULTI_STATE_VALUE: 19
    };

    var PROPERTY_IDENTIFIERS = {
        PRESENT_VALUE: 85
    };


    var DeviceID = 200;

    document.getElementById("tt").innerHTML = String(JSInterface.readDeviceObjectProperty(DeviceID, OBJECTS_TYPES.BINARY_OUTPUT, 2, PROPERTY_IDENTIFIERS.PRESENT_VALUE, -1));

}

我用 HTML 中的按钮调用这个函数。

<a href="#" class="ui-btn ui-btn-inline" onclick="main()" >TEST1</a>
<p id = "tt">NOPE</p>

段落更改为未定义。

4

1 回答 1

0

从文档中不明显的是 BACnet 请求是异步的,一旦发出请求,JavaScript 代码就会从不同的回调中接收设备的响应。

在您的情况下,需要在readDeviceObjectPropertyAck回调中修改 innerHTML。

也不要忘记事先阅读您需要发送一个 Who-Is

JSInterface.whoIs();

并且您可能想要验证您的 deviceId 是否位于:

JSInterface.updateDevice = function(deviceID, deviceName, segmentation, vendorID, modelName) 
{

};

查看修改后的代码:

JavaScript:

var OBJECTS_TYPES = {
    ANALOG_INPUT: 0, 
    ANALOG_OUTPUT: 1, 
    ANALOG_VALUE: 2, 
    BINARY_INPUT: 3, 
    BINARY_OUTPUT: 4, 
    BINARY_VALUE: 5, 
    MULTI_STATE_INPUT: 13, 
    MULTI_STATE_OUTPUT: 14, 
    MULTI_STATE_VALUE: 19
};

var PROPERTY_IDENTIFIERS = {
    PRESENT_VALUE: 85
};

var DeviceID = 200;

function readTest1() 
{ 
    JSInterface.readDeviceObjectProperty(DeviceID, 
                                            OBJECTS_TYPES.BINARY_OUTPUT, 
                                            2, 
                                            PROPERTY_IDENTIFIERS.PRESENT_VALUE, 
                                            -1));
}

JSInterface.readDeviceObjectPropertyAck = function(deviceID, 
                                                    objectType, 
                                                    objectInstance, 
                                                    propertyIdentifier, 
                                                    arrayIndex, 
                                                    value)
{
    if ((deviceID == DeviceID) && 
        (objectType == OBJECTS_TYPES.BINARY_OUTPUT) && 
        (objectInstance == 2) && 
        (propertyIdentifier == PROPERTY_IDENTIFIERS.PRESENT_VALUE))
    {
        document.getElementById("tt").innerHTML = ("" + value);
    }
}

HTML:

<a href="#" class="ui-btn ui-btn-inline" onclick="readTest1()" >TEST1</a>
<p id = "tt">NOPE</p>
于 2017-05-22T20:09:36.957 回答