智能车制作

 找回密码
 注册

扫一扫,访问微社区

查看: 1423|回复: 6
打印 上一主题 下一主题

[咨询] 函数返回值一直为0的问题

[复制链接]

77

主题

126

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1546
威望
688
贡献
268
兑换币
276
注册时间
2013-2-25
在线时间
295 小时
毕业学校
dd
跳转到指定楼层
1#
发表于 2013-4-22 13:28:03 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
下面的函数返回值一直为0是怎么回事     我主函数里ceshi=IncPIDCalc(15);      出来结果也是0     


int IncPIDCalc(int NextPoint)//PID算法
{
   int iError,iIncpid; //当前误差
   iError = sptr->SetPoint - NextPoint; //增量计算
  iIncpid = sptr->Proportion * iError //E[k]项
             -sptr->Integral * sptr->LastError //E[k-1]项
             + sptr->Derivative * sptr->PrevError; //E[k-2]项
    sptr->PrevError = sptr->LastError; //存储误差,用于下次计算
    sptr->LastError = iError;
    return(iIncpid);
//返回增量值
}

77

主题

126

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1546
威望
688
贡献
268
兑换币
276
注册时间
2013-2-25
在线时间
295 小时
毕业学校
dd
7#
 楼主| 发表于 2013-4-22 15:18:07 | 只看该作者
249176669 发表于 2013-4-22 14:53
结构体使用方法不正确?

我是看不出有啥问题    你们看看    去掉结构体就OK了   不知道是我哪里弄错了

typedef struct PID
{
    int SetPoint; //设定目标 Desired Value
    int Proportion; //比例常数 Proportional Const
    int Integral; //积分常数 Integral Const
    int Derivative; //微分常数 Derivative Const
    int LastError; //Error[-1]
    int PrevError; //Error[-2]
} PID;
#define P_DATA 2
#define I_DATA 0
#define D_DATA 0
#define HAVE_NEW_VELOCITY 0X01//反馈

static PID sPID;
static PID *sptr = &sPID;

void IncPIDInit(void)//初始化PID
{
sptr->LastError = 0; //Error[-1]
sptr->PrevError = 0; //Error[-2]
sptr->Proportion = P_DATA; //比例常数 Proportional Const
sptr->Integral = I_DATA; //积分常数Integral Const
sptr->Derivative = D_DATA; //微分常数 Derivative Const
sptr->SetPoint =10; //目标是100
}

int IncPIDCalc(int NextPoint )//PID算法
{
   int iError;int iIncpid; //当前误差
  iError = sptr->SetPoint - NextPoint; //增量计算
  iIncpid = sptr->Proportion * iError //误差
             -sptr->Integral * sptr->LastError //前次误差
             + sptr->Derivative * sptr->PrevError; //前前次误差
    sptr->PrevError = sptr->LastError; //存储误差,用于下次计算
    sptr->LastError = iError;
    return(iIncpid);
//返回增量值
}

回复 支持 反对

使用道具 举报

6

主题

170

帖子

0

精华

常驻嘉宾

Rank: 8Rank: 8

积分
3402
威望
1766
贡献
1006
兑换币
794
注册时间
2012-2-3
在线时间
315 小时
毕业学校
北流高中
6#
发表于 2013-4-22 14:53:08 | 只看该作者
沉默遇上寡言 发表于 2013-4-22 14:41
晕死  把结构体去掉就行了    我表示对C语言表示很神秘啊   好多都莫名其妙

结构体使用方法不正确?
回复 支持 反对

使用道具 举报

77

主题

126

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1546
威望
688
贡献
268
兑换币
276
注册时间
2013-2-25
在线时间
295 小时
毕业学校
dd
5#
 楼主| 发表于 2013-4-22 14:41:18 | 只看该作者
exiao 发表于 2013-4-22 14:07
在函数里设置断点,看下变量的值

晕死  把结构体去掉就行了    我表示对C语言表示很神秘啊   好多都莫名其妙   
回复 支持 反对

使用道具 举报

77

主题

126

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1546
威望
688
贡献
268
兑换币
276
注册时间
2013-2-25
在线时间
295 小时
毕业学校
dd
4#
 楼主| 发表于 2013-4-22 14:07:58 | 只看该作者
机遇 发表于 2013-4-22 13:53
不要用返回值了 用全局变量试试

用全局也是一样啊
回复 支持 反对

使用道具 举报

1

主题

2067

帖子

0

精华

常驻嘉宾

Rank: 8Rank: 8

积分
5124

论坛元老奖章在线王奖章活跃会员奖章优秀会员奖章

威望
2752
贡献
898
兑换币
59
注册时间
2012-12-8
在线时间
737 小时
3#
发表于 2013-4-22 14:07:44 | 只看该作者
在函数里设置断点,看下变量的值
回复 支持 反对

使用道具 举报

24

主题

492

帖子

0

精华

杰出人士

Rank: 12Rank: 12Rank: 12

积分
13138
威望
5341
贡献
1645
兑换币
2222
注册时间
2012-3-9
在线时间
3076 小时
毕业学校
嘉兴学院
2#
发表于 2013-4-22 13:53:45 | 只看该作者
不要用返回值了 用全局变量试试
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

关于我们|联系我们|小黑屋|智能车制作 ( 黑ICP备2022002344号

GMT+8, 2024-9-20 20:39 , Processed in 0.154548 second(s), 28 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表