• 易迪拓培训,专注于微波、射频、天线设计工程师的培养
首页 > 测试测量 > 技术文章 > 基于虚拟仪器的综合测控系统程序设计

基于虚拟仪器的综合测控系统程序设计

录入:edatop.com    点击:

  摘 要: 介绍了使用虚拟仪器技术及PLC构成的综合测控系统" title="测控系统">测控系统 ,重点阐述了大型多线程LabVIEW程序的构建、通讯协议的算法实现以及外部函数的调用、动画的显示等。
  关键词: 虚拟仪器; PLC; 测控系统; LabVIEW; RS-232

  LabVIEW即实验室虚拟仪器集成环境,是美国国家仪器公司开发的图形化集成开发环境" title="开发环境">开发环境 。它区别于其他开发环境,主要采用图形化编程即G语言编程,其核心是子VI、前面板、数据流图等概念。LabVIEW目前已经发展到8.5版本,提供了与MATLAB、C等外部程序的良好接口,支持ActiveX、DDE、TCP/IP等标准程序接口,采用了面向对象的编程方法,功能非常强大,适用于任何编程任务,并渗入到嵌入式系统、FPGA设计等多个方面,成为一个获得广泛认可的图形化软件开发环境。本文介绍一个使用虚拟仪器技术在一台普通PC上搭建通用多功能检测平台的应用,其集成了多种传统检测功能,同时具有数据分析、存储、模拟仿真等诸多扩展功能,使众多功能统一在一个架构下,成本低廉且方便管理维护,很好地体现了虚拟仪器低价灵活功能强大的优点。
1 测控系统总体结构
  本测控系统主要目的是在一个架构下完成对工业生产中的各种元器件的检测,根据测量对象的不同选用不同的机械部分,可以应用于研发、质保等环节。
  系统整体结构如图1所示,整个系统由普通PC机、PLC、机械/电动执行件及传感器搭建组成。传感器通过CAN、开关量、模拟量等方式接入PLC,PLC通过RS232连接PC机。此系统灵活简单,任何一台装上程序的普通PC机连接PLC就能采集数据,且成本较低。PLC选用一款国产的控制器,特点是端口丰富,拥有2个CAN2.0B端口,1个RS232/422/485复用串口,1个以太网口,6路PWM输出,4路脉冲输入以及大量的模拟和数字端口,价格低廉,符合本设计要求,扩展空间广阔。基本连接的传感器为Hengsler绝对编码器和3B6角度传感器,使用CANOPEN接口;执行件为大扭矩步进电机,以PLC的PWM输出作为其主要控制信号。

  系统的核心是PC机与PLC的协同工作。在工作时PC机与PLC进行双向对等式通信,都可以向对方主动发数据。PC机负责人机交互" title="人机交互">人机交互 、数据分析存储以及根据收到的信息进行一些逻辑判断,向PLC发送各种数据及命令。PLC负责将收到的命令转换成具体的动作,收集现场信息传给PC,以及实现安全保护的逻辑判断。
2 主机程序总体结构
  程序主要结构如图2所示。主循环由2个线程组成,一个负责监视通信;一个负责逻辑分析以及人机交互。通信线程包括数据收包解包、帧打包发送。人机交互线程包括面板操作响应、数据分析及画图演示、发送命令、响应PLC的请求等。线程间通信通过LabVIEW中有互斥保护机制的队列类型(queue)交换数据,避免不同线程同时抢占公共资源或读写顺序混乱产生错误。线程内部不同子循环间通过“通知/消息”结构(notifier)交换有时间性要求的数据。最后为正常退出的处理程序,进行设置存盘等操作。数据的存储与读取使用ACCESS数据库。

3 LabVIEW主要程序设计" title="程序设计">程序设计
3.1用户登录验证

  登录验证界面程序完成用户合法性及权限验证。在启动时隐藏程序主界面,弹出登录验证界面。登录程序首先读取数据库用户信息,然后进入单循环event case结构,等待登录事件触发,进行验证。访问数据库使用LabSQL模块完成。图3所示为等待登录事件触发的程序,图4中程序完成对用户信息数据库userinfo.mdb的一次访问。

