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

请教:已经调通的VB串口程序为什么换了一个串口就不能用了?

我编了一个串口接收并显示汉字的程序
在计算机串口com1上调通了
后来换了一个USB转的串口,就无法接收了(USB转的哦串口rxd和txd短接之后用串口调试助手调试是正常的)
把程序再换到原来的串口com1上工作还是正常的
请问高手是什么原因?

我的程序:
Private Sub OnReceive()
Dim BRcv() As Byte, i As Integer, iBound As Integer, IsContinue As Boolean
Dim Cmd As Byte, P1 As Byte, P2 As Byte, P3 As Byte, P4 As Byte, Sum As Byte
Dim ii As Integer
Dim frame_24 As Integer '收齐一帧(24字节)的标志
Dim Com_over As Integer '一次通信完成,开始处理并显示收到的数据

Recev_word = COMM.Input '接收串口数据
……

接收程序模块 ”Private Sub OnReceive()“ 有几百行,不全部贴出来了

我曾经在“Recev_word = COMM.Input '接收串口数据”这句后面加了断点
发现“Recev_word = COMM.Input '这句程序执行后“Recev_word”的不同:
计算机自带的串口:Recev_word被赋了8个字节
USB转的串口:Recev_word只被赋了1个字节

不知道是不是这个原因导致的?
请问计算机自带的串口和USB转的串口在数据接收上的区别? --------------------编程问答-------------------- 首先要保证硬件是连通的
USB经常接触不良,我就碰到过。 --------------------编程问答-------------------- 你设备的串口改了吗?设备管理器里面 --------------------编程问答--------------------
引用 2 楼 woodepany 的回复:
你设备的串口改了吗?设备管理器里面


改了

usb转出来的串口rxd和txd短接用串口调试助手自发自收调试没问题的 --------------------编程问答--------------------
引用 2 楼 woodepany 的回复:
你设备的串口改了吗?设备管理器里面


买了一个usb转串口的接头
装了驱动
设备管理器里显示是com4 --------------------编程问答-------------------- 有个小软件可以更改USB串口号的
是否需要试试?需要的话留个信箱 --------------------编程问答-------------------- USB转RS232口比较好的是使用HL340芯片的. --------------------编程问答-------------------- 你到设备管理器里面看看USB转串口的端口是否被占用,USB转串口的故障率很高,建议购买好些的。 --------------------编程问答--------------------
引用 5 楼 dbcontrols 的回复:
有个小软件可以更改USB串口号的
是否需要试试?需要的话留个信箱


串口号应该不用改
在程序里可以设置的 --------------------编程问答--------------------
引用 7 楼 veron_04 的回复:
你到设备管理器里面看看USB转串口的端口是否被占用,USB转串口的故障率很高,建议购买好些的。


usb转的串口没有故障
将收发两针短接用串口调试助手自发自收调试没有问题的 --------------------编程问答-------------------- 短接收发没有问题并不代表就一定没有问题。
--------------------编程问答--------------------
引用 10 楼 veron_04 的回复:
短接收发没有问题并不代表就一定没有问题。

那该如何判断故障呢 --------------------编程问答-------------------- 说实话,这个东西还真不好说,我就碰到过,自发自收没有问题,单就是不能用。呵呵,最后换了一个好一些的USB转换接头就OK了。
市面上的那种10多20块的转接头质量很差。且电器标准不够,缺工少料的,最好不要使用。 --------------------编程问答-------------------- 计算机自带的串口:Recev_word被赋了8个字节
USB转的串口:Recev_word只被赋了1个字节
==============================================

USB 传输速度更快。

Do Until COMM.InBufferCount >= 8
    DoEvents
Loop
Recev_word = COMM.Input '接收串口数据 --------------------编程问答--------------------
引用楼主 lanpad 的回复:
我编了一个串口接收并显示汉字的程序


我最近在编 串口教材, 我想楼主可能忽略了一个问题, 那就是汉字占了两个字节,其它字母数字控制符都是一个字节, 而且总字节长度计算也将有所不同.

楼主并没将代码贴出来, 我估计是代码的写法问题,建议你以终止符来收尾

采用二进制接收
MSComm1.RThreshold = 1 '设置接收一个字节就产生OnComm事件
MSComm1.InputMode = comInputModeBinary
'******************************************

Dim RcvData As String,Rx_buff() As Byte
Rx_buff = MSComm1.Input '将接收的数据带入数组变量中
For I = 0 To UBound(Rx_buff) '循环读取数组变量的内容
  If Rx_buff(I) = 3 Then 'Chr(3)为终止符,自己可定义
  RcvData = RcvData & Format(Hex(Rx_buff(I)), "00") '二进制一字节两个字符,定义格式为两位
  '再判别 STX在第几位
  List1.AddItem RcvData
  ............
  .........
  Else
  RcvData = RcvData & IIf(Len(Hex(Rx_buff(I))) < 2, "0" & Hex(Rx_buff(I)) & " ", Hex(Rx_buff(I)) & " ")
  End If
Next I

--------------------编程问答-------------------- 谢谢大家的建议
前面的兄弟说的对
借了一根好点的USB转串口接头,果然可以收了
但接收效果跟计算机自带串口还是有差距,有时会出现莫名其妙的乱码

但通过调试,我觉得硬件的缺陷通过软件的优化还是克服的,很多串口调试软件都可以适应不同的接头
可能我的程序的写法还是有问题
打算从头再来了 --------------------编程问答--------------------
引用 14 楼 cbm666 的回复:
引用楼主 lanpad 的回复:
我编了一个串口接收并显示汉字的程序


我最近在编 串口教材, 我想楼主可能忽略了一个问题, 那就是汉字占了两个字节,其它字母数字控制符都是一个字节, 而且总字节长度计算也将有所不同.

楼主并没将代码贴出来, 我估计是代码的写法问题,建议你以终止符来收尾

采用二进制接收
MSComm1.RThreshold = 1 '设置接收一个字节就产生……


谢谢
我重写代码的时候会考虑您的建议 --------------------编程问答-------------------- 你串口号对不对? --------------------编程问答-------------------- 串口是有编号滴
补充:VB ,  COM/DCOM/COM+
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,