最近我自己做了一个上位机软件,用C++ Builder做的
在用RS232进行通讯时可以,我想用USB来进行通讯
于是买了两家公司的USB转RS232的转换器
可是上位机上显示不出内容,用串口调试可以通讯,直接用RS232也可以
不知道各位有没有类似的经历,望大家多多指教
你的是那款转换器?有些use转rs232的转换器不能转换所有的信号。建议换一个好点的
我觉得不是你上位机的问题。而是发送给上位机的那部分是不是没有加载USB驱动?如果换了传输方式,你还按照以前传输串口的方式肯定不行的。
我用的是特力的
还有就是utek的
我发现通讯是在通讯的
但是速度很慢,而且误码率或是滑针的现象很严重,所以显示的数据
都不是很正确
当我把串口关闭一次然后再打开一次的时候却能全部正确显示内容
引用: 引用 2 楼 tianpeijun123 的回复:
我觉得不是你上位机的问题。而是发送给上位机的那部分是不是没有加载USB驱动?如果换了传输方式,你还按照以前传输串口的方式肯定不行的。
有可能的
但是USB驱动不是在转换器里本身就应该都弄好的啊
我也问了他们那边的技术人员
人家也觉得奇怪
所以想在这里碰碰运气了
呵呵
mark 过路.......................
USB转串口最终在PC端会模拟成一个COM口,既然使用系统的通讯软件能够正常使用就说明转换本身没有问题的,问题出在你写的软件上,访问模拟品质COM和真实的COM没有什么区别,但是COM号要设置正确。
另外要先接那个USB转串口,待在设备管理器里边能够看到那个COM后再启动你的应用程序,顺序反了是不行的
应该是软件的问题!你在初始化串口的时候作些判断,确定串口有效并稳定后再进行操作!另外!有些转换器是不支持高波特率的!注意下!
谢谢,大家的支持!
我也觉得可能是软件的问题。
可是找不到原因
我放在RS232上通讯时可以看到发送过来的校验和,但是在USB时获取的校验和是0
用通信助手又可以看到校验和,郁闷
那明显是你的软件的问题了,调试助手都已经可以了还说啥,贴贴代码看看啊。
- void __fastcall TForm1::QueryProc() //查询协议 普通信息
- {
- AnsiString str;
- unsigned char Data[64];
- unsigned short *p;
- unsigned long *l;
- long acc_p;
- unsigned short tmp2;
- float tmp,ac_v,ac_a;
- SYSTEMTIME systime;
- setmem(Data,64,0);
- pkgBuf->GetData(Data);
- acc_p= 0xa1 + 0x1c + Form1->SlaveAddr->Text.ToInt();
- for(int i = 0; i < 33; i++)
- {
- acc_p += Data[i];
- }
- acc_p &= 0xff;//通过计算获得的校验和
- pkgBuf->GetParityData(&cmdParity);
- cmdParity &= 0xff;//直接获取的检验和
- Form1->Edit6->Text = cmdParity;
- Form1->Edit7->Text = acc_p;//此部分是我自己调试用的
- if(cmdParity == acc_p)
- {
- p= (unsigned short*)&Data[0]; //直流电压
- str = *p;
- str = str.Insert(".",str.Length());
- if(str.Pos(".") == 1)str = "0" + str;
- Form1->vlQuery->Cells[1][1] = str+"V";
- p= (unsigned short*)&Data[2]; //直流电流
- str = *p;
- str = str.Insert(".",str.Length());
- if(str.Pos(".") == 1)str = "0" + str;
- Form1->vlQuery->Cells[1][2] = str+"A";
- p= (unsigned short*)&Data[4];
- str = *p;
- str = str.Insert(".",str.Length());
- if(str.Pos(".") == 1)str = "0" + str;
- Form1->vlQuery->Cells[1][3] = str + "V";
- ac_v = (float)*p/10;
- ....
- ....
- }
- }
发现cmdParity获取老为0 但是当我重新关闭再打开一次串口时却可以获取到校验和,接下来就不可以了
现在有点觉得不是软件的问题
因为我在不断的打开和关闭串口时发现通信的数据都是正确的 而且成功率很高
但是只能是一次性的其他的时候传输的数据就不正确了
我专门做了下试验就是传特定的值过来,但是传过来的却是0,用232就没这问题
真是奇怪
會不會是電壓的問題,你可以在裝置管理員,USB 裝置看耗電量。不過照說不至於,因為 USB 接硬碟都可以,沒道理你的 RS232 吃電比較兇。
引用: 引用 14 楼 lin0119 的回复:
把串口停止位设为1.5或者2试下
是说在电脑上改呢?
还是软件上改?
引用: 引用 15 楼 suanyuan 的回复:
會不會是電壓的問題,你可以在裝置管理員,USB 裝置看耗電量。不過照說不至於,因為 USB 接硬碟都可以,沒道理你的 RS232 吃電比較兇。
可能是电压的问题
改停止位没什么作用,两个地方的停止位我都改试了
我看了电压,USB的电压只有1V,而RS232的电压却有4V。
请问大侠有啥好的办法增压没?
我说的电压时信号线上的电压,
USB电压时正常的,5V
有些串口控件 在com数目大于10 的时候会出问题