3.2 PC机与PLC通信设计
3.2.1 模块概述
  通信模块的正常可靠运行是整个测控系统安全工作的基础。如果不定义数据包不加处理地直接收发信息,则有可能因为收发双方收发时间的不协调而导致连续的误判。这在主从式低速通信的情况下可以通过问答形式避免,但在双向通信的情况下,随着数据量的增加错误风险也大大增加,可能导致危险的机械动作,因此需要一定的机制避免这种情况的发生。最理想的方法是利用TCP/IP协议,但PLC中RS232通信模块没有此协议,因此自行编制了一个底层通信协议以保证通信的可靠和效率。图5为基本通信过程。

3.2.2 通信协议
  对于双方的上层应用程序,数据帧定义如下:每一帧开头包括2字节表示帧类型及帧意义,第三字节开始为数据及参数,长度可变,如无参数和数据则填空。重要的数据在发送后需要得到确认。应用程序将需要发送的帧写到写缓冲队列中,等待打包程序处理后发送。接收到的包经过对应的解包程序后送到读缓冲队列中给程序使用。
  打包处理过程如图6所示,程序接收到应用程序要发送的数据帧后,将帧中的数据位进行裁减及拼接处理,将原数据位中每7位数据分成一组,最高位补0,作为数据包中的1字节数据,牺牲1位的效率表示原数据。这样做是因为包的结尾有一字节“FE”作为包结束标志,避免数据位中出现与结束位相同的字节。帧头的帧类型帧意义2 字节数据同样也不能出现和结束位一样的字节“FE”。完成后再对前面所有位进行累加然后模128,结果作为1字节校验位。在包的最后是一字节“FE”表示包结束。使用“FE”而不是“FF”可以避免此重要的结束字8位为全“1”,增强抗干扰性。解包程序为其逆过程。由于上述处理都是数据移位的过程,所以占用资源很少,执行效率非常高,PLC端也能承受这种开销。

  LabVIEW中打包子程序" title="子程序">子程序 主要部分如图7所示。中间case结构为打包算法的实现:取出帧中数据位拼接到一个Unsigned Integer64单元中,接着按位取出,每7位一组作为1字节,得到包数据位,再进行累加和校验,与帧头2位及结束位组合便得到数据包。

3.2.3 通信监视线程
  通信监视线程的接口主要是3个FIFO队列,即Wbuf、combuf、databuf,队列元素为供上层程序使用的帧,以LabVIEW中簇(Bundle)的形式存在。Wbuf表示待发送数据,combuf表示收到的命令帧,databuf表示收到的数据帧。程序不断地扫描Wbuf队列、RS232硬件接收缓冲区。当Wbuf中有元素时,依次取出所有元素,并对每个元素即待发的帧调用打包程序进行数据位、校验位及结束位的处理,再把处理结果拼接成数组转换成字符串后送给串口写模块发送。当RS232硬件接收缓冲区中扫描到数据时,线程将数据读到一个数组中并扫描。当出现结束字时就把结束字以前的所有数据当成一个包拿出来,进行验证判定解包,将不正确结果丢弃,正确结果放入combuf、databuf队列中,并及时反映在前面板。当数组中没有结束字时则不做处理,等待下一次数据。如果数组超过一定长度还没收到结束字则视同错误包丢弃处理。通信状态灯显示通信工作状态。
3.3 界面响应线程
  界面响应线程主要负责对用户界面操作的响应,根据规则向PLC发送信息并应答PLC请求,显示工作情况等。此线程主要由两个循环组成,第一个循环专门扫描用户操作进行响应,采用事件结构(event case)编程,响应事件程序都放在event case结构中。case中实现控件响应、系统设置、测量数据、数据分析画图显示、数据存储等功能。每一个需要响应的事件或实现的功能形成一个case,以“插件”的形式存在,便于修改。子case调用子程序,收发相应数据,并在前面板以字符串或动画的形式产生回应。用户在前面板进行操作后产生一个事件,程序便会调用相应事件处理程序进行处理。另一个循环监视收到的命令数据,进行应答或形成LabVIEW中用于同步交换数据的通知(Notifier)发给需要的子程序。这个循环同时负责处理紧急事件如紧急停止等。
