⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 linkages.frm

📁 很好的齿轮-五杆机构随参数变化的动态轨迹曲线以及速度和加速度曲线
💻 FRM
📖 第 1 页 / 共 2 页
字号:
End Sub

Private Sub Command1_Click() '按钮的动作
shuju
End
End Sub

Private Sub Command3_Click()
l0:
Dim i, aa, bb As Long
'If Me.Text9.Text < 10 Then
'  Me.Text9.Text = 10
'  MsgBox ("为了避免过多的数据导致数据库过大,我们取步进精度为10度!")
'End If
Me.getvalue
i = 1
Do While i < num + 2
linkages.BJ = 3.14159265358979 / 18
jisuan
'Sql = "delete  from tempdata where id=2" 'SQL查询语句

   Sql = "select  top 1 * from tempdata  Order By id asc"
    Set rs = New ADODB.Recordset '新建一个实例
    rs.Open Sql, conn, 2, 2
If bb = 0 Then '第二个点将不再判断
    If Not rs.EOF Then
    aa = rs("id")
End If
    bb = 1
    If aa > 0 Then GoTo l1 '数据库有数据
    End If

   rs.AddNew '增加一行记录
   rs("id") = i
   rs("cy1") = (Y1 / pi) * 180
   rs("cxc") = XC  '数据读写操作
   rs("cyc") = YC
   rs("xvc") = Vcx
   rs("yvc") = Vcy
   
   rs("xac") = Acx
   rs("yac") = Acy
   
   rs.Update '保存写入资料,如果使用只读权限,则不能使用这个方法
   rs.Close
linkages.Y1 = linkages.Y1 + linkages.BJ '角度1=初始角度+步进角度
linkages.Y4 = linkages.Y4 - linkages.BJ * linkages.RAB


    i = i + 1
Loop
 
' 添加输入的数据________________________________________________________________
 mainmsg = "连杆AB长度:" & linkages.Text1.Text & ";连杆BC长度:" & linkages.Text2.Text & ";连杆CD的长度:" & linkages.Text3.Text & ";连架杆DE的长度:" & linkages.Text4.Text & ";机架AE的长度:" & linkages.Text5.Text & ";齿轮的传动比:" & linkages.Text6.Text & ";初始角θ:" & linkages.Text7.Text & ";初始角φ:" & linkages.Text8.Text
 Sql = "select  top 1 * from shuju  "
 Set rs = New ADODB.Recordset '新建一个实例
 rs.Open Sql, conn, 2, 2
 rs.AddNew '增加一行记录
 rs("mm") = mainmsg
 rs.Update
 rs.Close
 
GoTo L2 '跳过清除数据
l1:   Dim yn As Long '定义变量,看是否数据库还有数据
      sql1 = "select top 1 * from tempdata ORDER BY id DESC "
      Set rs = New ADODB.Recordset '新建一个实例
      rs.Open sql1, conn, 2, 2
      If Not rs.EOF Then
      yn = rs("id")  '返回当前行的值
      End If
 If yn > 1 Then
      Dim UR As Integer
      UR = MsgBox("数据库还有数据未清除,是否现在清除?", vbYesNo + vbQuestion + vbDefaultButton2, "提示.....")
      Select Case UR
           Case 6
                
                i = 1
                Do While i < yn + 1
                Sql = "delete *  from tempdata where id=" & i & " " 'SQL查询语句
                'Sql = "select  top 1 * from tempdata  Order By id asc"
                Set rs = New ADODB.Recordset '新建一个实例
                rs.Open Sql, conn, 1, 3
                i = i + 1
                Loop
                Sql = "delete   *  from shuju  " 'SQL查询语句
                Set rs = New ADODB.Recordset '新建一个实例
                rs.Open Sql, conn, 1, 3
                
              
                GoTo l0 '清空后重新添加
            Case 7
                '不清空的情况下直接显示窗口
                DataReport2.Show '不清空则需要显示连杆的情况
                GoTo l3
    End Select
    '设置全局变量为 false

End If

L2:
UR = MsgBox("是否显示数据库中保存连杆的情况?", vbYesNo + vbQuestion + vbDefaultButton2, "提示.....")
Select Case UR
           Case 6
           DataReport2.Show
           Case 7
End Select


l3: DataReport1.Show





End Sub

Private Sub Command4_Click()
Call pduang

End Sub



Private Sub exit_Click()
  shuju
  End
End Sub





