NI LabVIEW,CVI,数据采集等产品讨论区

取消
显示结果 
搜索替代 
您的意思是: 

串口通讯遇到问题

我从一个硬件设备的串口不停的接收数据,约定如下:115200波特率,8位数据,偶校验,停止位1,一个数据是84个包,(以下数据均为16进制)第1个包是80,2-83个包是数据,每两位组成一个数字,需要高低位交换,84个包是03,其中80和03用于判断所夹带的包为数据没有实际意义,我因为环境所限,用两台单机模拟现场,一台发,一台收,都用labview实现的,很正常,并且用串口助手看过发送的模拟数据,没有问题,但是同样的数据用串口助手发送,用labview做的接收程序接受就失败,并且到了现场和真正的设备相连做实验接收也确实失败了,当时通过串口助手看,设备发送的模拟数据和我双机时的模拟数据一样,我十分困惑,程序的逻辑应该没有问题,否则双机通讯就失败了,发送的数据可以清楚地看到,我无法定为错误,请高人给我几个提示。
目前我在串口config时已经关闭了中止符,不是这个问题了。
0 项奖励
1 条消息(共 9 条)
9,424 次查看
问题看起来比较复杂,如果就事论事的话,我也没有好的解决办法。根据我的经验,可以从如下几个方面着手去解决:

1 先查一下串口之间电平是否一致。一般说来,应该是12V,但是也见过有5V的,需要注意这个问题。
2 其次,除了数据线外,是否用了串口的控制线。如果用了的话,需要看看对控制线的配置是否正确。

3 最好手头有一台示波器,用串口助手发一个字节,看看数据线上有没有相应的位发出。这样很容易隔离出是发送方的问题还是接受方的问题。同时,也能看到电平是否正确。

简单而言,如果多个字节发送有问题,就首先看一看发送一个字节是否正常;如果连一个字节都发不出,就要看看是没有发出,还是没有收到(用示波器)。

只是提供一个思路,希望能帮上一点忙。




0 项奖励
2 条消息(共 9 条)
9,386 次查看
多谢您的提示思路,我进行谨慎的试验,情况已将有了进展,现将情况说明如下:我发现串口的写和读有一个属性:同步或异步(鼠标右键菜单中),我还不能确切的知道它的意思,但是改为异步后,可以正常地接受串口助手发来的数据,但是还有几个现象,
一个是串口读操作中,错误输出不停的提示错误:
Error -1073807253 occurred at VISA Read in Serial_Client_Ver2.12.vi
Possible reason(s):
VISA:  (Hex 0xBFFF006B) A framing error occurred during transfer.
二是计算机的配置必须要比较高,差一点的计算机接受的数据就乱了,我的配置是cup: P4 2.0G,内存512M,我换了一台PIII 1.0G,128M内存的笔记本,数据全乱,即使用串口助手很慢的发数据也不行,Labview需要很高的配置才行么?我不知道有什么要求。
我会再去现场和设备相连,试一下。
希望高人能就上面的两个问题,继续指点我。另外请告诉我同步和异步是怎样回事?

帖子被zhcl在03-06-2006 08:04 PM时编辑过了

0 项奖励
3 条消息(共 9 条)
9,372 次查看
另外补充一点,设备的串口电压是5V
0 项奖励
4 条消息(共 9 条)
9,366 次查看
串口通信分为同步通信异步通信两种方式。
同步通信一般适用于传送大量的数据,它将数据分块传送。在传送每一个数据块开头时,发送方发送一两个同步字符,使发送和接收双方取得同步,然后就一直发数据,如果数据块之间有时间间隔,再发送同步字符以取得同步。
异步通信用起始位0表示字符的开始,然后从低位到高位逐位传送数据,最后用停止位1表示字符结束。一个字符又叫一帧,一帧的信息一般包括1位起始位,多为数据位和1位停止位,其中数据位可以为8位也可以为9位。由于异步通信每帧都要加起始位和停止位,所以速度较同步通信慢,在小数据且时间间隔不定的通信中一般采用异步通信。
0 项奖励
5 条消息(共 9 条)
9,339 次查看
    现在和设备对接,可以接收到数据,但是有的对,有的错,还是不行。
    我和硬件工程师,用示波器一起看了计算机发送的数据和设备发送的数据的不同,发现计算机用串口助手发送的数据的电压高,在5-10V之间的一个电压值,并且发送间隔较长,硬件方的工程师照样调整了设备发送数据的时间,还是不行,因为串口助手可以看到发送的正常数据,硬件方的工程师坚持他那边没有问题,并且以前他们用c语言曾经编写过一个接受程序没有问题,所以比较有信心,而且设备有芯片,不能随便调高电压,他希望我在找一下原因,我已经作了一个最简单的labview接收程序,只是串口初始化后,通过read,不停的写到文件中,察看记录文件仍然出现丢位和误码的情况,除非设备只发送同一个数字,比如“55”(十六进制),才没有误码,至于丢没丢就不知道了。另外设备在发送数据的时候,只连了接地线和发送线两根线,因为设备只发不收。
    到底怎么了,labview中是不是根本不能接受115200这种速度的数据呀,不可能呀?请各位大虾提示。

帖子被zhcl在03-19-2006 05:34 PM时编辑过了

0 项奖励
6 条消息(共 9 条)
9,221 次查看
1. how much data are you sending / receiving?
2. do you have a wait in your code (between the reads)? it sounds to me the code is running as fast as possible, therefore starving other processes, including the OS.
3. did you try replacing the cable?

if possible, please upload your RS232 portion of code so we could take a look at it.

-Joe
0 项奖励
7 条消息(共 9 条)
9,215 次查看

设置buffer大小,并且每次清空buffer!不懂再到我的群里问,群号:15603799

 



TTech| ATS | NVH | SCADA |
0 项奖励
8 条消息(共 9 条)
9,206 次查看
详细点:
1、了解所用设备的串口参数,例如,baud rate、data bits、parity、stop bits等等。
2、设置采集时在计算机上开辟存储空间(buffer)的大小。
3、每次读取(read)数据后,记得清空buffer(这步最关键)。
4、最后关闭VISA协议。
附件是程序


TTech| ATS | NVH | SCADA |
0 项奖励
9 条消息(共 9 条)
9,202 次查看