Browse Source

update

master
zhaohe 1 year ago
parent
commit
4819d1bdbf
  1. 2
      app_protocols/transmit_disfection_protocol
  2. 187
      usrc/app/dmapp.cpp
  3. 158
      usrc/app/dmapp.hpp
  4. 5
      usrc/base/protocol_processer_mgr.hpp
  5. 62
      usrc/board/draw_bar_dm_board.hpp.xx
  6. 42
      usrc/board/large_space_dm_liquid_ctrl_board.hpp.xx
  7. 50
      usrc/board/large_space_dm_power_ctrl_board.hpp.xx
  8. 43
      usrc/board/pipe_dm_liquid_ctrl_board.hpp.xx
  9. 37
      usrc/board/pipe_dm_power_ctrl_board.hpp.xx
  10. 4
      usrc/board_base/baseboard/large_space_dm_power_ctrl_board.cpp
  11. 59
      usrc/protocol_processer_impl/large_space_dm_liquid_ctrl_board_pp.hpp.xx
  12. 50
      usrc/protocol_processer_impl/large_space_dm_power_ctrl_board_pp.hpp.xx
  13. 64
      usrc/protocol_processer_impl/pipe_dm_liquid_ctrl_board_pp.hpp.xx
  14. 50
      usrc/protocol_processer_impl/pipe_dm_power_ctrl_board_pp.hpp.xx

2
app_protocols/transmit_disfection_protocol

@ -1 +1 @@
Subproject commit 9b15ef0cb011476bff3659117a9e7907155a9f1b
Subproject commit 72a9aadd6793193e8b1c475d4774ad0fc4d05590

187
usrc/app/dmapp.cpp

