main.c 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487
  1. /* MAIN.C file
  2. *
  3. * stm32-project
  4. */
  5. /******************************
  6. 修改记录:
  7. 1、
  8. 修改人:鲍胜文
  9. 修改日期:2017年3月18日
  10. 修改内容:增加输入总量报警功能
  11. 2、
  12. 修改人:鲍胜文
  13. 修改日期:2017年3月22日
  14. 修改内容:1)修改显示界面中的极限量由1~200为1~90
  15. 2)修改在工程模式下的自控流速由0~400调整为0~100
  16. 3、
  17. 修改人:鲍胜文
  18. 修改日期:2017年3月23日
  19. 修改内容:1)修改压力采集突然出现数字偏大的问题
  20. 4、
  21. 修改人:鲍胜文
  22. 修改日期:2017年3月24日
  23. 修改内容:1)修改预报警后无声音报警,只有光标闪烁
  24. 5、
  25. 修改人:鲍胜文
  26. 修改日期:2017年4月10日
  27. 修改内容:1)修改报警时,按按键蜂鸣器长鸣
  28. 2)修改自控时报警,按暂停键暂停,再启动乱码问题,现在直接进入主运行界面
  29. 6、
  30. 修改人:鲍胜文
  31. 修改日期:2017年4月11日
  32. 修改内容:1)修改泵头在进行自控运行时,如果此时出现扣合、堵塞、气泡报警,在对报警
  33. 进行出理时出现乱码,随后再次运行,自控按键失灵的问题
  34. 7、
  35. 修改人:鲍胜文
  36. 修改日期:2017年4月15日
  37. 修改内容:1)修改首次量不计入极限量计算
  38. 2)修改在运行过程中,进行参数设置后,再次运行,已输入量清零的问题
  39. 8、
  40. 修改人:鲍胜文
  41. 修改日期:2017年4月17日
  42. 修改内容:1)修改电池预报警,响一声,之后只光标闪烁
  43. 9、
  44. 修改人:鲍胜文
  45. 修改日期:2017年4月18日
  46. 修改内容:1)修改在输入量不为零,输入完毕报警不记忆
  47. 2)修改首次量、追加完成后,输入完毕报警不记忆
  48. 10、
  49. 修改人:鲍胜文
  50. 修改日期:2017年5月2日
  51. 修改内容:1)修改剩余量在上位机显示负数的问题
  52. 11、
  53. 修改人:鲍胜文
  54. 修改日期:2017年5月3日
  55. 修改内容:1)修改自控手柄按键按一下会出现无效自控次数变多次
  56. 12、
  57. 修改人:鲍胜文
  58. 修改日期:2017年5月6日
  59. 修改内容:1)修改堵塞报警算法,以前是连续采集五次数据大于设定值,报警,
  60. 现在改为采集十次压力值,去掉一个最大值和最小值,取平均值,大于设定值报警,下次采集的最新值,替代最早的采集值。
  61. 13、
  62. 修改人:鲍胜文
  63. 修改日期:2017年5月19日
  64. 修改内容:1)修改预报警后,按键没有声音
  65. 2)修改当电池电压大于4.5V时,系统判断为是异常值,不停的在采集电压,导致霍尔一直有电,指示灯常亮,功耗增加,现在改为4.9
  66. 14、
  67. 修改人:鲍胜文
  68. 修改日期:2017年6月20日
  69. 修改内容:1)堵塞报警自适应程序,从按下启动按键后,连续采集五次压力数据,去掉最大值,去剩下四组数据的最大值做为堵塞压力基准值,在
  70. 此值基础上加3,做为堵塞报警的参考值
  71. 15、
  72. 修改人:鲍胜文
  73. 修改日期:2017年7月18日
  74. 修改内容:1)修改部分ADS1110出现的压力值不变的问题,是由于在没有压力的时候,芯片采集的数据很大,被舍弃掉后,采集次数为0,无法更新数据
  75. 16、
  76. 修改人:鲍胜文
  77. 修改日期:2017年8月4日
  78. 修改内容:1)修改电源按键长按,出现机械故障的问题
  79. 2)修改输入总量报警,偶尔出现误报的问题
  80. 17、
  81. 修改人:鲍胜文
  82. 修改日期:2017年8月5日
  83. 修改内容:1)修改在出现报警前,按静音/密码键,出现死机的问题
  84. 18、
  85. 修改人:鲍胜文
  86. 修改日期:2017年8月8日
  87. 修改内容:1)修改压力采集次数不稳、偏低的问题,目前通过对界面进行优化,提高采集次数
  88. 19、
  89. 修改人:鲍胜文
  90. 修改日期:2017年8月14日
  91. 修改内容:1)修改时间显示,秒显示没有变化
  92. 20、
  93. 修改人:冯伟旗
  94. 修改日期:2018年1月31日
  95. 修改内容:1)修改电池值刷新和电池图标刷新显示
  96. 20、
  97. 修改人:鲍胜文
  98. 修改日期:2018年3月23日
  99. 修改内容:1)针对模块深度睡眠对丢包率有影响,优化lorawan模块深度睡眠的模式。
  100. 21、
  101. 修改人:鲍胜文
  102. 修改日期:2018年4月12日
  103. 修改内容:
  104. 修改进入睡眠模式的方式,目前有两种情况可以进入睡眠模式:
  105. 1)数据发送后,判断lorawan模块是否发送完成,完成就进入睡眠模式,
  106. 2)收不到完成标志,为降低功耗,用定时的方式,发送完数据后,最多延时5s进入睡眠模式
  107. 22、
  108. 修改人:鲍胜文
  109. 修改日期:2018年7月23日
  110. 修改内容:
  111. 1)把“科技创新”修改为“应用创新”
  112. 2)当低电量预报警时,电池电压在预报警临界值时,在电机运行或者数据发送时,电池电量在临界值忽高忽低,导致预报警数据一直在发送
  113. 23、
  114. 修改人:鲍胜文
  115. 修改日期:2018年8月06日
  116. 修改内容:
  117. 1)目前数据包长度为64字节,需要拆分为两个数据包,一个在运行时发送,一个在异常或者修改参数时发送
  118. 2)一个数据包长度为:32字节,一个为15字节
  119. 24、
  120. 修改人:鲍胜文
  121. 修改日期:2018年9月05日
  122. 修改内容:
  123. 1)为增加数据发送的有效性,增加泵头和上位机的握手协议
  124. 25、
  125. 修改人:鲍胜文
  126. 修改日期:2018年12月25日
  127. 修改内容:
  128. 1)修改泵头和上位机的握手协议,有原来的泵号转变为住院号
  129. 26、
  130. 修改人:王利阳
  131. 修改日期:2019年01月
  132. 修改内容:
  133. )增加关机住院号清零函数
  134. )镇痛不足报警触发方式优化
  135. )取消镇痛评分
  136. )泵头历史记录修改100条改5条
  137. )万能密码120,并修改不可设置密码
  138. 修改日期:2019年02月
  139. )开机宣传标语修改
  140. )历史记录翻转时间3s改5s
  141. 25、
  142. 修改人:鲍胜文
  143. 修改日期:2019年2月15日
  144. 修改内容:
  145. 1)修改去掉副芯片、在主芯片上增加副芯片的控制功能
  146. 26、
  147. 修改人:鲍胜文
  148. 修改日期:2019年2月25日
  149. 修改内容:
  150. 1)去掉外挂FLASH芯片,使用芯片内部flash
  151. 27、
  152. 修改人:鲍胜文
  153. 修改日期:2019年3月04日
  154. 修改内容:
  155. 1)优化报警声音、按键声音
  156. 2)修改报警声音,按照注册标准,声音变为滴滴滴三声,声音维持时间为200ms,第一声和第二声间隔为100ms,第二声和第三声间隔为200ms,脉冲群时间间隔为10s
  157. 3)背景光频率为0.4HZ,占空比为20%(亮0.5s,灭2秒)
  158. 4)修改报警声音,有原来的嘀嘀两声变为滴滴滴三声
  159. 5)修改静音按键,原来静音后,无法再回复,现在改为按下静音按键,2分钟后自动回复为非静音状态
  160. 6) 静音按键不在控制背光
  161. 28、
  162. 修改人:鲍胜文
  163. 修改日期:2019年3月08日
  164. 修改内容:
  165. 1)修改静音按键长按的时候,静音图标不显示,并且2min计时到后,静音功能不解除
  166. 2) 修改报警时,按静音按键,出现长鸣的情况
  167. 3)修改在静音2min内再次按压静音,静音2min重新计时问题
  168. 28、
  169. 修改人:鲍胜文
  170. 修改日期:2019年3月13日
  171. 修改内容:
  172. 1)修改输入总量报警时,屏幕一直闪烁,界面一直刷新问题
  173. 2)修改自控界面持续输注界面暂停图标自动上锁会一直闪烁,手动上锁暂停图标不闪烁
  174. 3)修改PCA按压时,连续两次按压时,出现无效次数瞬间增加到很大的问题,
  175. 29、
  176. 修改人:鲍胜文
  177. 修改日期:2019年3月16日
  178. 修改内容:
  179. 1)处理在关机过程中,预报警电池图标闪烁问题
  180. 2)处理在关机过程中,偶尔有按键有效
  181. 30、
  182. 修改人:鲍胜文
  183. 修改日期:2019年4月3日
  184. 修改内容:
  185. 1)添加LED指示灯功能
  186. 31、
  187. 修改人:鲍胜文
  188. 修改日期:2019年4月10日
  189. 修改内容:
  190. 1)增加红外气泡检测功能
  191. 32、
  192. 修改人:鲍胜文
  193. 修改日期:2019年4月22日
  194. 修改内容:
  195. 1)增加电机运行过程中,电流检测
  196. 33、
  197. 修改人:鲍胜文
  198. 修改日期:2019年4月29日
  199. 修改内容:
  200. 1)优化系统功耗,目前待机电流在12ms左右
  201. 2)修改电压检测机制,有原来ADC1连续的DMA采集方式,改为ADC2不连续采集,
  202. 34、
  203. 修改人:鲍胜文
  204. 修改日期:2019年5月6日
  205. 修改内容:
  206. 1)取消泵头时钟芯片功能
  207. 2)修改电池预报警电压值
  208. 3)制定预报警到电量耗尽报警的时间间隔,暂定40分钟
  209. 34、
  210. 修改人:鲍胜文
  211. 修改日期:2019年5月28日
  212. 修改内容:
  213. 1)增加气泡传感器的未装药盒报警功能:当红外气泡传感器采集的数据大于1300、小于1650时i,报未装药盒报警
  214. 2)增加电流检测堵塞报警功能:1>当采集电流大于1500,连续三次,直接报堵塞报警
  215. 2>当按下运行按键,前三个周期采集的电流值,去电一个最大值,去掉一个最小值,取中间值为
  216. 基准值,后面采集的数值和基准值做比较,当连续两个数值都大于基准值150时,报堵塞报警
  217. 3>增加电机失控检测机制,在WORK_OFF状态下,通过检测电机内部电流判断电机失控
  218. 35、
  219. 修改人:鲍胜文
  220. 修改日期:2019年6月20日
  221. 1)在原有的AD检测电流失控方式上,增加双路控制电机
  222. 2)数据存储有原来的0.1ml存储一次,改为1ml存储一下
  223. 3)修改电池预报警声音,有原来的循环声音报警改为只响一次
  224. 36、
  225. 修改人:王利阳
  226. 修改日期:2019.08.15
  227. 1)增加堵塞报警后手动解除,回到运行前界面
  228. 2)增加检测电池电量小于3.3v,三次后之间报警,且电量耗尽不能解除
  229. 修改日期:2020.01.09
  230. 1)限制排气量在100ml范围内
  231. 37、修改人:王利阳
  232. 修改日期:2021.01.14
  233. 1)历史记录做100条假数据,真实数据10条,第一条位最新数据,“+”按键一次类推
  234. 2)住院号修改为进入住院号设置界面即可
  235. 3)开始暂停键具有返回的功能,静音按键有返回功能
  236. 4)Enter按键具有长按快速跳转功能
  237. 38、修改人:王利阳
  238. 修改日期:2021.02.22
  239. 1)PCA运行状态下,发生报警,手动或自动解除返回到PCA界面
  240. 2)PCA锁时在报警、暂停界面下都能运行
  241. 39、修改人:王利阳
  242. 修改日期:2021.03.10
  243. 1)输注量50ml/h时,30s发送一次数据
  244. 2)设置界面电量耗尽报警半小时后喇叭不响
  245. 3)报警时屏幕背光闪三次后结束
  246. 4)低电压预报警打断其他报警声音
  247. 40、修改人:王利阳
  248. 修改日期:2021.03.23
  249. 1)取消电池预报警LED灯光闪烁
  250. 41、修改人:王利阳
  251. 修改日期:2021.03.26
  252. 1)PCA有效次数无效次数,PCA锁时闪烁,上锁、暂停、呼叫标志单独刷新,不跟随系统
  253. 42、修改人:吴连威
  254. 修改日期:2022.06.24
  255. 1)添加MQTT通信功能
  256. 2)添加MQTT注册功能
  257. ********************************/
  258. /*-------------------------------------------------------------------------------------------------------
  259. * System Start Here..
  260. -------------------------------------------------------------------------------------------------------*/
  261. #include "stm32f10x_rcc.h"
  262. #include "stm32f10x_gpio.h"
  263. #include "TypeDefine.h"
  264. #include "Driver.h"
  265. #include "TimerSetup.h"
  266. #include "ADS1110Setup.h"
  267. #include "ADS1110ASetup.h"
  268. #include "ADCSetup.h"
  269. #include "RTCSetup.h"
  270. #include "History.h"
  271. #include "ControlSystem.h"
  272. #include "DrawLCDGUI.h"
  273. #include "SystemAlarm.h"
  274. #include "ZigbeeDataHandle.h"
  275. #include "HostSlaveHandle.h"
  276. #include "FM31256.h"
  277. #include "lorawan.h"
  278. #include "Bubble_ADCSetup.h"
  279. #include "delay.h"
  280. #include "TypeDefine.h"
  281. #include "regist.h" // add by wulianwei
  282. #include "remote.h" // add by wulianwei
  283. #include "ProgramData.h" // add by wulianwei
  284. #include "module_wrapper.h" // add by wulianwei
  285. #include "CoapHandle.h" // add by wulianwei
  286. extern uint8_t time_1sflag;
  287. extern uint8_t time_3sflag;
  288. uint8_t test_buf[50] = {0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,
  289. 0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f};
  290. extern uint8_t lorawan_init_flag;//lorawan初始化完成标志
  291. extern uint8_t self_check_finish; //自检完成标志
  292. /*********************************************************************************
  293. * Function: main
  294. * Object: 系统主函数
  295. * 输入: 无
  296. * 输出: 无
  297. * 备注: 1、对底层初始化HWSetup();
  298. * 2、对系统初始化SystemSWInit();
  299. * 3、控制系统初始化工作CntlSysInitWork();
  300. * 4、按键工作控制ScanKeyWorkType();
  301. * 5、系统工作步骤控制CntlSystemWorkStep();
  302. * 6、传感器电源控制CntlSensorPWWork();
  303. * 7、LCD显示刷新LCDPictureDisplay();
  304. * 8、系统报警判断SystemAlarmJudge();
  305. * 9、系统时间更新SystemTimeUpdate();
  306. * 10、系统休眠控制CntlSystemStandby();
  307. * 11、zigbee数据发送ZigbeeXmitHandle();
  308. * 12、zigbee数据接收处理ZigbeeRecvHandle();
  309. * 13、主从通信处理HostToSlaveHandle();
  310. * 14、蜂鸣器工作控制CntlSpeakerWork();
  311. * 15、自动关机控制CntlAutoPowerOff();
  312. * 16、背光工作控制CntlLCDBlackWork();
  313. * 17、系统按顺序执行函数,每个函数中都会有相应的标志位,
  314. * 如果有标志位置位则进行相应函数操作,否则直接跳出进入下一函数执行
  315. **********************************************************************************/
  316. int main(void)
  317. {
  318. //对底层初始化HWSetup()
  319. HWSetup();
  320. //对系统初始化SystemSWInit();
  321. SystemSWInit();
  322. // LoraNode_OTAA_Config(); //lorawan OTAA模式配置*/ // update by wulianwei
  323. ModelRegister(); //加载通讯模块 add by wulianwei
  324. if( EngineeringModeValue.networkState == ENGINEERINGMODE_ON )
  325. {
  326. DeviceRegist();//注册设备 add by wulianwei
  327. //GetDeviceConf();
  328. }
  329. if(EngineeringModeValue.networkState != ENGINEERINGMODE_ON || registInfo->flag != 'Y') at_module_low_power(); //网络模式关或注册失败,关闭通信模块射频功能
  330. //transparent_mode(); //透传模式配置
  331. while(1)
  332. {
  333. lorawan_Sleep(); //调用lorawan睡眠函数
  334. //控制系统初始化工作CntlSysInitWork();
  335. CntlSysInitWork();
  336. //按键工作控制ScanKeyWorkType();
  337. if( realTimeData.stateRun != Poweroff )//处理在关机过程中,偶尔有按键有效
  338. {
  339. ScanKeyWorkType();
  340. }
  341. //系统工作步骤控制CntlSystemWorkStep();
  342. CntlSystemWorkStep();
  343. //传感器电源控制CntlSensorPWWork();
  344. CntlSensorPWWork();
  345. //lec进度条刷新
  346. DrawScheduleDisplay();
  347. //LCD显示刷新LCDPictureDisplay();
  348. LCDPictureDisplay();
  349. //系统报警判断SystemAlarmJudge();
  350. SystemAlarmJudge();
  351. //系统时间更新SystemTimeUpdate();
  352. SystemTimeUpdate();
  353. //读取触力传感器的值
  354. // ContactForceUpdate();
  355. //采集电池电压
  356. BatteryVoltADCGet();
  357. //气泡检测
  358. OPB350L_ADCGet();
  359. //电机运行过程中的电流检测
  360. Electricity_ADCGet();
  361. //检测电机失控
  362. Electricity_WorkOffGet();
  363. //实时数据及状态更新
  364. RealTimeStateUpdate();
  365. //系统休眠控制CntlSystemStandby();
  366. //CntlSystemStandby();
  367. //zigbee数据发送ZigbeeXmitHandle();
  368. //ZigbeeXmitHandle(); // update by wulianwei
  369. //zigbee数据接收处理ZigbeeRecvHandle();
  370. ZigbeeRecvHandle();
  371. if( EngineeringModeValue.networkState == ENGINEERINGMODE_ON && registInfo->flag == 'Y')
  372. {
  373. CoapHandle(); // 处理MQTT通信 add by wulianwei
  374. remoteHandle();//远程配置功能
  375. }
  376. else
  377. {
  378. if(realTimeData.stateRun == Poweroff)
  379. {
  380. TaskSchedulerFlag.sysPowerOffFlag = TASK_FLAG_SET;//关机
  381. }
  382. }
  383. //处理uart2接收到的数据
  384. Uart2RecvHandle();
  385. //发送历史数据到PC
  386. // HistorySendToPC();
  387. //主从通信处理HostToSlaveHandle();
  388. HostToSlaveHandle();
  389. //蜂鸣器工作控制CntlSpeakerWork();
  390. CntlSpeakerWork();
  391. // CntlHornWork();
  392. //自动关机控制CntlAutoPowerOff();
  393. // CntlAutoPowerOff();
  394. //30min无操作自动提示
  395. CntlNoActionHint();
  396. CntlHornWork();
  397. //背光工作控制CntlLCDBlackWork();
  398. CntlLCDBlackWork();
  399. }
  400. /*while(1)
  401. {
  402. CntAlarmSpeaker(0x01);//喇叭单声提示音
  403. Delay_ms(500);
  404. }*/
  405. }