#include <stdio.h>
#include <stdbool.h>
#define MolPump_SetParaId 0x0001
#define MOLPUMP_SETPARA_DEFAULTS {0,false,false,false,Def_Speed,Def_Acc,Def_UdcStop}
typedef struct
{
unsigned int StdId;
unsigned char Data[8];
} VCI_CAN_OBJ;
typedef struct
{
unsigned int Data0;
bool EnSystem;
bool EnDrive;
bool Decrease_flg;
float SpeedRef_krpm;
float Speed_acc_krpmps;
float UdcStop;
} MOLPUMP_SETPARA_Type;
MOLPUMP_SETPARA_Type MolPump_SetPara_TX = MOLPUMP_SETPARA_DEFAULTS;
int main () {
VCI_CAN_OBJ sendbuf;
sendbuf.StdId = MolPump_SetParaId;
if(MolPump_SetPara_TX.EnSystem == false)
{
sendbuf.Data[0] = 0;
MolPump_SetPara_TX.Data0 = sendbuf.Data[0] = (MolPump_SetPara_TX.Decrease_flg << 3) | 0B00000100;
}
else
{
MolPump_SetPara_TX.Data0 = sendbuf.Data[0] = (MolPump_SetPara_TX.EnDrive) | 0B00000001 + (MolPump_SetPara_TX.EnDrive <<2) | 0B00000010 + ((MolPump_SetPara_TX.Decrease_flg << 3) | 0B00000100);
}
sendbuf.Data[1] = 0;
sendbuf.Data[2] = 0;
sendbuf.Data[3] = (int)(MolPump_SetPara_TX.SpeedRef_krpm * 10) >> 8;
sendbuf.Data[4] = (int)(MolPump_SetPara_TX.SpeedRef_krpm * 10) - (sendbuf.Data[3] * 256);
sendbuf.Data[5] = (int)(MolPump_SetPara_TX.Speed_acc_krpmps * 100);
sendbuf.Data[6] = (int)(MolPump_SetPara_TX.UdcStop * 10) >> 8;;
sendbuf.Data[7] = (int)(MolPump_SetPara_TX.UdcStop * 10) - (sendbuf.Data[6] * 256);
for(int i = 0;i<8;i++)
{
printf("0x%x",sendbuf.Data[i]);
}
return 0;
}