Browse Source

update

sunlight
zhaohe 11 months ago
parent
commit
90d365a1a4
  1. 2
      stm32components
  2. 5
      usrc/project_configs.h
  3. 87
      usrc/service/page/submenu/Page_muPumpTest.cpp
  4. 22
      usrc/service/page/submenu/Page_muPumpTest.hpp
  5. 2
      usrc/service/page/submenu/Page_muSettings.cpp
  6. 81
      usrc/service/pump_ctrl_service.cpp
  7. 5
      usrc/service/pump_ctrl_service.hpp

2
stm32components

@ -1 +1 @@
Subproject commit 3c9d276aab2de07bf1dfdcf5bd31c531efa311d9
Subproject commit f45df89965564db5c5ad518c7a704571726b8a6e

5
usrc/project_configs.h

@ -20,4 +20,7 @@
#define HARDWARE_VERSION 1 // 硬件版本
#define PROJECT "hand_acid_main_board" // 工程名称
#define APP_VERSION "101"
#define BLENAME "AciDisp"
#define BLENAME "AciDisp"
#define MAX_RPM 800
#define PUMP_TEST_RPM 500

87
usrc/service/page/submenu/Page_muPumpTest.cpp

@ -1,18 +1,101 @@
#include "Page_muPumpTest.hpp"
#include "service/pump_ctrl_service.hpp"
using namespace iflytop;
#define PAGE pg_muPumpTest
#define TAG "Page_muPumpTest"
static void Page_muPumpTest_onTimer(const void* tid) {
Page_muPumpTest* thisClass = (Page_muPumpTest*)pvTimerGetTimerID((TimerHandle_t)tid);
thisClass->onTimer();
}
void Page_muPumpTest::initialize() { //
IPageProcesser::initialize();
osTimerDef(statiUpdateTimer, Page_muPumpTest_onTimer);
statiUpdateTimerId = osTimerCreate(osTimer(statiUpdateTimer), osTimerPeriodic, this);
}
bool Page_muPumpTest::isBelongThisPage(int page) { return page == PAGE; }
void Page_muPumpTest::OnPageLoad(OnPageLoadContext*cxt) {}
void Page_muPumpTest::OnPageLoad(OnPageLoadContext* cxt) {
// motorTrunsBegin
if (!cxt->isFromPopWin) {
updateStatiInfo(0, 0);
m_pumpId = 1;
}
UIS->setVal(ob_muPumpTest_pumpId, m_pumpId + 1);
}
void Page_muPumpTest::OnInputFieldContentChange(uint8_t bid, const char* text) { //
ZLOGI(TAG, "bid:%d %s", bid, text);
// ob_muPumpTest_frompage
if (bid == ob_muPumpTest_pumpId) {
pumpChangeSelectId(atoi(text));
}
}
void Page_muPumpTest::OnButton(uint8_t bid, uint8_t val) {
ZLOGI(TAG, "bid:%d", bid);
if (bid == ob_muPumpTest_bak) {
pumpStop();
UIS->chpage(pg_muSettings);
} else if (bid == ob_muPumpTest_clearStati) {
ZLOGI(TAG, "clearStati");
clearStatisInfo();
} else if (bid == ob_muPumpTest_forward) {
ZLOGI(TAG, "forward");
pumpStart(1);
} else if (bid == ob_muPumpTest_bakward) {
ZLOGI(TAG, "bakward");
pumpStart(-1);
} else if (bid == ob_muPumpTest_stop) {
ZLOGI(TAG, "stop");
pumpStop();
}
}
}
/***********************************************************************************************************************
* LOGIC *
***********************************************************************************************************************/
void Page_muPumpTest::pumpStop() {
PUMPCS->stopRotate();
osTimerStop(statiUpdateTimerId);
updateStatiInfo();
}
void Page_muPumpTest::pumpStart(int32_t direction) {
PUMPCS->rotate(m_pumpId, direction);
osTimerStop(statiUpdateTimerId);
osTimerStart(statiUpdateTimerId, 300);
}
void Page_muPumpTest::pumpChangeSelectId(int id) {
if (id < 0 || id > 3) {
ZLOGW(TAG, "pumpId out of range");
return;
}
if ((id) != m_pumpId) {
ZLOGI(TAG, "pumpId change to %d", id);
m_pumpId = id;
PUMPCS->stopRotate();
clearStatisInfo();
}
}
void Page_muPumpTest::updateStatiInfo(float statiTruns, float statiVolum) {
m_statiTruns = statiTruns;
m_statiVolum = statiVolum;
UIS->setVal(ob_muPumpTest_statiTrun, zfmt("%.2f", m_statiTruns));
UIS->setVal(ob_muPumpTest_statiVolum, zfmt("%.2f", m_statiVolum));
}
void Page_muPumpTest::clearStatisInfo() {
updateStatiInfo(0, 0);
m_motorTrunsBegin = PUMPCS->getMotorNowPosR(m_pumpId);
}
void Page_muPumpTest::updateStatiInfo() {
double nowPos = PUMPCS->getMotorNowPosR(m_pumpId);
double truns = (nowPos - m_motorTrunsBegin);
float motorX_mLPR = getMotorMLPR(m_pumpId);
double volum = truns * motorX_mLPR;
updateStatiInfo(truns, volum);
}
void Page_muPumpTest::onTimer() { updateStatiInfo(); }

