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

📄 form0.frm

📁 在vb中用字符串的形式来处理串口协议
💻 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 + -