📄 公用模块.bas
字号:
Attribute VB_Name = "公用模块"
Option Explicit
Public Const PI = 3.1416
Public r0 As Single '基圆半径
Public x0 As Single, y0 As Single '圆心位置
Public h As Integer '升程
Public δ0 As Integer
Public δ1 As Integer
Public δ2 As Integer
Public δ3 As Integer
Public e As Single '偏心距
Public r1 As Single '滚子半径
Public L As Integer '从动件长度
Public DeltaSita As Single '角度递增值
Public δθ As Single '角度递增值
Public Cosδθ As Single
Public sinδθ As Single
Public CurrentXY(1 To 2) As Single '当前点的坐标
Public PointXY(360, 2) As Single '凸轮理论轮廓上点的坐标
Public FactPXY(360, 2) As Single '凸轮实际轮廓上点的坐标
Public XY(360, 2) As Single '位移线图上点的坐标
Public 基圆XY(360, 2) As Single '基圆上点的坐标
Public 偏距圆XY(360, 2) As Single '基圆上点的坐标
Public O(1 To 2) As Integer '坐标轴原点
Public i等分DT0 As Integer
Public i等分DT2 As Integer
Public Sub 计算凸轮轮廓上点()
Dim Sita As Double
Dim s As Single '位移
'Dim r As Single '凸轮曲率半径
Dim i As Integer
Dim s0 As Single
Dim δ As Single
Dim dx_DT As Single 'dx/dδ
Dim dy_DT As Single 'dy/dδ
Dim sinθ As Single
Dim cosθ As Single
s0 = Sqr(r0 ^ 2 - e ^ 2)
'偏距圆上点
For i = 0 To 360
δ = i * PI / 180
偏距圆XY(i, 1) = x0 + e * Cos(-δ)
偏距圆XY(i, 2) = y0 + e * Sin(-δ)
Next
'基圆上点
For i = 0 To 360
δ = i * PI / 180
基圆XY(i, 1) = 偏距圆XY(i, 1) + s0 * Sin(δ)
基圆XY(i, 2) = 偏距圆XY(i, 2) + s0 * Cos(δ)
Next
'凸轮上点
For i = 0 To 360
δ = i * PI / 180
'推程等加速等减速;回程简谐运动
Select Case i
Case 0 To δ0
s = h * i / δ0
dx_DT = Sin(δ) * (h / δ0 - e) + (s0 + s) * Cos(δ)
dy_DT = Cos(δ) * (h / δ0 - e) - (s0 + s) * Sin(δ)
Case (δ0) To (δ0 + δ1)
s = h
dx_DT = Sin(δ) * (-e) + (s0 + s) * Cos(δ)
dy_DT = Cos(δ) * (-e) - (s0 + s) * Sin(δ)
Case (δ0 + δ1) To (δ0 + δ1 + δ2 / 2)
s = h - 2 * h * (i - δ0 - δ1) ^ 2 / δ2 ^ 2
dx_DT = Sin(δ) * (-4 * h * (i - δ0 - δ1) / δ2 ^ 2 - e) + (s0 + s) * Cos(δ)
dy_DT = Cos(δ) * (-4 * h * (i - δ0 - δ1) / δ2 ^ 2 - e) - (s0 + s) * Sin(δ)
Case (δ0 + δ1 + δ2 / 2) To (δ0 + δ1 + δ2)
s = 2 * h - 4 * h * (CSng(i) - δ0 - δ1) / δ2 + 2 * h * ((CSng(i) - δ0 - δ1) / δ2) ^ 2
dx_DT = Sin(δ) * (4 * h * (CSng(i) - δ0 - δ1 - δ2) / δ2 ^ 2 - e) + (s0 + s) * Cos(δ)
dy_DT = Cos(δ) * (4 * h * (CSng(i) - δ0 - δ1 - δ2) / δ2 ^ 2 - e) - (s0 + s) * Sin(δ)
Case (δ0 + δ1 + δ2) To 360
s = 0
dx_DT = Sin(δ) * (-e) + (s0 + s) * Cos(δ)
dy_DT = Cos(δ) * (-e) - (s0 + s) * Sin(δ)
End Select
'理论轮廓上点
PointXY(i, 1) = x0 + (s0 + s) * Sin(δ) + e * Cos(δ)
PointXY(i, 2) = y0 + (s0 + s) * Cos(δ) - e * Sin(δ)
'实际轮廓上点
sinθ = dx_DT / Sqr(dx_DT ^ 2 + dy_DT ^ 2)
cosθ = -dy_DT / Sqr(dx_DT ^ 2 + dy_DT ^ 2)
FactPXY(i, 1) = PointXY(i, 1) - r1 * cosθ
FactPXY(i, 2) = PointXY(i, 2) - r1 * sinθ
'计算线图上点坐标
O(1) = mainfrm.linX.X1: O(2) = PointXY(0, 2)
XY(i, 1) = O(1) + i: XY(i, 2) = O(2) + s
Next
End Sub
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -