VB串口通讯中,其中几句的作用?
Dim S() As Byte
Dim SS(1024) As Byte
Static N As Long
Static T As Variant
Dim I As Integer
If (MSComm2.CommEvent = comEvReceive) Then '这句的作用是什么?
S = MSComm2.Input
If (Timer - T > 0.01) Then
Text7 = ""
N = 0
End If
T = Timer
For I = 0 To UBound(S)
Text7.Text = Text7.Text & Right("0" & Hex(S(I)), 2) '这句的作用是什么?
SS(N + I) = S(I) '这句的作用是什么?
N = N + UBound(S)
Next I
End If
End Sub 展开
1) CommEvent 是控件MSComm的一个属性;comEvReceive是VB6定义的一个常数,表示MSComm接收到数据;判断语句if(MSComm2.CommEvent = comEvReceive)表示如果串口MSComm2接收到数据则进行处理
2)在Text7.Text = Text7.Text & Right("0" & Hex(S(I)), 2) 中,
Hex(S(I))表示将接收到的第I个字节转换成十六进制的字符串,S是动态数据是 dim S() As Byte 定义动态数组;
"0" & Hex(S(I)) 是拼接字符串,Right("0" & Hex(S(I)), 2)是取拼接好的字符串最右边的两字符;
Text7.Text =Text7.Text & Right("0" & Hex(S(I)), 2) 的意思是将(b)步骤获取的两个字符添加在Text7中文本的末尾
(3)SS(N + I) = S(I)
根据dim SS(1024) As Byte ,SS是一个具有1024个元素的字节数组;
S 是动态数组,在执行S = MSComm2.Input后接收到数据被放入S。由于事先不知道串口到底接收到几个字节,所以采用动态数组。
SS(N + I) = S(I) 的作用就是将每次接收到的数据转移到SS数组中
2014-03-12
2014-03-11
根据应用程序的用途和功能,在连接到其它设备过程中,以及接收或发送数据过程中,可能需要监视并响应一些事件和错误。
可以使用 OnComm 事件和 CommEvent 属性捕捉并检查通讯事件和错误的值。
在发生通讯事件或错误时,将触发 OnComm 事件,CommEvent 属性的值将被改变。因此,在发生 OnComm 事件的时候,如果有必要,可以检查 CommEvent 属性的值。由于通讯(特别是通过电话线的通讯)是不可预料的,捕捉这些事件和错误将有助于使应用程序对这些情况作出相应的反应。
下表列出了可能触发 OnComm 事件的通讯事件。对应的值将在发生事件时被写入 CommEvent 属性。
常数
值
描述
ComEvSend
1
发送缓冲区中的字符数少于 SThreshold。
ComEvReceive
2
接收到 Rthreshold 个字符。在使用 Input 属性移去接收缓冲区中的数据之前,该事件将持续产生。
ComEvCTS
3
CTS 信号发生变化。
ComEvDSR
4
DSR 信号发生变化。该事件仅在 DSR 由 1 变为 0 时触发。
ComEvCD
5
CD 信号发生变化。
ComEvRing
6
检测到电话振铃。某些 UART(通用异步收发器)可能不支持本事件。
ComEvEOF
7
收到文件结束符(ASCII 字符 26)。
下列错误同样会触发 OnComm 事件,并且在 CommEvent 属性中写入相应的值。
设置值
值
描述
ComEventBreak
1001
收到 Break 信号。
ComEventFrame
1004
帧错误。硬件检测到帧错误。
ComEventOverrun
1006
端口超限。在下一个字符到达端口之前,前一字符还没有从硬件中读走,因而丢失。
ComEventRxOver
1008
接收缓冲区溢出。接收缓冲区已没有空间。
ComEventRxParity
1009
奇偶校验错误。硬件检测到奇偶校验错误。
comEventTxFull
1010
发送缓冲区满。在试图将字符传入发送缓冲区时,该缓冲区已满。
ComEventDCB
1011
在为端口获取设备控制块 (DCB) 时,发生不可预料的错误。
后面两句,第一句应该是将S中的值转成16进制显示在Text7中,第二句SS的赋值很莫明其妙,隔一段赋一个S的值,不知道是想转码成什么样子的。