标题:vb编程求助
只看楼主
WalleEva6
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2021-8-8
结帖率:100%
已结贴  问题点数:20 回复次数:5 
vb编程求助


有偿求助:给出凸轮从动件运动规律(位移方程),VB,编写程序,通过凸轮解析法设计,得出X,Y坐标,然后输出数据,格式为Excel

img
搜索更多相关主题的帖子: 数据 Excel vb 格式 编程 
2021-09-10 21:38
风吹过b
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:364
帖 子:4912
专家分:29900
注 册:2008-10-15
得分:20 
要求有点看不懂,主要是图片中图片有点没看懂。
先说一个这个程序的怎么的架构。

首先,这个程序是一个按中等规模的工程,先要做好规划。
模块文件中,
一是定义好一个结构,这个结构就是 坐标类型,包括二个数据 X 和 Y
二是规划好函数来。
根据这几组方程,分别写出几个函数。
函数要求:
函数返回值要求一致,使用结构返回,也就是同时返回X Y坐标。看例子

最后来一个总调用函数。
参数个数=这6个函数+1个,首参数用于选择调用这6个函数中哪一个,其他参数传递进去。该类型函数用不到的参数就传0进来。
最后把结果传递出来。
总调用函数第一个参数可以使用枚举类型。
----------示例代码---------------
'角度是 一周360度,在计算过程中里转换为弧度
Option Explicit
Const pi = 3.14159
Public Type 坐标
    x As Single
    y As Single
End Type
Public Enum 曲线类型
    圆周 = 0
    等速上升 = 1
    等速下降 = 2
    等加速上升 = 3
    等加速下降 = 4
    等减速上升 = 5
    等减速下降 = 6
End Enum

Public Function 运动(运动类型 As 曲线类型, ro As 坐标, s As Single, h As Single, 角度 As Single) As 坐标
Select Case 运动类型
    Case 圆周
        运动 = 圆周运动(r0, s, 角度)
    Case 等速上升
        运动 = 等速上升(ro, s, h, 角度)
'   ....
End Select

End Function

Public Function 圆周运动(r0 As 坐标, s As Single, 角度 As Single) As 坐标
    圆周运动.x = (r0.x + s) * Sin(角度 / 180 * pi)
    圆周运动.y = (r0.y + s) * Cos(角度 / 180 * pi)
End Function

Public Function 等速上升(r0 As 坐标, s As Single, h As Single, 角度 As Single) As 坐标
'图片公式看不清,看不懂
End Function

-------------------------
总装过程:
定义好一个规定文件,这个文件写每个转换点的曲线类型。

0,0
30,3
60,6
...

把这个文件读到一个数组里。如这里使用一个二维数组 q ,1号元素为角度,2号元素为曲线类型

使用角度循环,按分隔写步长
for 角度=0 to 360 step 360/点数
'查找属于哪一段
for i=1 to 6  '假设共有6段曲线
  if 角度>q(i,1) and 角度<q(i+1,1) then
        曲线=q(i,2)
        exit for
  end if
next i
点(新的元素,与循环有关,自己想怎么写 )= 运动(曲线,........)
next 角度

--------------------------
程序比较复杂,再加上看不清图片,没法动手。

授人于鱼,不如授人于渔
早已停用QQ了
2021-09-11 11:25
WalleEva6
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2021-8-8
得分:0 
回复 2楼 风吹过b
给出后不完整的程序,可以帮忙完善吗?可付费
2021-09-11 20:20
风吹过b
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:364
帖 子:4912
专家分:29900
注 册:2008-10-15
得分:0 
你提供的这个代码,是针对这个限制条件的 VBA 代码,与你最开始的要求 VB6 的代码稍有差异。
不懂 solidworks

它这个代码里是针对前面提出的那些条件,一组循环一组循环的写下去的。
PS为公式是共用部分,外行看不懂,你们内行应该能看懂。
前面的代码每行都给你注释了。代码使用OCR识别的,所以可能有字母错误,这是难免的。

