Browse Source

update

master
zhaohe 1 year ago
parent
commit
2a18c9d6aa
  1. 2
      app_protocols/transmit_disfection_protocol
  2. 9
      usrc/board/large_space_dm_liquid_ctrl_board.hpp
  3. 9
      usrc/board/large_space_dm_power_ctrl_board.hpp
  4. 21
      usrc/board/pipe_dm_liquid_ctrl_board.hpp
  5. 18
      usrc/board/pipe_dm_power_ctrl_board.hpp
  6. 52
      usrc/board_base/app_share/blower_controller.hpp
  7. 45
      usrc/board_base/app_share/proportional_valve_ctrl.hpp
  8. 34
      usrc/board_base/baseboard/large_space_dm_liquid_ctrl_board_hal.cpp
  9. 2
      usrc/board_base/baseboard/large_space_dm_liquid_ctrl_board_hal.hpp
  10. 3
      usrc/board_base/board_base.hpp
  11. 64
      usrc/protocol_processer_impl/pipe_dm_liquid_ctrl_board_pp.hpp
  12. 50
      usrc/protocol_processer_impl/pipe_dm_power_ctrl_board_pp.hpp
  13. 2
      zsdk

2
app_protocols/transmit_disfection_protocol

@ -1 +1 @@
Subproject commit a08705a05778e93df1922ffb42d889231ff09bf3
Subproject commit 8b73b00eacba449c5d71f7d9f0dab9abc54c6aaa

9
usrc/board/large_space_dm_liquid_ctrl_board.hpp

@ -1,5 +1,9 @@
#pragma once
#include "board_base/board_base.hpp"
/**
* @brief
* -
*/
namespace iflytop {
class LargeSpaceDmLiquidCtrlBoard {
public:
@ -27,15 +31,12 @@ class LargeSpaceDmLiquidCtrlBoard {
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() {
}
void onTimeCb() {}
};
} // namespace iflytop

9
usrc/board/large_space_dm_power_ctrl_board.hpp

@ -1,7 +1,10 @@
#pragma once
#include "board_base/board_base.hpp"
//
/**
* @brief
* -
*/
namespace iflytop {
#define H2O2_SENSOR_TYPE_HMP110
@ -22,12 +25,12 @@ class LargeSpaceDmPowerCtrlBoard {
}
void initialize() {
LargeSpaceDmPowerCtrlBoardHal::HADC1_INIT();
LargeSpaceDmPowerCtrlBoardHal::HUART2_INIT(19200, UART_STOPBITS_2);
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(&huart2, &hadc1, ADC_CHANNEL_10);
h2o2Sensor.initialize(&huart3, &hadc1, ADC_CHANNEL_10);
AppPeriodTaskMgr::ins()->regTask("AirComAdc", LargeSpaceDmLiquidCtrlBoard::onTimeCb, this, 1000);
}

21
usrc/board/pipe_dm_liquid_ctrl_board.hpp

@ -1,13 +1,21 @@
#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压力传感器总线
ZGPIO evaporationBinWS; // 蒸发仓水浸
ZGPIO deviceBottomWS; // 设备底部水浸
WarningLightDriver wlDriver; // 报警灯
TmcMotorGroup tmcPowerGroup; // TMC电机
PXXPSBus psBus; // PXX压力传感器总线
ProportionalValveCtrl proportionalValveCtrl;
public:
static PipeDMLiquidCtrlBoard* ins() {
@ -27,6 +35,9 @@ class PipeDMLiquidCtrlBoard {
osDelay(1500); // 等待传感器上电
LargeSpaceDMLiquidCtrlBoardHal::HUART3_INIT(9600, UART_STOPBITS_1);
psBus.initialize(&huart3);
//
LargeSpaceDMLiquidCtrlBoardHal::HUART2_INIT(9600);
proportionalValveCtrl.initialize(&huart2);
}
};
} // namespace iflytop

18
usrc/board/pipe_dm_power_ctrl_board.hpp

@ -1,8 +1,13 @@
#pragma once
#include "board_base/board_base.hpp"
//
/**
* @brief
* -
*
* :
* 1. ()
*
*/
namespace iflytop {
#define H2O2_SENSOR_TYPE_HMP110
using namespace transmit_disfection_protocol;
@ -21,12 +26,13 @@ class PipeDMPowerCtrlBoard {
}
void initialize() {
LargeSpaceDmPowerCtrlBoardHal::HADC1_INIT();
LargeSpaceDmPowerCtrlBoardHal::HUART2_INIT(19200, UART_STOPBITS_2);
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.initialize(PC5, &hadc1, ADC_CHANNEL_1);
blowerCtrler.initializeAsHighPowerUartBlower(&huart2);
airComCtrler.initialize(PC3, &hadc1, ADC_CHANNEL_0);
h2o2Sensor.initialize(&huart2, &hadc1, ADC_CHANNEL_10);
h2o2Sensor.initialize(&huart3, &hadc1, ADC_CHANNEL_10);
}
};
} // namespace iflytop

