主题:[讨论]请高手指点-VB实现串口通信的延迟问题
我现在做主机和多设备的通信,有个简单的关于串口通信的VB程序想向各位高手请教一下
主机串口波特率4800,校验先置m,数据8位,停止1位。
过程是这样:
主机先发出第9位为高位的地址信息给单片机,单片机如果收到自身设备地址,则复位SM2,返回此地址给主机,单片机发送数据的第9位TB8为0。
但是现在主机端发完地址后,准备接收,立即置校验位为s空格校验Mscomm.Settings = "4800,s,8,1" 这一句居然执行了78ms,这直接导致单片机回传地址时,主机仍处于m标志校验状态,出现了“校验错误”事件!
我想知道这78ms的执行时间,在VB中是不是不可能缩短了?我下面可控制着100台设备呀
另外,我的文本输出怎么不能换行呢?
简易程序清单如下:
Option Explicit
Dim temp(0) As Byte' temp放置传输数据
Dim Buffer(1) As Byte
Dim var As Variant
Dim dblStart As Double
Dim dblEnd As Double
Private Sub Command1_Click()'发送地址
On Error Resume Next
temp(0) = "&H" & Text2.Text Text2.Text里输入十六进制地址
With MSComm1
.CommPort = 3
.OutBufferCount = 0'清发送缓冲区
.InBufferCount = 0'清除接收缓冲区
.RThreshold = 1'设置接收数据的长度
.InputLen = 1
.RTSEnable = True'置为接收状态
.InputMode = comInputModeBinary
.Settings = "4800,m,8,1"'奇偶校验位置1,发送地址信息
.PortOpen = True
.Output = temp'发送地址
dblStart = Timer'读取开始时间
.Settings = ",s,,"此句更改校验为S空格校验,执行时长78ms
dblEnd = Timer'读取结束时间
(.Output = temp) 当我加上这句用示波器观察时,两次数据相隔确实为78ms
End With
Debug.Print dblEnd - dblStart
Text1.Text = "发送数据为: " & Text2.Text & vbCrLf
这句没有出错,可是为什么没有换行呢?
End Sub
' OnComm 事件控制. 错误信息处理
Private Static Sub MSComm1_OnComm()
Select Case MSComm1.CommEvent
Case comEvReceive'接收到数据
FeedBackFlag
Case comBreak
Case comFrame
Case comRxParity
End Select
End Sub
Private Sub FeedBackFlag()
var = Null
Erase Buffer
var = MSComm1.Input
Buffer(0) = var(0)
Text1.Text = Text1.Text & "返回数据: "
Text1.Text = Text1.Text & Buffer(0) & vbCrLf
这个显示时为什么也不换行呢?
End Sub
主机串口波特率4800,校验先置m,数据8位,停止1位。
过程是这样:
主机先发出第9位为高位的地址信息给单片机,单片机如果收到自身设备地址,则复位SM2,返回此地址给主机,单片机发送数据的第9位TB8为0。
但是现在主机端发完地址后,准备接收,立即置校验位为s空格校验Mscomm.Settings = "4800,s,8,1" 这一句居然执行了78ms,这直接导致单片机回传地址时,主机仍处于m标志校验状态,出现了“校验错误”事件!
我想知道这78ms的执行时间,在VB中是不是不可能缩短了?我下面可控制着100台设备呀
另外,我的文本输出怎么不能换行呢?
简易程序清单如下:
Option Explicit
Dim temp(0) As Byte' temp放置传输数据
Dim Buffer(1) As Byte
Dim var As Variant
Dim dblStart As Double
Dim dblEnd As Double
Private Sub Command1_Click()'发送地址
On Error Resume Next
temp(0) = "&H" & Text2.Text Text2.Text里输入十六进制地址
With MSComm1
.CommPort = 3
.OutBufferCount = 0'清发送缓冲区
.InBufferCount = 0'清除接收缓冲区
.RThreshold = 1'设置接收数据的长度
.InputLen = 1
.RTSEnable = True'置为接收状态
.InputMode = comInputModeBinary
.Settings = "4800,m,8,1"'奇偶校验位置1,发送地址信息
.PortOpen = True
.Output = temp'发送地址
dblStart = Timer'读取开始时间
.Settings = ",s,,"此句更改校验为S空格校验,执行时长78ms
dblEnd = Timer'读取结束时间
(.Output = temp) 当我加上这句用示波器观察时,两次数据相隔确实为78ms
End With
Debug.Print dblEnd - dblStart
Text1.Text = "发送数据为: " & Text2.Text & vbCrLf
这句没有出错,可是为什么没有换行呢?
End Sub
' OnComm 事件控制. 错误信息处理
Private Static Sub MSComm1_OnComm()
Select Case MSComm1.CommEvent
Case comEvReceive'接收到数据
FeedBackFlag
Case comBreak
Case comFrame
Case comRxParity
End Select
End Sub
Private Sub FeedBackFlag()
var = Null
Erase Buffer
var = MSComm1.Input
Buffer(0) = var(0)
Text1.Text = Text1.Text & "返回数据: "
Text1.Text = Text1.Text & Buffer(0) & vbCrLf
这个显示时为什么也不换行呢?
End Sub