@ -0,0 +1,187 @@
#include "dmapp.hpp"
/**
* @brief
*
*
*
*
* -
* :
* 1.
* 2.
* -
* :
* 1. ()
*
* -
*
*/
using namespace iflytop;
using namespace transmit_disfection_protocol;
#define TAG "LargeSpaceDmPowerCtrlBoard"
DisinfectionApp* DisinfectionApp::ins() {
static DisinfectionApp instance;
return &instance;
}
const char* DisinfectionApp::getName() { return "DisinfectionApp"; }
void DisinfectionApp::initialize() {
int btid = PublicBoard::ins()->getBoardTypeId();
//
if (isBoardType(kLargeSpaceDMPowerCtrlBoard, kSmallSpaceDMPowerCtrlBoard, kPipeDMPowerCtrlBoard, kDrawBarDMPowerCtrlBoard)) {
LargeSpaceDmPowerCtrlBoardHal::HADC1_INIT();
heaterCtrler.initialize(PC7, &hadc1, ADC_CHANNEL_2, &hadc1, ADC_CHANNEL_8);
bindHeaterCtrler();
}
if (isBoardType(kLargeSpaceDMPowerCtrlBoard, kSmallSpaceDMPowerCtrlBoard, kDrawBarDMPowerCtrlBoard)) {
LargeSpaceDmPowerCtrlBoardHal::HADC1_INIT();
blowerCtrler.initialize(PC5, &hadc1, ADC_CHANNEL_1);
bindBlowerCtrler();
} else if (isBoardType(kPipeDMPowerCtrlBoard)) {
LargeSpaceDmPowerCtrlBoardHal::HUART2_INIT(9600, UART_STOPBITS_1);
blowerCtrler.initializeAsHighPowerUartBlower(&huart2);
bindBlowerCtrler();
}
if (isBoardType(kLargeSpaceDMPowerCtrlBoard, kSmallSpaceDMPowerCtrlBoard, kPipeDMPowerCtrlBoard, kDrawBarDMPowerCtrlBoard)) {
LargeSpaceDmPowerCtrlBoardHal::HADC1_INIT();
airComCtrler.initialize(PC3, &hadc1, ADC_CHANNEL_0);
bindAirComCtrler();
}
if (isBoardType(kLargeSpaceDMPowerCtrlBoard, kSmallSpaceDMPowerCtrlBoard, kPipeDMPowerCtrlBoard, kDrawBarDMPowerCtrlBoard)) {
LargeSpaceDmPowerCtrlBoardHal::HUART3_INIT(19200, UART_STOPBITS_2);
LargeSpaceDmPowerCtrlBoardHal::HADC1_INIT();
h2o2Sensor.initialize(&huart3, &hadc1, ADC_CHANNEL_10);
bindH2o2Sensor();
}
if (isBoardType(kLargeSpaceDMLiquidCtrlBoard, kSmallSpaceDMLiquidCtrlBoard, kPipeDMLiquidCtrlBoard, kDrawBarDMLiquidCtrlBoard)) {
evaporationBinWS.initAsInput(PC7, kxs_gpio_nopull, kxs_gpio_no_irq, true /*mirror*/);
deviceBottomWS.initAsInput(PC8, kxs_gpio_nopull, kxs_gpio_no_irq, true /*mirror*/);
bindDeviceBottomWS();
bindEvaporationBinWS();
}
if (isBoardType(kLargeSpaceDMLiquidCtrlBoard, kSmallSpaceDMLiquidCtrlBoard, kPipeDMLiquidCtrlBoard, kDrawBarDMLiquidCtrlBoard)) {
// TMC电机初始化
LargeSpaceDMLiquidCtrlBoardHal::HSPI1_INIT();
tmcPowerGroup.initialize(PB2, {&hspi1, PC4 /*cs*/, PB13 /*en*/}, {&hspi1, PA4 /*cs*/, PB12 /*en*/});
bindTmcPowerGroup();
}
if (isBoardType(kLargeSpaceDMLiquidCtrlBoard, kSmallSpaceDMLiquidCtrlBoard, kPipeDMLiquidCtrlBoard, kDrawBarDMLiquidCtrlBoard)) {
// 三色指示灯初始化
wlDriver.initialize(PD8, PD7, PD9, PD10);
bindWlDriver();
}
if (isBoardType(kLargeSpaceDMLiquidCtrlBoard, kSmallSpaceDMLiquidCtrlBoard, kPipeDMLiquidCtrlBoard, kDrawBarDMLiquidCtrlBoard)) {
// 压力传感器初始化
osDelay(1500); // 等待传感器上电
LargeSpaceDMLiquidCtrlBoardHal::HUART3_INIT(9600, UART_STOPBITS_1);
psBus.initialize(&huart3);
bindPsBus();
}
// 比例阀初始化
if (isBoardType(kPipeDMLiquidCtrlBoard)) {
LargeSpaceDMLiquidCtrlBoardHal::HUART2_INIT(9600);
proportionalValveCtrl.initialize(&huart2);
bindProportionalValveCtrl();
}
// 气密性测试通道
if (isBoardType(kPipeDMLiquidCtrlBoard)) {
static ZGPIO airTightnessTestChGpio;
static ZGPIO eValve;
airTightnessTestChGpio.initAsOutput(PD15, kxs_gpio_nopull, true, false);
eValve.initAsOutput(PD14, kxs_gpio_nopull, false, true);
REG_LAMADA_FN(kfn_air_tightness_test_close_ch, [&](ProcessContext* cxt) {
airTightnessTestChGpio.write(1); // 内管路,气密性测试
eValve.write(0); // 电磁阀闭合
zcanbus_send_ack(cxt->packet, NULL, 0);
});
REG_LAMADA_FN(kfn_air_tightness_test_recover_ch, [&](ProcessContext* cxt) {
airTightnessTestChGpio.write(0); // 连接空气
eValve.write(1); // 电磁阀打开
zcanbus_send_ack(cxt->packet, NULL, 0);
});
}
}
/***********************************************************************************************************************
* PROTOCOL_BIND *
***********************************************************************************************************************/
void DisinfectionApp::bindHeaterCtrler() {
BIND_FN(HeaterController, &heaterCtrler, fn_heater_ctrl);
BIND_FN(HeaterController, &heaterCtrler, fn_heater_ctrl_safe_valve);
BIND_FN(HeaterController, &heaterCtrler, fn_heater_read_electric_current);
BIND_FN(HeaterController, &heaterCtrler, fn_heater_read_temperature_data);
}
void DisinfectionApp::bindBlowerCtrler() {
BIND_FN(BlowerController, &blowerCtrler, fn_blower_ctrl);
BIND_FN(BlowerController, &blowerCtrler, fn_blower_ctrl_safe_valve);
BIND_FN(BlowerController, &blowerCtrler, fn_blower_read_electric_current);
}
void DisinfectionApp::bindAirComCtrler() {
BIND_FN(AirCompressorController, &airComCtrler, fn_air_compressor_ctrl);
BIND_FN(AirCompressorController, &airComCtrler, fn_air_compressor_ctrl_safe_valve);
BIND_FN(AirCompressorController, &airComCtrler, fn_air_compressor_read_electric_current);
}
void DisinfectionApp::bindH2o2Sensor() {
BIND_FN(H2O2SensorDriver, &h2o2Sensor, fn_h2o2_sensor_read_calibration_date);
BIND_FN(H2O2SensorDriver, &h2o2Sensor, fn_h2o2_sensor_read_sub_ic_errorcode);
BIND_FN(H2O2SensorDriver, &h2o2Sensor, fn_h2o2_sensor_read_sub_ic_reg);
}
void DisinfectionApp::bindWlDriver() { BIND_FN(WarningLightDriver, wlDriver, fn_triple_warning_light_ctl); }
void DisinfectionApp::bindTmcPowerGroup() {
BIND_FN(TmcMotorGroup, tmcPowerGroup, fn_pump_rotate);
BIND_FN(TmcMotorGroup, tmcPowerGroup, fn_pump_stop);
BIND_FN(TmcMotorGroup, tmcPowerGroup, fn_pump_set_ihold_irun_idelay);
BIND_FN(TmcMotorGroup, tmcPowerGroup, fn_pump_set_acc);
BIND_FN(TmcMotorGroup, tmcPowerGroup, fn_pump_set_ramp);
BIND_FN(TmcMotorGroup, tmcPowerGroup, fn_pump_set_tzw);
BIND_FN(TmcMotorGroup, tmcPowerGroup, fn_pump_set_subic_reg);
BIND_FN(TmcMotorGroup, tmcPowerGroup, fn_pump_get_subic_reg);
BIND_FN(TmcMotorGroup, tmcPowerGroup, fn_pump_ping);
}
void DisinfectionApp::bindPsBus() {
BIND_FN(PXXPSBus, psBus, fn_psbus_read_data);
BIND_FN(PXXPSBus, psBus, fn_psbus_scan);
}
void DisinfectionApp::bindEvaporationBinWS() {
ProtocolProcesserMgr::ins()->regCmdProcesser( //
CmdProcesser(kfn_evaporation_tank_water_sensor_read_state, //
[this](ProcessContext* cxt) {
int32_t val = evaporationBinWS.read();
zcanbus_send_ack(cxt->packet, (uint8_t*)&val, sizeof(val));
}));
}
void DisinfectionApp::bindDeviceBottomWS() {
ProtocolProcesserMgr::ins()->regCmdProcesser( //
CmdProcesser(kfn_device_bottom_water_sensor_read_state, //
[this](ProcessContext* cxt) {
int32_t val = deviceBottomWS.read();
zcanbus_send_ack(cxt->packet, (uint8_t*)&val, sizeof(val));
}));
}
void DisinfectionApp::bindProportionalValveCtrl() {
BIND_FN(ProportionalValveCtrl, &proportionalValveCtrl, fn_proportional_set_valve);
BIND_FN(ProportionalValveCtrl, &proportionalValveCtrl, fn_proportional_read_pos);
BIND_FN(ProportionalValveCtrl, &proportionalValveCtrl, fn_proportional_is_busy);
}

