• APP示例

    APP示例

    下面代码提供一个简易的应用示例。展示:

    • 基本的应用框架
    • 创建一个设备
      • 包含一个输入项
    • 使用随机数作为数据值
    • 输出报文

    代码

    1. local class = require 'middleclass'
    2. --- 注册对象(请尽量使用唯一的标识字符串)
    3. local app = class("YOUR_APP_NAME_App")
    4. --- 设定应用最小运行接口版本(目前版本为1,为了以后的接口兼容性)
    5. app.API_VER = 1
    6. ---
    7. -- 应用对象初始化函数
    8. -- @param name: 应用本地安装名称。 modbus_com_1
    9. -- @param sys: 系统sys接口对象。参考API文档中的sys接口说明
    10. -- @param conf: 应用配置参数。由安装配置中的json数据转换出来的数据对象
    11. function app:initialize(name, sys, conf)
    12. self._name = name
    13. self._sys = sys
    14. self._conf = conf
    15. --- 获取数据接口
    16. self._api = self._sys:data_api()
    17. --- 获取日志接口
    18. self._log = sys:logger()
    19. --- 设备实例
    20. self._devs = {}
    21. self._log:debug("XXXX Application initlized")
    22. end
    23. --- 应用启动函数
    24. function app:start()
    25. self._api:set_handler({
    26. --[[
    27. --- 处理设备输入项数值变更消息,当需要监控其他设备时才需要此接口,并在set_handler函数传入监控标识
    28. on_input = function(app, sn, input, prop, value, timestamp, quality)
    29. end,
    30. ]]
    31. on_output = function(app, sn, output, prop, value)
    32. end,
    33. on_command = function(app, sn, command, param)
    34. end,
    35. on_ctrl = function(app, command, param, ...)
    36. end,
    37. })
    38. --- 生成设备唯一序列号
    39. local sys_id = self._sys:id()
    40. local sn = sys_id.."."..self._sys:gen_sn('example_device_serial_number')
    41. --- 增加设备实例
    42. local inputs = {
    43. {name="tag1", desc="tag1 desc"}
    44. }
    45. local meta = self._api:default_meta()
    46. meta.name = "Example Device"
    47. meta.description = "Example Device Meta"
    48. local dev = self._api:add_device(sn, meta, inputs)
    49. self._devs[#self._devs + 1] = dev
    50. return true
    51. end
    52. --- 应用退出函数
    53. function app:close(reason)
    54. --print(self._name, reason)
    55. end
    56. --- 应用运行入口
    57. function app:run(tms)
    58. for _, dev in ipairs(self._devs) do
    59. dev:dump_comm("IN", "XXXXXXXXXXXX")
    60. dev:set_input_prop('tag1', "value", math.random())
    61. end
    62. return 10000 --下一采集周期为10
    63. end
    64. --- 返回应用对象
    65. return app