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