/* * msp_strain_gauge.c * * Created on: 2025年11月25日 * Author: akeguo */ #include "msp_strain_gauge.h" //应变片采集模块 Strain_Gauge_Struct *strainGaugeValue; uint8_t strain_gauge_slave_id = 0x32; //默认为1 int SAVE_Register9=0; //设置55 保存KD int SAVE_Register23=0; //设置KD struct UARTHandler *strain_gauge_handler; DispacherController *strain_gauge_dispacherController; void strain_gauge_loop(); void decode_strain_gauge_01(uint8_t *buffer, uint16_t length); void decode_strain_gauge_09(uint8_t *buffer, uint16_t length); void strain_gauge_intialize(struct UARTHandler *Handler) { //strain_gauge_slave_id=slave_id; strain_gauge_handler = Handler; strain_gauge_handler->Wait_time = 10; //等待10ms 最低不要低于4; strain_gauge_dispacherController = Handler->dispacherController; strain_gauge_dispacherController->Dispacher_Enable = 1; //不周期性发送 strain_gauge_dispacherController->Add_Dispatcher_List( strain_gauge_dispacherController, strain_gauge_loop);//Dispatcher_List_Add_t bsp com helper.c HardWareErrorController->Add_PCOMHardWare(HardWareErrorController, "strain_gauge", 0, ComError_Strain_Gauge); LOG("strain_gauge_intialize"); } void strain_gauge_intialize_with_slaveid(struct UARTHandler *Handler, int slave_id) { strain_gauge_intialize(Handler); strain_gauge_slave_id = slave_id; } void strain_gauge_loop() { // 必须要初始化 strainGaugeValue //读取力 MB_ReadHoldingReg(&strain_gauge_handler->Tx_Buf, &strain_gauge_handler->TxCount, strain_gauge_slave_id, 1, 1); //03 command ; read 3 registers 从1 开始 读取1个 strain_gauge_handler->AddSendList(strain_gauge_handler, strain_gauge_handler->Tx_Buf, strain_gauge_handler->TxCount, OneLineWaitTime, decode_strain_gauge_01); //推杆控制 MB_WriteHoldingReg(&strain_gauge_handler->Tx_Buf, &strain_gauge_handler->TxCount, strain_gauge_slave_id, 0, strainGaugeValue->MotorControl);//strainGaugeValue->MotorControl 电机控制,=0 停止,=1 前进,=2 后退 strain_gauge_handler->AddSendList(strain_gauge_handler, strain_gauge_handler->Tx_Buf, strain_gauge_handler->TxCount, OneLineWaitTime, NULL); /*写寄存器2 3 KD**/ if(SAVE_Register23==1) { /*写寄存器2 K**/ MB_WriteHoldingReg(&strain_gauge_handler->Tx_Buf, &strain_gauge_handler->TxCount, strain_gauge_slave_id, 2, strainGaugeValue->HX711_K); strain_gauge_handler->AddSendList(strain_gauge_handler, strain_gauge_handler->Tx_Buf, strain_gauge_handler->TxCount, OneLineWaitTime, NULL); /*写寄存器3 D**/ MB_WriteHoldingReg(&strain_gauge_handler->Tx_Buf, &strain_gauge_handler->TxCount, strain_gauge_slave_id, 3, strainGaugeValue->HX711_D); strain_gauge_handler->AddSendList(strain_gauge_handler, strain_gauge_handler->Tx_Buf, strain_gauge_handler->TxCount, OneLineWaitTime, NULL); SAVE_Register23=0; } /*写寄存器9 设置为55保存KD**/ if(SAVE_Register9==1) { MB_WriteHoldingReg(&strain_gauge_handler->Tx_Buf, &strain_gauge_handler->TxCount, strain_gauge_slave_id, 9, strainGaugeValue->Save); strain_gauge_handler->AddSendList(strain_gauge_handler, strain_gauge_handler->Tx_Buf, strain_gauge_handler->TxCount, OneLineWaitTime, NULL); SAVE_Register9=0; } } int16_t decoded_strain_gauge_holdingReg_value[20]; //读取 00-02的寄存器 void decode_strain_gauge_01(uint8_t *buffer, uint16_t length) { // uint8_t data1[length]; // memcpy(data1, buffer, length); int decoded_result = MB_Decode_HoldingRegs(buffer, length, 1, &decoded_strain_gauge_holdingReg_value[1]); if (decoded_result == 1) { strainGaugeValue->Pressure = decoded_strain_gauge_holdingReg_value[1]; HardWareErrorController->Set_PCOMHardWare(HardWareErrorController, "strain_gauge", 1); // LOG("Battery_sensor succeeded and the force is %d", *CMCU06_ForceValue); } else { LOGFF(DL_ERROR, "strain_gauge_decoding failed"); } } //读取 09的寄存器 void decode_strain_gauge_09(uint8_t *buffer, uint16_t length) { // uint8_t data1[100]; // memcpy(data1, buffer, length); int decoded_result = MB_Decode_HoldingRegs(buffer, length, 2, &decoded_strain_gauge_holdingReg_value[9]); if (decoded_result == 1) { strainGaugeValue->Save = decoded_strain_gauge_holdingReg_value[9]; HardWareErrorController->Set_PCOMHardWare(HardWareErrorController, "strain_gauge", 1); // LOG("Battery_sensor succeeded and the force is %d", *CMCU06_ForceValue); } else { LOGFF(DL_ERROR, "strain_gauge_decoding failed"); } }