关于运动控制中S型速度曲线的简单演示(C++实现)
疫情期间,居家隔离,时间不多,只能简单的就S速度曲线的来说,建模,写代码,然后编译,再用MATLAB来查看位置曲线、速度曲线和加速度曲线,以及加加速度曲线。
确当S型速度曲线的速度、加速度和位移公式应该从加加速度开始,这里设定在整个的运动过程中,加加速度aa都是固定值(在不同的时间段只有正负之分,但是绝对值是相同的)。
(论文:CNC系统S型曲线加减速算法的设计与实现)
上图为S型加减速的各种曲线,第一行为位移图与时间的关系,第二行为速度与时间的关系,第三行为加速度与时间的关系,第四行为加加速度的关系,时间段分为7个:t1(加加速段),t2(匀加速段),t3(加减速段),t4(匀速段),t5(减加速度段),t6(匀减速段),t7(减减速段)。
要使用加加速度的时间积分来求加速度,使用加速度的时间积分来求速度,使用速度的时间积分来求位置,其公式在程序中实现,大家可以自行推演。
鉴于S型加速度的复杂性,先只设定以上七个 时间段的时间段均相等。(在程序中的设定时间为10s)
关于具体的公式可以参看我的实现来具体的进行推演,因为我的都是在草稿纸上进行的,所以不在本文中具体说明。
实现代码如下:
#include "stdafx.h"
#include <iostream>
#include <fstream>
#include <Windows.h>
#include <math.h>
int _tmain(int argc, _TCHAR* argv[])
{AllocConsole();ofstream out(".\\test.txt",ios_base::ate);double temp_time=0; int times=0;double temp_aa; //临时加加速度double aa=100; //加加速度double a=0; //加速度double temp_vel=0;double temp_pos=0;//每段只有10S,每10s分1000段。while (TRUE){if(temp_time>=0&&temp_time<=10) //加加速度段{ temp_aa=aa;a=aa*temp_time;temp_pos=aa*(temp_time)*(temp_time)*temp_time/6; ;temp_vel=aa*(temp_time)*(temp_time)/2;}else if(temp_time>10&&temp_time<=20) //匀加速段{ temp_aa=0;a=10*aa;temp_vel=50*aa+10*aa*(temp_time-10); //加减速段temp_pos=1000*aa/6+5*aa*temp_time*temp_time-50*aa*temp_time;}else if(temp_time>20&&temp_time<=30){ temp_aa=-100;a=30*aa-aa*temp_time;temp_vel=30*aa*temp_time-aa*temp_time*temp_time/2-250*aa;temp_pos=1500*aa+15*aa*temp_time*temp_time-(aa*temp_time*temp_time*temp_time)/6-250*aa*temp_time;}else if(temp_time>30&&temp_time<=40) //匀速段{ temp_aa=0;a=0;temp_vel=200*aa;temp_pos=3000*aa+temp_vel*(temp_time-30);}else if(temp_time>40&&temp_time<=50) //减加速段{ temp_aa=-100;a=40*aa-aa*temp_time;temp_vel=-aa*temp_time*temp_time/2-600*aa+40*aa*temp_time;temp_pos=20*aa*temp_time*temp_time-aa*temp_time*temp_time*temp_time/6-600*aa*temp_time-3000*aa+32000*aa/3;}else if(temp_time>50&&temp_time<=60) //匀减速段{temp_aa=0;a=-10*aa;temp_vel=150*aa-10*aa*temp_time+500*aa;//temp_pos=-(650*aa*temp_time-5*aa*temp_time*temp_time-32500*aa-12500*aa)+17000*aa-30500*a/3;temp_pos=17000*aa-30500*aa/3-20000*aa+650*aa*temp_time-5*aa*temp_time*temp_time;}else if(temp_time>60&&temp_time<=70) //减减速段{ temp_aa=100;a=aa*temp_time-70*aa;temp_vel=50*aa+aa*temp_time*temp_time/2-70*aa*temp_time+2400*aa;temp_pos=(-30500/3)*aa-39000*aa+2450*aa*temp_time+aa*temp_time*temp_time*temp_time/6-35*aa*temp_time*temp_time;}out<<temp_pos<<" "<<temp_vel<<" "<<a<<" "<<temp_aa<<"\n";cout<<temp_pos<<" "<<temp_vel<<" "<<a<<" "<<temp_aa<<"\n";temp_time+=0.01*times;temp_time++;if(temp_time>70){break;}}out.close();system("pause");return 0;
}
生成的数据会在控制台中显示,也会存储在txt文件中,方便使用matlab进行分析。
得到的数据绘图如下:
图二:加加速度
图三:加速度
图四:速度
图五:位置
较为复杂的根据位置来进行速度规划的算法还在进一步的计算过程中,如果有时间将会在后面写出来。
经验:建模与计算远比代码的实现复杂,数据最好要有输出,要有好的数据分析软件,便于查看实际的效果。
欢迎大家的指点。
参考论文:CNC系统S型曲线加减速算法的设计与实现
关于运动控制中S型速度曲线的简单演示(C++实现)相关推荐
- 博途PLC1200 1500PLC S 型速度曲线变频器控制应用( SCL代码)西门子运动控制程序
博途PLC1200 1500PLC S 型速度曲线变频器控制应用( SCL代码)西门子运动控制程序,点开即可仿真运行 在PLC+变频器+三相异步电机的控制结构下,实现被控制对象速度.位置的平滑过渡,并 ...
- SMART 200PLC S型速度曲线应用(梯形图非优化)
S型速度曲线的详细公式可以参看下面这篇博文,这里不再细述.本篇文章直接给出SMART PLC的S型速度曲线的梯形图算法代码. 博途PLC1200/1500PLC S型速度曲线变频器控制应用(SCL完整 ...
- SMART 200 PLC S型速度曲线应用(梯形图算法优化)
S型速度曲线的非优化写法可以参看下面这篇文章,大家可以对比学习.限于本人能力和水平,文中难免出现错误和不足之处,诚恳的欢迎大家批评和指正.同时感谢大家关注和订阅. SMART 200PLC S型速度曲 ...
- 博途PLC1200/1500PLC S型速度曲线变频器控制应用(SCL完整源代码)
PLC运动控制基础系列之梯形速度曲线,可以参看下面这篇博客: PLC运动控制基础系列之梯形速度曲线_RXXW_Dor的博客-CSDN博客运动控制的梯形加减速大家应该很熟悉了,这篇博文属于基础概念性文章 ...
- 三菱FX3U PLC S型速度曲线生成FB
PLC的S型速度曲线的应用场所可能并不多,因为很多变频器和伺服驱动器也都带有S型速度曲线加减速功能.这里纯当学习参考,运动控制的基本原理很多是相通的,特别是总线类运动控制.这里我们的S型速度曲线都是基 ...
- 在jupyter notebook中attr1参数的作用_PID控制中P、I、D参数的作用究竟是什么?
PID控制中有P.I.D三个参数,只有明白这三个参数的含义和作用才能完成控制器PID参数整定,让控制器到达最佳控制效果.能熟练进行PID参数整定,这代表着工程技术人员的自动化技能水平,但很多人并未真正 ...
- FOC控制中Clark/iClark和Park/iPark变换及matpoltlib仿真
注:本文部分内容及图片来自网络,如有侵权通知删除! 三相交流电: 三相交流电是由三个频率相同.电势振幅相等.相位差互差120°角的交流电路组成的电力系统.日常用电系统中的三相四线制中电压为380/22 ...
- S型速度曲线_博图+变频器+三相异步电机(以堆垛机控制系统举例)
1. 引入问题 在PLC+变频器+三相异步电机的控制结构下,如何实现被控制对象速度.位置的平滑过渡,并减少对机械系统造成的冲击? 本次项目采用西门子S7_1500.丹佛斯变频器FC302.SEW三相异 ...
- 三菱PLC QD77定位模块功能块FB ,用私服电机控制中
三菱PLC QD77定位模块功能块FB ,用私服电机控制中! 用的FB功能块写法,编程方式非常清晰明了,程序都有注释.注释全面,主要用于三菱Q系列和L系列!可借鉴.可做模板,这些程序已经设备实际批量应 ...
最新文章
- 基于 Rancher 的企业 CI/CD 环境搭建
- 【深度强化学习】DQN训练超级玛丽闯关
- The Shapes of CSS
- 洛谷P2569 [SCOI2010]股票交易
- 固定资产拆分比例怎么计算_固定资产加速折旧优惠扩围!怎么计算、申报?这篇说全了...
- 技术研究院003---六种方式,教你在SpringBoot初始化时搞点事情!
- oracle sql取查询结果第一条,SQL获取第一条记录的方法(sqlserver、oracle、mysql数据库)...
- c++11多线程学习笔记之一 thread基础使用
- 关于Neo4j 强连通分量算法,你了解多少?
- 神经网络模糊pid控制算法,模糊神经网络应用实例
- 从SVN服务器下载project到本地
- 模糊聚类划分matlab代码,模糊C均值聚类算法(原理+Matlab代码)
- 电脑链接打印机方法(TCP/IP连接,Windows10适用,其他版本未验证)
- Linux和Windows中下载FFmpeg
- MTF 曲线图应该怎么看?
- 介绍中国传统节日的网页html,介绍中国传统节日的作文4篇
- 小米3c虚拟服务器,小米路由器3和3C哪个好?小米路由器3和3C区别
- 2022最新oneNav导航系统源码全开源版本下载总裁导航
- 在IDEA中解决jar包冲突的神操作-必看
- ubuntu_pip-install_WARRING:XXX is not on PATH ...