凸轮到滑块往复运动
vb吧
全部回复
仅看楼主
level 11
一、 题目来源及构想
前面帮网友完成一个凸轮的动画程序之后,觉得意犹未尽。凸轮作为动力来源和主动件,仅仅有一个依凸轮滑动的、另一端固定的连杆,似乎没有啥作用。
于是,就想对连杆固定端延长出去做为动力输出端。多数的机械运动都要求一个方向固定,另一个方向往复运动。于是在这个延长端再加上一个连杆去连接运动件,使运动件能达到上述目标。
O:凸轮轴心 A:凸轮边沿 B:铰接支点 C:连杆铰接点 D:运动件与连杆铰接点
s:凸轮中心与支点距离 s1:支点与运动件中心的垂距 c:运动件长度
图1 构想
初始的想法是:运动件的运动规律数据或数据,逐步反推设计出一个凸轮的轮廓。但是最后发现运动件的时序与凸轮的时序难以吻合,会造成凸轮运行速度不稳定。
先暂时放弃,只做一个阶段性的结果:从凸轮运动方程到运动件的运动数据。
2021年04月12日 13点04分 1
level 11
二、 思路原则
按照图1的构想,假设一个凸轮的运动方程——如果①可以在程序修改方程,②更高级一点,可以让用户通过界面输入方程来产生,③当然也可以通过其他方式产生的数据文件导入——暂时,先按程序内设定运动方程来制作。
凸轮运动方程生成A点的坐标(Ax,Ay)。当凸轮方向确定后,可以在系列A点中找到一个距离B点为L1的点A0;当凸轮运动时,可以在A0的下几个有限的点内找到新的A0’。通过A、C分别向x轴做垂线,构成两个相似三角形,可以很容易确定C(Cx,Cy)。然后同勾股定理,从L3长、Cx与运动件中线(s+s1)的差值可以求出Dy,并进一步求出Ey,得到运动件末端的运动数据。
2021年04月12日 13点04分 3
level 11
三、 设定参数及验证
设定参数一共有7个:
①凸轮基准半径,基准半径R0;
②凸轮中心到支点的距离,凸轮距离S;
③支点到运动件中心的水平距离,运动件距离S1;
④连杆从支点到凸轮上的长度,主动臂长L1;
⑤连杆从支点到铰接点的长度,从动臂长L2;
⑥连接杆长度,连接杆长L3;
⑦运动件长度,运动件长H。
验证条件(可以修改增设)初定为以下几点:
①Rmax< 0.8s:其中Rmax=1.45R0,保证凸轮与支点间隙;
②s-Rmin<L1<s+Rmax:其中Rmin=R0,保证连杆始终能够得着到凸轮;
③0<L2-s1<L3,:保证铰接点与运动件的垂直位置关系正确
④s1/2<L3:保证连接杆有足够的运动角度。
2021年04月12日 13点04分 4
level 11
四、 凸轮的轮廓方程
凸轮轮廓暂时有方程生成。如有必要也可以增加其他方式。
凸轮轮廓分三部分:0到90°、270°到360°为正圆;90°到180°0.5被的标准半径; 180°到270°再对应减小回来。其中90°到135度按照二次方关系增加,135°到180则相反;180°到270°正好反过来。
2021年04月12日 13点04分 5
level 11
五、 数学思想
已知条件:O(0,0)、B(s,0)、A(Ax,Ay)以及上面设定的7个参数。
①计算轮廓。按照凸轮轮廓公式与角度结合可以得到轮廓坐标:Ax=Rt*Cost,Ay=Rt*Sint
②确定连杆在凸轮上的位置。初次从OB连线方向逆时针依次检查轮廓各点与B的距离,找到最接近的作为A0点;在转动时,顺时针检查轮廓各点,找到接近程度符号转换的点作为At。
③连杆铰接点坐标。分别过A、C做X轴垂线,构成相似三角形,可得
Cx=s+(s-Ax)L2/L1,Cy=-AyL2/L1。
④运动件坐标。L3两端做x轴、y轴平行线,形成直角三角形,可得:
Dx=s+s1, Dy=Cy-√(l3²-(cx-dx)²);Ex=Dx,Ey=Dy-H
2021年04月12日 13点04分 6
level 11
六、 界面、控件及思路
1、参数部分:1个框架;7个参数分别用7个文本框输入,并用7个标签配合提示;一个参数确定按钮。
3、结果部分:1个图片框,包含数轴、连杆、连接杆、运动件柄5个直线,运动件1个形状凸轮,以及1个子图片框;2个按钮,分别是输出结果、退出。其中子图片框中,滑轮用1个形状,坐标系用2个line、补充连杆用一个line,凸轮用连线画出。主图片框中支点和滑轨也用line方法画出,不用控件。
4、一个计时器。
2021年04月12日 13点04分 7
level 11
七、 代码功能划分
1、声明部分。常量定义以及变量声明。
2、初始化。①各控件不变的属性;②输入时各控件的可见性。
3、输入部分,停止计时器和演示、清除图示。
4、运行部分。①计算凸轮形状,存入R数组;②验证。按前文条件检验,如有问题弹出提示框,并退出;③初相角清零;④启动计时器。
5、布置坐标系。①分析纵横比例,②设置同比例坐标系统,③坐标轴设置,④绘制支座和运动件滑轨,
6、查找A0位置,思路如前所述。
7、查找At位置,思路如前所述。
8、C点坐标。动态计算铰接点C坐标数组,公式如前。
9、D、E点坐标。动态计算,公式如前。
10、计时器,每帧推动1°,计算新位置、刷新重绘、移动其他控件。
11、输出E的运动数据。
2021年04月12日 13点04分 8
level 11
八、 效果
图2 运行效果
数据输出,设定为txt文本。数据为输入各项数据;然后是凸轮各个角度及对应的凸轮半径、凸轮x坐标、凸轮y坐标、运动件底部y值。数据文件位置为本程序所在文件夹,文件名称为:年月日时分秒+数据.txt。
2021年04月12日 13点04分 9
level 11
九、 进一步深入的课题
1、凸轮轮廓的指定方式。如前所述,可以考虑从数据文件导入,也可以考虑由用户在运行界面指定或订制。
2、一直条件。以结果E端运行数据或运动方程,推导设计一个符合条件的凸轮。当然,也存在上段所说的“指定方式”的问题。
3、精细化。在本过程中,对滑动小轮的半径与凸轮半径方向不一致的情况,忽略未予考虑,可以将计算结果理解为滑槽的中线位置。也可以进一步精细计算。
2021年04月12日 13点04分 10
level 8
vlaoda 老师好,我想请教您一个问题,我用到MSHFlexgrid,我需要对1行到3行的第X列进行合并,但是第3行以后的列也合并了,虽然内容相同,但是我只需要1-3行的X列合并,有解决办法吗?谢谢!
1 PCS 1
2 PCS 用量 1
3 PCS 1
4 PCS 用量 2
5 PCS 用量 2
2021年04月27日 12点04分 11
没有试验过合并的问题
2021年05月11日 08点05分
自己写函数合并不就可以随心所欲了。
2021年05月12日 02点05分
@klimaa 会写函数也不会问这个问题
2021年05月12日 12点05分
level 1
vlaoda老师能帮写计算程序吗
2021年09月09日 02点09分 12
每一个图片都是一个独立的问题吗?
2021年09月10日 01点09分
level 1
第二张图片与第三张图片是一样的
2021年09月10日 01点09分 13
你的图片做的很精致,但是我看不懂
2021年09月10日 02点09分
ug或者其它类似的建模程序画的吧?仿真模拟。你这个程序的思路其实就是仿真模拟的意思。UG里边是通过加约束来实现的,无需编程。
2021年09月10日 08点09分
@chixun9999 sw建模画的,现在是任意一个改参数需要计算,滑块的行程,比较麻烦
2021年09月16日 07点09分
@szchuangfei sw没用过,不过ug还是很方便的,你可以试试,模型可以导入的。
2021年09月16日 08点09分
level 11
大神的模拟程序有没有编代码的?
2021年09月10日 08点09分 14
前一向,贴吧要求app扫描才能回帖……我已经晕了。我下那么多文字,当然有代码了
2021年09月15日 00点09分
@璐村惂鐢ㄦ埛_0748V5Z馃惥 是不是做成了动画的方式模拟?2d图还是3d图形?里边不少的参数公式需要列出来才能做这个动画程序吧?
2021年09月15日 03点09分
@chixun9999 我原来做的样子就在上面,你需要什么样子,就做什么样子。
2021年09月16日 00点09分
1