仓库提交练习
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.

137 lines
5.7 KiB

/*
* msp_ground_management.c
*
* Created on: 2026115
* 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");
}
}