Sub main( )
Dimx( ) As Double, y( ) As Double'凸轮哪线坐标
Dim Ph As Double, Ps As Double, H As Double凸轮转角.推杆位移最大行程
Dim RO As Double, POI As Double '基圆半径、凸轮推程运动角
Dim St As Double, Num As Double '凸轮廓线构造点步长,曲线坐标点数目
Const Con = pi/ 180 '角度转化为弧度常数
RO=50:H=10'初始条件
P01=60:PO1=PO1*Con
St =pi/180*2 : Num = 0         'st 循环步长,0.5度,一个圆周共720个点 ,num 数组下标的计数变量
'推程:等加速等减速运动
For Ph=0 To P01/2 Step St             '0-30度
Ps= (2* H/(P01^2)}* (Ph^2)             '计算ps
Num=Num+1                      '计数+1
ReDim Peserve x( Num), y(Num)    '重定义数组大小,保留原数据
x(Num) = (RO + Pa) " Sin(Ph)      '计算X坐标
y(Num) = (RO + Ps) * Cos(Ph)       '计算Y坐标
Next                       '0-30 循环结束
For Ph=P01/2 To P01 Step St     '30-60度
Ps= H- (2* H/(P01^2)) * (P01- Ph)^2   '计算PS
Num=Num+1
ReDim Presenve x( Num), y( Num)
x(Num) = (RO + Ps) * Sin(Ph)
y(Num) = (RO + Ps) * Cos(Ph)
Next
'------------
For Ph=P01 To P01*3 Step St     '60-180度
'此段保存不动,无PS
Num=Num+1
ReDim Presenve x( Num), y( Num)
x(Num) = RO * Sin(Ph)
y(Num) = RO * Cos(Ph)
Next
For Ph=P01*3 To P01*3.5 Step St     '180-210度
Ps= H- (2* H/(P01^2)) * (P01- Ph-?)^2   '计算PS,这个公式图看不懂
Num=Num+1
ReDim Presenve x( Num), y( Num)
x(Num) = RO * Sin(Ph)
y(Num) = RO * Cos(Ph)
Next
For Ph=P01*3.5 To P01*4 Step St     '210-240度
Ps= H- (2* H/(P01^2)) * (P01- Ph-?)^2   '计算PS,这个公式图看不懂
Num=Num+1
ReDim Presenve x( Num), y( Num)
x(Num) = RO * Sin(Ph)
y(Num) = RO * Cos(Ph)
Next
For Ph=P01*4 To P01*6 Step St     '240-360度
'此段保存不动,无PS
Num=Num+1
ReDim Presenve x( Num), y( Num)
x(Num) = RO * Sin(Ph)
y(Num) = RO * Cos(Ph)
Next

end sub

代码里生成的点会超过720个,应该有6个重复的点。
产生的是上一个循环会计算结束值,下一个循环又会计算开始值,但这二个值实际上是一个值,造成点重复。
消除办法,下一个循环的开始值 +st ,如
For Ph=P01*4 +st To P01*6 Step St     '240-360度

--------------------------
公式看不懂,所以还是你自己继续补吧,每个循环只差一句,计算PS值,就是每组函数里,最复杂,XY都共用的那段。

授人于鱼,不如授人于渔
早已停用QQ了
2021-09-11 21:15
风吹过b
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:364
帖 子:4912
专家分:29900
注 册:2008-10-15
得分:0 
输出 TXT 或csv格式文件
dim i as long
Open "D:\temp.txt" For Output As #2             '写TXT,如果文件后缀改成 csv 也是这样写。路径自己指定,这里D盘根目录下。
  print #2, "x";",";"y"      '是分号不是冒号。写标题,没有序号
for i=0 to num               '注,num上面代码中得到的坐标数组下标,也可以使用 ubound(x) 来临时取最大下标代替
  print #2, x(i);",";y(i)    '是分号不是冒号,写数据,没有序号。x,y也是上从面代码中来的。
next                         'VBA的 NEXT后面不要循环变量,而VB6 后面必须带
close #2


[此贴子已经被作者于2021-9-12 18:38编辑过]


授人于鱼,不如授人于渔
早已停用QQ了
2021-09-12 18:36
WalleEva6
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2021-8-8
得分:0 
回复 5楼 风吹过b
2021-09-13 21:25



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-506819-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.080001 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved