设为首页
收藏本站
开启辅助访问
切换到窄版
积分充值
登录
立即注册
微信扫码登录
首页
首页
共享资源
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专区
›
编程序专区
›
西门子 1200 PLC S型速度曲线程序 FB块
返回列表
发新帖
西门子 1200 PLC S型速度曲线程序 FB块
[复制链接]
2712
|
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免费)
万能程序翻译
编程序专区