control.h 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540
  1. /*
  2. * Copyright (c) 2006-2020, RT-Thread Development Team
  3. *
  4. * SPDX-License-Identifier: Apache-2.0
  5. *
  6. * Change Logs:
  7. * Date Author Notes
  8. * 2020-05-30 Administrator the first version
  9. */
  10. #ifndef APPLICATIONS_INC_CONTROL_H_
  11. #define APPLICATIONS_INC_CBD_CONTROL_H_
  12. #include <rtthread.h>
  13. #include <board.h>
  14. #include "stdio.h"
  15. #include <rtdevice.h>
  16. // 定制相关//////////////////////////////////////////////////////
  17. #define SENSOR_EN 1 // 温湿度:0关闭,1打开
  18. #define ROBOT_EN 0 // 机器人
  19. #define Color_EN 0 // 定制色诱
  20. #define BZYV2_EN 0 // 孢子仪2.0
  21. #define BOOT_ERR 1 // 1-新bootloader,0-旧bootloader()2023年9月份之前的设备升级需要设置为0
  22. ////////////////////////////////////////////////////////////////
  23. // #define TESTMODE
  24. /**
  25. * @brief 简要更新记录
  26. *
  27. * 251008 B127 新增了按天清灰
  28. *
  29. *
  30. *
  31. *
  32. */
  33. #define VERSION_XCT "B140" // 小虫体
  34. #define MAX_StepTime 5 // 最大步进上下行超时时间(秒)
  35. #define CompileTime sprintf(device_status.driver_compile, "%s-%s", __DATE__, __TIME__) // 编译时间,每次更新代码修改
  36. /*********************************************************************/
  37. extern uint8_t CheckLogTime(int16_t *log_en_cnt, int16_t log_en_inr);
  38. #define chk_log_time CheckLogTime(&log_en_cnt, log_en_inr) // 检查是否打印log的宏定义
  39. /**
  40. * @brief dtype的编号 实际使用中直接填写名称代替编号
  41. *
  42. * 设备类型区分
  43. *
  44. */
  45. typedef enum
  46. {
  47. dt_CBD = 7, // 测报灯
  48. dt_BZY = 3 // 孢子仪
  49. } dtype_list;
  50. /**
  51. * @brief vtype的编号 实际使用中直接填写名称代替编号
  52. *
  53. * 版本号区分
  54. *
  55. */
  56. typedef enum
  57. {
  58. vt_ZP = 1, // 转盘
  59. //vt_HK = 4, // 海康
  60. vt_XCTm = 6, // 吸虫塔
  61. vt_BZY = 7, // 孢子仪
  62. vt_BZY_JD = 10, // 孢子仪 胶带结构 0x0A
  63. vt_GK = 11, // 高空
  64. vt_ROBOT = 30, // 海康机器人
  65. //vt_SD = 41, // 水稻
  66. vt_4800 = 48, // 4800
  67. vt_XCT = 4 // 小虫体
  68. } vtype_list;
  69. /**
  70. * @brief run_sta的编号 实际使用中直接填写名称代替编号
  71. *
  72. * 主工作流程的状态
  73. */
  74. typedef enum
  75. {
  76. rs_RESET = 0x00, // 起始状态/复位
  77. rs_COLL_A, // 开始收集A阶段
  78. rs_COLL_B, // 开始收集B阶段
  79. rs_Press_Tape, // 按压胶带
  80. rs_Tape_Move, // 运动到镜头下方
  81. rs_Take_Photo // 拍照
  82. } run_sta_list;
  83. /*
  84. 前:front - F
  85. 后:back - B
  86. 中:center - C
  87. */
  88. typedef enum
  89. {
  90. tl_Front = 0, // 尚未到
  91. tl_Back, // 已超过
  92. tl_Center, // 处于时间段
  93. tl_Verifi, // 参数校验失败
  94. tl_Error // 无效时间段
  95. } Temporal_list; // 工作时间段的详细状态划分
  96. typedef enum
  97. {
  98. mct_Foreward = 0, // 正转
  99. mct_Reversal, // 反转
  100. mct_Stop // 停止
  101. } Motor_Ctl_type; // 适用于电机端口的类型选择
  102. typedef enum
  103. {
  104. lt_Angle_0 = 1, // 0度限位 对应LIMIT_0->PC13
  105. lt_Angle_90, // 90 度限位 对应LIMIT_90->PB9
  106. } Limit_type; // 适用于限位开关的类型选择
  107. typedef enum
  108. {
  109. mot_ZP = 0, // 转盘电机
  110. mot_CM = 1 // 上仓门电机
  111. } Motor_type; // 适用于电机端口的类型选择
  112. typedef enum
  113. {
  114. res_OK = 0, // 执行成功
  115. res_Verifi, // 校验失败
  116. res_Error, // 执行失败
  117. res_Timeout // 超时
  118. } Res_def; // 适用于功能函数的返回值类型
  119. typedef enum
  120. {
  121. res_ok = 0, // 没问题
  122. res_Time, // 时控
  123. res_Light, // 光控
  124. res_Temp, // 温控
  125. res_Humi, // 湿控
  126. res_Temp_D, // 温控(定位)
  127. res_Humi_D, // 湿控(定位)
  128. res_Rain, // 雨控
  129. res_luxout, // 光控不满足
  130. res_Sunout // 晨曦不满足
  131. } Caw_def; // 适用于功能函数的返回值类型
  132. typedef struct
  133. {
  134. uint8_t year;
  135. uint8_t month;
  136. uint8_t day;
  137. } work_day_def;
  138. typedef enum
  139. {
  140. ws_standby = 0, // 待机
  141. ws_wait0, // 等待开始工作
  142. ws_start_coll, // 收集开始
  143. ws_wait_coll, // 等待收集完成
  144. ws_takephoto, // 立即拍照
  145. ws_jumptake, // 跳过拍照(退出)
  146. ws_flap, // 翻板
  147. ws_once_finsh, // 单次工作循环结束
  148. ws_finsh, // 今日工作结束
  149. ws_KeyTig,
  150. ws_demo,
  151. ws_typemax // 最大值
  152. } works_def;
  153. typedef enum
  154. {
  155. RunTime_wx= 0,
  156. RunLight_wx ,
  157. RunFRMS_wx ,
  158. TypeMAX_wx
  159. }wm_Def;
  160. typedef struct
  161. {
  162. wm_Def wm;
  163. char keyword[15];
  164. }WorkMode_Def;
  165. typedef struct _packed
  166. {
  167. uint8_t iSave; // 存储标志位
  168. uint8_t dtype; // 设备类型?7-孢子仪,3-测报灯
  169. /*孢子仪*/
  170. uint8_t run_sta; // 转盘的位置:0原始;1收集;2培养;3拍照;4凡士林,其他-测试
  171. uint8_t cul_time; // 培养时间
  172. uint8_t stay_time; // 已培养时间
  173. uint8_t pre_temp; // 培养仓温度
  174. uint8_t box_temp; // 箱体温度
  175. uint8_t auto_test_sw; // 一键测试 0-关 1-开
  176. uint8_t cold_status; // 制冷状态 0-关 1-开
  177. uint8_t cold_sw; // 制冷开关 0-关 1-开
  178. uint8_t wind_sw; // 风机开关 0-关 1-开
  179. uint8_t collect_fan_status; // 采集状态 0-关 1-开
  180. uint8_t autotakepic; // 对焦拍照 0-关 1-开
  181. uint8_t develop_flag; // 是否进入培养模式
  182. uint8_t cool_fan_status; // 散热风机状态 0-停止 1-打开
  183. uint8_t fsl_sw; // 凡士林开关:0-关,1-开
  184. uint8_t collecting_sh1; // 采集开启1
  185. uint8_t collecting_eh1; // 采集关闭1
  186. uint8_t collecting_sh2; // 采集开启2
  187. uint8_t collecting_eh2; // 采集关闭2
  188. uint8_t collecting_sh3; // 采集开启3
  189. uint8_t collecting_eh3; // 采集关闭3
  190. /*测报灯*/
  191. uint8_t heat_sw; // 加热开关
  192. uint8_t photo_ws; // 拍照
  193. uint8_t power_status; // 电源
  194. uint8_t sun_test; // 光控测测试标志位
  195. uint8_t heat_status; // 加热状态 0-关 1-开
  196. uint8_t lamp_status; // 灯管1状态 0-关 1-开
  197. uint8_t lamp1_status; // 灯管2状态 0-关 1-开
  198. uint8_t lamp2_status; // 灯管3状态 0-关 1-开
  199. uint8_t up_status; // 上仓门状态 0-停止 1-打开 2-关闭
  200. uint8_t down_status; // 下仓门状态 0-停止 1-打开 2-关闭
  201. uint8_t clear_status; // 清扫状态 0-停止 1-开始
  202. uint8_t shake_ws; // 震动 0-关 1-开
  203. uint8_t heatvalue; // 加热设定温度
  204. uint8_t ctr_up_motor; // 上仓门, 1打开,0关闭
  205. uint8_t ctr_down_motor; // 下仓门, 1打开,0关闭
  206. uint8_t rain_status; // 雨控 0-正常 1-欠压
  207. uint8_t temp_status; // 温控 0-正常 1-温控
  208. //uint8_t sun_status; // 光控 0-正常 1-光控
  209. uint8_t ds; // 设备状态 0-关机 1-开机
  210. uint8_t work_status; // 工作状态 0-待机 1-工作
  211. uint8_t work_done; // 工作结束 1-正常 0-工作已结束
  212. uint8_t bat_status; // 电压状态 1-正常 0-欠压
  213. uint8_t heattime; // 加热时间
  214. uint8_t heat_time_min; // 实时加热时间
  215. uint8_t clt_time; // 收集时间
  216. uint8_t vol; // 音量
  217. uint8_t refresh_num; // DTU数据刷新时间
  218. uint8_t refresh_timeout; // 刷新超时时间
  219. uint8_t sunBar; // 光控定时时间
  220. uint8_t startBar; // 时控开始时间
  221. uint8_t stopBar; // 时控结束时间
  222. uint8_t tph; // 高温保护
  223. int8_t tpl; // 低温保护
  224. uint8_t timeSwitch; // 模式0光控,1时控
  225. uint8_t link_sta; // 有线接入状态:0-未接入,1已接入
  226. uint8_t heattem; // 加热仓温度(实时)
  227. uint8_t hmi_fresh; // 是否启动屏幕
  228. uint8_t update_flag; // 是否启动升级
  229. uint8_t photo_type; // 相机类型,0-USB,1-海康,2-大华
  230. uint8_t version_type; // 版本类型,1-转盘,4-海康,41-水稻,11-高空,48-4800,A-孢子仪
  231. uint8_t stop_in_bootloader; // 进入bootloader模式 1
  232. uint8_t account_status; // 卡状态
  233. uint8_t test_flag; // 测试标志
  234. uint8_t sensor_485_sta; // 485传感器
  235. #if BOOT_ERR == 1
  236. uint8_t gps_inuse;
  237. uint8_t gps_view;
  238. #endif
  239. uint16_t dattim; // 数据上传间隔
  240. uint16_t photim; // 照片上传间隔
  241. uint16_t shake_sec; // 震动时间
  242. uint16_t thsp; // 息屏时间
  243. rt_uint32_t num_updata; //
  244. rt_uint32_t rebootcnt; // 启动次数
  245. rt_uint32_t light_over_tim; // 光控定时差秒数,镇流器的结束时间
  246. rt_uint32_t data_plan; // 流量套餐
  247. rt_uint32_t expiry_date; // 到期时间
  248. int passWord; // 初始密码
  249. const char *coll_time[10];
  250. char mqttcfg1[64]; //
  251. char mqttcfg2[64]; //
  252. char csq[8]; // 信号强度
  253. char net[8]; // 网络
  254. char sim[8]; // SIM卡
  255. char gps[8]; // 定位类型
  256. char gps_state[8]; // 定位类型
  257. char tempture[12]; // 温度
  258. char humidity[12]; // 湿度
  259. char driver[64]; // 版本
  260. char driver_4g[64]; // 4g版本
  261. char driver_bl[64]; // BL版本
  262. char driver_compile[64]; // BL编译时间
  263. char project[32]; // project,用于判断升级
  264. char lng[32]; // 经度
  265. char lat[32]; // 纬度
  266. char stamp[32]; // 系统时间
  267. char fuse_voltage[32]; // 保险丝电压
  268. char iccid[32]; // SIM卡ICCID
  269. char imei[32]; // IMEI,唯一ID
  270. char json_w_clock[128]; // 修改时间
  271. char json_w_reset[128]; //
  272. char json_w_platform[128]; //
  273. char power[8]; // 功率
  274. char voltage[8]; // 电池电压
  275. uint8_t camsta; // 相机连接状态
  276. uint8_t traplampsta; // 诱捕灯状态
  277. uint8_t C01;
  278. uint8_t lps_sta; // 光控状态
  279. } Device_Status_typedef;
  280. // typedef struct
  281. // {
  282. // uint8_t addr;
  283. // uint8_t sreg;
  284. // }SYS;
  285. /************************************************/
  286. #define ON 1
  287. #define OFF 0
  288. #define LED0_PIN GET_PIN(B, 3)
  289. #define Beep GET_PIN(B, 4)
  290. #define OPEN 0x02
  291. #define CLOSE 0x03
  292. #define EcodeOnePageNum 6
  293. /************************************************/
  294. // 加热
  295. #define Heat_Pin GET_PIN(B, 12)
  296. // 采集/上仓门
  297. #define Collect_fan_R GET_PIN(C, 5)
  298. #define Collect_fan_L GET_PIN(C, 4)
  299. // 下仓门
  300. #define C_DOWN_R GET_PIN(B, 0)
  301. #define C_DOWN_L GET_PIN(B, 1)
  302. // 震动电机
  303. #define SHAKE_SW GET_PIN(B, 2)
  304. // 清扫
  305. #define CLEAR_R GET_PIN(C, 7)
  306. #define CLEAR_L GET_PIN(C, 8)
  307. // 相机供电
  308. #define PHOTO GET_PIN(A, 12)
  309. // 路由器供电
  310. #define ROUTER GET_PIN(A, 8)
  311. // 海康相机拍照
  312. #define HK_TAKE GET_PIN(A, 11)
  313. #define HK_IO GET_PIN(B, 14) // 备用触发拍照
  314. // 清扫限位
  315. #define CLEAR_R_LIMIT GET_PIN(C, 13)
  316. #define CLEAR_L_LIMIT GET_PIN(B, 9)
  317. /*****************************4.0定制多光源*********************************/
  318. #define LAMP_2_SW GET_PIN(B, 11)
  319. /***************************高空测报灯*************************/
  320. // 光控
  321. #define LIGHT_PIN GET_PIN(C, 0)
  322. // 上仓门电机限位
  323. #define CTR_UPO_LIMIT GET_PIN(C, 13)
  324. #define CTR_UPC_LIMIT GET_PIN(B, 9)
  325. // 下仓门电机限位
  326. #define CTR_DWO_LIMIT GET_PIN(B, 5)
  327. #define CTR_DWC_LIMIT GET_PIN(B, 8)
  328. // 雨控电机限位,控制排水和落虫
  329. #define CTR_RO_LIMIT GET_PIN(B, 15)
  330. #define CTR_RC_LIMIT GET_PIN(C, 6)
  331. /******************************吸虫塔*********************************/
  332. #define HK_5000W_P GET_PIN(B, 12)
  333. #define ROUTER_P GET_PIN(B, 10)
  334. #define LED_P GET_PIN(B, 11)
  335. #define PC7_TIM3_CH 2 // pwm8
  336. #define PC8_TIM3_CH 3 // pwm8
  337. #define PB1_TIM3_CH 4 // pwm3
  338. #define MOTOR1_CTR_PIN GET_PIN(C, 9) // 吸虫电机IO
  339. #define MOTOR2_CTR_PIN GET_PIN(B, 2) // 吸附电机IO
  340. #define MOTOR_CR_PIN GET_PIN(C, 7)
  341. #define MOTOR_CL_PIN GET_PIN(C, 8)
  342. #define MOTOR_C_LIMIT GET_PIN(C, 13) // 卷带限位
  343. void ctr_JD_Clear(uint8_t shake_sw);
  344. uint8_t ctr_Motor_xichong(uint8_t status_ws);
  345. uint8_t ctr_Motor_xifu(uint8_t status_ws);
  346. uint8_t ctr_Camera_Power(uint8_t status_ws);
  347. /*****************************5.0测报灯******************************/
  348. void ctr_turnv5(void);
  349. /*****************************孢子仪**********************************/
  350. /**
  351. * @brief 废弃还删不掉的IO
  352. *
  353. */
  354. // 制冷
  355. #define Cold_Pin GET_PIN(B, 11)
  356. // 步进电机限位
  357. #define LIMIT_UP GET_PIN(B, 8)
  358. #define LIMIT_DOWN GET_PIN(B, 5)
  359. // 步进电机驱动
  360. #define Motor_EN GET_PIN(B, 14)
  361. #define Motor_DIR GET_PIN(B, 15)
  362. // 散热
  363. #define Cool_Fan_R GET_PIN(C, 5)
  364. #define Cool_Fan_L GET_PIN(C, 4)
  365. /**
  366. * @brief 废弃还删不掉的IO
  367. *
  368. */
  369. // 上仓门
  370. #define TURN_CM_R GET_PIN(C, 8)
  371. #define TURN_CM_L GET_PIN(C, 7)
  372. // 转盘
  373. #define TURN_ZP_R GET_PIN(B, 0) // M2- √
  374. #define TURN_ZP_L GET_PIN(B, 1) // M2+ √
  375. // 转盘限位
  376. #define LIMIT_0 GET_PIN(C, 13) // DI1 √
  377. #define LIMIT_90 GET_PIN(B, 9) // DI2 √
  378. // 诱捕灯 上 待验证
  379. #define LAMP_SW GET_PIN(B, 12) // OUT1 √
  380. // 诱捕灯 下 待验证
  381. #define LAMP_SW_DOWN GET_PIN(B, 11) // OUT2 √
  382. #define LAMP_1_SW GET_PIN(B, 11) // 同为下诱捕灯
  383. // RTU供电 已修改 √
  384. #define RTU_DTU GET_PIN(A, 8)
  385. // 相机供电 已修改 √
  386. #define CAM_CTL GET_PIN(B, 15)
  387. // 外部按键 已验证 √
  388. #define Key_IN GET_PIN(A, 11)
  389. #define Key_OUT GET_PIN(A, 12)
  390. // 采集
  391. #define Collect_Fan GET_PIN(B, 10) // OUT3 √
  392. // 补光
  393. #define LED_SW GET_PIN(A, 15) // 5VOUT √
  394. // 雨控
  395. #define RAIN_PIN GET_PIN(C, 1) // ADC2 √
  396. // 控制数字5V
  397. #define CTL_5V GET_PIN(C, 9)
  398. // 控制传感器12V
  399. #define CTL_SENSOR_12V GET_PIN(B, 13)
  400. #define RE GET_PIN(B, 14)
  401. /*****************************小虫体**********************************/
  402. void ctr_turn(uint8_t v, uint8_t sta);
  403. uint8_t ctr_Cold(uint8_t status_cold);
  404. uint8_t ctr_Cool_Fan(uint8_t status_cool); // 散热风机
  405. uint8_t ctr_Collect_Fan(uint8_t status_collect , uint8_t pwm); // 采集风机
  406. Res_def ctr_Motor_Driver(uint8_t EN, uint8_t DIR, rt_uint32_t pwm, rt_uint32_t time_out); // 步进电机
  407. void ctr_Petroleum_jelly(rt_uint32_t delay); // 凡士林
  408. /*****************************定制4.0-2000W***************************************/
  409. #define FAN_P GET_PIN(B, 10)
  410. #define FAN_I GET_PIN(B, 11)
  411. uint8_t ctr_Fan_IN(uint8_t status_ws);
  412. uint8_t ctr_Fan_PUT(uint8_t status_ws);
  413. /*******************************定制展厅机器人************************************/
  414. #define LIMIT_OPEN GET_PIN(B, 8)
  415. #define LIMIT_CLOSE GET_PIN(B, 5)
  416. #define Motor_Power GET_PIN(B, 10) // 电机驱动供电
  417. #define Motor_Direction_Button GET_PIN(B, 9) // IO输入,检测按键状态,用于控制方向
  418. #define Motor_Direction_Ctr GET_PIN(B, 15) // IO输出,控制电机运动方向
  419. #define EMS_Dir GET_PIN(B, 14)
  420. void ctr_Motor_Robot(uint8_t status_ws);
  421. /****************************定制色诱***************************************************/
  422. #define LIMIT_RESET GET_PIN(C, 13)
  423. #define LIMIT_BOARD GET_PIN(B, 9)
  424. #define KEY_RESET GET_PIN(B, 8)
  425. #define KEY_BACK GET_PIN(B, 5)
  426. int ctr_Color_board(uint8_t forward, uint16_t time_board);
  427. /***************************************************************/
  428. /***************************************************************/
  429. uint8_t ctr_Heat(uint8_t status_heat); // 加热
  430. uint8_t ctr_cangmen_up(uint8_t status_up); // 上仓门
  431. uint8_t ctr_cangmen_down(uint8_t status_down); // 下仓门
  432. uint8_t ctr_lamp(uint8_t status_lamp, uint8_t lamp_num); // 镇流器
  433. uint8_t ctr_shake(uint8_t status_shake, uint16_t shake_sec); // 震动
  434. uint8_t ctr_clear(uint16_t status_clear); // 清扫
  435. void ctr_TG_Clear(uint16_t clear_timeout); // 清扫2
  436. uint8_t ctr_led(uint8_t status_led); // 补光灯
  437. void calorstat(uint16_t heat_time); // 恒温
  438. void ctr_router(uint8_t status_router); // 路由器
  439. void turnzp(void); // 转仓
  440. void Hk_Take_io(void); // 触发拍照
  441. void HK_TakePhoto(void); // 拍照
  442. void ctr_photo(uint8_t status_photo);
  443. void ctr_RTU_DTU(uint8_t status_rtu);
  444. void HardWare_Init(uint8_t boot); // 初始化
  445. void HardWare_Check(uint8_t boot); // 自检
  446. void ResetInit(void); // 上电复位
  447. void SunTest(void); // 光控测试
  448. /*****************************************************/
  449. void WorkTask_XCT(void);
  450. /****************************************************/
  451. void WorkCheck(void); // 工作检测
  452. void WorkTask(void); // 工作任务
  453. //
  454. /***********************孢子仪****************************/
  455. void BZY_JD_AutoTest(void); // 孢子仪 一键测试
  456. /***************************************************/
  457. // 线程
  458. int Control_clear(void);
  459. int Workstatus_check(void);
  460. int Work_Loop_Task(void);
  461. int Control_heat(void);
  462. #endif /* APPLICATIONS_INC_CONTROL_H_ */