'子程序-------计算的各个变量的值
Public Sub jisuan()
          '建立各个参数的关系,最后所要求得的是c点的位置(xc,yc),c点的速度(vc),c点的加速度(ac)
          '以下位置求解==================================================================================
          ' Y1 = Y1 + BJ '角度1=初始角度+步进角度
           Dim a, b, c, d, e, f, A1, B1, C1, A2, B2, C2, H, i, j, k, M, n, P, Q, S As Double
          
           XA = 0
           YA = 0
           XB = l1 * Cos(Y1)
           YB = l1 * Sin(Y1)
           XE = L5
           YE = 0
           XD = L5 + Cos(Y4) * l4
           YD = Sin(Y4) * l4
           H = l4 * Cos(Y4) + L5 - l1 * Cos(Y1)
           i = l4 * Sin(Y4) - l1 * Sin(Y1)
           A1 = 2 * H * L2
           B1 = 2 * i * L2
           C1 = l3 * l3 - H * H - i * i - L2 * L2
           If Me.Option1 = True Then
             Y2 = 2 * Atn((B1 + Sqr(A1 ^ 2 + B1 ^ 2 - C1 ^ 2)) / (A1 - C1))
             ElseIf Me.Option2 = True Then
             Y2 = 2 * Atn((B1 - Sqr(A1 ^ 2 + B1 ^ 2 - C1 ^ 2)) / (A1 - C1))
           End If
           j = 2 * i * l3
           k = 2 * H * l3
           M = H * H + i * i + l3 * l3 - L2 * L2
           If Me.Option1 = True Then
             Y3 = 2 * Atn((j + Sqr(j ^ 2 + k ^ 2 - M ^ 2)) / (k - M))
             ElseIf Me.Option2 = True Then
             Y3 = 2 * Atn((j - Sqr(j ^ 2 + k ^ 2 - M ^ 2)) / (k - M))
           End If
           XC = XB + L2 * Cos(Y2)
           YC = YB + L2 * Sin(Y2)
           XF = XB + l6 * Cos(Y2 + Y6)
           YF = YB + l6 * Sin(Y2 + Y6)
          '以下求速度===================================================================================
           W1 = 1
           W4 = -RAB * W1
           n = l4 * W4 * Cos(Y4) - l1 * W1 * Cos(Y1)
           P = l4 * W4 * Sin(Y4) - l1 * W1 * Sin(Y1)
           W3 = (P * Cos(Y2) - n * Sin(Y2)) / (l3 * Cos(Y3) * Sin(Y2) - l3 * Sin(Y3) * Cos(Y2))
           W2 = (n * Sin(Y3) - P * Cos(Y3)) / (L2 * Cos(Y2) * Sin(Y3) - L2 * Sin(Y2) * Cos(Y3))
           VB = W1 * l1
           Vbx = VB * Sin(Y1)
           Vby = VB * Cos(Y1)
           Vcx = Vbx - W2 * L2 * Sin(Y2)
           Vcy = Vby + W2 * L2 * Cos(Y2)
           Vfx = Vbx - W2 * l6 * Sin(Y2 + Y6)
           Vfy = Vby + W2 * l6 * Cos(Y2 + Y6)
          '以下求加速度================================================================================
           A1 = 0
           Ab = (W1 ^ 2) * l1
           Abx = Ab * Cos(Y1)
           Aby = -Ab * Sin(Y1)
           
           A4 = 0
           Q = l4 * A4 * Cos(Y4) - l4 * W4 ^ 2 * Sin(Y4) - l3 * W3 ^ 2 * Sin(Y3) + l1 * W1 ^ 2 * Sin(Y1) + L2 * W2 ^ 2 * Sin(Y2)
           S = l3 * W3 ^ 2 * Cos(Y3) + l4 * A4 * Sin(Y4) + l4 * W4 ^ 2 * Cos(Y4) - l1 * W1 ^ 2 * Cos(Y1) - L2 * W2 ^ 2 * Cos(Y2)
           A2 = (Q * Sin(Y3) - S * Cos(Y3)) / (L2 * Cos(Y2) * Sin(Y3) - L2 * Sin(Y2) * Cos(Y3))
           A3 = (S * Cos(Y2) - Q * Sin(Y2)) / (l3 * Cos(Y3) * Sin(Y2) - l3 * Sin(Y3) * Cos(Y2))
           Acx = Abx - A2 * L2 * Sin(Y2) - (W2 ^ 2) * L2 * Cos(Y2)
           Acy = Aby + A2 * L2 * Cos(Y2) - (W2 ^ 2) * L2 * Sin(Y2)
           Afx = Abx - A2 * l6 * Sin(Y2 + Y6) - (W2 ^ 2) * l6 * Cos(Y2 + Y6)
           Afy = Aby + A2 * l6 * Cos(Y2 + Y6) - (W2 ^ 2) * l6 * Sin(Y2 + Y6)
           '============================================================================================
  
