请教大家,MSCOMM控件的问题,谢谢
做一个检测设备,检测对象发送数据16进制数据3B 86到电脑,要求4ms之内电脑回复58,表示接收成功,请问MSCOMM控件可以做到吗?我自己写了个程序用的ONCOMM试了下,似乎不行。。。 --------------------编程问答-------------------- 4ms……应该可以吧 --------------------编程问答-------------------- 如果你的PC机的COM口硬件没问题,而且采取OnComm事件,代码处理得当,应该没问题. --------------------编程问答-------------------- 就时间而言,没有问题。 --------------------编程问答-------------------- 测试表明采用PC机自带的COM口,发送0X3B86到收到0X58时间<10MS,能否满足要求看来有点问题.代码如下:
Private Sub Command1_Click()
Dim sendsj(1) As Byte
sendsj(0) = &H3B
sendsj(1) = &H86
Debug.Print 0, Timer
MSComm1.Output = sendsj
End Sub
Private Sub Form_Load()
MSComm1.CommPort = 1
MSComm2.CommPort = 3
MSComm1.PortOpen = True
MSComm2.InputMode = comInputModeBinary
MSComm1.InputMode = comInputModeBinary
MSComm2.PortOpen = True
MSComm1.RThreshold = 1
MSComm2.RThreshold = 1
End Sub
Private Sub MSComm1_OnComm()
Dim Bytsj() As Byte
Dim i As Long
Dim hexstr As String
Select Case MSComm1.CommEvent
Case 2
Debug.Print 2, Timer
Bytsj = MSComm1.Input
For i = 0 To UBound(Bytsj)
hexstr = hexstr & Right("0" & Hex(Bytsj(i)), 2)
Next
If Mid(hexstr, 1, 2) = "58" Then
Text1 = 58
End If
End Select
End Sub
Private Sub MSComm2_OnComm()
Dim Bytsj() As Byte
Dim i As Long
Dim hexstr As String
Select Case MSComm2.CommEvent
Case 2
Debug.Print 1, Timer
Bytsj = MSComm2.Input
For i = 0 To UBound(Bytsj)
hexstr = hexstr & Right("0" & Hex(Bytsj(i)), 2)
Next
If Mid(hexstr, 1, 4) = "3B86" Then
Dim sendsj(0) As Byte
sendsj(0) = &H58
MSComm2.Output = sendsj
End If
End Select
End Sub
0 76475.41
1 76475.42
2 76475.42
--------------------编程问答-------------------- 谢谢zdingyun,我原来一直做硬件,第一次用VB写串口程序,所以很多不懂,我实际用示波器测试了一下,我写的程序收到检测对象发来的3B,86后,经过程序的判断,35ms后才发出去58,显然是严重超时,不满足4ms的需要。。看到您的程序我似乎有所启发,有什么不懂的还想向您请教。。。 --------------------编程问答-------------------- 除 --------------------编程问答-------------------- vb时间响应都很慢的,最快我见到响应时间大约15ms --------------------编程问答--------------------
条件太苛刻,未必能满足。
假定无奇偶位,只有 1 个停止位且字节间无延迟,每个字节需要 10 个比特;假定你的传输波特率是 9600 bps,仅传输 3 个字节,就需要 3.125 毫秒。加上你的接收响应和处理时间,就非常的紧。如果操作系统多任务处理的时间片是以毫秒为单位的,你就就一定会超时。
--------------------编程问答-------------------- 同意 8 楼。
就算波特率极大,不考虑传输耗时。
在多任务系统下也不能保证 4ms 就能唤醒任务。
这样的需求是无法满足的,考虑单任务的单片机吧。
补充:VB , 控件