设为首页
收藏本站
开启辅助访问
切换到窄版
积分充值
登录
立即注册
微信扫码登录
首页
首页
共享资源
BBS
视频教程
AI聊天机器人
VIP充值
论坛
搜索
搜索
程序分享
文库分享
软件下载
变频手册
干货教程
成套课件
使用必看
GPT3.5免费体验版
万能程序翻译
WinCC脚本编程机器人(VIP免费)
GPT3.5完整版(VIP免费)
自控工程师3.5(VIP免费)
GPT4.0完整版-线路1(VIP免费)
自控工程师4.0版-线路1(VIP免费)
GPT更多线路及版本
最新提现记录
恭喜
admin
于 2023-6-6 15:17 成功提现
500元
恭喜
admin
于 2023-5-3 09:45 成功提现
400元
本版
用户
智控联盟
»
共享资源
›
精选专区
›
ChatGPT专区
›
编程序专区
›
PID程序
返回列表
发新帖
PID程序
[复制链接]
1532
|
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免费)
万能程序翻译
编程序专区