📄 form0.frm
字号:
VERSION 5.00
Object = "{648A5603-2C6E-101B-82B6-000000000014}#1.1#0"; "MSCOMM32.OCX"
Begin VB.Form Form1
Caption = "Form1"
ClientHeight = 1800
ClientLeft = 4845
ClientTop = 1185
ClientWidth = 5415
LinkTopic = "Form1"
ScaleHeight = 1800
ScaleWidth = 5415
Begin MSCommLib.MSComm MSComm1
Left = 2400
Top = 600
_ExtentX = 1005
_ExtentY = 1005
_Version = 393216
DTREnable = -1 'True
RThreshold = 1
SThreshold = 1
End
Begin VB.TextBox Text2
Height = 495
Left = 3600
TabIndex = 2
Text = "Text2"
Top = 360
Width = 1215
End
Begin VB.TextBox Text1
Height = 495
Left = 1200
TabIndex = 1
Text = "Text1"
Top = 315
Width = 1215
End
Begin VB.HScrollBar HScroll1
Height = 255
Left = 240
Max = 1500
Min = -1500
TabIndex = 0
Top = 1080
Width = 4860
End
Begin VB.Label Label2
Caption = "接收"
Height = 495
Left = 3000
TabIndex = 4
Top = 480
Width = 495
End
Begin VB.Label Label1
Caption = "发送"
Height = 495
Left = 480
TabIndex = 3
Top = 480
Width = 615
End
End
Attribute VB_Name = "Form1"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = True
Attribute VB_Exposed = False
'''''''''''''''''''''''''''''''
'定义函数D_TO_B,使十进制数转换为二进制数,且二进制数为字符型
''''''''''''''''''''''''''''''
Public Function D_To_B(ByVal Dec As Long) As String
Do
D_To_B = Dec Mod 2 & D_To_B
Dec = Dec \ 2
Loop While Dec
End Function
'''''''''''''''''''''''''''''''''
'移动滚动条产生电机转速
''''''''''''''''''''''''''''''''
Private Sub HScroll1_Scroll()
m = 0
v = Val(HScroll1.Value)
'''''''''''''''''''''''''''''''''''''''''''''''''''''''
'''''''''''''''''''电机转动控制子程序''''''''''''''''''
'''''''''''''''''初始化串口之后,调用''''''''''''''''''
'选用串口1时,只需修改电机id号(m)和电机转速(v)即可'
'''''''''''''选用串口2时,请将函数最后的'''''''''''''''
'''''''''''Mscomm1.output改为Mscomm2.output''''''''''''
'''''''''中国矿业大学可靠性与救灾机器人研究所''''''''''
'''''''''''''''''''''''''''''''''''''''''''''''''''''''
'''''''''''''''''''''''''''
'协议生成
''''''''''''''''''''''''''
Dim out(0 To 4) As Byte '定义out数组为byte型数组,串口发送out(0)~out(5)
Dim t, tt, ttt As String
b4 = m '协议定义b4格式——电动机id号为0
b3 = &HAA '协议定义b3格式——0x80+(数据帧数-4)*32+功能码
b2 = 0 '每次调用函数,b2清零
If v >= 0 Then '''''''''如果转速为正,电机顺时针转动,转速为v
t = Format$(D_To_B(Abs(v)), "0000000000000") '''将电机转速由十进制转换成二进制字符型,并格式化输出为13位'''
bb2 = "1" + "0" + Left$(t, 6) '协议定义的电机顺时针转动时b2的格式(字符型)
For i = 1 To 8
b2 = b2 + Val(Mid(bb2, i, 1)) * 2 ^ (8 - i) '将电机顺时针转动时b2(字符型)转化成十进制数值型
Next i
Else '''''''''''''如果转速为负,电机逆时针转动,转速为v
t = ""
ttt = Format$(D_To_B(Abs(v) - 1), "0000000000000") '''将电机转速由十进制转换成二进制字符型,并格式化输出为13位'''
For l = 1 To 13
tt = Mid(ttt, l, 1)
If tt = "0" Then
t = t + "1"
Else
t = t + "0"
End If
Next l
bb2 = "1" + "1" + Left$(t, 6) '协议定义的电机逆时针转动时b2的格式(字符型)
For j = 1 To 8
b2 = b2 + Val(Mid(bb2, j, 1)) * 2 ^ (8 - j) '将电机逆时针转动时b2(字符型)转化成十进制数值型
Next j
End If
bb1 = "1" + Right$(t, 7) '协议定义的电动机顺时针或逆时针转动时b1的格式(字符型)
For k = 1 To 8
b1 = b1 + Val(Mid(bb1, k, 1)) * (2 ^ (8 - k)) '将电动机顺时针或逆时针转动时b1(字符型)转化成十进制数值型
Next k
s = b4 + b3 + b2 + b1 '协议定义——中间值s
b0 = &H80 + (s Mod 128) '协议定义b0格式——0x80+(s mod 128)
'''''''''''''''''''''''''''
'将b4~b3付值给out数组,得到串口所需的发送数据
''''''''''''''''''''''''''
out(0) = b4
out(1) = b3
out(2) = b2
out(3) = b1
out(4) = b0
MSComm1.Output = out '串口发送控制数据
End Sub
Private Sub Mscomm1_Oncomm()
'通讯事件发生
Select Case MSComm1.CommEvent
Case comEvReceive '有接受事件发生
'MsgBox ("Do you want to continue ?")
Text2.Text = MSComm1.Input '读取串口数据到文本框text2中
MSComm1.InBufferCount = 0 '清空输入寄存器
End Select
End Sub
Private Sub Form_Load()
'初始化串口
MSComm1.CommPort = 1 '使用Com1口
MSComm1.Settings = "38400,n,8,1" '设置通讯参数
MSComm1.PortOpen = True '打开串口
End Sub
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -