USB 接口和RS232的区别

petrified   2010-2-23 13:23 楼主
最近我自己做了一个上位机软件,用C++ Builder做的

在用RS232进行通讯时可以,我想用USB来进行通讯
于是买了两家公司的USB转RS232的转换器

可是上位机上显示不出内容,用串口调试可以通讯,直接用RS232也可以

不知道各位有没有类似的经历,望大家多多指教

回复评论 (22)

你的是那款转换器?有些use转rs232的转换器不能转换所有的信号。建议换一个好点的
点赞  2010-2-23 13:50
我觉得不是你上位机的问题。而是发送给上位机的那部分是不是没有加载USB驱动?如果换了传输方式,你还按照以前传输串口的方式肯定不行的。
点赞  2010-2-23 13:57
我用的是特力的
还有就是utek的

我发现通讯是在通讯的
但是速度很慢,而且误码率或是滑针的现象很严重,所以显示的数据
都不是很正确

当我把串口关闭一次然后再打开一次的时候却能全部正确显示内容
点赞  2010-2-23 13:58
引用: 引用 2 楼 tianpeijun123 的回复:
我觉得不是你上位机的问题。而是发送给上位机的那部分是不是没有加载USB驱动?如果换了传输方式,你还按照以前传输串口的方式肯定不行的。


有可能的

但是USB驱动不是在转换器里本身就应该都弄好的啊

我也问了他们那边的技术人员

人家也觉得奇怪
所以想在这里碰碰运气了
呵呵
点赞  2010-2-23 14:08
除了找转换器外还有其他方法没?
点赞  2010-2-24 08:32
mark 过路.......................
点赞  2010-2-24 08:43
USB转串口最终在PC端会模拟成一个COM口,既然使用系统的通讯软件能够正常使用就说明转换本身没有问题的,问题出在你写的软件上,访问模拟品质COM和真实的COM没有什么区别,但是COM号要设置正确。
点赞  2010-2-24 08:48
另外要先接那个USB转串口,待在设备管理器里边能够看到那个COM后再启动你的应用程序,顺序反了是不行的
点赞  2010-2-24 08:49
应该是软件的问题!你在初始化串口的时候作些判断,确定串口有效并稳定后再进行操作!另外!有些转换器是不支持高波特率的!注意下!
点赞  2010-2-24 08:56
谢谢,大家的支持!
我也觉得可能是软件的问题。

可是找不到原因
我放在RS232上通讯时可以看到发送过来的校验和,但是在USB时获取的校验和是0
用通信助手又可以看到校验和,郁闷
点赞  2010-2-24 10:18
  那明显是你的软件的问题了,调试助手都已经可以了还说啥,贴贴代码看看啊。
点赞  2010-2-24 11:50

  1. void __fastcall TForm1::QueryProc()   //查询协议  普通信息
  2. {
  3. AnsiString str;
  4.   unsigned char Data[64];
  5.   unsigned short *p;
  6.   unsigned long *l;
  7.   long acc_p;
  8.   unsigned short tmp2;
  9.   float tmp,ac_v,ac_a;
  10.   SYSTEMTIME systime;

  11.   setmem(Data,64,0);
  12.   pkgBuf->GetData(Data);
  13.   acc_p= 0xa1 + 0x1c + Form1->SlaveAddr->Text.ToInt();

  14.   for(int i = 0; i < 33; i++)
  15.   {
  16.         acc_p += Data[i];
  17.   }
  18.   acc_p &= 0xff;//通过计算获得的校验和

  19.   pkgBuf->GetParityData(&cmdParity);
  20.   cmdParity &= 0xff;//直接获取的检验和

  21.   Form1->Edit6->Text = cmdParity;
  22.   Form1->Edit7->Text = acc_p;//此部分是我自己调试用的

  23.   if(cmdParity == acc_p)
  24.   {
  25.         p= (unsigned short*)&Data[0];        //直流电压
  26.         str = *p;
  27.         str = str.Insert(".",str.Length());
  28.         if(str.Pos(".") == 1)str = "0" + str;
  29.         Form1->vlQuery->Cells[1][1] = str+"V";

  30.         p= (unsigned short*)&Data[2];       //直流电流
  31.         str = *p;
  32.         str = str.Insert(".",str.Length());
  33.         if(str.Pos(".") == 1)str = "0" + str;
  34.         Form1->vlQuery->Cells[1][2] = str+"A";

  35.         p= (unsigned short*)&Data[4];
  36.         str = *p;
  37.         str = str.Insert(".",str.Length());
  38.         if(str.Pos(".") == 1)str = "0" + str;
  39.         Form1->vlQuery->Cells[1][3] = str + "V";
  40.         ac_v = (float)*p/10;
  41.        ....
  42.        ....
  43.   }
  44. }


发现cmdParity获取老为0  但是当我重新关闭再打开一次串口时却可以获取到校验和,接下来就不可以了
点赞  2010-2-24 12:53
现在有点觉得不是软件的问题

因为我在不断的打开和关闭串口时发现通信的数据都是正确的 而且成功率很高
但是只能是一次性的其他的时候传输的数据就不正确了

我专门做了下试验就是传特定的值过来,但是传过来的却是0,用232就没这问题
真是奇怪
点赞  2010-2-24 14:18
把串口停止位设为1.5或者2试下
点赞  2010-2-25 02:26
會不會是電壓的問題,你可以在裝置管理員,USB 裝置看耗電量。不過照說不至於,因為 USB 接硬碟都可以,沒道理你的 RS232 吃電比較兇。
点赞  2010-2-25 02:50
引用: 引用 14 楼 lin0119 的回复:
把串口停止位设为1.5或者2试下

是说在电脑上改呢?
还是软件上改?
点赞  2010-2-25 08:14
引用: 引用 15 楼 suanyuan 的回复:
會不會是電壓的問題,你可以在裝置管理員,USB 裝置看耗電量。不過照說不至於,因為 USB 接硬碟都可以,沒道理你的 RS232 吃電比較兇。

可能是电压的问题
改停止位没什么作用,两个地方的停止位我都改试了

我看了电压,USB的电压只有1V,而RS232的电压却有4V。
请问大侠有啥好的办法增压没?
点赞  2010-2-25 09:00
我说的电压时信号线上的电压,
USB电压时正常的,5V
点赞  2010-2-25 10:05
有些串口控件  在com数目大于10 的时候会出问题
点赞  2010-2-25 12:59
12下一页
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复