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

问题描述

各位前辈:我是一个刚接触VB.NET8.0的菜鸟,现在做一个串口通讯程序,测试MODBUS协议的程序,遇到一些问题,还望各位前辈不吝赐教:串口接收数据时,如果回复的报文稍长,就要接收两次以上才能接收完:发送报文:010300000016C404接收报文:01032C00550055003F0063005C001E004900630020003A001300640001032C00550055003F0063005C001E004900630020003A001300640047000B003E0013001300520023000E0024002C7F37我的串口接收事件如下:'************************************'串口接收事件'************************************PrivateSubPortCom_DataReceived(ByValsenderAsObject,ByValeAsSystem.IO.Ports.SerialDataReceivedEventArgs)HandlesPortCom.DataReceivedDimLAsShort=0DimUBAsShort=0DimTmpByte()AsByteDimiAsShort=0UB=UBound(RevByte)Thread.Sleep(18)L=PortCom.BytesToReadReDimTmpByte(L-1)PortCom.Read(TmpByte,0,L)ReDimPreserveRevByte(UB+L)Fori=0ToUBound(TmpByte)RevByte(UB+i+1)=TmpByte(i)NextiCallShowRev()EndSub不知道错在哪里,还望前辈们多多赐教!急等!谢谢!

解决方案

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

时间: 2024-08-03 19:49:21

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

python-树莓派 用Python编写串口通讯,能发送但无法接收

问题描述 树莓派 用Python编写串口通讯,能发送但无法接收 在使用Raspberry Pi2上,使用Python环境(2.7, 3.0都试过了),执行如下程序 import serial ser = serial.Serial("/dev/ttyAMA0", 9600, timeout=5) ser.write("hello") 串口调试助手能够正常收到数据,然后第一次执行如下指令: ser.read(10) 此时在串口调试助手上发送abcde,在屏幕上能够收到

在CB6下基于api函数编写串口通信程序简介

1-在C++ Builder 6.0下基于api函数编写串口通信程序简介: 在dos/win95/win98的年代,操作系统对串口是不保护的,也就是说将串口的的资源完全开放给用户,用户可以用直接操作硬件的函数(比如说TC2.0下的inport()和outport()函数) 跟串口直接打交道,这时候用户使用直接操作串口的函数怎样"折磨"串口都是没有问题的,操作系统根本就不管不问,对串口操作所造成的一切后果都是用户一个人承担的,这时候用户对串口具有高度自由的支配权:但是,这种情况好景不长,

串口通信-WindowsServer2008运行Delphi6串口通讯程序问题

问题描述 WindowsServer2008运行Delphi6串口通讯程序问题 最近因迁移一套老系统,是N年前用Delphi6开发的串口通讯程序,该程序在 WindowsServer2000服务器上能正常运行.现在要把这套程序拷贝到一台新 的WindowsServer2008服务器上运行时,发现访问不要前端串口设备,经 检查发现问题的情况大概是这样的:程序中建立串口通讯的参数中波特率是2400, 这个参数用于新服务器上,就不能建立与前端串口设备的通讯,除非改为9600就 可以了(采集程序和前端设

VB.NET SerialPort串口通讯问题,请多多指导!多谢!

问题描述 一个交互式串口通讯的小问题,热心人帮忙指点一下!!!本人(VB新手)使用VB.NET编写了一个串口工具,纯属偷懒的工具^_^.使用SerialPort(串口收发).OpenFileDialog(打开文本).Button(文本发送)等控件.串口已能连接,并能接收和发送字符串.现在问题如下:在1.txt里面写着需要按顺序发送的指令.1.TXT内容如下:SHOSHO1SHO2SHOGSHOL........等当按下Button按钮时,选择要发送的指令类的TXT文本(1.txt),首先按行发送

使用Win32创建串口通讯程序

介绍: 本文的目的是介绍如何在Win32中处理串口.串口通讯可以通过多种技术实现,例如:ActiveX,I/O存取和文件操作.本文介绍Win32平台下通过文件操作技术使用串口.程序员可以使用 Microsoft Visual C++ Version 6.0所提供的kernel32.lib.在Microsoft Windows(2000,Me,XP and 95/98)中,串口作为文件处理.因此可以通过Windows文件创建函数打开串口. 文章不仅介绍了串口通讯,也介绍了在串口通讯应用程序中实现多

串口通讯程序,异常的处理

问题描述 本人存新手,自学了下C#,工作上碰到串口通讯,写出来一直出现这问题跪求大神指点,身边真一个请教的人都没有 解决方案 解决方案二:str本身有没有值解决方案三:cbSerial怎么来的?解决方案四:str本身是有值得程序读取电脑上的com口后str就有值了...cbserial是我在窗口上的放的控件combobox的名字用于选择串口解决方案五:把InitializeComponent();这句放在sp.BaudRate=9600;的前面.不要问我为什么.这是基础问题.解决方案六:引用4楼

Visual Basic串口通讯调试方法

visual 现有电子秤一台,使用串口与计算机进行通讯.编写VB程序来访问串口,达到读取电子秤上显示的数据.该电子秤为BE01型仪表,输出为RS-232C标准接口,波特率为300-9600.偶校验.7个数据位.2个停止位.所有字符均发送11位ASCII码,一个起始位.在VB中与串口通讯需要引入控件MSComm串口通讯控件(在Microsoft Comm Control 6.0中).具体程序如下:控件简称:MSC Dim Out(12) As Byte '接收var中的值Dim var As Va

Python Socket通讯程序例子

python中内置的socket模块使得网络编程更加简单化,下面就通过两个小小脚本来了解客户端如何与服务器端建立socket. 客户端代码: #clietn.py if __name__ == '__main__':  #判断是否调用自己本身,如果不是则__name__为脚本名称 import socket  #导入我们所需的socket模块sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)  #第一步是创建socket对象.调用so

串口通讯解析错误如何处理

问题描述 串口通讯解析错误如何处理 VB与机械手串口通讯,机械手解析字符串经常出现乱码或不正确字符串,哪位大神知道怎么出理?请告知! 解决方案 串口通讯据处理算法