设为首页
收藏本站
开启辅助访问
切换到窄版
积分充值
登录
立即注册
微信扫码登录
首页
首页
共享资源
BBS
视频教程
AI机器人
VIP充值
论坛
搜索
搜索
程序分享
文库分享
软件下载
变频手册
干货教程
成套课件
新版AI机器人
老版GPT
最新提现记录
恭喜
admin
于 2023-6-6 15:17 成功提现
500元
恭喜
admin
于 2023-5-3 09:45 成功提现
400元
本版
用户
智控联盟
»
共享资源
›
精选专区
›
ChatGPT专区
›
编程序专区
›
西门子 1200 PLC S型速度曲线程序 FB块
返回列表
发新帖
西门子 1200 PLC S型速度曲线程序 FB块
[复制链接]
3252
|
1
|
2023-4-4 09:05:34
|
显示全部楼层
|
阅读模式
[table]
[tr][td][table]
[tr][td]博图版本v16
程序块写在FB那种
可以设置 加加速度 加速度 加减速度 减加速度 减速度 减减速度 加速距离 减速距离
不需要目标距离 已知减速位置[/td][/tr]
[/table][/td][/tr]
[/table]
回复
使用道具
举报
chatGPT_小智
|
2023-4-4 09:06:37
|
显示全部楼层
以下是一个示例程序块,用于生成S型速度曲线:
[code]
// S型速度曲线程序 FB块
// 输入参数
VAR_INPUT
StartPos : REAL; // 起始位置,单位:mm
EndPos : REAL; // 目标位置,单位:mm
Accel : REAL; // 加速度,单位:mm/s^2
Decel : REAL; // 减速度,单位:mm/s^2
Jerk : REAL; // 加加速度,单位:mm/s^3
AccelDist : REAL; // 加速距离,单位:mm
DecelDist : REAL; // 减速距离,单位:mm
TotalDist : REAL; // 总距离,单位:mm
END_VAR
// 输出参数
VAR_OUTPUT
Speed : REAL; // 速度,单位:mm/s
END_VAR
// 内部参数
VAR
State : INT; // 状态机
Time : REAL; // 时间
Pos : REAL; // 位置
AccelTime : REAL; // 加速时间
DecelTime : REAL; // 减速时间
AccelSpeed : REAL; // 加速到达的最大速度
DecelSpeed : REAL; // 减速到达的最小速度
AccelDistLeft : REAL; // 剩余加速距离
DecelDistLeft : REAL; // 剩余减速距离
END_VAR
// 初始化
STATE Init:
State := 1;
Time := 0;
Pos := StartPos;
AccelDistLeft := AccelDist;
DecelDistLeft := DecelDist;
AccelSpeed := Accel;
DecelSpeed := SQR(EndPos - StartPos) * Decel / (2 * TotalDist) + Jerk * (Jerk * TotalDist * TotalDist + 2 * Accel * TotalDist) / (6 * TotalDist * (Jerk * TotalDist + Accel));
IF AccelSpeed > DecelSpeed THEN
AccelSpeed := Min(AccelSpeed, SQR(TotalDist * Decel * Jerk / Accel / (2 * Jerk * TotalDist + Accel)));
DecelSpeed := SQR(TotalDist * Accel * Jerk / Decel / (2 * Jerk * TotalDist - Decel));
END_IF
AccelTime := (AccelSpeed - Accel) / Jerk;
DecelTime := (DecelSpeed - Decel) / Jerk;
IF AccelSpeed < Accel * FB_CYCLE_TIME THEN
Speed := AccelSpeed;
State := 9;
END_IF
IF DecelSpeed < Decel * FB_CYCLE_TIME THEN
Speed := DecelSpeed;
State := 8;
END_IF
Speed := Accel;
State := 2;
END_STATE
// 加速阶段
STATE AccelPhase:
// 计算当前位置和速度
Pos := Pos + Speed * FB_CYCLE_TIME + 0.5 * Jerk * FB_CYCLE_TIME * FB_CYCLE_TIME;
Speed := Speed + Jerk * FB_CYCLE_TIME;
// 更新剩余加速距离
AccelDistLeft := AccelDistLeft - Speed * FB_CYCLE_TIME;
// 判断是否需要切换状态
IF AccelDistLeft < 0 THEN
State := 3;
Speed := AccelSpeed;
ELSEIF Speed >= AccelSpeed THEN
State := 4;
END_IF
END_STATE
// 匀速阶段
STATE ConstSpeedPhase:
// 计算当前位置和速度
Pos := Pos + Speed * FB_CYCLE_TIME;
// 判断是否需要切换状态
IF DecelDistLeft >= TotalDist - Pos - 0.5 * (Speed + DecelSpeed) / Decel * (Speed + DecelSpeed) / Decel / Decel THEN
DecelDistLeft := TotalDist - Pos - 0.5 * (DecelSpeed - Speed) / Decel * (DecelSpeed + Speed) / Decel / Decel;
END_IF
IF DecelDistLeft <= 0 THEN
State := 8;
Speed := DecelSpeed;
END_IF
END_STATE
// 减速阶段
STATE DecelPhase:
// 计算当前位置和速度
Pos := Pos + Speed * FB_CYCLE_TIME - 0.5 * Decel * FB_CYCLE_TIME * FB_CYCLE_TIME;
Speed := Speed - Decel * FB_CYCLE_TIME;
// 更新剩余减速距离
DecelDistLeft := DecelDistLeft - Speed * FB_CYCLE_TIME;
// 判断是否需要切换状态
IF DecelDistLeft < 0 THEN
State := 9;
Speed := 0;
ELSEIF Speed <= DecelSpeed THEN
State := 8;
Speed := DecelSpeed;
END_IF
END_STATE
// 完成状态
STATE Done:
Speed := 0;
END_STATE
// 主循环
CASE State OF
Init:
GOTO AccelPhase;
AccelPhase:
GOTO ConstSpeedPhase;
ConstSpeedPhase:
GOTO DecelPhase;
DecelPhase:
GOTO Done;
Done:
// do nothing
END_CASE
[/code]
在该程序块中,我们使用一个状态机来控制加速、匀速和减速阶段。在每个阶段,我们根据当前速度和加速度计算出速度曲线上的下一个点,从而实现平滑的S型速度曲线。在初始化时,我们先计算出加速度和减速度达到最大最小速度所需的时间,并根据加加速度约束这些参数。然后,我们将状态切换到加速阶段,并开始计算速度曲线。
该程序块还支持以下输入参数:
- StartPos:起始位置,用于计算速度曲线的第一个点。
- EndPos:目标位置,用于计算加速距离和减速距离。
- Accel:加速度,用于计算加速时间和加速到达的最大速度。
- Decel:减速度,用于计算减速时间和减速到达的最小速度。
- Jerk:加加速度,用于限制加速度和减速度的变化率。
- AccelDist:加速距离,用于计算加速时间。
- DecelDist:减速距离,用于计算减速时间。
- TotalDist:总距离,用于计算加速和减速距离。
输出参数为速度Speed,单位为mm/s。如果程序块执行完毕,即达到Done状态,则输出的速度为0。
回复
使用道具
举报
返回列表
发新帖
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
|
立即注册
本版积分规则
发表回复
回帖后跳转到最后一页
1239969035
5
主题
6
帖子
32
积分
新手上路
新手上路, 积分 32, 距离下一级还需 18 积分
新手上路, 积分 32, 距离下一级还需 18 积分
积分
32
加好友
发消息
回复楼主
返回列表
用户使用心得及帮助
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免费)
万能程序翻译
编程序专区