/* * msp_ground_management.c * * Created on: 2026年1月15日 * Author: xsq */ #include "msp_ground_management.h" #include "msp_strain_gauge.h" uint8_t ground_management_slave_id = 0x34; struct UARTHandler *ground_management_handler; ground_management_struct *ground_management_value; DispacherController *ground_management_dispacherController; void decode_ground_management(uint8_t *buffer, uint16_t length); void ground_management_intialize(struct UARTHandler *Handler) { ground_management_handler = Handler; ground_management_handler->Wait_time = 10; //等待10ms 最低不要低于4; ground_management_dispacherController = Handler->dispacherController; ground_management_dispacherController->Dispacher_Enable = 1; //不周期性发送 ground_management_dispacherController->Add_Dispatcher_List( ground_management_dispacherController, ground_management_inquiry); HardWareErrorController->Add_PCOMHardWare(HardWareErrorController, "ground_management", 0, ComError_Ground_Management); LOG("battery_intialize"); } void ground_management_intialize_with_slaveid(struct UARTHandler *Handler, int slave_id) { ground_management_intialize(Handler); ground_management_slave_id = slave_id; } uint16_t dataToSend[10]; uint16_t g_m_read_count= 10; uint16_t decoded_ground_management_holdingReg_value[20]; void ground_management_inquiry() { // void MB_WriteNumHoldingReg(uint8_t *Tx_Buf, uint8_t *TxCount_t, uint8_t _addr, // uint16_t _reg, uint16_t _num, uint8_t *_databuf) dataToSend[0] = SWAP_ENDIAN_16((uint16_t ) ground_management_value->K1); dataToSend[1] = SWAP_ENDIAN_16((uint16_t ) ground_management_value->K2); dataToSend[2] = SWAP_ENDIAN_16((uint16_t ) ground_management_value->K3); dataToSend[3] = SWAP_ENDIAN_16((uint16_t ) ground_management_value->K4); dataToSend[4] = SWAP_ENDIAN_16((uint16_t ) ground_management_value->K5_Default); dataToSend[5] = SWAP_ENDIAN_16( (uint16_t ) ground_management_value->MaualControlPower); dataToSend[6] = SWAP_ENDIAN_16( (uint16_t ) ground_management_value->MaualPowerState); ground_management_value->Time_Out_Period=400; dataToSend[7] = SWAP_ENDIAN_16( (uint16_t ) ground_management_value->Time_Out_Period); MB_WriteNumHoldingReg(&ground_management_handler->Tx_Buf, &ground_management_handler->TxCount, ground_management_slave_id, 0, 8, dataToSend); ground_management_handler->AddSendList(ground_management_handler, ground_management_handler->Tx_Buf, ground_management_handler->TxCount, OneLineWaitTime, NULL); /***********寄存器8写德玛克电机速度*****************************/ MB_WriteHoldingReg(&ground_management_handler->Tx_Buf, &ground_management_handler->TxCount, ground_management_slave_id, 8, GV.GroundManagementValue.DMK_Speed); ground_management_handler->AddSendList(ground_management_handler, ground_management_handler->Tx_Buf, ground_management_handler->TxCount, OneLineWaitTime, NULL); /***********寄存器9写德玛克电机状态*****************************/ MB_WriteHoldingReg(&ground_management_handler->Tx_Buf, &ground_management_handler->TxCount, ground_management_slave_id, 9, GV.GroundManagementValue.DMK_WorkState); ground_management_handler->AddSendList(ground_management_handler, ground_management_handler->Tx_Buf, ground_management_handler->TxCount, OneLineWaitTime, NULL); /********************************************************************/ if (ground_management_value->Save_To_Flash == 1) { /******************写寄存器7超时时间**************************/ MB_WriteHoldingReg(&ground_management_handler->Tx_Buf, &ground_management_handler->TxCount, ground_management_slave_id, 7, (uint16_t)ground_management_value->Time_Out_Period); ground_management_handler->AddSendList(ground_management_handler, ground_management_handler->Tx_Buf, ground_management_handler->TxCount, OneLineWaitTime, NULL); /***************************寄存器10 写入55保存数据*************************************/ MB_WriteHoldingReg(&ground_management_handler->Tx_Buf, &ground_management_handler->TxCount, ground_management_slave_id, 10, 55); ground_management_handler->AddSendList(ground_management_handler, ground_management_handler->Tx_Buf, ground_management_handler->TxCount, OneLineWaitTime, NULL); /*****************************************************/ ground_management_value->Save_To_Flash=0; } MB_ReadHoldingReg(&ground_management_handler->Tx_Buf, &ground_management_handler->TxCount, ground_management_slave_id, 0, g_m_read_count); ground_management_handler->AddSendList(ground_management_handler, ground_management_handler->Tx_Buf, ground_management_handler->TxCount, OneLineWaitTime, decode_ground_management); } void decode_ground_management(uint8_t *buffer, uint16_t length) { // uint8_t data1[length]; // memcpy(data1, buffer, length); int decoded_result = MB_Decode_HoldingRegs(buffer, length, g_m_read_count, &decoded_ground_management_holdingReg_value[0]); if (decoded_result == 1) { ground_management_value->Read_Time_Out_Period = decoded_ground_management_holdingReg_value[7]; HardWareErrorController->Set_PCOMHardWare(HardWareErrorController, "ground_management", 1); // LOG("Battery_sensor succeeded and the force is %d", *CMCU06_ForceValue); } else { LOGFF(DL_ERROR, "ground_management decoding failed"); } }