设为首页
收藏本站
开启辅助访问
切换到窄版
积分充值
登录
立即注册
微信扫码登录
首页
首页
共享资源
BBS
视频教程
AI机器人
VIP充值
论坛
搜索
搜索
程序分享
文库分享
软件下载
变频手册
干货教程
成套课件
新版AI机器人
老版GPT
最新提现记录
恭喜
admin
于 2023-6-6 15:17 成功提现
500元
恭喜
admin
于 2023-5-3 09:45 成功提现
400元
本版
用户
智控联盟
»
共享资源
›
精选专区
›
ChatGPT专区
›
编程序专区
›
PID程序
返回列表
发新帖
PID程序
[复制链接]
1948
|
3
|
2023-3-29 01:31:19
来自手机
|
显示全部楼层
|
阅读模式
要求:
1.西门子1200PLC
2.SCL语言编程
3.偏差控制
4.模拟量输入
5.模拟量输
6输出上线限制
回复
使用道具
举报
chatGPT_小控
|
2023-3-29 01:32:06
|
显示全部楼层
下面是一个简单的PID控制程序,满足你的要求:
[code]
FUNCTION_BLOCK PID_Control
VAR_INPUT
Setpoint: REAL; // 设定值
ProcessValue: REAL; // 过程量值
END_VAR
VAR_OUTPUT
Output: REAL; // 控制器输出
END_VAR
VAR_IN_OUT
Kp: REAL := 1.0; // 比例常数
Ki: REAL := 0.5; // 积分常数
Kd: REAL := 0.2; // 微分常数
Integral: REAL := 0.0; // 积分部分
Derivative: REAL := 0.0; // 微分部分
LastError: REAL := 0.0; // 上次偏差
OutputMin: REAL := -10.0; // 控制器输出下限
OutputMax: REAL := 10.0; // 控制器输出上限
END_VAR
// 计算本次偏差和累计偏差
LastError := Setpoint - ProcessValue;
Integral := Integral + LastError;
Derivative := LastError - Derivative;
// 计算控制器输出
Output := Kp * LastError + Ki * Integral + Kd * Derivative;
// 控制器输出上下限限制
IF Output < OutputMin THEN
Output := OutputMin;
ELSIF Output > OutputMax THEN
Output := OutputMax;
END_IF;
END_FUNCTION_BLOCK
[/code]
在程序中,我们定义了一个函数块`PID_Control`,以设定值`Setpoint`和过程量值`ProcessValue`为输入,以控制器输出`Output`为输出。在函数块内部,我们采用了PID控制的基本公式进行计算,其中包括比例、积分、微分三个部分。
需要注意的是,为了防止控制器输出超出上下限,我们在程序中加入了限幅处理。具体地,在计算结束后,我们检查输出是否超出了`OutputMin`和`OutputMax`的范围,并根据情况进行上下限限制。
回复
使用道具
举报
weng
|
2023-3-29 01:33:40
来自手机
|
显示全部楼层
用PI控制即可
回复
使用道具
举报
chatGPT_小控
|
2023-3-29 01:34:15
|
显示全部楼层
如果只需要使用PI控制,那么可以在上面的程序中去掉微分部分,即将代码中的`Kd`设为0。如下所示:
FUNCTION_BLOCK PI_ControlVAR_INPUT
Setpoint: REAL; // 设定值
ProcessValue: REAL; // 过程量值END_VARVAR_OUTPUT
Output: REAL; // 控制器输出END_VARVAR_IN_OUT
Kp: REAL := 1.0; // 比例常数
Ki: REAL := 0.5; // 积分常数
Integral: REAL := 0.0; // 积分部分
OutputMin: REAL := -10.0; // 控制器输出下限
OutputMax: REAL := 10.0; // 控制器输出上限END_VAR
// 计算本次偏差和累计偏差
LastError := Setpoint - ProcessValue;
Integral := Integral + LastError;
// 计算控制器输出,并进行上下限限制
Output := Kp * LastError + Ki * Integral;
IF Output < OutputMin THEN
Output := OutputMin;
ELSIF Output > OutputMax THEN
Output := OutputMax;
END_IF;
END_FUNCTION_BLOCK
整个程序的主体结构和上一个程序大致相同,只是在计算部分去掉了微分项。需要注意的是,在使用PI控制时,由于没有加入微分项,控制器输出可能会出现一定的超调现象。因此,需要针对实际场景进行调试,以获得最好的控制效果。
回复
使用道具
举报
返回列表
发新帖
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
|
立即注册
本版积分规则
发表回复
回帖后跳转到最后一页
weng
2
主题
3
帖子
75
积分
注册会员
注册会员, 积分 75, 距离下一级还需 125 积分
注册会员, 积分 75, 距离下一级还需 125 积分
积分
75
加好友
发消息
回复楼主
返回列表
用户使用心得及帮助
GPT3.5免费体验版
GPT3.5完整版(VIP免费)
自控工程师3.5(VIP免费)
伺服变频维修工程师(VIP免费)
GPT4.0-完整版-线路1(VIP免费)
GPT4.0-完整版-线路2(VIP免费)
GPT4.0-完整版-线路3(VIP免费)
自控工程师4.0版-线路1(VIP免费)
自控工程师4.0版-线路2(VIP免费)
自控工程师4.0版-线路3(VIP免费)
WinCC脚本编程机器人(VIP免费)
万能程序翻译
编程序专区