soft_water.h 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411
  1. #ifndef __SOFT_WATER_H
  2. #define __SOFT_WATER_H
  3. #include "common.h"
  4. typedef enum{
  5. SPARY_DEFAULT = 0,
  6. SPARY_GEMO = 1, //隔膜泵 需要带流量计
  7. SPARY_ROUXING = 2, //柔性泵
  8. SPARY_TRANSFER = 3, //转接板集成喷洒
  9. }SPARY;
  10. extern uint8_t spary_type;
  11. typedef enum{
  12. NOZZLE_DEFAULT = 0,
  13. NOZZLE_NORMAL = 1,
  14. NOZZLE_TRANSFER = 2, //转接板集成喷
  15. }NOZZLE;
  16. extern uint8_t nozzle_type;
  17. #pragma pack(1)
  18. typedef struct{
  19. short liquid_percent;
  20. uint8_t warn_falg;
  21. int serial_num;
  22. }liquid;
  23. #pragma pack()
  24. extern liquid liquid_inf;
  25. extern comp_status liquid_link_status;
  26. extern bool DM4Dmsg_send_fmu;
  27. #define Pump1 (uint32_t)0x8810
  28. #define Pump2 (uint32_t)0x8821
  29. #define Nozzle1 (uint32_t)0x8832
  30. #define Nozzle2 (uint32_t)0x8843
  31. #define Nozzle3 (uint32_t)0x8854
  32. #define Nozzle4 (uint32_t)0x8865
  33. #define Spread (uint32_t)0x8899
  34. #define Z70_Public (uint8_t)0
  35. #define Z70_Pump1 (uint8_t)1
  36. #define Z70_Pump2 (uint8_t)2
  37. #define Z70_Nozzle1 (uint8_t)3
  38. #define Z70_Nozzle2 (uint8_t)4
  39. #define Z70_Nozzle3 (uint8_t)5
  40. #define Z70_Nozzle4 (uint8_t)6
  41. #define Z70_Churn (uint8_t)7
  42. #define Z70_Turntable (uint8_t)8
  43. void Z70_Pump_Nozzle_recieved_hookfuction(uint32_t CanID, uint8_t data[], uint8_t len);
  44. #pragma pack(1)
  45. typedef struct
  46. {
  47. uint8_t error_status;
  48. uint8_t control_mode;//pwm can
  49. uint16_t can_baudrate;
  50. short rpm;
  51. uint8_t reserve;
  52. uint8_t life;
  53. }water_dev;
  54. #pragma pack()
  55. extern water_dev pump1;
  56. extern water_dev pump2;
  57. extern water_dev nozzle1;
  58. extern water_dev nozzle2;
  59. extern water_dev nozzle3;
  60. extern water_dev nozzle4;
  61. extern water_dev churn;
  62. extern water_dev turntable;
  63. #pragma pack(1)
  64. typedef struct
  65. {
  66. uint8_t flag:4;
  67. uint16_t pump1:10;
  68. uint16_t pump2:10;
  69. uint16_t nozzle1:10;
  70. uint16_t nozzle2:10;
  71. uint16_t nozzle3:10;
  72. uint16_t nozzle4:10;
  73. }soft_water70;
  74. #pragma pack()
  75. #pragma pack(1)
  76. typedef struct
  77. {
  78. uint8_t reserve;
  79. uint16_t k1:14;
  80. uint16_t k2:14;
  81. uint16_t k3:14;
  82. uint16_t k4:14;
  83. }z70_weight;
  84. #pragma pack()
  85. typedef union
  86. {
  87. uint8_t buf[8];
  88. z70_weight info;
  89. }weight70_dev;
  90. extern weight70_dev z70weight;
  91. typedef union
  92. {
  93. uint8_t buf[8];
  94. soft_water70 dev_water70;
  95. }water70_dev;
  96. extern water70_dev water70_info;
  97. /**************************************** Hobbywing ESC***************************************/
  98. /**************************************** Hobbywing ESC***************************************/
  99. /**************************************** Hobbywing ESC***************************************/
  100. //===========current sensor test================
  101. #define UAVCAN_EQUIPMENT_POWER_BATTERYINFO_MAX_SIZE 55
  102. #define UAVCAN_EQUIPMENT_POWER_BATTERYINFO_SIGNATURE (0x249C26548A711966ULL)
  103. #define UAVCAN_EQUIPMENT_POWER_BATTERYINFO_ID 1092
  104. struct uavcan_equipment_power_BatteryInfo
  105. {
  106. float temperature; // 16bit
  107. float voltage; // 16bit
  108. float current; // 16bit
  109. float average_power_10sec; // 16bit
  110. float remaining_capacity_wh; // 16bit
  111. float full_charge_capacity_wh; // 16bit
  112. float hours_to_full_charge; // 16bit
  113. uint16_t status_flags; // 11bit
  114. uint8_t state_of_health_pct; // 7bit
  115. uint8_t state_of_charge_pct; // 7bit
  116. uint8_t state_of_charge_pct_stdev; // 7bit
  117. uint8_t battery_id; // 8bit
  118. uint32_t model_instance_id; // 32bit
  119. struct { uint8_t len; uint8_t data[31]; }model_name;
  120. };
  121. extern struct uavcan_equipment_power_BatteryInfo power_BatteryInfo;
  122. #pragma pack(1)
  123. typedef struct
  124. {
  125. uint8_t dev_type;
  126. uint16_t rpm;
  127. uint8_t warning;
  128. uint8_t reserve1;
  129. uint8_t reserve2;
  130. uint8_t reserve3;
  131. uint8_t count;
  132. }Z70_tranfer;
  133. #pragma pack()
  134. extern Z70_tranfer z70_info;
  135. extern uint16_t LiftingWeight_warning;
  136. /*
  137. Set_Id_Mode
  138. 0x55:可直接通过广播帧设置 ID
  139. 0xAA:需要在正常 0 油门下才能通过广播帧设置 ID
  140. */
  141. #define HW_SETIDMODE_MODE1 0x55
  142. #define HW_SETIDMODE_MODE2 0xAA
  143. /*
  144. Ready_Control
  145. 0x55:不需要启动命令就能驱动电调
  146. 0xAA:驱动电调之前必须发生启动命令
  147. */
  148. #define HW_SETIDMODE_CONTROL1 0x55
  149. #define HW_SETIDMODE_CONTROL2 0xAA
  150. /*
  151. 0x00:节点 ESC 开启总线测试模式后定时上报使用该值
  152. 0xAA:开启节点 ESC 总线测试模式
  153. 0x55:关闭节点 ESC 总线测试模式
  154. */
  155. #define HW_CANTEST_OPTDEF 0x00
  156. #define HW_CANTEST_OPTOPE 0xAA
  157. #define HW_CANTEST_OPTCLS 0x55
  158. #define HW_PRI_MEDIUM 0x10
  159. #define HW_CANID_PRI_POS (24)
  160. #define HW_CANID_PRI_MASK (0x1F000000) // 1 1111 0000 0000 0000 0000 0000 0000
  161. #define HW_PRI_HIGHEST 0x00
  162. #define HW_PRI_HIGH 0x08
  163. #define HW_PRI_MEDIUM 0x10
  164. #define HW_PRI_LOW 0x18
  165. #define HW_PRI_LOWEST 0x1F
  166. #define HW_CANID_MSGID_POS (8)
  167. #define HW_CANID_MSGID_MASK (0x00FFFF00) // 0 0000 1111 1111 1111 1111 0000 0000
  168. #define HW_CANID_SNM_POS (7)
  169. #define HW_CANID_SNM_MASK (0x00000080) // 0 0000 0000 0000 0000 0000 1000 0000
  170. #define HW_TYPE_MSG 0x0 // 广播帧(message farm)
  171. #define HW_TYPE_SER 0x1 // 服务帧
  172. #define HW_CANID_SRCNODE_POS (0)
  173. #define HW_CANID_SRCNODE_MASK (0x0000007F) // 0 0000 0000 0000 0000 0000 0111 1111
  174. #define HW_NODE_BDC 0x10 // 广播节点
  175. //================================SER FRAM==============================================
  176. #define HW_CANID_SERID_POS (16)
  177. #define HW_CANID_SERID_MASK (0x00FF0000) // 0 0000 1111 1111 0000 0000 0000 0000
  178. #define HW_CANID_RNR_POS (15)
  179. #define HW_CANID_RNR_MASK (0x00008000) // 0 0000 0000 0000 1000 0000 0000 0000
  180. #define HW_TYPE_RES 0x0
  181. #define HW_TYPE_REQ 0x1
  182. #define HW_CANID_DESNODE_POS (8)
  183. #define HW_CANID_DESNODE_MASK (0x00007F00) // 0 0000 0000 0000 0111 1111 0000 0000
  184. //===========================广播帧==================================
  185. #define HW_MSGCONTROL_ID (20010) //暂停/恢复主动数据上报指令
  186. #define HW_FRAME_MSG_GET_ESC_ID (20013) //查询电调 ID 及油门通道命令为广播帧
  187. #define HW_FRAME_MSG_SET_ID_MODE (20014) //进入 ID 及油门通道设置模式为广播帧
  188. #define HW_MSG1_ID (20050) //MSG1 数据是 ESC 主动上报给主节点的数据,50HZ
  189. #define HW_MSG2_ID (20051) //MSG2 数据是 ESC 主动上报给主节点的数据,10HZ
  190. #define HW_MSG3_ID (20052) //MSG3 数据是 ESC 主动上报给主节点的数据,1HZ
  191. #define HW_RAWCOMMAND_ID (20100) //RawCommand 发送油门的命令,为广播帧不需要应答,总线上所有 ESC 同时接收解析。
  192. #define HW_MSGACCLE_ID (20150) //MSG Accel 是 ESC 主动上报给主节点的数据,仅对配有六轴传感器的 ESC 有效
  193. #define HW_MSGGYRO_ID (20151) //MSG Gyro 是 ESC 主动上报给主节点的数据,仅对配有六轴传感器的 ESC 有效。
  194. #define HW_MSGBRUSHESC_ID (20200) //MSG BrushEsc 是有刷电调节点自动上报数据实时数据的数据帧
  195. #define HW_RAWCOMMANDB_ID (20250) //RawCommand2 是飞控(FMU)发送有刷电调油门的命令,广播帧不需要应答,总线上所有 ESC 同时接收解析。
  196. #define HW_DLKMSG1_ID (20800) //DLK MSG1 数据是 DATALINK 转发的数据帧(DATALINK 将串口协议电调数据转换为 CAN 数据帧)
  197. #define HW_DLKMSG2_ID (20801) //DLK MSG2 数据是 DATALINK 转发的数据帧(DATALINK 将串口协议电调数据转换为 CAN 数据帧)
  198. //===========================服务帧==================================
  199. #define HW_MSGCOMMAND_ID (200) //供应商命令-消息命令
  200. #define HW_UPGCOMMAND_ID (201) //供应商命令-升级命令
  201. #define HW_DBGCOMMAND_ID (202) //供应商命令-调试命令
  202. #define HW_SETID_ID (210) //Set Id 是给 ESC 节点设置 ID 的命令,每个 ESC 对应一个 ID。(ID 0x01~0x7F,油门通道 1~8)
  203. #define HW_SETBAUD_ID (211) //设置 CAN 总线速率,设置后重新上电生效。
  204. #define HW_SETLED_ID (212) //Set Led Color 是主节点发送给 ESC 设置 Led 灯颜色的命令。
  205. #define HW_SETROTATION_ID (213) //Set Rotation 是主节点发送给 ESC 设置电机旋转方向(顺时针/逆时针)的命令。
  206. #define HW_SETGET_FREQ_ID (214) //Set Freq 是主节点发送给 ESC 设置数据上报频率的命令,会保存 FLASH 内,掉电不丢失,
  207. #define HW_THRSELEXT_ID (215) //Throttle Select 是飞控 FMU 发送选择油门信号源的命令,支持 PWM 脉宽油门与 CAN 数字油门。
  208. #define HW_SELFTEST_ID (216) //Self Test 是查询电调自检状态的命令。
  209. #define HW_SETANGLE_ID (217) //Set Angle 是主节点设置 ESC 桨叶定位角度的命令,ESC 停止运行时桨叶会停止在设置的角度位置。
  210. #define HW_ACCGYROCONFIG_ID (218) //Accel-Gyro Configuration 是六轴加速度计陀螺仪传感器配置命令,仅对配有六轴传感器的 ESC 有效。
  211. #define HW_BRUSHESCCONFIG_ID (219) //Brush Esc Configuration 是主节点设置有刷电调配置参数的命令。
  212. #define HW_SERSETID_ID (220) //Ser Set Id 是给 ESC 节点设置 ID 的命令,每个 ESC 对应一个 ID。
  213. #define HW_ESCINFO_ID (240) //ESC Information 是获取当前电调驱动程序信息的命令。
  214. #define HW_GETMAJORCONF_ID (242) //Get Major Configuration 是主节点快速获取电调主要参数配置信息的数据帧
  215. #define HW_MSGCOMMAND_SIG ((uint64_t)0x8c4acf8adb0375cf)
  216. #define HW_UPGCOMMAND_SIG ((uint64_t)0xada98653b52de435)
  217. #define HW_DBGCOMMAND_SIG ((uint64_t)0xe524989ae0471097)
  218. #define HW_SETID_SIG ((uint64_t)0xc323cb5e9ec2b6f7)
  219. #define HW_SETBAUD_SIG ((uint64_t)0xed47dea06da1d619)
  220. #define HW_SETLED_SIG ((uint64_t)0xb493bd48c0853ee5)
  221. #define HW_SETROTATION_SIG ((uint64_t)0x9d793111d262ba68)
  222. #define HW_SETGET_FREQ_SIG ((uint64_t)0x1fd0404420983deb)
  223. #define HW_THRSELEXT_SIG ((uint64_t)0x0c248faaefe5e29a)
  224. #define HW_SELFTEST_SIG ((uint64_t)0xc48d4de61c5295df)
  225. #define HW_SETANGLE_SIG ((uint64_t)0x81d9b10761c28e0a)
  226. #define HW_ACCGYROCONFIG_SIG ((uint64_t)0xa1ed58b0897d7d5a)
  227. #define HW_BRUSHESCCONFIG_SIG ((uint64_t)0x1302d2cf8a1a5a71)
  228. #define HW_SERSETID_SIG ((uint64_t)0xc323cb5e9ec2b6f7)
  229. #define HW_ESCINFO_SIG ((uint64_t)0xd7fe2a212374089b)
  230. #define HW_MAINTANCEINFO_SIG ((uint64_t)0xb81dbd4ec9a5977d)
  231. #define HW_GETMAJORCONF_SIG ((uint64_t)0x1506774da3930bfd)
  232. #define HW_CRC_INITVALUE 0xFFFF
  233. #define HW_ESCINFO_OPT00 0x00 //电调通信程序版本
  234. #define HW_ESCINFO_OPT01 0x01 //电调驱动程序版本
  235. #define HW_ESCINFO_OPT02 0x02 //电调硬件版本
  236. #define HW_MAJORCONF_OPT0 0x00 //获取配置信息
  237. #define HW_GETESCID_OPT0 0x00 //获取ESCID及通道信息
  238. typedef struct
  239. {
  240. Connect_check Esc_Link;
  241. //MSG1(20050)
  242. uint16_t motorRPM; //转速
  243. uint16_t pwm_value; //PWM
  244. /*
  245. bit14:油门信号源 bit14:保留 bit13:通信异常 bit10、11、12、14保留 bit9:方向标志位 bit8:定位完成
  246. bit7:短路 bit6:电机断相 bit5:油门异常 bit4:电压异常 bit3:停转 bit2:堵转 bit1:过流 bit0:过温*/
  247. uint16_t warn_flag;
  248. //MSG2(20051)
  249. float esc_voltage; //电调输入电压V(float16_t 类型)
  250. float esc_current; //母线电流A(float16_t 类型)
  251. uint8_t esc_temperature; //电调温度C
  252. //MSG3(20052)
  253. uint8_t esc_mosTemp; //电调MOS温度C
  254. uint8_t esc_capTemp; //电调电容温度C
  255. uint8_t esc_motorTemp; //电机温度C
  256. //ack
  257. uint8_t MsgCtrOpt; //0x4EA2
  258. uint32_t MsgCtrCmd; //0x4EA2
  259. bool GetESCid;
  260. uint8_t GetEscNodeID; //0x4E2D ID
  261. uint8_t GetEscThrCh; //0X4E2D 油门通道
  262. bool ResSetIDModeExit; //
  263. bool ResSetID; //设置CANid的反馈
  264. uint8_t SetIDNodeID; //设置CAN总线连接电调的node id(1~0x7D)
  265. uint8_t SetIDThrCh; //选择当前node id所使用的数字油门通道
  266. uint8_t SetBaud; //CAN总线速率设置
  267. uint8_t SetLEDOpt; //设置灯的颜色
  268. uint8_t SetLEDClr; //颜色
  269. uint8_t SetLEDBlk; //闪烁时间
  270. uint8_t SetRotDir; //ESC电机旋转方向设置
  271. uint8_t SetFreqOpt; //设置MSG23上报频率
  272. uint16_t SetFreqID;
  273. uint8_t SetFreqFreq;
  274. uint8_t ThrSrc; //设置油门输出方式
  275. uint8_t SelfCheckSta; //自检状态
  276. uint8_t _VerBuf[68]; //版本信息buf
  277. uint8_t _VerBufIndex;
  278. bool _VerBufGetS;
  279. bool GetESCInfoOpt00;
  280. uint8_t LinkSoftVer[16]; //电调通讯软件版本
  281. uint8_t LinkHardVer[16]; //电调通讯硬件版本
  282. uint8_t LinkDevVer[16]; //电调通讯设备类型
  283. uint8_t LinkSN[8]; //电调通讯软件唯一码
  284. bool GetESCInfoOpt01;
  285. uint8_t DriveSoftVer[16]; //电调驱动软件版本
  286. uint8_t DriveHardVer[16]; //电调驱动硬件版本
  287. uint8_t DriveDevVer[16]; //电调驱动设备类型
  288. uint8_t DriveSN[8]; //电调驱动软件唯一码
  289. bool GetESCInfoOpt02;
  290. uint8_t HardSN[16]; //电调硬件
  291. uint8_t ProtocolVer[8]; //电调协议版本号
  292. uint8_t rsv[32]; //预留
  293. bool GetMInfo;
  294. uint32_t MTLifeCycle; //运作总共时间
  295. uint32_t MTLatestCycle; //上一次运作时间
  296. bool GetMajorConf;
  297. uint8_t MajorConfRot;
  298. uint8_t MajorConfThrSrc;
  299. uint8_t MajorConfThrCh;
  300. uint8_t MajorConfLEDBlink;
  301. uint8_t MajorConfLEDColor;
  302. uint8_t MajorConfMSG2UPHZ;
  303. uint8_t MajorConfMSG1UPHZ;
  304. uint8_t MajorConfInstAngle;
  305. } _EscLinkDevice;
  306. extern _EscLinkDevice EscMsg[4+1];
  307. typedef enum
  308. {
  309. SETESCID_INIT = 0,
  310. SETESCID_ENTER = 1,
  311. SETESCID_SET = 2,
  312. SETESCID_EXIT = 3,
  313. SETESCID_END,
  314. }_setescid_t;
  315. typedef struct
  316. {
  317. int8_t reTxMaxCnt;
  318. _setescid_t setESCidStep;
  319. bool getSetIDModeRes;
  320. uint16_t getSetIDModeResCnt;
  321. uint8_t setESCidNum; //配置第几个电调
  322. uint32_t setEscIDDelayTime; //步骤2的PWM失能判定时间
  323. }_setESCidInfo;
  324. extern _setESCidInfo setESCidInfo;
  325. typedef struct _hwCanTail
  326. {
  327. uint8_t tranid: 5; /* 1:数值范围 0~31。
  328. 2:对于相同 Data Type ID 的数据,每发送一包数据,Transfer ID 加 1,0~31 循环累加。
  329. 3:对于同一包数据中的多个数据帧,该值不变。*/
  330. uint8_t toggle: 1; /* 1:对于 Single frame transfer,Toggle bit 这一位永远为 0。
  331. 2:对于 Multi frame transfer,数据包的首帧该位为 0,此后每发一帧该位翻转一次。*/
  332. uint8_t end: 1; /* 1:对于 Single frame transfer,End of transfer 这一 bit 位永远为 1。
  333. 2:对于 Multi frame transfer,如果当前帧是数据包的最后一帧,该位为 1,否则为 0。*/
  334. uint8_t start: 1; /* 1:对于 Single frame transfer,start of transfer 位永远为 1。
  335. 2:对于 Multi frame transfer,如果当前帧是数据包的首帧,该位为 1,否则为 0。*/
  336. } __PACKED hwCanTail;
  337. typedef union _HWTail
  338. {
  339. uint8_t HWTailByte;
  340. hwCanTail HWTailBit;
  341. } HWTail;
  342. extern bool set_HWesc_ESCid;
  343. /**************************************** Hobbywing ESC***************************************/
  344. /**************************************** Hobbywing ESC***************************************/
  345. /**************************************** Hobbywing ESC***************************************/
  346. void Hobbywing_esc_func(void);
  347. void liquid_recieved_hookfuction(uint32_t cellCanID,uint8_t data[], uint8_t len);
  348. void Eft_Pump_Nozzle_recieved_hookfuction(uint32_t CanID, uint8_t data[], uint8_t len);
  349. void can_sendmsg_eft_water(void);
  350. int decode_liquid_info(void);
  351. void Eft_Dev_Ack_recieved_hookfuction(uint32_t CanID, uint8_t data[], uint8_t len);
  352. void HobbywingCanRecvHookFunction(uint32_t id, uint8_t *recv_buf, uint8_t len);
  353. #endif