公司代码
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.
 
 
 

141 lines
3.5 KiB

/*
* DMK_485_Motor.c
*
* Created on: Jan 21, 2025
* Author: akeguo
*/
//DMKE Motor
#include "msp_DMKE_485_Motor.h"
DMKE_struct_define *DMKE_Motors[3];
struct UARTHandler *DMAKE_UART_Handler;
DispacherController *DMAKE_dispacherController;
char Is_First_Run = 0;
void decode_DMAKE(uint8_t *buffer, uint16_t length);
void DMAKE_Set();
void DMAKE_intialize(struct UARTHandler *Handler)
{
//TL720D_UART_Handler->UART_Decode = NULL;
DMAKE_UART_Handler = Handler;
DMAKE_UART_Handler->Wait_time = 30;
DMAKE_UART_Handler->UART_Decode = decode_DMAKE;
HardWareErrorController->Add_PCOMHardWare(HardWareErrorController,"DMAKE_1",0,DMAKE_1);
HardWareErrorController->Add_PCOMHardWare(HardWareErrorController,"DMAKE_2",0,DMAKE_2);
HardWareErrorController->Add_PCOMHardWare(HardWareErrorController,"DMAKE_3",0,DMAKE_3);
DMAKE_dispacherController = Handler->dispacherController;
DMAKE_dispacherController->DispacherCallTime = 20;
DMAKE_dispacherController->Add_Dispatcher_List(DMAKE_dispacherController,
DMAKE_Set);
//log_info("TL720D_intialize");
LOGFF(DL_ERROR, "TL720D_intialize");
}
void decode_DMAKE(uint8_t *buffer, uint16_t length)
{
/* CRC 校验 */
uint16_t crc_check = ((buffer[length - 1] << 8) | buffer[length - 2]);
/* CRC 校验正确 */
if (crc_check == MB_CRC16(buffer, length - 2))
{
if (buffer[0] == 1)
{
HardWareErrorController->Set_PCOMHardWare(HardWareErrorController,
"DMAKE_1", 1);
}
else if (buffer[0] == 2)
{
HardWareErrorController->Set_PCOMHardWare(HardWareErrorController,
"DMAKE_2", 1);
}
else if (buffer[0] == 3)
{
HardWareErrorController->Set_PCOMHardWare(HardWareErrorController,
"DMAKE_3", 1);
}
}
else
{
}
}
uint8_t DMAKE_UART_Tx_Buf[200];
uint8_t DMAKE_UART_TxCount = 0;
void DMAKE_Set()
{
if (Is_First_Run == 0)
{
for (int i = 0; i < 3; i++)
{
//clear faults
MB_WriteHoldingReg(&DMAKE_UART_Tx_Buf, &DMAKE_UART_TxCount, (uint8_t)(DMKE_Motors[i]->Slave_ID),
0x0131, 0x08);
DMAKE_UART_Handler->AddSendList(DMAKE_UART_Handler,
DMAKE_UART_Tx_Buf, DMAKE_UART_TxCount, 80, NULL);
////set paramters
MB_WriteHoldingReg(&DMAKE_UART_Tx_Buf, &DMAKE_UART_TxCount, (uint8_t)(DMKE_Motors[i]->Slave_ID),
0x0131, 0x23);
DMAKE_UART_Handler->AddSendList(DMAKE_UART_Handler,
DMAKE_UART_Tx_Buf, DMAKE_UART_TxCount, 80, NULL);
}
Is_First_Run = 1;
}
else
{
for (int i = 0; i < 3; i++)
{
//set speed
MB_WriteHoldingReg(&DMAKE_UART_Tx_Buf, &DMAKE_UART_TxCount, (uint8_t)(DMKE_Motors[i]->Slave_ID),
0x06a, DMKE_Motors[i]->TargetSpeedRpm);
DMAKE_UART_Handler->AddSendList(DMAKE_UART_Handler,
DMAKE_UART_Tx_Buf, DMAKE_UART_TxCount, 40, NULL);
//set direction
}
for (int i = 0; i < 3; i++)
{
//set direction
if (DMKE_Motors[i]->Command == -1)
{
//正转
MB_WriteHoldingReg(&DMAKE_UART_Tx_Buf, &DMAKE_UART_TxCount, (uint8_t)(DMKE_Motors[i]->Slave_ID),
0x033, 0x01);
}
else if (DMKE_Motors[i]->Command == 0)
{
//stop
MB_WriteHoldingReg(&DMAKE_UART_Tx_Buf, &DMAKE_UART_TxCount, (uint8_t)(DMKE_Motors[i]->Slave_ID),
0x033, 0);
}
else if (DMKE_Motors[i]->Command == 1)
{
//reverse
MB_WriteHoldingReg(&DMAKE_UART_Tx_Buf, &DMAKE_UART_TxCount, (uint8_t)(DMKE_Motors[i]->Slave_ID),
0x033, 0x14);
}
DMAKE_UART_Handler->AddSendList(DMAKE_UART_Handler,
DMAKE_UART_Tx_Buf, DMAKE_UART_TxCount, 40, NULL);
}
}
}