158
usrc/app/dmapp.hpp

@ -4,13 +4,25 @@
/**
* @brief
* -
*
*
*
*
* -
* :
* 1.
* 2.
* -
* :
* 1. ()
*
* -
*
*/
namespace iflytop {
using namespace transmit_disfection_protocol;
#define TAG "LargeSpaceDmPowerCtrlBoard"
class DisinfectionApp {
public:
HeaterController heaterCtrler;
@ -18,133 +30,31 @@ class DisinfectionApp {
AirCompressorController airComCtrler;
H2O2SensorDriver h2o2Sensor;
ZGPIO evaporationBinWS; // 蒸发仓水浸
ZGPIO deviceBottomWS; // 设备底部水浸
WarningLightDriver wlDriver; // 报警灯
TmcMotorGroup tmcPowerGroup; // TMC电机
PXXPSBus psBus; // PXX压力传感器总线
ZGPIO evaporationBinWS; // 蒸发仓水浸
ZGPIO deviceBottomWS; // 设备底部水浸
WarningLightDriver wlDriver; // 报警灯
TmcMotorGroup tmcPowerGroup; // TMC电机
PXXPSBus psBus; // PXX压力传感器总线
ProportionalValveCtrl proportionalValveCtrl; // 比例阀控制
public:
static DisinfectionApp* ins() {
static DisinfectionApp instance;
return &instance;
}
static DisinfectionApp* ins();
virtual const char* getName() { return "DisinfectionApp"; }
virtual const char* getName();
void initialize() {
initializeDevice();
regProtocol();
}
void initialize();
void initializeDevice() {
int btid = PublicBoard::ins()->getBoardTypeId();
//
if (isBoardType(kLargeSpaceDMPowerCtrlBoard, kSmallSpaceDMPowerCtrlBoard, kPipeDMPowerCtrlBoard, kDrawBarDMPowerCtrlBoard)) {
heaterCtrler.initialize(PC7, &hadc1, ADC_CHANNEL_2, &hadc1, ADC_CHANNEL_8);
}
if (isBoardType(kLargeSpaceDMPowerCtrlBoard, kSmallSpaceDMPowerCtrlBoard, kPipeDMPowerCtrlBoard, kDrawBarDMPowerCtrlBoard)) {
blowerCtrler.initialize(PC5, &hadc1, ADC_CHANNEL_1);
}
if (isBoardType(kLargeSpaceDMPowerCtrlBoard, kSmallSpaceDMPowerCtrlBoard, kPipeDMPowerCtrlBoard, kDrawBarDMPowerCtrlBoard)) {
airComCtrler.initialize(PC3, &hadc1, ADC_CHANNEL_0);
}
if (isBoardType(kLargeSpaceDMPowerCtrlBoard, kSmallSpaceDMPowerCtrlBoard, kPipeDMPowerCtrlBoard, kDrawBarDMPowerCtrlBoard)) {
h2o2Sensor.initialize(&huart3, &hadc1, ADC_CHANNEL_10);
}
if (isBoardType(kLargeSpaceDMLiquidCtrlBoard, kSmallSpaceDMLiquidCtrlBoard, kPipeDMLiquidCtrlBoard, kDrawBarDMLiquidCtrlBoard)) {
evaporationBinWS.initAsInput(PC7, kxs_gpio_nopull, kxs_gpio_no_irq, true /*mirror*/);
deviceBottomWS.initAsInput(PC8, kxs_gpio_nopull, kxs_gpio_no_irq, true /*mirror*/);
}
if (isBoardType(kLargeSpaceDMLiquidCtrlBoard, kSmallSpaceDMLiquidCtrlBoard, kPipeDMLiquidCtrlBoard, kDrawBarDMLiquidCtrlBoard)) {
// TMC电机初始化
LargeSpaceDMLiquidCtrlBoardHal::HSPI1_INIT();
tmcPowerGroup.initialize(PB2, {&hspi1, PC4 /*cs*/, PB13 /*en*/}, {&hspi1, PA4 /*cs*/, PB12 /*en*/});
}
if (isBoardType(kLargeSpaceDMLiquidCtrlBoard, kSmallSpaceDMLiquidCtrlBoard, kPipeDMLiquidCtrlBoard, kDrawBarDMLiquidCtrlBoard)) {
// 三色指示灯初始化
wlDriver.initialize(PD8, PD7, PD9, PD10);
}
if (isBoardType(kLargeSpaceDMLiquidCtrlBoard, kSmallSpaceDMLiquidCtrlBoard, kPipeDMLiquidCtrlBoard, kDrawBarDMLiquidCtrlBoard)) {
// 压力传感器初始化
osDelay(1500); // 等待传感器上电
LargeSpaceDMLiquidCtrlBoardHal::HUART3_INIT(9600, UART_STOPBITS_1);
psBus.initialize(&huart3);
}
}
void regProtocol() {
if (heaterCtrler.isInitialized()) {
BIND_FN(HeaterController, &heaterCtrler, fn_heater_ctrl);
BIND_FN(HeaterController, &heaterCtrler, fn_heater_ctrl_safe_valve);
BIND_FN(HeaterController, &heaterCtrler, fn_heater_read_electric_current);
BIND_FN(HeaterController, &heaterCtrler, fn_heater_read_temperature_data);
}
if (blowerCtrler.isInitialized()) {
BIND_FN(BlowerController, &blowerCtrler, fn_blower_ctrl);
BIND_FN(BlowerController, &blowerCtrler, fn_blower_ctrl_safe_valve);
BIND_FN(BlowerController, &blowerCtrler, fn_blower_read_electric_current);
}
if (airComCtrler.isInitialized()) {
BIND_FN(AirCompressorController, &airComCtrler, fn_air_compressor_ctrl);
BIND_FN(AirCompressorController, &airComCtrler, fn_air_compressor_ctrl_safe_valve);
BIND_FN(AirCompressorController, &airComCtrler, fn_air_compressor_read_electric_current);
}
if (h2o2Sensor.isInitialized()) {
BIND_FN(H2O2SensorDriver, &h2o2Sensor, fn_h2o2_sensor_read_calibration_date);
BIND_FN(H2O2SensorDriver, &h2o2Sensor, fn_h2o2_sensor_read_sub_ic_errorcode);
BIND_FN(H2O2SensorDriver, &h2o2Sensor, fn_h2o2_sensor_read_sub_ic_reg);
}
if (wlDriver.isInitialized()) {
BIND_FN(WarningLightDriver, wlDriver, fn_triple_warning_light_ctl);
}
if (tmcPowerGroup.isInitialized()) {
BIND_FN(TmcMotorGroup, tmcPowerGroup, fn_pump_rotate);
BIND_FN(TmcMotorGroup, tmcPowerGroup, fn_pump_stop);
BIND_FN(TmcMotorGroup, tmcPowerGroup, fn_pump_set_ihold_irun_idelay);
BIND_FN(TmcMotorGroup, tmcPowerGroup, fn_pump_set_acc);
BIND_FN(TmcMotorGroup, tmcPowerGroup, fn_pump_set_ramp);
BIND_FN(TmcMotorGroup, tmcPowerGroup, fn_pump_set_tzw);
BIND_FN(TmcMotorGroup, tmcPowerGroup, fn_pump_set_subic_reg);
BIND_FN(TmcMotorGroup, tmcPowerGroup, fn_pump_get_subic_reg);
BIND_FN(TmcMotorGroup, tmcPowerGroup, fn_pump_ping);
}
if (psBus.isInitialized()) {
BIND_FN(PXXPSBus, psBus, fn_psbus_read_data);
BIND_FN(PXXPSBus, psBus, fn_psbus_scan);
}
if (evaporationBinWS.isInited()) {
ProtocolProcesserMgr::ins()->regCmdProcesser( //
CmdProcesser(kfn_evaporation_tank_water_sensor_read_state, //
[this](ProcessContext* cxt) {
int32_t val = evaporationBinWS.read();
zcanbus_send_ack(cxt->packet, (uint8_t*)&val, sizeof(val));
}));
}
if (deviceBottomWS.isInited()) {
ProtocolProcesserMgr::ins()->regCmdProcesser( //
CmdProcesser(kfn_device_bottom_water_sensor_read_state, //
[this](ProcessContext* cxt) {
int32_t val = deviceBottomWS.read();
zcanbus_send_ack(cxt->packet, (uint8_t*)&val, sizeof(val));
}));
}
}
private:
void bindHeaterCtrler();
void bindBlowerCtrler();
void bindAirComCtrler();
void bindH2o2Sensor();
void bindWlDriver();
void bindTmcPowerGroup();
void bindPsBus();
void bindEvaporationBinWS();
void bindDeviceBottomWS();
void bindProportionalValveCtrl();
};
#undef TAG
} // namespace iflytop

5
usrc/base/protocol_processer_mgr.hpp

@ -1,8 +1,9 @@
#pragma once
#include "protocol_processer_utils.hpp"
#define REG_FN(fn) ProtocolProcesserMgr::ins()->regCmdProcesser(CmdProcesser(k##fn, bind(&ThisClass::fn, this, placeholders::_1)))
#define BIND_FN(ClassName, obj, fn) ProtocolProcesserMgr::ins()->regCmdProcesser(CmdProcesser(k##fn, bind(&ClassName::fn, obj, placeholders::_1)));
#define REG_FN(fn) ProtocolProcesserMgr::ins()->regCmdProcesser(CmdProcesser(k##fn, bind(&ThisClass::fn, this, placeholders::_1)))
#define REG_LAMADA_FN(kfn, lamadafn) ProtocolProcesserMgr::ins()->regCmdProcesser(CmdProcesser(kfn, lamadafn))
#define BIND_FN(ClassName, obj, fn) ProtocolProcesserMgr::ins()->regCmdProcesser(CmdProcesser(k##fn, bind(&ClassName::fn, obj, placeholders::_1)));
namespace iflytop {
using namespace std;

62
usrc/board/draw_bar_dm_board.hpp.xx

@ -1,62 +0,0 @@
#pragma once
#include "board_base/board_base.hpp"
/**
* @brief
* 手持拉杆箱-功率控制板
* 1.鼓风机改成PWM驱动
* 2.去掉空压机,空压机
*
* 两块板写在一起
*
*
*
*/
namespace iflytop {
using namespace transmit_disfection_protocol;
#define TAG "DrawBarDMBoard"
class DrawBarDMBoard {
public:
HeaterController heaterCtrler;
BlowerController blowerCtrler;
AirCompressorController airComCtrler;
H2O2SensorDriver h2o2Sensor;
ZGPIO evaporationBinWS; // 蒸发仓水浸
ZGPIO deviceBottomWS; // 设备底部水浸
WarningLightDriver wlDriver; // 报警灯
TmcMotorGroup tmcPowerGroup; // TMC电机
PXXPSBus psBus; // PXX压力传感器总线
public:
static DrawBarDMBoard* ins() {
static DrawBarDMBoard instance;
return &instance;
}
void initialize() {
LargeSpaceDmPowerCtrlBoardHal::HADC1_INIT();
LargeSpaceDmPowerCtrlBoardHal::HUART3_INIT(19200, UART_STOPBITS_2);
heaterCtrler.initialize(PC7, &hadc1, ADC_CHANNEL_2, &hadc1, ADC_CHANNEL_8);
blowerCtrler.initialize(PC5, &hadc1, ADC_CHANNEL_1);
airComCtrler.initialize(PC3, &hadc1, ADC_CHANNEL_0);
h2o2Sensor.initialize(&huart3, &hadc1, ADC_CHANNEL_10);
AppPeriodTaskMgr::ins()->regTask("AirComAdc", DrawBarDMBoard::onTimeCb, this, 1000);
}
static void onTimeCb(void* handler) { ((DrawBarDMBoard*)handler)->onTimeCb(); }
void onTimeCb() {
heaterCtrler.periodTask();
blowerCtrler.periodTask();
airComCtrler.periodTask();
ZLOGI(TAG, "b:%d(%d), a:%d(%d), h:%d(%d) ht:%d(%d)", //
blowerCtrler.blower_read_electric_current(), blowerCtrler.blower_read_iadc(), //
airComCtrler.air_compressor_read_electric_current(), airComCtrler.air_compressor_read_iadc(), //
heaterCtrler.heater_read_electric_current(), heaterCtrler.heater_read_iadc(), //
heaterCtrler.heater_read_temperature_data(), heaterCtrler.heater_read_tadc());
}
};
#undef TAG
} // namespace iflytop

42
usrc/board/large_space_dm_liquid_ctrl_board.hpp.xx

@ -1,42 +0,0 @@
#pragma once
#include "board_base/board_base.hpp"
/**
* @brief
* 大空间消毒机-电流控制板
*/
namespace iflytop {
class LargeSpaceDmLiquidCtrlBoard {
public:
ZGPIO evaporationBinWS; // 蒸发仓水浸
ZGPIO deviceBottomWS; // 设备底部水浸
WarningLightDriver wlDriver; // 报警灯
TmcMotorGroup tmcPowerGroup; // TMC电机
PXXPSBus psBus; // PXX压力传感器总线
public:
static LargeSpaceDmLiquidCtrlBoard* ins() {
static LargeSpaceDmLiquidCtrlBoard instance;
return &instance;
}
void initialize() {
// 水浸初始化
evaporationBinWS.initAsInput(PC7, kxs_gpio_nopull, kxs_gpio_no_irq, true /*mirror*/);
deviceBottomWS.initAsInput(PC8, kxs_gpio_nopull, kxs_gpio_no_irq, true /*mirror*/);
// TMC电机初始化
LargeSpaceDMLiquidCtrlBoardHal::HSPI1_INIT();
tmcPowerGroup.initialize(PB2, {&hspi1, PC4 /*cs*/, PB13 /*en*/}, {&hspi1, PA4 /*cs*/, PB12 /*en*/});
// 三色指示灯初始化
wlDriver.initialize(PD8, PD7, PD9, PD10);
// 压力传感器初始化
osDelay(1500); // 等待传感器上电
LargeSpaceDMLiquidCtrlBoardHal::HUART3_INIT(9600, UART_STOPBITS_1);
psBus.initialize(&huart3);
}
static void onTimeCb(void* handler) {
LargeSpaceDmLiquidCtrlBoard* p = (LargeSpaceDmLiquidCtrlBoard*)handler;
p->onTimeCb();
}
void onTimeCb() {}
};
} // namespace iflytop

50
usrc/board/large_space_dm_power_ctrl_board.hpp.xx

@ -1,50 +0,0 @@
#pragma once
#include "board_base/board_base.hpp"
/**
* @brief
* 大空间消毒机-功率控制板
*/
namespace iflytop {
using namespace transmit_disfection_protocol;
#define TAG "LargeSpaceDmPowerCtrlBoard"
class LargeSpaceDmPowerCtrlBoard {
public:
HeaterController heaterCtrler;
BlowerController blowerCtrler;
AirCompressorController airComCtrler;
H2O2SensorDriver h2o2Sensor;
public:
static LargeSpaceDmPowerCtrlBoard* ins() {
static LargeSpaceDmPowerCtrlBoard instance;
return &instance;
}
void initialize() {
LargeSpaceDmPowerCtrlBoardHal::HADC1_INIT();
LargeSpaceDmPowerCtrlBoardHal::HUART3_INIT(19200, UART_STOPBITS_2);
heaterCtrler.initialize(PC7, &hadc1, ADC_CHANNEL_2, &hadc1, ADC_CHANNEL_8);
blowerCtrler.initialize(PC5, &hadc1, ADC_CHANNEL_1);
airComCtrler.initialize(PC3, &hadc1, ADC_CHANNEL_0);
h2o2Sensor.initialize(&huart3, &hadc1, ADC_CHANNEL_10);
AppPeriodTaskMgr::ins()->regTask("AirComAdc", LargeSpaceDmLiquidCtrlBoard::onTimeCb, this, 1000);
}
static void onTimeCb(void* handler) { ((LargeSpaceDmLiquidCtrlBoard*)handler)->onTimeCb(); }
void onTimeCb() {
heaterCtrler.periodTask();
blowerCtrler.periodTask();
airComCtrler.periodTask();
ZLOGI(TAG, "b:%d(%d), a:%d(%d), h:%d(%d) ht:%d(%d)", //
blowerCtrler.blower_read_electric_current(), blowerCtrler.blower_read_iadc(), //
airComCtrler.air_compressor_read_electric_current(), airComCtrler.air_compressor_read_iadc(), //
heaterCtrler.heater_read_electric_current(), heaterCtrler.heater_read_iadc(), //
heaterCtrler.heater_read_temperature_data(), heaterCtrler.heater_read_tadc());
}
};
#undef TAG
} // namespace iflytop

43
usrc/board/pipe_dm_liquid_ctrl_board.hpp.xx

@ -1,43 +0,0 @@
#pragma once
#include "board_base/board_base.hpp"
/**
* @brief
* 管道式-液路控制板
*
* 相比于大空间消毒机,不同的点:
* 1.增加比例阀控制
*/
namespace iflytop {
class PipeDMLiquidCtrlBoard {
public:
ZGPIO evaporationBinWS; // 蒸发仓水浸
ZGPIO deviceBottomWS; // 设备底部水浸
WarningLightDriver wlDriver; // 报警灯
TmcMotorGroup tmcPowerGroup; // TMC电机
PXXPSBus psBus; // PXX压力传感器总线
ProportionalValveCtrl proportionalValveCtrl;
public:
static PipeDMLiquidCtrlBoard* ins() {
static PipeDMLiquidCtrlBoard instance;
return &instance;
}
void initialize() {
// 水浸初始化
evaporationBinWS.initAsInput(PC7, kxs_gpio_nopull, kxs_gpio_no_irq, true /*mirror*/);
deviceBottomWS.initAsInput(PC8, kxs_gpio_nopull, kxs_gpio_no_irq, true /*mirror*/);
// TMC电机初始化
LargeSpaceDMLiquidCtrlBoardHal::HSPI1_INIT();
tmcPowerGroup.initialize(PB2, {&hspi1, PC4 /*cs*/, PB13 /*en*/}, {&hspi1, PA4 /*cs*/, PB12 /*en*/});
// 三色指示灯初始化
wlDriver.initialize(PD8, PD7, PD9, PD10);
// 压力传感器初始化
osDelay(1500); // 等待传感器上电
LargeSpaceDMLiquidCtrlBoardHal::HUART3_INIT(9600, UART_STOPBITS_1);
psBus.initialize(&huart3);
//
LargeSpaceDMLiquidCtrlBoardHal::HUART2_INIT(9600);
proportionalValveCtrl.initialize(&huart2);
}
};
} // namespace iflytop

37
usrc/board/pipe_dm_power_ctrl_board.hpp.xx

@ -1,37 +0,0 @@
#pragma once
#include "board_base/board_base.hpp"
/**
* @brief
* 管道式-功率控制板
*
* 相比于大空间消毒机,不同的点:
* 1. 风机改成鼓风机(可控风速)
*
*/
namespace iflytop {
using namespace transmit_disfection_protocol;
class PipeDMPowerCtrlBoard {
public:
HeaterController heaterCtrler;
BlowerController blowerCtrler;
AirCompressorController airComCtrler;
H2O2SensorDriver h2o2Sensor;
public:
static PipeDMPowerCtrlBoard* ins() {
static PipeDMPowerCtrlBoard instance;
return &instance;
}
void initialize() {
LargeSpaceDmPowerCtrlBoardHal::HADC1_INIT();
LargeSpaceDmPowerCtrlBoardHal::HUART2_INIT(9600, UART_STOPBITS_1);
LargeSpaceDmPowerCtrlBoardHal::HUART3_INIT(19200, UART_STOPBITS_2);
heaterCtrler.initialize(PC7, &hadc1, ADC_CHANNEL_2, &hadc1, ADC_CHANNEL_8);
blowerCtrler.initializeAsHighPowerUartBlower(&huart2);
airComCtrler.initialize(PC3, &hadc1, ADC_CHANNEL_0);
h2o2Sensor.initialize(&huart3, &hadc1, ADC_CHANNEL_10);
}
};
} // namespace iflytop

4
usrc/board_base/baseboard/large_space_dm_power_ctrl_board.cpp

@ -5,6 +5,10 @@
using namespace iflytop;
void LargeSpaceDmPowerCtrlBoardHal::HADC1_INIT() {
static bool inited = false;
if (inited) return;
inited = true;
__HAL_RCC_ADC1_CLK_ENABLE();
__HAL_RCC_GPIOA_CLK_ENABLE();
__HAL_RCC_GPIOB_CLK_ENABLE();

59
usrc/protocol_processer_impl/large_space_dm_liquid_ctrl_board_pp.hpp.xx

@ -1,59 +0,0 @@
#pragma once
#include "board/large_space_dm_liquid_ctrl_board.hpp"
namespace iflytop {
using namespace std;
using namespace zscanprotocol;
using namespace transmit_disfection_protocol;
// ------------------------------------------------------
#define TAG "LiquidCtrl"
#define ThisClass LargeSpaceDmLiquidCtrlBoardPP
#define DEVICE LargeSpaceDmLiquidCtrlBoard::ins()
// ------------------------------------------------------
class LargeSpaceDmLiquidCtrlBoardPP : public IProtocolProcesser {
public:
static LargeSpaceDmLiquidCtrlBoardPP* ins() {
static LargeSpaceDmLiquidCtrlBoardPP ins;
return &ins;
}
virtual const char* getName() override { return "LiquidCtrlBoardCmdProcesser"; };
virtual void initialize() override {
REG_FN(fn_evaporation_tank_water_sensor_read_state);
REG_FN(fn_device_bottom_water_sensor_read_state);
//
BIND_FN(WarningLightDriver, &DEVICE->wlDriver, fn_triple_warning_light_ctl);
BIND_FN(TmcMotorGroup, &DEVICE->tmcPowerGroup, fn_pump_rotate);
BIND_FN(TmcMotorGroup, &DEVICE->tmcPowerGroup, fn_pump_stop);
BIND_FN(TmcMotorGroup, &DEVICE->tmcPowerGroup, fn_pump_set_ihold_irun_idelay);
BIND_FN(TmcMotorGroup, &DEVICE->tmcPowerGroup, fn_pump_set_acc);
BIND_FN(TmcMotorGroup, &DEVICE->tmcPowerGroup, fn_pump_set_ramp);
BIND_FN(TmcMotorGroup, &DEVICE->tmcPowerGroup, fn_pump_set_tzw);
BIND_FN(TmcMotorGroup, &DEVICE->tmcPowerGroup, fn_pump_set_subic_reg);
BIND_FN(TmcMotorGroup, &DEVICE->tmcPowerGroup, fn_pump_get_subic_reg);
BIND_FN(TmcMotorGroup, &DEVICE->tmcPowerGroup, fn_pump_ping);
BIND_FN(PXXPSBus, &DEVICE->psBus, fn_psbus_read_data);
BIND_FN(PXXPSBus, &DEVICE->psBus, fn_psbus_scan);
}
private:
void fn_evaporation_tank_water_sensor_read_state(ProcessContext* cxt) {
int32_t val = DEVICE->evaporationBinWS.read();
zcanbus_send_ack(cxt->packet, (uint8_t*)&val, sizeof(val));
}
void fn_device_bottom_water_sensor_read_state(ProcessContext* cxt) {
int32_t val = DEVICE->deviceBottomWS.read();
zcanbus_send_ack(cxt->packet, (uint8_t*)&val, sizeof(val));
}
};
#undef ThisClass
#undef DEVICE
#undef TAG
} // namespace iflytop

50
usrc/protocol_processer_impl/large_space_dm_power_ctrl_board_pp.hpp.xx

@ -1,50 +0,0 @@
#pragma once
//
#include "board/large_space_dm_power_ctrl_board.hpp"
namespace iflytop {
using namespace std;
using namespace zscanprotocol;
using namespace transmit_disfection_protocol;
// /-----------------------------
#define TAG "LargeSpaceDmPowerCtrlBoardPP"
#define ThisClass LargeSpaceDmPowerCtrlBoardPP
#define DEVICE LargeSpaceDmPowerCtrlBoard::ins()
// /-----------------------------
class LargeSpaceDmPowerCtrlBoardPP : public IProtocolProcesser {
public:
static LargeSpaceDmPowerCtrlBoardPP* ins() {
static LargeSpaceDmPowerCtrlBoardPP ins;
return &ins;
}
virtual void initialize() override {
BIND_FN(HeaterController, &DEVICE->heaterCtrler, fn_heater_ctrl);
BIND_FN(HeaterController, &DEVICE->heaterCtrler, fn_heater_ctrl_safe_valve);
BIND_FN(HeaterController, &DEVICE->heaterCtrler, fn_heater_read_electric_current);
BIND_FN(HeaterController, &DEVICE->heaterCtrler, fn_heater_read_temperature_data);
BIND_FN(BlowerController, &DEVICE->blowerCtrler, fn_blower_ctrl);
BIND_FN(BlowerController, &DEVICE->blowerCtrler, fn_blower_ctrl_safe_valve);
BIND_FN(BlowerController, &DEVICE->blowerCtrler, fn_blower_read_electric_current);
BIND_FN(AirCompressorController, &DEVICE->airComCtrler, fn_air_compressor_ctrl);
BIND_FN(AirCompressorController, &DEVICE->airComCtrler, fn_air_compressor_ctrl_safe_valve);
BIND_FN(AirCompressorController, &DEVICE->airComCtrler, fn_air_compressor_read_electric_current);
BIND_FN(H2O2SensorDriver, &DEVICE->h2o2Sensor, fn_h2o2_sensor_read_calibration_date);
BIND_FN(H2O2SensorDriver, &DEVICE->h2o2Sensor, fn_h2o2_sensor_read_sub_ic_errorcode);
BIND_FN(H2O2SensorDriver, &DEVICE->h2o2Sensor, fn_h2o2_sensor_read_sub_ic_reg);
}
virtual const char* getName() override { return "LargeSpaceDmPowerCtrlBoardPP"; };
private:
};
#undef ThisClass
#undef DEVICE
#undef TAG
} // namespace iflytop

64
usrc/protocol_processer_impl/pipe_dm_liquid_ctrl_board_pp.hpp.xx

@ -1,64 +0,0 @@
#pragma once
#include "board/pipe_dm_liquid_ctrl_board.hpp"
namespace iflytop {
using namespace std;
using namespace zscanprotocol;
using namespace transmit_disfection_protocol;
// ------------------------------------------------------
#define TAG "LiquidCtrl"
#define ThisClass PipeDMLiquidCtrlBoardPP
#define DEVICE PipeDMLiquidCtrlBoard::ins()
// ------------------------------------------------------
class PipeDMLiquidCtrlBoardPP : public IProtocolProcesser {
public:
static PipeDMLiquidCtrlBoardPP* ins() {
static PipeDMLiquidCtrlBoardPP ins;
return &ins;
}
virtual const char* getName() override { return "LiquidCtrlBoardCmdProcesser"; };
virtual void initialize() override {
REG_FN(fn_evaporation_tank_water_sensor_read_state);
REG_FN(fn_device_bottom_water_sensor_read_state);
//
BIND_FN(WarningLightDriver, &DEVICE->wlDriver, fn_triple_warning_light_ctl);
BIND_FN(TmcMotorGroup, &DEVICE->tmcPowerGroup, fn_pump_rotate);
BIND_FN(TmcMotorGroup, &DEVICE->tmcPowerGroup, fn_pump_stop);
BIND_FN(TmcMotorGroup, &DEVICE->tmcPowerGroup, fn_pump_set_ihold_irun_idelay);
BIND_FN(TmcMotorGroup, &DEVICE->tmcPowerGroup, fn_pump_set_acc);
BIND_FN(TmcMotorGroup, &DEVICE->tmcPowerGroup, fn_pump_set_ramp);
BIND_FN(TmcMotorGroup, &DEVICE->tmcPowerGroup, fn_pump_set_tzw);
BIND_FN(TmcMotorGroup, &DEVICE->tmcPowerGroup, fn_pump_set_subic_reg);
BIND_FN(TmcMotorGroup, &DEVICE->tmcPowerGroup, fn_pump_get_subic_reg);
BIND_FN(TmcMotorGroup, &DEVICE->tmcPowerGroup, fn_pump_ping);
BIND_FN(PXXPSBus, &DEVICE->psBus, fn_psbus_read_data);
BIND_FN(PXXPSBus, &DEVICE->psBus, fn_psbus_scan);
// kfnProportionalValveCtrl
BIND_FN(ProportionalValveCtrl, &DEVICE->proportionalValveCtrl, fn_proportional_set_valve);
BIND_FN(ProportionalValveCtrl, &DEVICE->proportionalValveCtrl, fn_proportional_read_pos);
BIND_FN(ProportionalValveCtrl, &DEVICE->proportionalValveCtrl, fn_proportional_is_busy);
}
private:
void fn_evaporation_tank_water_sensor_read_state(ProcessContext* cxt) {
int32_t val = DEVICE->evaporationBinWS.read();
zcanbus_send_ack(cxt->packet, (uint8_t*)&val, sizeof(val));
}
void fn_device_bottom_water_sensor_read_state(ProcessContext* cxt) {
int32_t val = DEVICE->deviceBottomWS.read();
zcanbus_send_ack(cxt->packet, (uint8_t*)&val, sizeof(val));
}
};
#undef ThisClass
#undef DEVICE
#undef TAG
} // namespace iflytop

50
usrc/protocol_processer_impl/pipe_dm_power_ctrl_board_pp.hpp.xx

@ -1,50 +0,0 @@
#pragma once
//
#include "board/pipe_dm_power_ctrl_board.hpp"
namespace iflytop {
using namespace std;
using namespace zscanprotocol;
using namespace transmit_disfection_protocol;
// /-----------------------------
#define TAG "PipeDMPowerCtrlBoardPP"
#define ThisClass PipeDMPowerCtrlBoardPP
#define DEVICE PipeDMPowerCtrlBoard::ins()
// /-----------------------------
class PipeDMPowerCtrlBoardPP : public IProtocolProcesser {
public:
static PipeDMPowerCtrlBoardPP* ins() {
static PipeDMPowerCtrlBoardPP ins;
return &ins;
}
virtual void initialize() override {
BIND_FN(HeaterController, &DEVICE->heaterCtrler, fn_heater_ctrl);
BIND_FN(HeaterController, &DEVICE->heaterCtrler, fn_heater_ctrl_safe_valve);
BIND_FN(HeaterController, &DEVICE->heaterCtrler, fn_heater_read_electric_current);
BIND_FN(HeaterController, &DEVICE->heaterCtrler, fn_heater_read_temperature_data);
BIND_FN(BlowerController, &DEVICE->blowerCtrler, fn_blower_ctrl);
BIND_FN(BlowerController, &DEVICE->blowerCtrler, fn_blower_ctrl_safe_valve);
BIND_FN(BlowerController, &DEVICE->blowerCtrler, fn_blower_read_electric_current);
BIND_FN(AirCompressorController, &DEVICE->airComCtrler, fn_air_compressor_ctrl);
BIND_FN(AirCompressorController, &DEVICE->airComCtrler, fn_air_compressor_ctrl_safe_valve);
BIND_FN(AirCompressorController, &DEVICE->airComCtrler, fn_air_compressor_read_electric_current);
BIND_FN(H2O2SensorDriver, &DEVICE->h2o2Sensor, fn_h2o2_sensor_read_calibration_date);
BIND_FN(H2O2SensorDriver, &DEVICE->h2o2Sensor, fn_h2o2_sensor_read_sub_ic_errorcode);
BIND_FN(H2O2SensorDriver, &DEVICE->h2o2Sensor, fn_h2o2_sensor_read_sub_ic_reg);
}
virtual const char* getName() override { return "PipeDMPowerCtrlBoardPP"; };
private:
};
#undef ThisClass
#undef DEVICE
#undef TAG
} // namespace iflytop
Loading…
Cancel
Save