📄 modulecom.bas
字号:
Attribute VB_Name = "ModuleCom"
Option Explicit
Dim CmdQueue(0 To ComCmdMax) As String
'串口起止标志
Public Enum enum_ComFlag
comStartflag = 64 '@
comEndflag = 33 '!
End Enum
'串口状态
Public Enum enum_Comstate
Free
Busy
End Enum
Public Type type_Com
State As enum_Comstate
port As Boolean
RCmdLen As Integer
SCmdLen As Integer
RByteNum As Integer
SByteNum As Integer
ReceiveWaitTime As Integer
ReceiveWaitTimeConst As Integer
End Type
Public com As type_Com
Sub InitComStatus()
com.State = Free
com.RCmdLen = 11
com.SCmdLen = 11
com.ReceiveWaitTimeConst = 3
End Sub
Public Sub ComConnect() '连接串口
ComSendAnalize SendIs_Connect, 0, 0
End Sub
Public Sub ComReceiveOneByte(Val As String) '处理一个确定的ascii字符
Static CmdBuf As String
Static Index As Integer
If Len(Val) <> 1 Then MsgBox "串口字串" & Val & "长度=" & Str(Len(Val))
If Index = 0 Then '没有开始接收
If Asc(Val) = comStartflag Then '收到起始标志
Index = 1
End If
ElseIf Index > com.RCmdLen Then '溢出放弃
Index = 0
CmdBuf = ""
ElseIf Asc(Val) = comEndflag Then '收到结束标志
Index = 0
PushReceiveCommand CmdBuf
'frmDebug.ComReceive CmdBuf
CmdBuf = ""
Else '正常接收
Index = Index + 1
CmdBuf = CmdBuf & Val
End If
End Sub
Private Sub PushReceiveCommand(s As String) '命令队列覆盖刷新
Dim i As Integer
If s = "" Then Exit Sub
i = Asc(Left(s, 1)) - Asc("A")
If i < 0 Or i > ComCmdMax Then Exit Sub
CmdQueue(i) = s
frmMain.TimerComR.Interval = 1
frmMain.shpTest.FillColor = vbRed '
End Sub
Public Sub myComReceiveAnalize() '定时调用以刷新显示
Dim i As Integer
Dim s As String
Static b As Boolean
If b = True Then
MsgBox "重入"
b = False
Exit Sub
End If
b = True
frmMain.TimerComR.Interval = 0
frmMain.TimerComR.Enabled = False
For i = 0 To ComCmdMax
s = CmdQueue(i)
If s <> "" Then
CmdQueue(i) = ""
ComReceiveAnalize s
frmDebug.ComReceive0 s
End If
Next
frmMain.TimerComR.Enabled = True
frmMain.shpTest.FillColor = vbBlack '
b = False
End Sub
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -