关于串口通信,用VB编的。发送正常,接收的数据总是不对,数据中多了几个 00 ,末尾数据错误。用其

作者&投稿:商金 (若有异议请与网页底部的电邮联系)
串口通信接收数据错误~

查查接口是不是接紧了,接口没问题的话用串口调试工具试试是不是也这样,如果串口调试工具没问题的话就看看你自己的代码是不是有问题

硬件上把发送端和接收端短接了吗。

这是因为VB使用的是Unicode编码,在这种编码模式下,任何字符都是占用两个字节的(换句话说不但汉字占用两个字节,连半角的英文字母、数字、符号等也是两个字节的),比如
"abc1"这个字符串的ASCII码(16进制)在ANSI编码下为“61 62 63 31”,但在Unicode中则变为“61 00 62 00 63 00 31 00”。
要想解决这个问题,你必须用字节数组而不是字符串变量来接收数据,并且要按字节读取而不是按字符读取。也可以采用编码转换函数强制把Unicode编码转换为ANSI编码,比如:
Dim s As String
s = "abc1"
s = StrConv(s, vbFromUnicode)
但要注意,转换后的字符串是不能在VB直接使用的(将是乱码),只能作为数据来使用(读取的时候必须按字节读取,比如MidB(s, 1, 1))。


高手来帮帮忙啊!vb的串口通信
然后上位机VB程序接受到以下数据:68 12 12 68 0 2 8 32 3 0 0 0 0 0 2 0 1 0 0 5 1 FF 47 16 这是PLC正确接收并写入信息的返回数据。4、串口接收程序:在数据接收程序中,利用VB中MSComm控件,一次接收缓冲区中的全部数据,存放到数组形式的暂存单元中,然后分析每个元素的值,得到读...

VB接收串口数据的程序 求用VB编写的程序,可以接收通过串口线发来的...
vb6吗?启动的时候,新建,选VB企业版控件 窗体上添加一个mscomm控件。设置好端口号,波特率等参数 添加一个文本框用于显示结果,设置允许多行,允许垂直滚动条,让他自动换行。添加一个定时器。设置时间为500 定时器timer事件中。如果是文本数据,就直接:if mscomm1.inbuffercount > 0 then text1.text ...

vb程序编写模拟串口
这是典型的VB串口通信 你可以采用Mscomm控件实现串口通信时,首先添加一Mscomm控件到窗体中,通过菜单项“工程(P)→部件(O)”进入选择窗口,在控件页中选取“Microsoft Comm Control 6.0” ,此时工具窗口中出现Mscomm图标,即可被使用。需要注意的几点是:1.用mscomm控件进行通信,其波特率最高只能设为...

vb串口通信程序实例
我也是自己摸索开发出来的每一款VBtoCOM通讯,有具体的思路如下:给你推荐一个工具“com串口测试工具 ComTone V1.0 中文绿色版”1、打开你的噪音计的测试软件,调整好串口号、通讯频率等等,我用温度计举例说明。开始查询后有返回数值,这个Receive:就是返回的数值000304012200004b05,打开串口监视精灵,...

