You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
136 lines
5.7 KiB
136 lines
5.7 KiB
/*
|
|
* 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((uint8_t *)&ground_management_handler->Tx_Buf,
|
|
(uint8_t *)&ground_management_handler->TxCount, ground_management_slave_id, 0,
|
|
8, (uint8_t *)dataToSend);
|
|
|
|
ground_management_handler->AddSendList(ground_management_handler,
|
|
ground_management_handler->Tx_Buf,
|
|
ground_management_handler->TxCount, OneLineWaitTime, NULL);
|
|
|
|
/***********寄存器8写德玛克电机速度*****************************/
|
|
MB_WriteHoldingReg((uint8_t *)&ground_management_handler->Tx_Buf,
|
|
(uint8_t *)&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((uint8_t *)&ground_management_handler->Tx_Buf,
|
|
(uint8_t *)&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((uint8_t *)&ground_management_handler->Tx_Buf,
|
|
(uint8_t *)&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((uint8_t *)&ground_management_handler->Tx_Buf,
|
|
(uint8_t *)&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((uint8_t *)&ground_management_handler->Tx_Buf, (uint8_t *)&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);
|
|
uint8_t MB_Decode_HoldingRegs(uint8_t buffer[], uint16_t length,uint16_t Read_Reg_Num,uint16_t* Decoded_Reg_Value);
|
|
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");
|
|
}
|
|
}
|
|
|
|
|