纳杰斯
(昆明船舶设备研究试验中心 昆明 650051)
LabVIEW编程中基于AMC框架的多机通讯实现方法*
纳杰斯
(昆明船舶设备研究试验中心昆明650051)
摘要在一个多台计算机联合工作的大型软件系统中,系统内各计算机之间的通讯(以下简称“多机通讯”)是保证系统正常运行的必不可少的一个重要技术环节,多机通讯的代码质量很大程度上决定了系统的稳定性与鲁棒性及系统运行速度。目前大部分系统的多机通讯实现主要是建立在如TCP与UDP等通用网络通讯协议上的,论文提出了多种在LabVIEW编程中基于AMC框架的多机通讯实现方法,并比较了它们的优缺点。
关键词LabVIEW; AMC框架; 多机通讯
Class NumberTB566
1引言
LabVIEW(Laboratory Virtual Instrument Engineering Work bench)程序开发环境是由美国NI(National Instruments)公司开发的一种图形化设计语言[1],LabVIEW与C语言等文本编程、过程化程序设计语言最大的区别是[2]:LabVIEW是图形化、基于数据流的程序设计语言,使得LabVIEW在测量与控制系统的开发中有着得天独厚的优势[3]。
AMC(Asynchronous Message Communication Library)是美国NI(National Instruments)公司开发,用于在LabVIEW编程中实现线程通讯、进程通讯及多机通讯的API接口函数库,该函数库基于LabVIEW自带的消息队列结构[4],使用通用的UDP通讯协议,具有极强的移植性与通用性。
LabVIEW程序设计语言广泛运用于测控系统软件开发,在一个拥有多台计算机联合工作的大型软件系统中[5],系统内各计算机之间的通讯(以下简称“多机通讯”)是必不可少的一个重要技术环节,多机通讯技术是实现分离的计算机协调工作的重要手段,是连接整个系统的桥梁,这些因素使得多机通讯的代码质量至关重要。
当前大部分系统的多机通讯主要是建立在TCP与UDP等通用网络协议上[6],采用基于UDP的AMC框架实现多机通讯是较为主流且先进的程序开发手段。传统的多机通讯方法大多由通讯循环结构实现,主机发送通讯指令后,通过单独线程的通讯循环实时监听从机反馈指令,或判断为通讯超时[7]。本文以传统多机通讯方法为基础,提出了两种优化的多机通讯实现方法。
2AMC框架的多机通讯的实现方法
2.1AMC框架的网络通讯机制
AMC基于UDP协议实现网络中计算机的通讯管理,AMC库中的Dispatcher函数库提供了底层的UDP通讯支持,只要在计算中调用、配置Dispatcher函数即可使网络中的计算机如同本地计算机一样使用消息队列通讯。图1所示为AMC函数库中用于实现网络通讯的Dispatcher函数库。
图1 AMC中用于通讯的Dispatcher函数库
2.2传统的通讯循环结构
多机通讯机制一般是主机发送消息到从机,主机等待从机的反馈指令,如果接受不到反馈指令,则判定为通讯超时。从主机角度来看,因为从机反馈指令的时间不定,为了不错过从机的反馈指令,主机需要监听从机的反馈指令,监听期间不能影响其他软件功能的正常运行,一般需要一个单独的循环结构来实时监听从机的反馈指令。
如图2所示代码是一个典型的生产者消费者编程框架,其中红色框内的代码既是为了实现多机通讯加入的通讯循环结构(以下简称Communication Loop),Communication Loop从程序启动时便一直存在于内存中,对于程序而言是一个单独的线程,随时监听从机的反馈指令。当主机发出通讯指令后,可从Communication Loop中监听接收从机的反馈指令并做下一步处理,即实现了多机通讯。
2.3融合的Wait循环结构
在LabVIEW测控软件设计中,通常是基于一个消息生产者和一个消息消费者的编程框架,为了提高代码的聚合性,不宜因多机通讯的需求而添加一个独立的循环线程来处理从机的反馈指令,如图2所示的代码结构显得松散繁复,所以有必要将多机通讯所需的循环结构嵌入到消费者队列的循环结构中。
图2 传统的通讯循环结构实现多机通讯
图3所示为AMC构架下,一个典型的消息消费者循环中处理各个消息(Message Name)的分支,图中打勾选中的分支可实现循环结构(以下简称Wait分支)。Wait分支的进入条件为:当消息出队列超时,即队列中没有任何Message Name,此时Message Name为空字符串(即是“”),该Message Name会进入Wait分支,默认超时为百毫秒级,消息生产者生产指令的时间间隔通常超过这个时间量级,这便使Wait分支形成了一种不定时的循环结构,程序会在消息生产者任务不繁忙时进入Wait分支。当Message Name为“Wait”时,也可进入Wait分支。
Wait分支的循环结构可实现通讯中的监听功能,为了能用Wait分支的循环结构监听从机的反馈指令,所有的从机反馈指令的Message Name都必须是“Wait”,为了区分不同的指令,需要使用附加的消息属性(Message Attributes)变量。
如图4所示,箭头所指框内的vi即为多机通讯的代码,并标出了用于区别不同反馈指令的“Message Attributes”变量,如图4中的“即时帮助”栏显示了“Message Attributes”变量的类型,是一个簇2的元素包含了两个一维的字符串数组,不同的字符串可表示不同的反馈指令。
图3 典型AMC消费者循环处理的消息分支
图4 Wait分支循环结构实现多机通讯
2.4改进的融合循环结构
如图4所示,可以看出Wait分支循环结构的特殊性,许多需要定时、循环类型的代码都要在Wait分支内执行,越是复杂的控制流程,Wait分支越是臃肿。同时,为了监听从机的反馈指令,所有从机的反馈指令Message Name必须为“Wait”,这样人为的规定显得代码逻辑牵强。所以有理由将多机通讯的实现代码从Wait分支中剥离出来,便于代码管理与阅读。
如图5所示,为了将处理从机反馈指令的代码从Wait分支中分割出来,单独添加了一个消息处理分支(以下简称Response Analyses分支),并设置该分支为“默认”分支。
当主机发出通讯指令后,如果收到任何反馈指令,此时从机的反馈指令Message Name表示了该通讯指令本身的含义(例如Message Name=“SubMachine1_Sate”),不等于“Wait”,也不等于消费者队列消息处理表中的任何Message Name,该条消息将进入设置为“默认”的Response Analyses分支,在Response Analyses分支中,根据接收到的Message Name可区分不同的反馈指令并进行下一步处理。同时,从机可以设置反馈消息的Priority属性为真,此时该条反馈消息将插入消息队列的头部优先处理。
图5 Response Analyses分支实现多机通讯
3各实现方法比较
传统的多机通讯实现方法将多机通讯所用的代码模块化做成单独的一个循环线程,单独的循环线程与其他线程互不影响,循环周期稳定,响应速度快,但是单独的线程也带来了更多的硬件资源消耗[8]。
融合的Wait循环结构从代码风格上来说更符合LabVIEW主流测控软件的一个生产者一个消费者的编程框架,将多机通讯的实现代码融合到消费者循环中,提高了代码的聚合性[9],避免了单独的通讯线程与消费者线程之间的通讯,程序效率更高。但是Wait分支本身的不定时循环可能造成通讯延迟,响应速度慢等问题。
改进的融合循环结构将多机通讯实现代码从不定时的Wait分支中剥离出来,从机可通过设置Priority属性将反馈指令优先插入消息队列头部优先处理,改善了通讯延迟的弊端,同时减轻了Wait分支中的代码臃肿程度,同时提高了代码的可读性,保持了代码的聚合性。如表1所示描述了各实现方法的优缺点。
表1 多机通讯各实现方法比较
4结论
多机通讯的代码质量是保证大型系统稳定运行的前提条件,当前越来越多的测控系统有着大型化、复杂化的趋势,多机通讯的机制与实现在系统软件开发中也愈发重要[10]。本文提出的多种多机通讯实现方法各有优缺点,可根据实际工程选择应用,各实现方法均能在数台工控机联合工作的测控系统中稳定运行。
参 考 文 献
[1] 王鹞芝,屈蔷,赵阳.基于LabVIEW的库房监测系统设计[J].电子测量技术,2015(9):78-82.
[2] 王树东,何明.LabVIEW在数据采集系统中的应用研究[J].国外电子测量技术,2014(6):103-107.
[3] 李婧,张永祥,石炳寅. 基于LabVIEW远程校准系统的设计与实现[J].电子测量与仪器学报,2012(S1):41-44.
[4] 冯国彦,石林锁,岳增平. 基于LabVIEW的一种新型过程控制方法及实现[J].电子测量与仪器学报,2007(4)68-72.
[5] 元云飞,张丽芳,杨凤龙. Vb与LabVIEW混合编程的实现[J].仪器仪表标准化与计量,2006(4):16-20.
[6] 王树东,何明. 基于LabVIEW高速采集系统方法的研究[J].电子测量技术,2014(7):84-88.
[7] 王戈. 程序设计语言统一性研究及其在UVPL实现中的应用[D].开封:河南大学,2009.
[8] 刘龙启;李银. 基于LabVIEW的以太网数据监听与通信[J].国外电子测量技术,2012(7):92-96.
[9] 郑杰. 基于虚拟仪器的继电器性能测试系统[D].天津:河北工业大学,2007.
[10] 韩颖. 集群系统中组通信优化方法的研究[D].大连:辽宁师范大学,2010.
收稿日期:2016年1月15日,修回日期:2016年2月21日
作者简介:纳杰斯,男,硕士,助理工程师,研究方向:水声信号处理、Labview程序设计。
中图分类号TB566
DOI:10.3969/j.issn.1672-9730.2016.07.018
Multi Computer Communication in LabVIEW Based on AMC Frame
NA Jiesi
(Kunming Shipborne Equipment Research and Test Center, Kunming650051)
AbstractIn a large saftware system which many computers working together, the communication between computers within the system (hereinafter referred to as the “multi computer communication”) is essential to ensure the normal operation of the system, the code quality of multi computer communication largely determines the stability and robustness of the system and system running speed. Most multi computer communication of the system is mainly based on general network such as TCP and UDP communication protocol. A variety of in LabVIEW programming is put for ward based on AMC framework of multi computer communication realization method, and the advantages and disadvantages of them are compared.
Key WordsLabVIEW, AMC frame, multi computer communication