怎样用VB实现RS232接口通信
VB可以使用MsComm控件来实现串口通信。MSComm 控件通过串行端口传输和接收数据,为应用程序提供串行通讯功能。MSComm 控件提供下列两种处理通讯的方式:事件驱动通讯是处理串行端口交互作用的一种非常有效的方法。在许多情况下,在事件发生时需要得到通知,例如,在 Carrier Detect (CD) 或 Request To Send (...

用vb串口实现发送一串000110010001010101000101010的二进制数 怎么发送...
VB可以通过串口控件实现串口通信,串口通信一般8个字节为1组进行发送,下面以你的前三个字节27bit为例 需要先串口控件初始化,此处略 发送时:Dim Sendbuffer(3) as Byte SendBuffer(0)=&H19 SendBuffer(1)=&H15 SendBuffer(2)=&H45 MSCOMM.OUTPUT=Sendbuffer 接收时;在控件接收事件Oncomm中 Dim...

用vb.net做串口通讯程序要调用哪些api函数?
16位下的串口通信程序最大的特点就在于:串口等外部设备的操作有自己特有的API函数;而32位程序则把串口操作(以及并口等)和文件操作统一起来了,使用类似的操作。 在MFC下的32位串口应用程序 32位下串口通信程序可以用两种方法实现:利用ActiveX控件;使用API 通信函数。 使用ActiveX控件,程序实现非常简单,结构清晰,缺点是...

数据通过串口进入计算机,在VB中怎么显示数据
新建VB工程,由工程菜单选部件项,在Microsoft Comm Control 6.0部件前打钩确定,VB的工具箱中就有MSCOMM控件,添加到窗体.下列代码可按2进制接收数据,处理为16进制字符串显示数据.Option Explicit Dim inData As String Dim arr() As Byte Private Sub Form_Load()MSComm1.Settings = "9600,n,8,1"M...

vb做串口通信时,以十六进制发送数据,当数据小于32时接收正确,但大于32...
' 变量声明Dim uOut As Double ' 保存输入的值Dim Buffer() As Byte' 通讯输出的缓冲' 获得 Text1.Text 的值uOut = Val(Text1.Text)' 以VB的16进制格式输出到 Text2Text2.Text = "&H" & CInt(uOut)' 将要输出的字符串写入缓冲Buffer = Text2.Text' 将缓冲中的值写入终端MSComm1....

VB 串口通讯的问题
上面的代码基本上与串口通讯没什么关系,而且效率也不咋地,比如十六进制转化为整数,可以这么写:Function ConvertHexChr(str As String) As Integer on error goto Err '出错时跳转至行号为Err的代码处 converthexchr=val("&H" & str)'十六进制数在vb里的表示法:&H + 16进制数 exit function'...

江夏区13817665149: 关于串口通信,用VB编的.发送正常,接收的数据总是不对,数据中多了几个 00 ,末尾数据错误.用其 -
子车咽复方: 这是因为VB使用的是Unicode编码,在这种编码模式下,任何字符都是占用两个字节的(换句话说不但汉字占用两个字节,连半角的英文字母、数字、符号等也是两个字节的),比如 "abc1"这个字符串的ASCII码(16进制)在ANSI编码下为...

江夏区13817665149: 用VB写了个串口通信程序,与伺服电动缸通信,但是不论发送什么命令都原样返回,不知怎么回事.
子车咽复方: 首先是不是你的串口线不好,比如中间2和3短路了,这时候无论发什么都是原样返回的.第二,排除了串口线的问题后,你用串口调试器给伺服电动缸发送指令,如果也原样返回,那说明要么你指令不对,要么伺服电动缸有问题.如果串口调试器发给伺服电动缸指令后动作正常,那说明是你软件编写有问题.就这样一个一个问题排除.串口通讯还是比较简单的,只要把我好步骤.纯手打,希望采纳

江夏区13817665149: 用vb串口实现发送一串000110010001010101000101010的二进制数 怎么发送 怎么接收 -
子车咽复方: VB可以通过串口控件实现串口通信,串口通信一般8个字节为1组进行发送,下面以你的前三个字节27bit为例 需要先串口控件初始化,此处略 发送时:Dim Sendbuffer(3) as Byte SendBuffer(0)=&H19 SendBuffer(1)=&H15 SendBuffer(2)=&H45 ...

江夏区13817665149: vb编写上位机软件从串口发送数据没问题,接受数据有错误怎么办? 就是对几个,然后出现个错误,然后又对 -
子车咽复方: 线路的距离远,有误码,可以发送的时候加点延时,不要连续的发送

江夏区13817665149: 请问如何用VB发送串口命令 -
子车咽复方: 串口命令是什么?dim cmd(5) as byte cmd(0)=&h01 cmd(1)=&h11 cmd(2)=&h21 cmd(3)=&h31 cmd(4)=&h41 cmd(5)=&h51 mscomm1.output=cmd推荐看书Visual_Basic与_RS-232_串行通信控制

江夏区13817665149: VB编程 使用MSComn控件向串口通信端口发送字符信息,把例子的程序完整的复制了,编译没错,但就是不显示 -
子车咽复方: 你的程式是通过Com口实现两台电脑间的通信,就是向Commport 1号口发送字符以及监听该口接收字符.一般调试的方式是,用串口线将A,B两台电脑的Com1口连接起来,并且两台电脑都运行该程式.这样在A电脑TextBox输入字符后发送,B电脑就会收到,并在程式界面中显示出来.在B电脑输入的就会在A电脑显示出来.如果没有两台电脑做测试的话,就用mlista1的方案,将Com口短路,这样就是电脑自己同自己通信了.

江夏区13817665149: 用VB编写串异步串口通讯,MSComm控件的发送缓存器的工作流程是怎样的 -
子车咽复方: 是这样的! 因为串口传输时就是某脚间的电压按一定的规律变化(波特率等),是单向的,而对方按此规律去解读那电压就还原信息了,不管对方断开与否,那电压还是在那里.

江夏区13817665149: 我用vb编写了一段关于串口通信的程序,调试的时候发现只要一点打开串口,他就会跳出'无效的端口号'信息 -
子车咽复方: LZ的代码缺省打开的是COM3,不知LZ的虚拟串口号是啥.仔细看了下LZ的COM口选择控件的名称有误,数字1在代码中是字母l,以致造成COM口无法选择.修改如下:Private Sub Combo1_Click() If MSComm1.PortOpen = True Then ...

江夏区13817665149: VB2010串口 发送一个字节数据 -
子车咽复方: 1)问题的原因:你用的发送方法有问题.由于SerialPort.Encoding默认值为System.Text.ASCIIEncoding,即发送和接收都按ASCII码处理,而方法 SerialPort.Write(String strData)发送的字符串中的每个字符都被当成ASCII码处理了.ASCII是一种七位的编码,所以你收到的值 00~7F.2)解决方法:使用SerialPort.Write(Byte[], Int32, Int32)发送数据;使用SerialPort.Read Method (Byte[], Int32, Int32) 或者 ReadByte() 接收数据

江夏区13817665149: 用vb制作串口通信(只发送)的时候,怎么在四个窗口里输入数据后一次性发送?还有,如何发送十进制小数? -
子车咽复方: 都不是 问题!可以发送二进制数,也可以发送 文字 推荐看书 Visual_Basic与_RS-232_串行通信控制

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网