| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552 |
- /*
- * Copyright (c) 2006-2020, RT-Thread Development Team
- *
- * SPDX-License-Identifier: Apache-2.0
- *
- * Change Logs:
- * Date Author Notes
- * 2020-05-30 Administrator the first version
- */
- #ifndef APPLICATIONS_INC_CONTROL_H_
- #define APPLICATIONS_INC_CBD_CONTROL_H_
- #include <rtthread.h>
- #include <board.h>
- #include "stdio.h"
- #include <rtdevice.h>
- // 定制相关//////////////////////////////////////////////////////
- #define SENSOR_EN 1 // 温湿度:0关闭,1打开
- #define ROBOT_EN 0 // 机器人
- #define Color_EN 0 // 定制色诱
- #define BZYV2_EN 0 // 孢子仪2.0
- #define BOOT_ERR 1 // 1-新bootloader,0-旧bootloader()2023年9月份之前的设备升级需要设置为0
- ////////////////////////////////////////////////////////////////
- // #define TESTMODE
- #define VERSION_NUM "D047"
- #define VERSION_KEY "SwversionVSY2"
- #define MAX_StepTime 5 // 最大步进上下行超时时间(秒)
- #define JD_REMAIN_MAX 600 // 胶带最大用量
- #define CompileTime sprintf(device_status.driver_compile, "%s-%s", __DATE__, __TIME__) // 编译时间,每次更新代码修改
- /*********************************************************************/
- extern uint8_t CheckLogTime(int16_t *log_en_cnt, int16_t log_en_inr);
- #define chk_log_time CheckLogTime(&log_en_cnt, log_en_inr) // 检查是否打印log的宏定义
- /**
- * @brief dtype的编号 实际使用中直接填写名称代替编号
- *
- * 设备类型区分
- *
- */
- typedef enum
- {
- dt_CBD = 7, // 测报灯
- dt_BZY = 3 // 孢子仪
- } dtype_list;
- /**
- * @brief vtype的编号 实际使用中直接填写名称代替编号
- *
- * 版本号区分
- *
- */
- typedef enum
- {
- vt_ZP = 1, // 转盘
- //vt_HK = 4, // 海康
- vt_XCTm = 6, // 吸虫塔
- vt_BZY = 7, // 孢子仪
- vt_BZY_JD = 10, // 孢子仪 胶带结构 0x0A
- vt_GK = 11, // 高空
- vt_ROBOT = 30, // 海康机器人
- //vt_SD = 41, // 水稻
- vt_4800 = 48, // 4800
- vt_XCT = 4 // 小虫体
- } vtype_list;
- /**
- * @brief run_sta的编号 实际使用中直接填写名称代替编号
- *
- * 主工作流程的状态
- */
- typedef enum
- {
- rs_RESET = 0x00, // 起始状态/复位
- rs_type_MX
- } run_sta_list;
- /*
- 前:front - F
- 后:back - B
- 中:center - C
- */
- typedef enum
- {
- tl_Front = 0, // 尚未到
- tl_Back, // 已超过
- tl_Center, // 处于时间段
- tl_Verifi, // 参数校验失败
- tl_Error // 无效时间段
- } Temporal_list; // 工作时间段的详细状态划分
- typedef enum
- {
- mct_Foreward = 0, // 正转
- mct_Reversal, // 反转
- mct_Stop, // 停止
- mct_auto // 自动 //阀头使用
- } Motor_Ctl_type; // 适用于电机端口的类型选择
- typedef enum
- {
- lt_Angle_0 = 1, // 0度限位 对应LIMIT_0->PC13
- lt_Angle_90, // 90 度限位 对应LIMIT_90->PB9
- } Limit_type; // 适用于限位开关的类型选择
- typedef enum
- {
- mot_ZP = 0, // 转盘电机
- mot_CM = 1 // 上仓门电机
- } Motor_type; // 适用于电机端口的类型选择
- typedef enum
- {
- res_OK = 0, // 执行成功
- res_Verifi, // 校验失败
- res_Error, // 执行失败
- res_Timeout // 超时
- } Res_def; // 适用于功能函数的返回值类型
- typedef enum
- {
- res_ok = 0, // 没问题
- res_Time, // 时控
- res_Light, // 光控
- res_Temp, // 温控
- res_Humi, // 湿控
- res_Temp_D, // 温控(定位)
- res_Humi_D, // 湿控(定位)
- res_Rain, // 雨控
- res_PwrOff, // 设备已关机
- } Caw_def; // 适用于功能函数的返回值类型
- typedef struct
- {
- uint8_t year;
- uint8_t month;
- uint8_t day;
- } work_day_def;
- typedef enum
- {
- ws_standby = 0, // 待机
- ws_wait0, // 等待开始工作
- ws_start_coll, // 收集开始
- ws_wait_coll, // 等待收集完成
- ws_takephoto, // 立即拍照
- ws_jumptake, // 跳过拍照(退出)
- ws_flap, // 翻板
- ws_once_finsh, // 单次工作循环结束
- ws_finsh, // 今日工作结束
- ws_waitTig, // 红外触发模式 等待触发
- ws_KeyTig , // 按键触发模式
- ws_demo,
- ws_typemax // 最大值
- } works_def;
- typedef enum
- {
- RunTime_wx= 0,
- // RunTime_Tig_wx ,
- // RunFRMS_wx ,
- TypeMAX_wx
- }wm_Def;
- typedef struct
- {
- wm_Def wm;
- char keyword[24];
- }WorkMode_Def;
- typedef struct _packed
- {
- uint8_t iSave; // 存储标志位
- uint8_t dtype; // 设备类型?7-孢子仪,3-测报灯
- /*孢子仪*/
- uint8_t run_sta; // 转盘的位置:0原始;1收集;2培养;3拍照;4凡士林,其他-测试
- uint8_t cul_time; // 培养时间
- uint8_t stay_time; // 已培养时间
- uint8_t pre_temp; // 培养仓温度
- uint8_t box_temp; // 箱体温度
- uint8_t auto_test_sw; // 一键测试 0-关 1-开
- uint8_t cold_status; // 制冷状态 0-关 1-开
- uint8_t cold_sw; // 制冷开关 0-关 1-开
- uint8_t wind_sw; // 风机开关 0-关 1-开
- uint8_t collect_fan_status; // 采集状态 0-关 1-开
- uint8_t autotakepic; // 对焦拍照 0-关 1-开
- uint8_t develop_flag; // 是否进入培养模式
- uint8_t cool_fan_status; // 散热风机状态 0-停止 1-打开
- uint8_t fsl_sw; // 凡士林开关:0-关,1-开
- uint8_t collecting_sh1; // 采集开启1
- uint8_t collecting_eh1; // 采集关闭1
- uint8_t collecting_sh2; // 采集开启2
- uint8_t collecting_eh2; // 采集关闭2
- uint8_t collecting_sh3; // 采集开启3
- uint8_t collecting_eh3; // 采集关闭3
- /*测报灯*/
- uint8_t heat_sw; // 加热开关
- uint8_t photo_ws; // 拍照
- uint8_t power_status; // 电源
- uint8_t sun_test; // 光控测测试标志位
- uint8_t heat_status; // 加热状态 0-关 1-开
- uint8_t lamp_status; // 灯管1状态 0-关 1-开
- uint8_t lamp1_status; // 灯管2状态 0-关 1-开
- uint8_t lamp2_status; // 灯管3状态 0-关 1-开
- uint8_t up_status; // 上仓门状态 0-停止 1-打开 2-关闭
- uint8_t down_status; // 下仓门状态 0-停止 1-打开 2-关闭
- uint8_t clear_status; // 清扫状态 0-停止 1-开始
- uint8_t shake_ws; // 震动 0-关 1-开
- uint8_t heatvalue; // 加热设定温度
- uint8_t ctr_up_motor; // 上仓门, 1打开,0关闭
- uint8_t ctr_down_motor; // 下仓门, 1打开,0关闭
- uint8_t rain_status; // 雨控 0-正常 1-欠压
- uint8_t temp_status; // 温控 0-正常 1-温控
- uint8_t sun_status; // 光控 0-正常 1-光控
- uint8_t ds; // 设备状态 0-关机 1-开机
- uint8_t work_status; // 工作状态 0-待机 1-工作
- uint8_t work_done; // 工作结束 1-正常 0-工作已结束
- uint8_t bat_status; // 电压状态 1-正常 0-欠压
- uint8_t heattime; // 加热时间
- uint8_t heat_time_min; // 实时加热时间
- uint8_t clt_time; // 收集时间
- uint8_t vol; // 音量
- uint8_t refresh_num; // DTU数据刷新时间
- uint8_t refresh_timeout; // 刷新超时时间
- uint8_t sunBar; // 光控定时时间
- uint8_t startBar; // 时控开始时间
- uint8_t stopBar; // 时控结束时间
- uint8_t tph; // 高温保护
- int8_t tpl; // 低温保护
- uint8_t timeSwitch; // 模式0光控,1时控
- uint8_t link_sta; // 有线接入状态:0-未接入,1已接入
- uint8_t heattem; // 加热仓温度(实时)
- uint8_t hmi_fresh; // 是否启动屏幕
- uint8_t update_flag; // 是否启动升级
- uint8_t photo_type; // 相机类型,0-USB,1-海康,2-大华
- uint8_t version_type; // 版本类型,1-转盘,4-海康,41-水稻,11-高空,48-4800,A-孢子仪
- uint8_t stop_in_bootloader; // 进入bootloader模式 1
- uint8_t account_status; // 卡状态
- uint8_t test_flag; // 测试标志
- uint8_t sensor_485_sta; // 485传感器
- #if BOOT_ERR == 1
- uint8_t gps_inuse;
- uint8_t gps_view;
- #endif
- // uint16_t dattim; // 数据上传间隔
- // uint16_t photim; // 照片上传间隔
- uint16_t shake_sec; // 震动时间
- uint16_t thsp; // 息屏时间
- rt_uint32_t num_updata; //
- rt_uint32_t rebootcnt; // 启动次数
- rt_uint32_t light_over_tim; // 光控定时差秒数,镇流器的结束时间
- rt_uint32_t data_plan; // 流量套餐
- rt_uint32_t expiry_date; // 到期时间
- int passWord; // 初始密码
- const char *coll_time[10];
- char mqttcfg1[64]; //
- char mqttcfg2[64]; //
- char csq[8]; // 信号强度
- char net[8]; // 网络
- char sim[8]; // SIM卡
- char gps[8]; // 定位类型
- char gps_state[8]; // 定位类型
- char tempture[12]; // 温度
- char humidity[12]; // 湿度
- char driver[64]; // 版本
- char driver_4g[64]; // 4g版本
- char driver_bl[64]; // BL版本
- char driver_compile[64]; // BL编译时间
- char project[32]; // project,用于判断升级
- char lng[32]; // 经度
- char lat[32]; // 纬度
- char stamp[32]; // 系统时间
- char fuse_voltage[32]; // 保险丝电压
- char iccid[32]; // SIM卡ICCID
- char imei[32]; // IMEI,唯一ID
- char json_w_clock[128]; // 修改时间
- char json_w_reset[128]; //
- char json_w_platform[128]; //
- char power[8]; // 功率
- char voltage[8]; // 电池电压
- uint8_t camsta; // 相机连接状态
- uint8_t traplampsta; // 诱捕灯状态
- uint8_t rain_update; // 雨控状态更新至雨控
- uint8_t C01;
- } Device_Status_typedef;
- // typedef struct
- // {
- // uint8_t addr;
- // uint8_t sreg;
-
- // }SYS;
- /************************************************/
- #define ON 1
- #define OFF 0
- #define LED0_PIN GET_PIN(B, 3)
- #define Beep GET_PIN(B, 4)
- #define OPEN 0x02
- #define CLOSE 0x03
- /************************************************/
- // 光控
- #define LIGHT_PIN GET_PIN(C, 0)
- // 雨控
- #define RAIN_PIN GET_PIN(C, 1)
- // 加热
- #define Heat_Pin GET_PIN(B, 12)
- // 采集/上仓门
- #define Collect_fan_R GET_PIN(C, 5)
- #define Collect_fan_L GET_PIN(C, 4)
- // 下仓门
- #define C_DOWN_R GET_PIN(B, 0)
- #define C_DOWN_L GET_PIN(B, 1)
- // 镇流器
- //#define LAMP_SW GET_PIN(C, 9)
- // 震动电机
- #define SHAKE_SW GET_PIN(B, 2)
- // 补光
- #define LED_SW GET_PIN(A, 15)
- // 清扫
- #define CLEAR_R GET_PIN(C, 7)
- #define CLEAR_L GET_PIN(C, 8)
- // 相机供电+
- //#define PHOTO GET_PIN(A, 12)
- // 路由器供电
- #define ROUTER GET_PIN(A, 8)
- #define RE GET_PIN(B, 14)
- //
- //// RTU/DTU供电
- //#define RTU_DTU GET_PIN(B, 13)
- //// 相机供电
- //#define CAM_CTL GET_PIN(B, 15)
- // 海康相机拍照
- //#define HK_TAKE GET_PIN(A, 11)
- //#define HK_IO GET_PIN(B, 14) // 备用触发拍照
- #define HK_IO GET_PIN(C, 13) //新的触发拍照io 适配xct小板子
- // 清扫限位
- //#define CLEAR_R_LIMIT GET_PIN(C, 13)
- //#define CLEAR_L_LIMIT GET_PIN(B, 9)
- #define CLEAR_R_LIMIT GET_PIN(B, 14) //unuse
- #define CLEAR_L_LIMIT GET_PIN(B, 14) //unuse
- /*****************************4.0定制多光源*********************************/
- #define LAMP_0_SW GET_PIN(B, 9)
- #define LAMP_1_SW GET_PIN(B, 10)
- #define LAMP_2_SW GET_PIN(B, 11)
- /***************************高空测报灯*************************/
- // 上仓门电机限位
- #define CTR_UPO_LIMIT GET_PIN(C, 13)
- #define CTR_UPC_LIMIT GET_PIN(B, 9)
- // 下仓门电机限位
- //#define CTR_DWO_LIMIT GET_PIN(B, 5)
- //#define CTR_DWC_LIMIT GET_PIN(B, 8)
- // 雨控电机限位,控制排水和落虫
- #define CTR_RO_LIMIT GET_PIN(B, 15)
- #define CTR_RC_LIMIT GET_PIN(C, 6)
- /******************************吸虫塔*********************************/
- #define HK_5000W_P GET_PIN(B, 12)
- #define ROUTER_P GET_PIN(B, 10)
- #define LED_P GET_PIN(B, 11)
- #define PC7_TIM3_CH 2 // pwm8
- #define PC8_TIM3_CH 3 // pwm8
- #define PB1_TIM3_CH 4 // pwm3
- //#define MOTOR1_CTR_PIN GET_PIN(C, 9) // 吸虫电机IO
- #define MOTOR2_CTR_PIN GET_PIN(B, 2) // 吸附电机IO
- #define MOTOR_CR_PIN GET_PIN(C, 7)
- #define MOTOR_CL_PIN GET_PIN(C, 8)
- #define MOTOR_C_LIMIT GET_PIN(C, 13) // 卷带限位
- void ctr_JD_Clear(uint8_t shake_sw);
- uint8_t ctr_Motor_xichong(uint8_t status_ws);
- uint8_t ctr_Motor_xifu(uint8_t status_ws);
- uint8_t ctr_Camera_Power(uint8_t status_ws);
- /*****************************5.0测报灯******************************/
- void ctr_turnv5(void);
- /*****************************孢子仪**********************************/
- // 制冷
- #define Cold_Pin GET_PIN(B, 11)
- // 采集
- #define Collect_Fan GET_PIN(B, 10)
- // 散热
- #define Cool_Fan_R GET_PIN(C, 5)
- #define Cool_Fan_L GET_PIN(C, 4)
- // 步进电机限位
- #define LIMIT_UP GET_PIN(B, 8)
- #define LIMIT_DOWN GET_PIN(B, 5)
- // 步进电机驱动
- #define Motor_EN GET_PIN(B, 14)
- #define Motor_DIR GET_PIN(B, 15)
- void ctr_turn(uint8_t v, uint8_t sta);
- uint8_t ctr_Cold(uint8_t status_cold);
- uint8_t ctr_Cool_Fan(uint8_t status_cool); // 散热风机
- uint8_t ctr_Collect_Fan(uint8_t status_collect); // 采集风机
- Res_def ctr_Motor_Driver(uint8_t EN, uint8_t DIR, rt_uint32_t pwm, rt_uint32_t time_out); // 步进电机
- void ctr_Petroleum_jelly(rt_uint32_t delay); // 凡士林
- /*****************************定制4.0-2000W***************************************/
- #define FAN_P GET_PIN(B, 10)
- #define FAN_I GET_PIN(B, 11)
- uint8_t ctr_Fan_IN(uint8_t status_ws);
- uint8_t ctr_Fan_PUT(uint8_t status_ws);
- /*******************************定制展厅机器人************************************/
- //#define LIMIT_OPEN GET_PIN(B, 8)
- //#define LIMIT_CLOSE GET_PIN(B, 5)
- #define Motor_Power GET_PIN(B, 10) // 电机驱动供电
- #define Motor_Direction_Button GET_PIN(B, 9) // IO输入,检测按键状态,用于控制方向
- #define Motor_Direction_Ctr GET_PIN(B, 15) // IO输出,控制电机运动方向
- #define EMS_Dir GET_PIN(B, 14)
- void ctr_Motor_Robot(uint8_t status_ws);
- /****************************定制色诱***************************************************/
- #define LIMIT_RESET GET_PIN(C, 13)
- #define LIMIT_BOARD GET_PIN(B, 9)
- //#define KEY_RESET GET_PIN(B, 8)
- //#define KEY_BACK GET_PIN(B, 5)
- int ctr_Color_board(uint8_t forward, uint16_t time_board);
- /***************************************************************/
- /***************************************************************/
- uint8_t ctr_Heat(uint8_t status_heat); // 加热
- uint8_t ctr_cangmen_up(uint8_t status_up); // 上仓门
- uint8_t ctr_cangmen_down(uint8_t status_down); // 下仓门
- uint8_t ctr_lamp(uint8_t status_lamp, uint8_t lamp_num); // 镇流器
- uint8_t ctr_shake(uint8_t status_shake, uint16_t shake_sec); // 震动
- uint8_t ctr_clear(uint16_t status_clear); // 清扫
- void ctr_TG_Clear(uint16_t clear_timeout); // 清扫2
- uint8_t ctr_led(uint8_t status_led); // 补光灯
- void calorstat(uint16_t heat_time); // 恒温
- void ctr_router(uint8_t status_router); // 路由器
- void turnzp(void); // 转仓
- // 拍照结果(供运维页远程诊断: 为什么没拍/拍了失败)
- typedef struct
- {
- uint32_t tig_tm; // 上次触发拍照时刻(Unix秒, 0-无记录)
- uint32_t res_tm; // 上次拍照出结果时刻(0-尚未出结果)
- uint8_t res; // 0-无记录 1-成功 2-失败(图像传输超时) 3-未执行(相机忙) 4-进行中
- uint8_t io_type; // 触发类型(Hk_Take_io 入参: 1-工作包 8-一键测试 9-立即拍照)
- } Photo_Stat_t;
- extern Photo_Stat_t photo_stat;
- Res_def Hk_Take_io(char type); // 触发拍照
- void HK_TakePhoto(void); // 拍照
- void ctr_photo(uint8_t status_photo);
- void HardWare_Init(uint8_t boot); // 初始化
- void HardWare_Check(uint8_t boot); // 自检
- void ResetInit(void); // 上电复位
- void SunTest(void); // 光控测试
- /*****************************************************/
- void WorkTask_XCT(void);
- /****************************************************/
- void WorkCheck(void); // 工作检测
- void WorkTask(void); // 工作任务
- //
- /***********************孢子仪****************************/
- void BZY_JD_AutoTest(void); // 孢子仪 一键测试
- /***************************************************/
- // 线程
- int Control_clear(void);
- int Workstatus_check(void);
- int Work_Loop_Task(void);
- int Control_heat(void);
- /***************************** 天牛的IO定义 **********************************/
- // RTU供电 已修改 √
- #define RTU_DTU GET_PIN(A, 8)
- // 相机供电 已修改 √
- #define CAM_CTL GET_PIN(B, 15)
- // 外部按键 已验证 √
- #define Key_IN GET_PIN(A, 11)
- #define Key_OUT GET_PIN(A, 12)
- // 落虫红外触发
- #define RayTigA GET_PIN(B, 8) // PB8
- #define RayTigB GET_PIN(B, 5) // PB5
- // 控制数字5V
- #define CTL_5V GET_PIN(C, 9)
- // 控制传感器12V
- #define CTL_SENSOR_12V GET_PIN(B, 13)
- // 上仓门
- #define TURN_CM_R GET_PIN(C, 8)
- #define TURN_CM_L GET_PIN(C, 7)
- // 翻板
- #define TURN_ZP_R GET_PIN(B, 0)
- #define TURN_ZP_L GET_PIN(B, 1)
- // 转盘限位
- #define LIMIT_0 GET_PIN(C, 13) // 其实此时电机是没有限位的 阀头自带 找了一个没用的IO先放上
- #define LIMIT_90 GET_PIN(C, 13) // 其实此时电机是没有限位的 阀头自带 找了一个没用的IO先放上
- /***************************** 天牛的IO定义 **********************************/
- Res_def SendReadInfo(char c);
- #endif /* APPLICATIONS_INC_CONTROL_H_ */
|