我现在有一台设备是采用422通信方式的,我为他制作了一个上位机pc软件。我用的是pci422扩展卡,然后再用cserialport类实现数据采集。设备的数据传送速度很快,10毫秒发送103个字节,几乎是115200波特率的极限速度了,在这种发数频率下几乎所有的我能找到的串口助手软件都在运行一段时间后瘫痪掉了。为了提高效率我把cserialport类每一个字节响应一次串口消息的采集机制改为了每一百个字节响应一次串口消息。但依然存在无法正常退出串口资源(即oncom串口线程),还有就是数据收发都有些不正常,总有发数不响应的现象发生,如果我用422转232更是会频繁出现丢包。我想问一下有什么方法可以可靠地在vc上实现高速的422串口通讯,硬件或软件的都行。我听说有422的采集卡,只要在vc中调用采集卡驱动中的dll库函数就可以实现可靠数据采集,各位同行有用过这个的吗,请给点建议。谢谢。

解决方案 »

  1.   

    从硬件的角度来说,你可以考虑高速的通讯卡,你的通信卡是什么卡?能否告知?还有是否存在干扰情况?软件方面,给你参考一段代码(MSComm控件的):
    Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
    Private Sub Form_Load()
        With MSComm1
            .CommPort = 1
            .Settings = "XXXXX,N,8,1"   '这个根据你的实际情况而定
            .InputLen = 0
            .InputMode = comInputModeText
        End With
        Timer1.Enabled = True
        Timer1.Interval = XX            '根据你的实际情况定,最好在10左右
    End SubPrivate Sub Timer1_Timer()
        Dim strP As String
        If Not MSComm1.PortOpen Then MSComm1.PortOpen = True
        Sleep 10                '等待10毫秒(这个时间可调,根据实际情况而定),等待下位机数据过来
        strP = MSComm1.Input    '读串口缓冲区
        MSComm1.PortOpen = False    '关闭串口,防止后面的数据过来
    End Sub
    呵呵!见笑!