void PID_Parameter_Init(PID *sptr) { sptr->SumError = 0; sptr->LastError = 0; sptr->PrevError = 0; sptr->LastData = 0; } int PID_Realize(PID *sptr, float *PID, int NowData, int Point) { int Realize; sptr->Dis_Err = Point - NowData; sptr->SumError += PID[KI] * sptr->Dis_Err; if (sptr->SumError >= PID[KT]) { sptr->SumError = PID[KT]; } else if (sptr->SumError <= -PID[KT]) { sptr->SumError = -PID[KT]; } Realize = PID[KP] * sptr->Dis_Err + sptr->SumError + PID[KD] *(sptr->Dis_Err - sptr->LastError); // + PID[KB] * ( NowData- sptr->LastData); sptr->PrevError = sptr->LastError; sptr->LastError = sptr->Dis_Err; sptr->LastData = NowData; return Realize; }错误修改之后的代码
时间: 2024-04-16 14:29:33 浏览: 136
根据您提供的代码和错误信息,我注意到以下个问题需要修正:
1. `PID` 结构体的定义未给出。请确保在代码中定义了 `PID` 结构体为其成员变量赋予正确的类型。
2. `PID_Parameter_Init` 函数和 `PID_Realize` 函数中使用的 `PID` 数组未给出定义或初始化。请确保在代码中定义了 `PID` 数组,并为其元素赋予正确的值。
3. `KI`、`KT`、`KP`、`KD` 和 `KB` 是未定义的常量或宏。请确保在代码中定义了这些常量或宏,并为其赋予正确的值。
根据您的实际需求,您可以根据上述修正进行修改。下面是修改后的代码示例,请根据您的实际情况进行相应的修改:
```c
typedef struct {
float SumError;
float LastError;
float PrevError;
float LastData;
float Dis_Err;
} PID;
void PID_Parameter_Init(PID *sptr)
{
sptr->SumError = 0;
sptr->LastError = 0;
sptr->PrevError = 0;
sptr->LastData = 0;
}
int PID_Realize(PID *sptr, float *PID, int NowData, int Point)
{
int Realize;
sptr->Dis_Err = Point - NowData;
sptr->SumError += PID[KI] * sptr->Dis_Err;
if (sptr->SumError >= PID[KT])
{
sptr->SumError = PID[KT];
}
else if (sptr->SumError <= -PID[KT])
{
sptr->SumError = -PID[KT];
}
Realize = PID[KP] * sptr->Dis_Err
+ sptr->SumError
+ PID[KD] * (sptr->Dis_Err - sptr->LastError);
// + PID[KB] * (NowData - sptr->LastData);
sptr->PrevError = sptr->LastError;
sptr->LastError = sptr->Dis_Err;
sptr->LastData = NowData;
return Realize;
}
```
请根据您的实际需求,在代码中添加您需要的定义和逻辑。如果您需要进一步帮助,请提供更多关于 `PID` 结构体、`PID` 数组和常量/宏的信息,以便我可以更具体地指导您进行修正。
阅读全文