22
usrc/service/page/submenu/Page_muPumpTest.hpp

@ -8,19 +8,39 @@ class Page_muPumpTest : public IPageProcesser {
private:
/* data */
double m_motorTrunsBegin = 0;
int m_pumpId = 1;
float m_statiTruns = 0;
float m_statiVolum = 0;
osTimerId statiUpdateTimerId; //
public:
static Page_muPumpTest* ins() {
static Page_muPumpTest instance;
return &instance;
}
virtual void initialize();
private:
virtual bool isBelongThisPage(int page) override;
virtual void OnPageLoad(OnPageLoadContext*cxt) override;
virtual void OnPageLoad(OnPageLoadContext* cxt) override;
virtual void OnInputFieldContentChange(uint8_t bid, const char* text) override;
virtual void OnButton(uint8_t bid, uint8_t val) override;
private:
void updateStatiInfo(float statiTruns, float statiVolum);
void clearStatisInfo();
void updateStatiInfo();
void pumpStop();
void pumpStart(int32_t direction);
void pumpChangeSelectId(int id);
public:
void onTimer();
};
} // namespace iflytop

2
usrc/service/page/submenu/Page_muSettings.cpp

@ -56,7 +56,7 @@ void Page_muSettings::OnAppEvent(AppEvent_t* event) {
if (event->type == kAppEvent_BleConnectEvent) {
ZLOGI(TAG, "ble connect success");
UIS->setVal(PAGE, ob_muSettings_bleCliName, "绑定成功");
CS->setcfg(kcfg_bleClientName, event->d.bleName);
CS->setcfgAndFlush(kcfg_bleClientName, event->d.bleName);
m_scaning = false;
}
}

81
usrc/service/pump_ctrl_service.cpp

