当前位置:编程学习 > C#/ASP.NET >>

关于用VB.NET编写串口通讯程序的问题

各位前辈:我是一个刚接触VB.NET8.0的菜鸟,现在做一个串口通讯程序,测试MODBUS协议的程序,遇到一些问题,还望各位前辈不吝赐教:
串口接收数据时,如果回复的报文稍长,就要接收两次以上才能接收完:
发送报文:01 03 00 00 00 16 C4 04
接收报文:01 03 2C 00 55 00 55 00 3F 00 63 00 5C 00 1E 00 49 00 63 00 20 00 3A 00 13 00 64 00 
01 03 2C 00 55 00 55 00 3F 00 63 00 5C 00 1E 00 49 00 63 00 20 00 3A 00 13 00 64 00 47 00 0B 00 3E 00 13 00 13 00 52 00 23 00 0E 00 24 00 2C 7F 37 
我的串口接收事件如下:


    '************************************
    '串口接收事件
    '************************************

    Private Sub PortCom_DataReceived(ByVal sender As Object, ByVal e As System.IO.Ports.SerialDataReceivedEventArgs) Handles PortCom.DataReceived

        Dim L As Short = 0
        Dim UB As Short = 0
        Dim TmpByte() As Byte
        Dim i As Short = 0

        UB = UBound(RevByte)

        Thread.Sleep(18)

        L = PortCom.BytesToRead

        ReDim TmpByte(L - 1)
        PortCom.Read(TmpByte, 0, L)
        ReDim Preserve RevByte(UB + L)

        For i = 0 To UBound(TmpByte)
            RevByte(UB + i + 1) = TmpByte(i)
        Next i

        Call ShowRev()

    End Sub

不知道错在哪里,还望前辈们多多赐教!急等!谢谢!

--------------------编程问答-------------------- 如果知道返回数据的长度,就设定事件产生的字节数,或者不要用事件,发送指令后用循环语句等待查询串口受到的字节数,到了指定的字节数或超时在退出循环,如果不超时再读取返回的字节数。
如果不知道到返回的字节数,就要看协议了,返回的数据头部分应该定义应该返回的字节数,如果没有定义,就是你的协议有问题,没法收。 --------------------编程问答-------------------- 先的时候我也想到过这个问题,但是后来我又发现,如果这个软件只要串口是打开的,别的通讯软件发送数据,这时本软件就不知道到底应该接收多少字节的数据,也就无法设定指定的字节数了! --------------------编程问答-------------------- llsus:如果不知道到返回的字节数,就要看协议了,返回的数据头部分应该定义应该返回的字节数,如果没有定义,就是你的协议有问题,没法收。 
返回的数据头部分应该怎么定义返回的字节数呢? 
 
--------------------编程问答-------------------- 你用串口通讯,收数据,又不可能乱收,总要有个协议吧?协议的规定的通讯数据长度一般分为定长和不定长两种,这两种都是常用的
例如:定义一个主机,一个从机  主机发送10个字节,从机回复20个字节这就是定长
不定长就要在接收的数据中定义长度,例如:发送5字节头,头中,前2字节为前导字节,第三字节是数据长度,第四字节是目标机号....这样接受方就可以通过第三字节来判断后面还有多少字节需接收。
如果以上你看不懂,那么建议你再去学习学习,我帮不了你。 --------------------编程问答-------------------- 经过几天的琢磨,现在我已经解决了这个问题,不过还是谢谢llsus前辈!真的谢谢! --------------------编程问答-------------------- 学习 --------------------编程问答-------------------- 支持搂主,收藏
补充:.NET技术 ,  VB.NET
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,