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

140 lines
4.8 KiB

/*
* msp_strain_gauge.c
*
* Created on: 20251125
* 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((uint8_t *)&strain_gauge_handler->Tx_Buf,
(uint8_t *)&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((uint8_t *)&strain_gauge_handler->Tx_Buf,
(uint8_t *)&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((uint8_t *)&strain_gauge_handler->Tx_Buf,
(uint8_t *)&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((uint8_t *)&strain_gauge_handler->Tx_Buf,
(uint8_t *)&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((uint8_t *)&strain_gauge_handler->Tx_Buf,
(uint8_t *)&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);
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, 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);
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, 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");
}
}