计算机网络和嵌入式技术的发展给测控行业带来巨大的变革,传统的测量控制技术已经悄然向网络化方向发展,网络化仪器和远程测控已成为主流。在网络化的测控系统中,用户可以不受空间和时间的束缚,对仪器仪表进行操作、获取测量信息;仪器仪表也可以部署在些环境比较恶劣或不适合观测者长时间待的观测点,如沙漠、风暴中心甚至爆炸测量点等。
目前,大部分解决网络化仪器的方案都是直接生产支持以太网接口的仪器仪表,其中成果*为显著的是由安捷伦(AgilentTechnologies)、VXITechnology等仪器大厂商组成的LXI联盟提出的LXI仪器标准。2005年,LXI联盟发布了LXI规范的**个版本,其革命性的发展在于将以太网技术等工业标准加入其总线标准中,在仪器上集成了高带宽的局域网(localareanetwork,LAN)接口,使得LXI仪器具有强大的网络发现和管理功能。但现实中正在服役的许多仪器仪表是不支持以太网接口的,为仪器仪表组网而将这些仪器西安市科技计划基金资助项目(编号:CX1252-4)。
**作者郭猛(1988-),男,现为西安邮电大学计算机系统与结构专业在读硕士研究生;主要从事嵌入式开发与应用的研究。
仪表全部换掉是不现实的。为解决这一问题,本文设计了一种网络代理,仪器直接由原接口接入代理,由代理负责网络通信,实现网口与原接口的转换,这样便可以通过局域网对仪器进行操控。
1系统总体设计系统包含用户控制终端、仪器代理和仪器设备三大部分,其中,仪器设备通过各种接口接入代理,代理与用户终端通过以太网连接实现通信。系统硬件连接示意图如所示。
1.1用户控制主机虚拟仪器设计虚拟仪器概念*早由NI(美国国家仪器)公司提出,其核心思想为软件即仪器,具有性能高、扩展性强、开发时间少、无缝集成等优点1.本文以示波器为例,自行开发出用于示波器的通用软面板。开发工具采用NI公司的LabWindow/CVI,用于设计和开发虚拟仪器的工具还有LabVIEW等。本文使用LabWindow是因为其基于C语言,相对而言上手较为容易,且对于底层函数调用相对透明,便于资源的控制。
虚拟示波器主要由示波器软面板部分、数据分析处理部分和通用I/O接口三部分构成。软面板根据真实仪器设计,为用户提供友好的图形用户接口,支持鼠标操作。用户不需要阅读冗长的仪器手册,只需具备很少的先验知识就能操作。数据分析处理部分采用多线程设计,从线程池中开辟线程用于大量数据的统计和分析,这样即使需要处理的数据量很大也不会影响软面板的流畅性。为保证运算速度,对于简单运算处理由程序自己实现,而大数据量的处理则调用库函数,如快速傅里叶变换(fastFouriertransformation,FFT)函数等。通用接口部分则由代理通过虚拟仪器软件架构1.2代理设计仪器设备代理与主机通信2的同时,还要与仪器进行交互。它与控制主机之间存在异步通道和同步通道。同步通道用于普通的控制命令和测量数据的传输,需要保证收发报文的顺序;异步通道用于特殊事件和特殊状态的传送。两个通道之间有共享的数据。为保证链接的可靠性,代理在通过高速以太网仪器协议信时,还需要有套错误处理和锁的机制来应对突发的错误,实现对资源的安全共享。当出现对于仪器读写错误或者读写延时时,需要及时通知控制主机,否则控制主机会继续发送命令而导致堵塞出现同步错误,此时需要重新同步代理与控制主机。
对于不同接口的仪器,代理需要选择一个统一的接口,以保证通用性和可互换性,代理本身需要支持不同接口的仪器仪表。而目前各类仪器仪表的接口总线繁多不由此针对不同仪器所编写的软件可互换性很差3,不具有通用性。为此,代理的编写则基于虚拟仪器软件结构框架(VISA),再由VISA负责各个接口的统。
4的基本思想是将不同的接口抽象封装,为上层提供统一接口,上层可通过此接口对USB、串口、GPIB、VXI、PXI和以太网等接口进行配置和编程,实现I/O接口软件的统。VISA结构可分为五层:用户应用程序接口、自定义资完成资源寻址、资源创建与删除、资源属性查询设置等功能。这种自底向上结构模型的VISA还创造了一个统一形式的I/O控制函数集,即VISA库,代理通过对这些库函数的调用实现对仪器的控制、测量结果的反馈等。
2代理功能的实现代理与主机通过HiSLIP协议互联,与仪器互联则调用VISA接口,由VISA调用相应的接口驱动。所以前期需要将仪器所需要的驱动安装到相应的硬件环境中,并实现HiSLIP协议。本文使用的是泰克型号为TDS2014B的示波器,其接口为USB口,代理平台为S3C6410Linux,所以需要将USBTMC驱动编译到开发板中5.2.1网络通信协议6是基于TCP的仪器控制协议,可以提供传统的测试和测量功能。该协议主要包括:设备清除、仪器的本地/远程仪器状态控制、仪器的锁机制、从仪器到客户端的服务请求、消息结束机制、错误检测中断时的消息交换机制。此协议是IVI联盟针对于远程仪器控制而提出的,协议本身结构清晰、形式简洁,易于实现。
HiSLIP报头为固定的16B,包括数据包标志、消息类型、控制码、消息参数和数据长度等字段。消息格式如所示。
数据包中有多种用途。
段的字节数。
数据(data),字节长度由数据长度标示,用于承载传输的数据。
根据功能不同,消息类型大致分为初始化消息、锁消息、尺寸设置消息、状态消息和数据消息等。
代理在初始化时,会在同一个端口(4880)上创建两个TCP连接,个作为同步通道,另一个作为异步通道。在同步通道上可双向发送命令,代理将数据按照HiSLIP数据包的格式包装好后交由下层TCP封装。
代理建立Socket链接的流程图如所示。
程序启动时会申请套接口并绑定4880端口,然后侦听端口。若有连接请求,则查询是否超过*大连接数,如果超过则拒绝请求,没有则建立连接。建立连接后创建子进程,将父进程的链接信息复制份,然后进行数据传输。主进程会查询是否有关闭连接的请求,如果有,则关闭连接,没有则继续侦听端口。
2.2仪器总线编程代理与仪器的交互工作大都由虚拟仪器软件架构(VISA)完成,代理调用VISA提供的库函数,然后由VISA调用相关接口的驱动。VISA函数库按功能大致可分为4类:控制管理类、输入输出类、接口功能类和资源管理类。相关函数说明如下。
当仪器仪表接入网络代理时,可以通过viOpenDefaultRM(ViPSessionsesn)函数对接口资源和设备资源进行扫描,然后进行下步操作。当查清楚所有资源后,便可以对某特定资源进行操作。
束时可以使用viClose(ViSessionvi)函数关闭此会话。这一点跟文件系统很像,即将所有的资源抽象为文件,数对资源进行数据的读写,使用viGetAttributeattrState)等函数来查询和设置资源的属性。代理会解析出主机传来的程控仪器标准命令集(standard令的种类分别调用VISA库的函数对设备进行操作,及时读出数据并反馈给控制主机。
2.3内部锁机制为实现两个通道间资源的安全共享、各线程之间正确同步,需要根据情况对共享资源加上互斥锁9.本例mutexattr)函数动态初始化互斥锁,其中mutexattr参数用于设定锁的属性。本文锁属性设为PTHREADMUTEXRECURSIVENP,即此锁为嵌套锁,允许同一个线程多次成功获得同一个锁并通过多次unlock解锁。采用嵌套锁主要是考虑到对于仪器测量数据的读写线程需要保证高的优先级和数据的完整性,避免将失效或过时的数据回送给控制主机。测量数据读写线程在读写共享数据区时首先需要通过pthreadmutexlock函数进行加锁操作,离开时通过pthreadmutexunlock函数释放锁。其他线程在进入临界区之前需要调用pthreadmutextrylock函数来尝试获取锁,如成功获得,则可以访问临界资源,如果获取失败,则立即返回而不会阻塞等待10.*后在关闭会话和释放资源时,需要通过pthreadmutexdestroy函数将互斥锁注销掉。
3试验结果本文在嵌入式S3C6410Linux平台上实现代理功能。首先将所写代理程序通过交叉编译移植到代理上,并将相应接口驱动和VISA移植到代理平台上。
然后操作PC机上的虚拟软面板,软面板会调用代理上的VISA库,并由代理实现对仪器的具体操控和测量值的读取。代理获取测量值或波形数据后,将其及时反馈至软面板。
试验结果显示虚拟仪器软面板可及时正确显示实体仪器所显示的波形,且对于仪器的各种操作和设置比较流畅,如设置触发方式、耦合方式和仪器检测等。
4结束语本文针对普通接口仪器仪表提出的多接口网络代理方案,主要解决将普通仪器接入网络及网络化管理的问题。具体实践表明,该方案的可行性较高,实现效果良好。由于嵌入式代理使用和移植方便,适用于各种平台,便于控制成本,所以易于推广,但由于存在网络延时及其他的些不稳定因素,该代理不适合实时性要求高的场所。下一步将继续研究高精度时钟同步的解决方案。
下一篇:制冷系统试验时应注意的事项