@ -81,8 +81,6 @@ void PumpCtrlService::stop() {
ZLOGI(TAG, "stop finish");
}
/***********************************************************************************************************************
* EXT *
***********************************************************************************************************************/
@ -92,22 +90,22 @@ void PumpCtrlService::reflux() {
m_thread.start(
[this]() {
ValveStateSyncService::ins()->setValveState(1);
int32_t pipeLenML = getCfgInt(kcfg_pipeLengthML);
for (size_t i = 0; i < PUMP_NUM; i++) {
TMC51X0* cur_motor = m_motors[i];
cur_motor->stop();
cur_motor->setXACTUAL(0);
ZLOGI(TAG, "pump %d move %f ml", i, -pipeLenML);
cur_motor->moveBy((int32_t)-pipeLenML * 1000, getMxRunRPM(i));
}
while (!m_thread.getExitFlag()) {
if (isAllReachTarget()) {
break;
}
osDelay(10);
ValveStateSyncService::ins()->setValveState(1);
int32_t pipeLenML = getCfgInt(kcfg_pipeLengthML);
for (size_t i = 0; i < PUMP_NUM; i++) {
TMC51X0* cur_motor = m_motors[i];
cur_motor->stop();
cur_motor->setXACTUAL(0);
ZLOGI(TAG, "pump %d move %f ml", i, -pipeLenML);
cur_motor->moveBy((int32_t)-pipeLenML * 1000, getMxRunRPM(i));
}
while (!m_thread.getExitFlag()) {
if (isAllReachTarget()) {
break;
}
osDelay(10);
}
stopAll();
@ -130,7 +128,7 @@ void PumpCtrlService::acidPrefilling() {
cur_motor->stop();
cur_motor->setXACTUAL(0);
ZLOGI(TAG, "pump %d move %f ml", i, pipeLenML);
cur_motor->moveBy((int32_t)pipeLenML * 1000, getMxRunRPM(i));
cur_motor->moveBy((int32_t)pipeLenML * 1000, getMxRunRPM(i));
}
while (!m_thread.getExitFlag()) {
@ -143,7 +141,7 @@ void PumpCtrlService::acidPrefilling() {
// ¶Ì»ØÁ÷
for (size_t i = 0; i < PUMP_NUM; i++) {
TMC51X0* cur_motor = m_motors[i];
cur_motor->moveBy(-(int32_t)(APPEND_ML) * 1000, getMxRunRPM(i));
cur_motor->moveBy(-(int32_t)(APPEND_ML) * 1000, getMxRunRPM(i));
}
while (!isAllReachTarget()) {
@ -198,15 +196,15 @@ void PumpCtrlService::doMoveOnce() {
ValveStateSyncService::ins()->setValveState(1);
for (size_t i = 0; i < PUMP_NUM; i++) {
bool pumpselect = GSM->getPumpSelectState(i);
float distribut_ml = getCfgFloat(config_index_t(kcfg_acideval0 + i));
bool pumpselect = GSM->getPumpSelectState(i);
float distribut_ml = getCfgFloat(config_index_t(kcfg_acideval0 + i));
TMC51X0* cur_motor = m_motors[i];
cur_motor->stop();
cur_motor->setXACTUAL(0);
if (pumpselect) {
ZLOGI(TAG, "pump %d move %f ml", i, distribut_ml);
cur_motor->moveBy((int32_t)(distribut_ml + APPEND_ML) * 1000, getMxRunRPM(i));
cur_motor->moveBy((int32_t)(distribut_ml + APPEND_ML) * 1000, getMxRunRPM(i));
}
}
@ -216,13 +214,13 @@ void PumpCtrlService::doMoveOnce() {
// »ØÁ÷
for (size_t i = 0; i < PUMP_NUM; i++) {
bool pumpselect = GSM->getPumpSelectState(i);
bool pumpselect = GSM->getPumpSelectState(i);
TMC51X0* cur_motor = m_motors[i];
cur_motor->stop();
cur_motor->setXACTUAL(0);
if (pumpselect) {
cur_motor->moveBy(-(int32_t)(APPEND_ML) * 1000, getMxRunRPM(i));
cur_motor->moveBy(-(int32_t)(APPEND_ML) * 1000, getMxRunRPM(i));
}
}
@ -251,3 +249,36 @@ void PumpCtrlService::stopAll() {
}
return;
}
void PumpCtrlService::rotate(int32_t mid, int32_t direction) {
if (mid > 3) {
ZLOGE(TAG, "mid:%d is invalid", mid);
return;
}
if (isWorking()) {
ZLOGE(TAG, "rotate fail, PumpCtrlService isWorking");
return;
}
ValveStateSyncService::ins()->setValveState(1);
TMC51X0* cur_motor = m_motors[mid];
cur_motor->rotate(PUMP_TEST_RPM);
}
void PumpCtrlService::stopRotate() {
if (isWorking()) {
ZLOGE(TAG, "rotate fail, PumpCtrlService isWorking");
return;
}
while (!isAllReachTarget()) {
osDelay(10);
}
ValveStateSyncService::ins()->setValveState(0);
}
double PumpCtrlService::getMotorNowPosR(int32_t mid) {
if (mid > 3) {
ZLOGE(TAG, "mid:%d is invalid", mid);
return 0;
}
return m_motors[mid]->getXactualRAW() / 51200.0;
}

5
usrc/service/pump_ctrl_service.hpp

@ -34,6 +34,11 @@ class PumpCtrlService {
void acidPrefilling();
void stop();
public:
void rotate(int32_t mid, int32_t direction);
void stopRotate();
double getMotorNowPosR(int32_t mid);
private:
bool isAllReachTarget();
void stopAll();

Loading…
Cancel
Save