谢荣清
(中海油田服务股份有限公司,三河 065201)
海上高分辨率地震勘探设备应用在高分辨率地震作业领域,提供高分辨率的地震资料,得到清晰的地下地质构造成像。对于高分辨率和精确度的物探装备,采集的数据量也随之提高,这对数据处理系统的高实时性、高可靠性和高效传输性都提出了严格的要求[1]。为了达到高效的性能,海上高精度地震采集设备数据采集箱体中央处理器板采用了嵌入式VxWorks操作系统。VxWorks操作系统是美国WindRiver公司于1983年开发设计的一种嵌入式实时操作系统(RTOS)。它以其良好的可靠性和卓越的实时性被广泛地应用在通信、军事、航空、航天等高精尖技术及实时性要求极高的领域中,如卫星通讯、军事演习、弹道制导、飞机导航等[2]。本文的研究内容属于海上高精度地震采集设备室内部分CPCI箱体中央处理器板的嵌入式软件设计。
高精度地震数据采集系统主要分为水下部分和室内部分。水下部分4条拖缆接收由震源激发的地震信号,每块电缆接口板FCI(Fibre Cable Interface)负责接收1路的拖缆数据,并将其转化成数字信号传入室内系统。最后主控工作站和绘图工作站得到数据并进行处理、分析和存储。系统结构如图1所示。
图1 系统结构Fig.1 System structure diagram
中央处理板是CPCI机箱中一块电路板,如图2所示。中央处理板作为CPCI部分的管理单元实现着对4块FCI板的初始化和管理工作;通过与主控工作站的通讯,实现了对主控命令的转发和处理;通过背板CPCI总线把数据从FCI板收集到中央处理板,中央处理板通过千兆网口把数据转发到绘图工作站。本文主要阐述运行在中央处理板上的Vx-Works软件的设计与实现。
图2 CPCI机箱各个板卡位置Fig.2 Position of each card of CPCI chassis
中央处理板嵌入式软件采用模块化设计,主要分为4个模块:命令循环处理模块、地震数据发送模块、命令通道监控模块和地震数据通道监控模块。这四大模块采用VxWorks的多任务并行处理技术,通过信号量的同步机制[3]实现彼此间的同步协作。为了实现多任务双工,建立了一个消息指针队列,用于存放从命令通道接收到主控工作站命令、缓冲中断消息和命令排队。
主循环模块分为命令接收任务以及命令执行和消息发送任务,命令接收任务使用recv()循环从网络接收主控命令,malloc出足够空间,并将其头指针添加到消息指针队列中,当主控没有发出命令时,recv()将被阻塞,不会占用CPU。命令执行和消息发送任务从队列中取出头指针,调用相应的函数处理命令,最后使用send()返回信息给主控工作站。
地震数据发送模块负责地震数据的发送,在初始化时会建立地震数据的socket客户端并连接绘图工作站,如果通道建立,当地震数据到达中央控制板时会实时发送到绘图工作站。
两个监控模块监测网络,一旦出错就关闭所有现存任务,停止数据的传输,并重新开启网络通道的server,重新建立连接。
主循环模块分为命令接收任务以及命令执行和消息发送任务,两个任务由于要对公共的指令指针队列进行操作,故用一个计数型信号量来统一,初始为0;当接收任务接收到一个指令帧或接收完一批数据帧时,释放信号量(semGive()),命令执行和消息发送任务semTake()到信号量后,从队头取出一个指针,对其指向数据相应进行处理(如图3所示),如果semTake()不到,任务将被挂起,不占用CPU。
图4描述了整个系统的工作流程,用户程序首先对硬件进行初始化,然后开始建立网络链接。对于中央处理板来说,系统启动后开启地震数据通讯server和指令通讯server,等待主控的连接,连接建立以后,主控对中央控制板进行工作参数的配置,然后中央控制板进入对应的工作状态。应用软件解释从主控工作站传来的命令并进行相应的操作,将执行结果返回给工作站;地震数据通过数据socket通道发送给绘图工作站。
图3 中央处理板命令执行和消息发送任务流程Fig.3 Flow chart of command execution and message sending
图4 中央处理板命令接收执行和地震数据发送流程Fig.4 Flow chart of command execution and data sending
在命令循环接收时涉及到了对队列的操作,用一个单向链表来保存malloc出的指针,由于队头的插入会影响到命令执行和消息发送任务,故对头的插入定为插在当前存在的队头后一个。对应有2种情况:
1)当前命令执行和消息发送任务被阻塞,此时队列为空,插入队列后将立刻被执行。
2)当前命令执行和消息发送任务正在运行,由于优先级低于命令接收任务而被打断,此时队列不为空,插入到被调用消息指针后面。队尾的插入则不会影响到消息的执行。链表的单节定义如下:
此外还需要3个全局变量struct cmdSingle*queueHead,*queueRear,int queueLen。
链表的操作有:
1)queueInit()链表初始化;
2)queueAdd(pBuff,pri)链表添加元素;
3)queueDelHead()链表头元素删除[4];
零槽通过中断以DMA方式经CPCI背板总线从FCI板接收数据,并实现缓存,当4条拖缆数据都到达时通过千兆网口发给绘图工作站。
两个监控模块监测网络,一旦出错就关闭所有现存任务,停止数据的传输,并重新开启两个网络通道的server。对于命令通道的监控程序,由于命令循环处理模块总是处于recv()被阻塞的状态,一旦主控强行退出,recv将返回错误,通过信号灯通知命令通道的监控任务。而对于地震数据,由于只有单向发送,故还需要发起一个通过recv()来判断是否出错的任务,正常情况下此任务被阻塞,一旦出错也通过信号灯通知地震数据通道的监控任务。
首先利用白盒、黑盒测试方法[5]对嵌入式软件进行了系统测试,接着进行室内测试,如表1所示。通过上层主控软件配置 1 ms、2 ms、0.5 ms 不同的采样率,模拟系统最大负荷。4条拖缆,单缆1920道的数据量,嵌入式软件都能及时响应主控下发的命令并解释处理,同时能够稳定地把4缆(满负荷数据量:12.96 Mb/s*4 缆=51.84 Mb/s)数据通过千兆网发送给绘图工作站,满足了系统设计要求。
表1 室内数据千兆网传输测试表Tab.1 Test form of gigabit data transmission
其次海上高精度地震数据采集系统在渤海、南海进行了大量的二维、三维试验。二维单缆1 ms、0.5 ms采样,如表 2 所示。 三维单缆 1 ms、0.5 ms采样,如表3所示。嵌入式系统软件均能稳定的运行、稳定的把数据传送给绘图工作站。
中央处理器板嵌入式软件是海上高精度地震数据采集系统室内部分的重要组成部分,该软件采用VxWorks嵌入式操作系统,VxWorks以其高实时性和高可靠性在军事、通信、工业各个领域广泛应用。大量的室内测试和海上试验证明本软件的可靠性、稳定性和高效性,满足高精度地震数据采集系统的系统需求。
表2 二维单缆数据千兆网传输测试表Tab.2 Test form of 2D single cable data transmission
表3 三维双缆数据千兆网传输测试表Tab.3 Test form of 3D two cable data transmission
[1] 阮福明,宋克柱,曹平.海上时延地震勘探记录系统的设计与研究[J].电子测量与仪器学报,2006,20(4):37-41.
[2] 孔祥营,柏桂枝.嵌入式实时操作系统VxWorks及其开发环境Tornado[M].北京:中国电力出版社,2001.
[3] 陈智育,温彦军,陈琦.VxWorks程序开发实践[M].北京:人民邮电出版社,2004.
[4] WindRiver.VxWorks Programmer’s Guides[M].Edition 1,1999.
[5] Sommerville I.软件工程[M].程成,译.北京:机械工业出版社,2007.■