End Sub
Public Sub getvalue()
l1 = Val(Text1.Text)
If l1 < 0 Then
MsgBox ("错误!杆长不能为负!")
Text1.Text = ""
End If
L2 = Val(Text2.Text)
If L2 < 0 Then
MsgBox ("错误!杆长不能为负!")
Text2.Text = ""
End If
l3 = Val(Text3.Text)
If l3 < 0 Then
MsgBox ("错误!杆长不能为负!")
Text3.Text = ""
End If
l4 = Val(Text4.Text)
If l4 < 0 Then
MsgBox ("错误!杆长不能为负!")
Text4.Text = ""
End If
L5 = Val(Text5.Text) '???????????
If L5 < 0 Then
MsgBox ("错误!杆长不能为负!")
Text5.Text = ""
End If
RAB = Val(Text6.Text)
'If RAB < 0 Then
'MsgBox ("错误!传动比为负不在我们的讨论区域内!")
'Me.Text6.Text = 1
'End If
Y1 = (Val(Text7.Text) / 180) * pi
Y4 = pi - (Val(Text8.Text) / 180) * pi
BJ = (Val(Text9.Text) / 180) * pi '将各个输入数赋予各个变量
          If BJ < 0 Then
          MsgBox ("步进精度不能小于0,系统将其值自动调整为1度!")
          BJ = pi / 180
          Text9.Text = 1
          End If
num = Int(((Val(Text10.Text) * 2 * pi) / BJ)) ' 取整数即可。

l6 = Text11.Text
Y6 = (Text12.Text / 180) * pi


'***********************************************
End Sub

Public Sub shuju() '判断数据库是否有数据的程序,关闭时候
Dim yn As Long '定义变量,看是否数据库还有数据
 sql1 = "select top 1 * from tempdata ORDER BY id DESC "
 Set rs = New ADODB.Recordset '新建一个实例
 rs.Open sql1, conn, 2, 2
    If Not rs.EOF Then
      yn = rs("id")  '返回当前行的值
    End If
 If yn > 1 Then
    Dim UR As Integer
    UR = MsgBox("数据库还有数据未清除,是否现在清除?", vbYesNo + vbQuestion + vbDefaultButton2, "提示.....")
    Select Case UR
           Case 6
                Dim i As Long
                i = 1
                Do While i < yn + 1
                Sql = "delete *  from tempdata where id=" & i & " " 'SQL查询语句
                'Sql = "select  top 1 * from tempdata  Order By id asc"
                Set rs = New ADODB.Recordset '新建一个实例
                rs.Open Sql, conn, 1, 3
                i = i + 1
                Loop
                 Sql = "delete   *  from shuju  " 'SQL查询语句
                Set rs = New ADODB.Recordset '新建一个实例
                rs.Open Sql, conn, 1, 3
                MsgBox ("数据库清空!")
                
            Case 7
               
    End Select
    '设置全局变量为 false

End If
End Sub

Public Sub pailei()
Dim temp As Double
 temp = l1
 If l1 > L2 Then
 temp = l1
 l1 = L2
 L2 = temp
 End If
 If L2 > l3 Then
 temp = L2
 L2 = l3
 l3 = temp
 End If
 If l3 > l4 Then
 temp = l3
 l3 = l4
 l4 = temp
 End If
 If l4 > L5 Then
 temp = l4
 l4 = L5
 L5 = temp
 End If
 temp = l1
 If l1 > L2 Then
 temp = l1
 l1 = L2
 L2 = temp
 End If
 If L2 > l3 Then
 temp = L2
 L2 = l3
 l3 = temp
 End If
 If l3 > l4 Then
 temp = l3
 l3 = l4
 l4 = temp
 End If
  temp = l1
 If l1 > L2 Then
 temp = l1
 l1 = L2
 L2 = temp
 End If
 If L2 > l3 Then
 temp = L2
 L2 = l3
 l3 = temp
 End If
 temp = l1
 If l1 > L2 Then
 temp = l1
 l1 = L2
 L2 = temp
 End If
End Sub



Private Sub new_Click()
Text1.Text = 0
Text2.Text = 0
Text3.Text = 0
Text4.Text = 0
Text5.Text = 0
Text6.Text = 0
Text7.Text = 0
Text8.Text = 0
Me.Command3.Enabled = False
End Sub





Private Sub Text1_Change()
Me.Command3.Enabled = False
End Sub

Private Sub Text10_Change()
temp11 = 0
End Sub

Private Sub Text2_Change()
Me.Command3.Enabled = False
End Sub

Private Sub Text3_Change()
Me.Command3.Enabled = False
End Sub

Private Sub Text4_Change()
Me.Command3.Enabled = False
End Sub

Private Sub Text5_Change()
Me.Command3.Enabled = False
End Sub

Private Sub Text6_Change()
Me.Command3.Enabled = False
End Sub

Private Sub Text7_Change()
Me.Command3.Enabled = False
End Sub

Private Sub Text8_Change()
Me.Command3.Enabled = False
End Sub




⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -