powerManage.lua 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. module(...,package.seeall)
  2. require "pins"
  3. local BAT_ADC_ID,DC_ADC_ID = 2,3
  4. local function powerInterrupt( msg )
  5. -- body
  6. log.info("msg:", msg)
  7. if msg==cpu.INT_GPIO_NEGEDGE then
  8. log.info("gpio11 INT NEGEDGE msg")
  9. sys.publish("24V_POWER_DOWN")
  10. modbusTT.checkNetWorkHealth("power_24_off")
  11. else
  12. log.info("gpio11 INT POSGEDGE msg")
  13. end
  14. end
  15. local setGpio11Fnc = pins.setup(pio.P0_11, powerInterrupt )
  16. function closePDs( )
  17. -- body
  18. uart.close(1) --关闭串口1
  19. pins.setup(pio.P0_18, 1) --断电GPS
  20. pins.setup(pio.P0_13, 1) --断电485
  21. end
  22. local function setRestartClock( )
  23. -- body
  24. log.info("alarm test start")
  25. local t = os.date("*t")
  26. misc.setClock({year=t.year,month=t.month,day=t.day,hour=t.hour,min=t.min,sec=t.sec})
  27. sys.wait(2000)
  28. closePDs()
  29. local onTimet = os.date("*t",os.time() + 3600) --下次要开机的时间为1800秒后
  30. log.info("alarm restart time", 3600)
  31. rtos.set_alarm(1,onTimet.year,onTimet.month,onTimet.day,onTimet.hour,onTimet.min,onTimet.sec) --设定闹铃
  32. --如果要测试关机闹钟,打开下面这2行代码
  33. sys.wait(200000)
  34. rtos.poweroff()
  35. end
  36. local function powerTaskFnc( )
  37. -- body
  38. sys.wait(10000)
  39. if socket.isReady() then
  40. -- body
  41. local heartBeatData =modbusTT.getHeartbeatContent()
  42. sys.publish("LOCAL_PUB_MSG", json.encode({["topic"]="SHEGCL/IntelligenTool/Heart",["data"]=heartBeatData}))
  43. end
  44. power24Flag = setGpio11Fnc()
  45. log.info("当前24V电平:", power24Flag)
  46. if power24Flag == 0 then
  47. -- body
  48. setRestartClock()
  49. return
  50. end
  51. pins.setup(pio.P0_13, 0) --485上电
  52. sys.waitUntil("24V_POWER_DOWN")
  53. power24Flag = setGpio11Fnc()
  54. log.info("当前24V电平:", power24Flag)
  55. setRestartClock()
  56. end
  57. adc.open(BAT_ADC_ID)
  58. function adcTimer( )
  59. -- body
  60. local adcval, voltval = adc.read(BAT_ADC_ID)
  61. log.info("bat_power.read",adcval,voltval)
  62. end
  63. sys.timerLoopStart(adcTimer, 10000)
  64. sys.taskInit(powerTaskFnc)
  65. --[[
  66. 函数名:alarMsg
  67. 功能 :开机闹钟事件的处理函数
  68. 参数 :无
  69. 返回值:无
  70. ]]
  71. local function alarMsg()
  72. print("alarMsg---------------")
  73. end
  74. --如果是关机闹钟开机,则需要软件主动重启一次,才能启动GSM协议栈
  75. if rtos.poweron_reason()==rtos.POWERON_ALARM then
  76. sys.restart("ALARM")
  77. end
  78. --注册闹钟模块
  79. rtos.init_module(rtos.MOD_ALARM)
  80. --注册闹钟消息的处理函数(如果是开机闹钟,闹钟事件到来时会调用alarmsg)
  81. rtos.on(rtos.MSG_ALARM,alarMsg)