请教各位老师,
我现在的系统是cRIO模块通过网线连接到上位机,在上位机RT层上进行数据的监控。即工程中包含一个PC层VI,一个RT层VI。单独程序运行流畅,cRIO资源占用率最高45%。
此外,还有上位机PC层控制一个PCIE 6535B的数据采集卡,将它采集的数据利用强度图控件显示出来,总共两个,每个图像大小320*256,循环频率200Hz,上位机的CPU占用率最高27%。
问题是,一旦PC层的VI运行,特别是程序添加了这两个绘图的控件时,在PC的”任务管理器“中就会看到“网络占用率”从正常状态的3.65%变成0%~3%之间随机值,产生严重的网络卡顿,反应到RT层的VI中便是数据的刷新严重滞后和卡顿,但PC层的VI(包含这两个绘图的控件)运行流畅,而且它们(cRIO和PC)的资源占用都没有增加。
我思考了一下,是不是CPU在执行显示绘图这样的操作时,会引起以太网通讯的阻塞?或者是显卡显存跟不上?但是通过显卡软件看到显卡的占用不到10%。当我减少绘图的刷新速率(对200Hz重采样降帧频),网络卡顿会有所好转。
个人觉得PC层VI的这点绘图和计算量应该不大,CPU占用始终不超过27%,但不理解怎么会引起PC与cRIO之间以太网通讯的阻塞?希望各位老师能不吝赐教,谢谢!
已解决! 转到解答。
zou您好,
感谢您的回复,现在做的就是降低显示频率到50hz,网络卡顿有较大好转,但没有彻底决绝问题。
pc层的程序有两个并行循环(普通循环和定时循环都尝试过),一个采集图像送入队列,一个读取图像显示和存储。
我从windows的任务管理器观察了一下,每个cpu核心占用最高没超过70%,另不论显示频率是否做调整,总占用都是27%左右。
Zou,您好
1、PC层的程序,两个定时循环,一个负责采集和送入队列,一个负责取出队列、存储和显示。这两个循环是并列的,在labview中好像就是多线程?不太清楚您说的multi-thread具体指什么,还望指教哈~
2、网络通信是这样子的,crio模块是通过它的网口与电脑的网卡连接,我在电脑上编写它的程序(即rt层程序)来控制crio,运行时便通过电脑可以监视rt层程序前面板的数据变化,其实相当于把电脑的显示器与键盘鼠标作为crio的外设,它们之间的数据交换就是以太网。这里不需要程序设计,插上网线,建立工程运行便可以。
pc层数据采集显示等程序是我设计的,它是对电脑中一张pcie的io卡进行操作,并不涉及到网络通讯。而crio通过网络向电脑的显示器发送监视数据,应该是labview软件底层的自行运转。所以我看到处理器资源占用不高,却使得网络吞吐量下降,感到迷惑。
望解答非常感谢!
real time 不支持前面板的实时显示.
你看到的现象很正常.
rt 前面板的显示(非实时)是为调试用的.
循环中设延时了吗?
采集循环可放入子程序. 用子程序的属性, 设定 "Preferred Execution System" (LabVIEW的线程)为 "data acquistion".
避免用默认的 "same as caller" (即 UI 线程).