haikang.lua 8.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297
  1. --- 模块功能 测报逻辑控制
  2. -- @module
  3. -- @author lcg
  4. -- @license MIT
  5. -- @copyright yf
  6. -- @release 2019.07.18
  7. require 'ril'
  8. require "misc"
  9. require "ykm_rtu"
  10. -- require "haikang"
  11. -- require "audio"
  12. module(..., package.seeall)
  13. -- 0--关闭
  14. -- 1--1.8V
  15. -- 2--1.9V
  16. -- 3--2.0V
  17. -- 4--2.6V
  18. -- 5--2.8V
  19. -- 6--3.0V
  20. -- 7--3.3V
  21. -- 电压域与控制的GPIO的对应关系如下:
  22. -- pmd.LDO_VMMC:GPIO8、GPIO9、GPIO10、GPIO11、GPIO12、GPIO13
  23. -- pmd.LDO_VLCD:GPIO14、GPIO15、GPIO16、GPIO17、GPIO18
  24. -- pmd.LDO_VCAM:GPIO19、GPIO20、GPIO21、GPIO22、GPIO23、GPIO24
  25. pmd.ldoset(7,pmd.LDO_VMMC)
  26. pmd.ldoset(7,pmd.LDO_VLCD)
  27. pmd.ldoset(7,pmd.LDO_VCAM)
  28. motor_en = pins.setup(pio.P0_8,0)
  29. -- dir:far or near:以载玻片为参考点;载玻片在步进电机端;
  30. -- 注:motor_dir(1) -- 1:near; 0:far
  31. motor_dir = pins.setup(pio.P0_11,0)
  32. motor_mv = pins.setup(pio.P0_12,0)
  33. -- 电机上下限位;
  34. limit_up = pins.setup(pio.P0_2)
  35. limit_down = pins.setup(pio.P0_3)
  36. light_led = pins.setup(pio.P0_31,0)
  37. hk_alarm_in = pins.setup(pio.P0_30,0)
  38. -- 蓝色led:做拍照指示:
  39. led = pins.setup(pio.P0_10,0)
  40. -- 海康相机拍照:
  41. function hk_takephoto()
  42. led(1)
  43. sys.wait(2000)
  44. ykm_rtu.takephoto()
  45. log.warn("hk_takephoto is running...")
  46. sys.wait(1100)
  47. led(0)
  48. end
  49. -- 步进电机方向运行标志位:
  50. up_step_flag = 0
  51. down_step_flag = 0
  52. -- 步进电机,停止命令标志位:
  53. stop_step = 0
  54. -- 步进电机复位,到最顶端:
  55. function motor_reset()
  56. log.warn("~~~~~~~~~~motor_reset")
  57. -- 电机向上运行;直到达到上限位;
  58. motor_en(1)
  59. motor_dir(0)
  60. if up_step_flag == 1 then
  61. log.error("warn:step motor is stepping to up!!!")
  62. return
  63. end
  64. if down_step_flag == 1 then
  65. log.error("error:stepping to down will stop!!!")
  66. stop_step = 1
  67. end
  68. up_step_flag = 1
  69. while limit_up() == 1 do
  70. -- log.warn("limit_up",limit_up())
  71. motor_mv(1)
  72. sys.wait(1)
  73. motor_mv(0)
  74. sys.wait(1)
  75. if stop_step == 1 then
  76. stop_step = 0
  77. log.error("attention:step up breaking!!!")
  78. -- hmi.write("sysTest.switchUp.val=0")
  79. break
  80. end
  81. end
  82. up_step_flag = 0
  83. log.error("up_step_flag = 0!!!")
  84. -- hmi.write("sysTest.switchUp.val=0")
  85. -- 后期评估是否要脱机;
  86. motor_en(0)
  87. end
  88. -- 步进电机向下运动到下限位:
  89. function motor_down()
  90. log.warn("~~~~~~~~~~motor_down")
  91. -- 电机向下运行;直到达到上限位;
  92. motor_en(1)
  93. motor_dir(1)
  94. if down_step_flag == 1 then
  95. log.error("warn:step motor is stepping to down!!!")
  96. return
  97. end
  98. if up_step_flag == 1 then
  99. log.error("error:stepping to up will stop!!!")
  100. stop_step = 1
  101. end
  102. down_step_flag = 1
  103. while limit_down() == 1 do
  104. -- log.warn("limit_down",limit_down())
  105. motor_mv(1)
  106. sys.wait(1)
  107. motor_mv(0)
  108. sys.wait(1)
  109. if stop_step == 1 then
  110. stop_step = 0
  111. log.error("attention:step down breaking!!!")
  112. -- hmi.write("sysTest.switchDown.val=0")
  113. break
  114. end
  115. end
  116. down_step_flag = 0
  117. log.error("down_step_flag = 0!!!")
  118. -- hmi.write("sysTest.switchDown.val=0")
  119. -- 后期评估是否要脱机;
  120. motor_en(0)
  121. end
  122. -- 步进电机对焦拍照:
  123. -- 流程:先向下运行到下限位;然后倒序向上逐渐拍照;
  124. photo_num,step = 0, 0
  125. photo_flag = 0
  126. function autotakepic()
  127. -- photo_flag = 0
  128. log.warn("testAutopic is running!!!")
  129. light_led(1)--打开补光灯
  130. -- 注意,如果此时电机已经在最下端,则需要延时一下补光灯,来让相机对焦;
  131. sys.wait(5000)
  132. -- 电机向下运动:
  133. motor_down()
  134. log.warn("motor_down is ok!!!")
  135. ykm_rtu.takephoto()
  136. -- 到最低端,3s后开始向上拍照;
  137. sys.wait(5000)
  138. motor_en(1)
  139. motor_dir(0)
  140. haikang.step = 0
  141. haikang.photo_num = 0
  142. while limit_up() == 1 do
  143. step = step + 1
  144. motor_mv(1)
  145. sys.wait(1)
  146. motor_mv(0)
  147. sys.wait(1)
  148. -- 拍照的脉冲间隔;
  149. -- if step >= 1000 then
  150. -- photo_num = photo_num + 1
  151. -- sys.wait(1500)
  152. -- log.warn("=========================take pic!!!")
  153. -- hk_takephoto()
  154. -- step = 0
  155. -- end
  156. end
  157. step = 0
  158. ykm_rtu.takephoto()
  159. log.error("photo_num is:",photo_num)
  160. log.error("step num is:",step)
  161. light_led(0)--关闭补光灯
  162. -- photo_flag = 1
  163. end
  164. function autotakepic2()
  165. local photo_step
  166. photo_flag = 0
  167. log.warn("testAutopic2 is running!!!")
  168. light_led(1)--打开补光灯
  169. -- 注意,如果此时电机已经在最下端,则需要延时一下补光灯,来让相机对焦;
  170. sys.wait(5000)
  171. -- 电机向下运动:
  172. motor_down()
  173. log.warn("motor_down is ok!!!")
  174. ykm_rtu.takephoto()
  175. -- 到最低端,3s后开始向上拍照;
  176. sys.wait(5000)
  177. motor_en(1)
  178. motor_dir(0)
  179. haikang.step = 0
  180. haikang.photo_num = 0
  181. photo_step = nvm.get("photo_step") or 50
  182. log.warn("+++++++++++++++++++++++++++photo_step:",photo_step)
  183. while limit_up() == 1 do
  184. step = step + 1
  185. motor_mv(1)
  186. sys.wait(1)
  187. motor_mv(0)
  188. sys.wait(1)
  189. -- 拍照的脉冲间隔;
  190. -- if step >= 5 then
  191. if step%photo_step == 0 then
  192. -- sys.wait(1000)
  193. photo_num = photo_num + 1
  194. sys.wait(2000)
  195. log.warn("=========================take pic!!!")
  196. ykm_rtu.takephoto()
  197. end
  198. end
  199. log.error("photo_num is:",photo_num)
  200. log.error("step num is:",step)
  201. light_led(0)--关闭补光灯
  202. sys.wait(10000)
  203. photo_flag = 1
  204. haikang.http_chose_photo_task()
  205. end
  206. function test_takephoto()
  207. log.warn("test_takephoto is running...")
  208. audio.play('/ldata/takephoto.mp3')
  209. light_led(1)--打开补光灯
  210. sys.wait(10*1000)
  211. ykm_rtu.takephoto()
  212. light_led(0)--关闭补光灯
  213. sys.wait(10000)
  214. -- photo_flag = 1
  215. haikang.http_chose_photo_task()
  216. end
  217. function http_chose_photo()
  218. -- http触发计算清晰度;
  219. -- local url = "http://yfzhwlw.com/test"
  220. -- local url = "http://yfznscd.com/bzy_mqtt_photo"
  221. -- local url = "http://yfznscd.com/spore_count"
  222. local url = "http://120.27.222.26/bzy_mqtt_photo"
  223. -- local url = "http://39.104.94.153/bzy_mqtt_photo"
  224. local param = {
  225. imei="",
  226. step = 0,
  227. photo_num = 0
  228. }
  229. while not socket.isReady() do sys.wait(2000) end
  230. param.imei = misc.getimei()-- 唯一ID
  231. param.step = haikang.step
  232. param.photo_num = haikang.photo_num
  233. log.error("#################### type param is:",type(param))
  234. local code, head, body = http.request("POST", url, 10000,nil,param)
  235. -- local code, head, body = http.request("POST", url, 60000,nil,param)
  236. log.error("#################### http code is:",code)
  237. log.error("#################### http body is:",body)
  238. return code
  239. end
  240. function http_chose_photo_task()
  241. sys.taskInit(function ()
  242. -- 重试次数
  243. local RETRY = 3
  244. local cnt = 1
  245. for cnt = 1, RETRY do
  246. local res = haikang.http_chose_photo()
  247. log.error("---------http_chose_photo:",type(res),res)
  248. if res == "200" then
  249. log.warn("haikang.http_chose_photo res 200!")
  250. audio.play('/ldata/alarm.mp3')
  251. -- haikang.step = 0
  252. -- haikang.photo_num = 0
  253. break
  254. else
  255. log.error("haikang.http_chose_photo res:",res)
  256. sys.wait(3000)
  257. end
  258. end
  259. -- haikang.step = 0
  260. -- haikang.photo_num = 0
  261. end)
  262. end