当前位置:编程学习 > VB >>

请教大家,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 ,  控件
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,