利用VTS与bacnet协议栈进行通信---ReadProperty
来源:互联网 发布:艺术字设计软件下载 编辑:程序博客网 时间:2024/04/30 08:24
@2013/5/13
1.VTS是使用bacnet服务的一款优秀软件,可以利用这个软件对bacnet设备进行访问
2.环境:
VTS(pc-1) ------ IP-Switch ------ Bacnet-Device(pc-2:Linux + bacnet-stack-0.8.0)
(二层交换机)
3.VTS向指定设备发送ReadProperty服务原语,bacnet-device运行bacserv这个程序进行回复:
(1).ReadProperty属于对象访问服务,有三个参数,对应于下面。现在我选择的是analog-input这个对象,property用于标识被访问对象中的访问属性,选择的是present-value这个参数,也就是读取当前值
(2).bacnet-device进行回复的时候可以看出,返回的值Real:3.14159,后面会有解释,为什么会是这个值
4.源代码分析:
目录:bacnet-stack/demo/server:main -> Init_Service_Handlers -> apdu_set_confirmed_handler(SERVICE_CONFIRMED_READ_PROPERTY,handler_read_property); /* 设置READ_PROPERTY这个服务的回调函数,也就是handler_read_property */ handler_read_property :/* 当接收到READ_PROPERTY这个服务原语时候,就会调用本函数 */ ->Device_Read_Property(BACNET_READ_PROPERTY_DATA * rpdata) ->Device_Objects_Find_Functions(rpdata->object_type) /* 根据object_type查找对应的处理函数,此处是OBJECT_ANALOG_INPUT = 0 */ ->根据这个全局变量Object_Table来查找处理函数 ->对于OBJECT_ANALOG_INPUT,有如下操作函数: {OBJECT_ANALOG_INPUT, Analog_Input_Init, Analog_Input_Count, Analog_Input_Index_To_Instance, Analog_Input_Valid_Instance, Analog_Input_Object_Name, Analog_Input_Read_Property, Analog_Input_Write_Property, Analog_Input_Property_Lists, NULL /* ReadRangeInfo */ , NULL /* Iterator */ , NULL /* Value_Lists */ , NULL /* COV */ , NULL /* COV Clear */ , Analog_Input_Intrinsic_Reporting} 而我们需要的就是Analog_Input_Read_Property这个函数: Analog_Input_Read_Property(BACNET_READ_PROPERTY_DATA * rpdata) ->switch ((int) rpdata->object_property) /* 根据object_property进行处理,此处PROP_PRESENT_VALUE = 85,从VTS发送的数据也可看 出:0x55 */ ->case PROP_PRESENT_VALUE: apdu_len = encode_application_real(&apdu[0], Analog_Input_Present_Value_Test(rpdata->object_instance)); break; ->Analog_Input_Present_Value_Test(rpdata->object_instance) /* 这个函数是我用来测试读取值的 */ /* 代码如下: */ /* 代码如下: */ float Analog_Input_Present_Value_Test(uint32_t object_instance){ float value = 0.0;unsigned int index;index = Analog_Input_Instance_To_Index(object_instance);if (index < MAX_ANALOG_INPUTS){ value = 3.14159;} return value;}
所以,我们完全可以将这个函数Analog_Input_Present_Value_Test替换为我们自己需要的处理函数,如读取当前温度传感器的值等,以满足要求
- 利用VTS与bacnet协议栈进行通信---ReadProperty
- 使用VTS分析bacnet协议的ReadProperty(一)
- 使用VTS分析bacnet协议的ReadProperty(二)
- 结合VTS和BACnet协议栈源码分析Write Property读属性
- Android 利用soap协议与服务端进行通信
- BACNET之VTS的配置过程
- BACnet协议
- BACnet协议栈分析之Makefile文件
- 分析bacnet协议栈源码 AtomicReadFile 服务
- 【BACnet】3.bacnet-stack-0.8.0工程与BACnet标准协议之间的代码关系(对象及应用服务)
- 【BACnet】4.bacnet-stack-0.8.0工程与BACnet标准协议之间的代码关系(网络层)
- 【Linux网络编程实例】实例二:利用TCP协议进行客户端与服务器通信
- BACnet 协议栈浅析(Java 版)之 BACnet 协议简介
- android利用websocket协议与服务器通信
- BACnet协议开发
- C#与java利用XML进行通信
- FLEX利用Socket与java进行通信
- 利用广播与Service之间进行通信
- AIX 命令vmstat、topas
- DES对称加密算法Java编程
- 两个大牛的研究方向(2)
- Oracle 10g数据库迁移的经验 Windows环境
- 真机调试Error launching remote program: failed to get the task for process xxx.
- 利用VTS与bacnet协议栈进行通信---ReadProperty
- windows-IOCP模型总结
- hdu 1059 优先级队列
- IBM实习生笔试题目(6)
- fiddler替换服务器上文件进行本地调试
- 透彻理解异常并合理使用异常
- liux文件的每行末尾^M$ 和$
- H264 video RTP payload and SDP
- C++ 虚函数表解析