powerManage.lua 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  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. 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. local restartInterval = nvm.get("restartInterval") or 86400
  24. -- body
  25. log.info("alarm test start")
  26. local t = os.date("*t")
  27. misc.setClock({year=t.year,month=t.month,day=t.day,hour=t.hour,min=t.min,sec=t.sec})
  28. sys.wait(2000)
  29. closePDs()
  30. local onTimet = os.date("*t",os.time() + restartInterval) --下次要开机的时间为1800秒后
  31. log.info("alarm restart time", restartInterval)
  32. rtos.set_alarm(1,onTimet.year,onTimet.month,onTimet.day,onTimet.hour,onTimet.min,onTimet.sec) --设定闹铃
  33. --如果要测试关机闹钟,打开下面这2行代码
  34. sys.wait(200000)
  35. rtos.poweroff()
  36. end
  37. local function powerTaskFnc( )
  38. -- body
  39. sys.wait(10000)
  40. power24Flag = setGpio11Fnc()
  41. log.info("当前24V电平:", power24Flag)
  42. if power24Flag == 0 then
  43. -- body
  44. setRestartClock()
  45. return
  46. end
  47. pins.setup(pio.P0_13, 0) --485上电
  48. sys.waitUntil("24V_POWER_DOWN")
  49. power24Flag = setGpio11Fnc()
  50. log.info("当前24V电平:", power24Flag)
  51. setRestartClock()
  52. end
  53. adc.open(BAT_ADC_ID)
  54. function adcTimer( )
  55. -- body
  56. local adcval, voltval = adc.read(BAT_ADC_ID)
  57. log.info("bat_power.read",adcval,voltval)
  58. end
  59. sys.timerLoopStart(adcTimer, 10000)
  60. sys.taskInit(powerTaskFnc)
  61. --[[
  62. 函数名:alarMsg
  63. 功能 :开机闹钟事件的处理函数
  64. 参数 :无
  65. 返回值:无
  66. ]]
  67. local function alarMsg()
  68. print("alarMsg---------------")
  69. end
  70. --如果是关机闹钟开机,则需要软件主动重启一次,才能启动GSM协议栈
  71. if rtos.poweron_reason()==rtos.POWERON_ALARM then
  72. sys.restart("ALARM")
  73. end
  74. --注册闹钟模块
  75. rtos.init_module(rtos.MOD_ALARM)
  76. --注册闹钟消息的处理函数(如果是开机闹钟,闹钟事件到来时会调用alarmsg)
  77. rtos.on(rtos.MSG_ALARM,alarMsg)