3.4 不规则界面设计
  LabVIEW标准生成矩形窗口,没有很好的方法实现不规则窗口,给界面设计带来一些限制,因此需要借助外部程序。微软标配的user32.dll中函数SetLayeredWindowAttributes能使窗体中指定颜色部分变成透明。将VI前面板背景色作为参数传给此函数, 同时设置好VI的Window Appearance属性,便能隐藏背景,显示定制界面。图8完成此外部函数的调用,图9为不规则的登录窗口显示效果。

3.5 数据处理
3.5.1 数据分析及存储
  通过插入C语言、Matlab语言节点编制程序及调用LabVIEW数据分析模块完成分析、模拟仿真功能。每种功能同样以“插件”形式作为子功能存在于event case结构中,系统完成一次检测或分析后对ACCESS数据库进行操作,过程大致与登录系统相同,不再赘述。
3.5.2 作图及动画演示
  普通要求的数据显示调用LabVIEW提供的Plot Multi-XY模块即可完成。此模块接收一组数据包,每个包中含有一组坐标数据,对应一条将被绘制的曲线。特殊要求可通过自行编制画图程序完成。动画演示部分通过自行编制画图程序在前面板的Picture容器中绘图完成。被绘制的图形是受控的可以运动变化的图形。绘图子程序根据主程序传递的参数计算并绘制应显示的图形,参数不断地改变从而形成显示图形的不断改变,从而形成动画。

  绘图过程如下:如图10所示,程序初始化时,绘图程序从BMP文件中读取需要绘制的子图像及背景。背景是静止图形,程序运行中一般不更新,子图像是需要运动变化的图像。读取到的子图像是一个个矩形图像,和其他图像拼接时会有互相掩盖现象。将读到的图像进行掩码处理使不需要的地方成为透明色,这时子图像可以进行拼接。当需要绘图时,主程序首先通过参数的形式告诉绘图程序需要绘制的图形情况,绘图程序根据参数进行运算,将输入数据转换成绘图需要的具体参数,如运动点位置、子图形大小等。在得到绘制图形需要的所有参数后,程序将图形按要求以不同角度贴到指定位置,同时调用函数直接绘制矩形圆形等图形填充其他位置。由于LabVIEW中图形以左上角为原点,x从左到右y从上到下增大,不方便位置运算,因此需要给绘图子程序传入Picture容器高度进行坐标系转换。图11为一次绘图过程,通过多次类似过程,得到最终的图形显示在前面板上。

4 程序编译执行效果
  程序脱离开发环境后运行效果理想,集成实现了多项测量功能,界面精美友好,在普通PC上运行流畅。图12为程序整体编译后的主程序界面。
  本测量系统通过1台普通PC机与PLC通信,利用PC机的灵活性,以较低的成本集成实现了多种测量子功能,充分发挥了虚拟仪器的优势,同时子功能以插件的形式存在,从而使得扩展空间非常广大。本文介绍了应用于测控系统的大型LabVIEW程序的结构及设计方法,使用了多线程、动画等技术,完成了传统仪器所没有的功能,使一台PC机变成了多功能测控中心。由此可见虚拟仪器具有十分强大的功能,必将得到更为广泛的应用。

参考文献
[1] 杨乐平,李海涛,杨磊.LabVIEW程序设计与应用.北京:电子工业出版社,2004.
[2] National Instruments Corporation. LabVIEW development guidelines, April 2003 Edition. Part Number 321393D-01
[3] National Instruments Corporation. LabVIEW Function and VI reference manual, January 1998 Edition. Part Number 321526B-01.
[4] NORMA D. Using LabVIEW to Creat Multithreaded VIs for Maximum performance and reliability[DB/OL].
www.ni.com

点击浏览:矢量网络分析仪、频谱仪、示波器,使用操作培训教程

上一篇:安捷伦科技为中国的主要计算机和半导体厂商举办测量研讨会,讨论如何满足计算机和消费
下一篇:基于CS5467的电源转换效率测量系统的设计

微波射频测量操作培训课程详情>>
射频和天线工程师培训课程详情>>

  网站地图