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

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

关于PCI-8430/8的读问题

用LabVIEW按照example里面的advanced serial write and read配置VISA串口来运行PCI-8430/8port,分别编写8个独立运行的程序,目的8个串口要独立运行,互不干扰。现在发现只要有一个串口没有数据输入,那串口就一直等待数据,别的程序一样跟着在那里停止,那里面设置有1000ms timeout好象不起作用,请问各位怎么配置才让8个串口避免出现如此情况和独立运行,互不影响呢?
0 项奖励
1 条消息(共 9 条)
7,550 次查看
你用的是多线程吗? 8个端口都放在一个Loop里?每个端口使用一个Loop
试试看。还有到底是“读”还是“写”问题?
------------------------------------
A guitar man play instruments
wengang_qin@sjtu.edu.cn
0 项奖励
2 条消息(共 9 条)
7,538 次查看

至少PCI-8430的8个端口是独立的,因此应该是程序上的问题了

您再好好检查一下程序,或者放到一个程序中,利用8个独立的循环,就像楼上提到的那样,应该没有问题

帖子被rilee在09-23-2005 06:03 AM时编辑过了

0 项奖励
3 条消息(共 9 条)
7,531 次查看
我想大部分是程序有问题,我的程序是每一个串口都有一个LOOP,就是whilie里面含case构成,这样的程序(while+case)我之前用在别的项目都很好的运行。我在单独试的时候就发现若读串口无数据程序就一直等,那么八个一起运行只要有一个有问题,整个screen就停止。所以我猜想可能在配置VISA上有问题。请高手指点!!我把单独程序放在附件,也希望对同行有所帮助!
0 项奖励
4 条消息(共 9 条)
7,517 次查看
hi lsqq
看了你的程序,觉得局部变量用的有些多了,而且这只是8个里面其中一个,为什么要使用while+case呢?我觉得使用根据数据流向一步步便下来就可以,你的数据流向还是很清晰的,但局部变量太多结果搞乱了。把那些case做成子vi,这样8个都可以使用,做好数据接口,按顺序调用子vi,你试试看。然后再检查毛病,我想原因可能并不在于"读不到数据就停在那里了"这样表面,可能是有多个死循环在其中。首先你两个loop就可以合并成一个.
------------------------------------
A guitar man play instruments
wengang_qin@sjtu.edu.cn
0 项奖励
5 条消息(共 9 条)
7,511 次查看
谢谢楼上的回复,不过我想不是我的局部变量多少和while+case的问题,我单独试VISA配置马上用VISA.read读,只要没有数据,也一样发生我上面所述情况,和我后面的程序一点关系都没有,为什么我要用while+case呢,那是我程序的需要,请问在C里面的switch+case您能用简单的数据流来连接就能实现吗?加上程序比较大。那样连接根本就无法调试或是相当困难的。
0 项奖励
6 条消息(共 9 条)
7,500 次查看

您在读串口的时候好像指定了读取的字节数,如果此时串口中没有这么多字节,那么读串口的部分程序就会一直等待,直到串口中有数据或者超时发生。建议您利用串口中的属性节点检查一下此时串口中是否有数据,有多少字节的数据,然后再读取。

不过这8个串口应该是独立运行的,我还没有太仔细看您的程序,不知道会不会其他方面的设置导致问题的发生。

您可以先把上面的部分改一下,然后再试试

0 项奖励
7 条消息(共 9 条)
7,497 次查看
谢谢rilee.诚如您所说的我在读取串口是按固定字节的,我想问题的关键就在这里,我想试试您说的判断串口有数据我再读。不过我还是害怕有问题,比如上一次的串口数据我还没有读而又有新的数据来,串口是累加还是覆盖我不得而知怎么办,我希望是能有保存每一次数据的操作,还有怎么知道串口有数据呢?怎么配置?望不吝赐教!
0 项奖励
8 条消息(共 9 条)
7,492 次查看
您可以参考一下LV的范例,advanced serial write and read.vi,其中有一个input buffer size的设置,这样可以将接收到的数据暂时保存在buffer中。
您可以先试验一下,如果还有问题,再来问也可以呀。
0 项奖励
9 条消息(共 9 条)
7,486 次查看