52
usrc/board_base/app_share/blower_controller.hpp

@ -4,23 +4,55 @@
namespace iflytop {
using namespace transmit_disfection_protocol;
typedef enum {
kIOBlower,
kHighPowerUartBlower,
kMiniPwmBlower,
} BlowerType_t;
class BlowerController {
ZGPIO m_Blowser_ctrlGpio;
ZADC m_Blowser_electricCurrentAdc;
BlowerType_t m_blowerType = kIOBlower;
// kIOBlower
ZGPIO m_ctrlGpio;
ZADC m_iadc;
// kHighPowerUartBlower
ModbusBlockHost m_modbusblock;
public:
void initialize(Pin_t ctrlGpio, ADC_HandleTypeDef* iadc, uint32_t ich) {
m_Blowser_ctrlGpio.initAsOutput(ctrlGpio, kxs_gpio_nopull, true, false);
m_Blowser_electricCurrentAdc.initialize("BlowserCurrentAdc", iadc, ich);
m_ctrlGpio.initAsOutput(ctrlGpio, kxs_gpio_nopull, true, false);
m_iadc.initialize("Blower-iadc", iadc, ich);
m_blowerType = kIOBlower;
}
// FN
void blower_ctrl(int32_t val) { m_Blowser_ctrlGpio.write(val); }
void initializeAsHighPowerUartBlower(UART_HandleTypeDef* huart) {
m_modbusblock.initialize(huart);
m_blowerType = kHighPowerUartBlower;
}
/***********************************************************************************************************************
* FN *
***********************************************************************************************************************/
void blower_ctrl(int32_t val) {
if (m_blowerType == kIOBlower) {
m_ctrlGpio.write(val);
} else if (m_blowerType == kHighPowerUartBlower) {
if (val > 0) {
m_modbusblock.writeReg06(1, 0x2000, 1, 100);
} else {
m_modbusblock.writeReg06(1, 0x2000, 6, 100);
}
}
}
void blower_ctrl_safe_valve(int32_t val) {}
int32_t blower_read_electric_current() { return blowserAdcToCurrent(m_Blowser_electricCurrentAdc.getCacheVal()); }
int32_t blower_read_iadc() { return m_Blowser_electricCurrentAdc.getCacheVal(); }
int32_t blower_read_electric_current() { return blowserAdcToCurrent(m_iadc.getCacheVal()); }
int32_t blower_read_iadc() { return m_iadc.getCacheVal(); }
// PP
/***********************************************************************************************************************
* PP *
***********************************************************************************************************************/
void fn_blower_ctrl(ProcessContext* cxt) { //
blower_ctrl(GET_PARAM(0));
zcanbus_send_ack(cxt->packet, NULL, 0);
@ -34,6 +66,6 @@ class BlowerController {
zcanbus_send_ack(cxt->packet, (uint8_t*)val, sizeof(val));
}
void periodTask() { m_Blowser_electricCurrentAdc.updateAdcValToCache(); }
void periodTask() { m_iadc.updateAdcValToCache(); }
};
} // namespace iflytop

45
usrc/board_base/app_share/proportional_valve_ctrl.hpp

@ -0,0 +1,45 @@
#pragma once
#include "base/appdep.hpp"
#include "zsdk/preportional_valve/preportional_valve_ctrl.hpp"
namespace iflytop {
using namespace transmit_disfection_protocol;
class ProportionalValveCtrl {
PreportionalValveCtrl valve;
public:
void initialize(UART_HandleTypeDef* huart) { valve.initialize(huart); }
void fn_proportional_set_valve(ProcessContext* cxt) {
int32_t err = valve.setValvePos(GET_PARAM(0), GET_PARAM(1));
if (err) {
zcanbus_send_errorack(cxt->packet, err);
} else {
zcanbus_send_ack(cxt->packet, NULL, 0);
}
}
void fn_proportional_read_pos(ProcessContext* cxt) {
int32_t pos = 0;
int32_t err = valve.getValvePos(GET_PARAM(0), &pos);
if (err) {
zcanbus_send_errorack(cxt->packet, err);
} else {
zcanbus_send_ack(cxt->packet, (uint8_t*)&pos, sizeof(pos));
}
}
void fn_proportional_is_busy(ProcessContext* cxt) {
int32_t busy = 0;
int32_t err = valve.isBusy(GET_PARAM(0), &busy);
if (err) {
zcanbus_send_errorack(cxt->packet, err);
} else {
zcanbus_send_ack(cxt->packet, (uint8_t*)&busy, sizeof(busy));
}
}
private:
};
} // namespace iflytop

34
usrc/board_base/baseboard/large_space_dm_liquid_ctrl_board_hal.cpp

@ -117,4 +117,38 @@ void LargeSpaceDMLiquidCtrlBoardHal::HUART3_INIT(int baudrate, uint32_t StopBits
HAL_NVIC_EnableIRQ(DMA1_Stream3_IRQn);
}
void LargeSpaceDMLiquidCtrlBoardHal::HUART2_INIT(int baudrate, uint32_t StopBits) {
__HAL_RCC_USART2_CLK_ENABLE();
__HAL_RCC_GPIOD_CLK_ENABLE();
GPIO_InitTypeDef GPIO_InitStruct = {0};
huart2.Instance = USART2;
huart2.Init.BaudRate = baudrate;
huart2.Init.WordLength = UART_WORDLENGTH_8B;
huart2.Init.StopBits = StopBits;
huart2.Init.Parity = UART_PARITY_NONE;
huart2.Init.Mode = UART_MODE_TX_RX;
huart2.Init.HwFlowCtl = UART_HWCONTROL_NONE;
huart2.Init.OverSampling = UART_OVERSAMPLING_16;
if (HAL_UART_Init(&huart2) != HAL_OK) {
Error_Handler();
}
UART_HandleTypeDef* uartHandle = &huart3;
/**USART2 GPIO Configuration
PD5 ------> USART2_TX
PD6 ------> USART2_RX
*/
GPIO_InitStruct.Pin = GPIO_PIN_5 | GPIO_PIN_6;
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
GPIO_InitStruct.Alternate = GPIO_AF7_USART2;
HAL_GPIO_Init(GPIOD, &GPIO_InitStruct);
/* USART2 interrupt Init */
HAL_NVIC_SetPriority(USART2_IRQn, 0, 0);
HAL_NVIC_EnableIRQ(USART2_IRQn);
}

2
usrc/board_base/baseboard/large_space_dm_liquid_ctrl_board_hal.hpp

@ -1,6 +1,7 @@
#pragma once
#include <stddef.h>
#include <stdio.h>
#include "base/appdep.hpp"
namespace iflytop {
@ -14,6 +15,7 @@ class LargeSpaceDMLiquidCtrlBoardHal {
* @param StopBits UART_STOPBITS_1 UART_STOPBITS_2
*/
static void HUART3_INIT(int baudrate, uint32_t StopBits);
static void HUART2_INIT(int baudrate, uint32_t StopBits = UART_STOPBITS_1);
private:
};

3
usrc/board_base/board_base.hpp

@ -4,9 +4,10 @@
#include "app_share/blower_controller.hpp"
#include "app_share/h2o2_sensor_driver.hpp"
#include "app_share/heater_controller.hpp"
#include "app_share/proportional_valve_ctrl.hpp"
#include "app_share/pxxpsbus.hpp"
#include "app_share/tmc_motor_group.hpp"
#include "app_share/warning_light_driver.hpp"
#include "app_share/pxxpsbus.hpp"
//
#include "baseboard/large_space_dm_liquid_ctrl_board_hal.hpp"
#include "baseboard/large_space_dm_power_ctrl_board.hpp"

64
usrc/protocol_processer_impl/pipe_dm_liquid_ctrl_board_pp.hpp

@ -0,0 +1,64 @@
#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

@ -0,0 +1,50 @@
#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

2
zsdk

@ -1 +1 @@
Subproject commit 5ac7e463529851914a95ecb77f17c7901fd01df6
Subproject commit 45dd7621fe18ad66544d4b74c7cad454d6e3bb05
Loading…
Cancel
Save