APP下载

利用进程通讯技术实现纯软件仿真调试

2010-07-13蔡文斋

电子设计工程 2010年2期
关键词:板卡缓冲区进程

蔡文斋

(中国电子科技集团公司 第39研究所,陕西 西安 710065)

监控系统通常由若干计算机及相关板卡构成系统硬件环境,通常在Win32环境下编制相关的监控软件。开发全套监控系统软件通常是,开发人员等买到各种相关板卡后再逐个调试各端口,在设备都联在一起时统一联调,费时费力,要求各设备或分机配合。为了实现在已知相关硬件需求和相应软件通讯协议,而实验室内无硬件设备的情况下,开发全套监控系统软件[1],本文提出一种利用进程通讯技术实现纯软件仿真调试的方法[2]。在实验室内无需连接各板卡,同样可以仿真这些硬件设备开发整个监控软件,等各种板卡备齐后,再添加这些板卡的设备初始化及I/O函数。这样,整套监控软件在无硬件环境下可以编制完成,将节约大量联试时间。

1 纯软件仿真设计思想

假定不考虑接入计算机的板卡接口形式和具体硬件传感器的特性,仅从抽象的角度考虑,则可将接入的任一硬件传感器都视为一流设备,通过相关板卡传送给计算机1组十六进制码字,任一硬件读入形式都相同。使用定长的仿真硬件缓冲区代替硬件设备,这些硬件缓冲区每一字节均可编辑。从而仿真任一接入控制系统硬件传感器的各种数据。

任一接入控制计算机的硬件设备与计算机通讯即是定长的十六进制字符码字的双向信息交流(有的设备是单向通讯)。监控软件与这些硬件设备信息交流即为Read与Write函数[3],任何硬件接口形式其最终抽象的读写参数都相同:设备号、读写缓冲区数据内容、读写长度、实际读入或者写出的长度、回送的状态码字。先不考虑具体硬件传感器的初始化及使用方法,一般相关板卡均带有驱动程序,在Win32环境下通常是通过驱动程序提供的API函数访问硬件,虽然各硬件的访问形式有差异,但计算机访问的机制是相同的,同监控软件相关的部分是读写缓冲区及读写长度。只要使用一种方法使监控软件读写另一设定的缓冲区内容,即可实现仿真。

2 纯软件仿真方法的实现

无论监控程序使用什么语言编写,无论读入时序怎样安排,为了实现仿真调试,将监控程序稍作调整,改造如下:设计若干读入完成消息,在每个硬件传感器读入函数完成后,向前台窗口发送一条用户制定的消息,告知该设备读入已完成;读入完成消息处理为:对读入缓冲区解码,将缓冲区某位置的十六进制码字按照通讯协议变换为监控程序使用的变量,以供监控程序使用。

设监控程序为A进程,仿真硬件程序为B进程。A进程要接收B进程数据,并且B进程数据变化时应立即通知A进程,则问题变为:通知、复制变化数据。A进程的调试方法:假设要调试串行端口5,首先假定已编写com口读写线程(注意此时无硬件,com5打不开,无法跟踪[4]),由于每个硬件传感器读完成都会发一读完后的信息。因此只要在某处发出该消息,就表明已经读入该硬件数据。假定使用剪切板通讯方法,在A进程中设计一剪切板读入用户消息,该消息由B进程发出。在A进程的剪切板消息中,将剪切板的内容复制到com5读入缓冲区中,再发一com5读完成消息给前台窗口,则会误认为是硬件缓冲内容变化,已读到硬件内容。任一接入的硬件都可用这种技术实现仿真。如果读入缓冲区的每一位都可控制输入,那么在实验室内就能仿真所有实际的通讯情况,将节约大量时间在设备联调阶段。

3 硬件缓冲产生器设计(B进程)

设计一可编辑的十六进制缓冲区,使用进程通讯方法发出数据。采用Delphi 2009编写仿真器,界面上设计StringGird组件,用于十六进制输入,格子列数为1 024,行数为2,设计若干按钮用于实现各种进程通讯方法。使用集合类型检查输入的是否为十六进制码字,使用Drawcell方法限制每个格子的字符数 (每个格子仅能输入0A、3E等类型的十六进制数据)[5]。该硬件仿真器的机理为使用WIN32 API内核对象通讯技术传递缓冲区内容,再用其他技术传输通知信息。其实现方法为:1)文件映像+事件通知;2)文件映像+用户自定制消息。若使用文件映像+广播消息方法,必须在收发进程中注册同样的消息。而使用文件映像+广播WM_WININICHANGE消息方法,无需注册消息,SendMessage(HWND_BROADCAST,WM_WININICHANGE,0,0);3)有名管道技术+消息通知。 将B进程设计为有名管道客户端,将A进程设计为管道服务。4)CopyDATA 方法;5)全局原子方法;6)剪切板技术+用户消息方法。

其中,CopyDATA方法为:

如果使用DELPHI或者C++BUILDER开发应用软件,使用CODESITE工具在读消息中写入调试代码[6],可以动态调试出任何读入缓冲区内容。

4 监控应用程序的改造(A进程)

硬件缓冲区产生器用不同的进程通讯方法产生一组需要的数据,并使用不同的通知机制输出通知消息,因此需相应修改接收端,使用剪切板和全局原子方法时缓冲区长度只能为256字节,其他方法可输出更长的数据。如果使用广播消息传输通知,A进程也必须注册同样的消息。注册广播消息:BROADCAST_Message BROADCAST_NUM:=RegisterWindowMessage(‘BROADCAST_comm’);并且A进程需重载WndProc函数:procedure WndProc(var Message:TMessage);override;用于读注册的广播消息,判断广播消息是哪一个。监控程序需通过某种方法接收数据即可,所以修改的代码很少。

5 结束语

使用该方法开发的综合调试器可彻底抛开硬件环境,对应用软件稍作调整即可与纯软件调试器通讯。在开发应用软件时,当硬件板卡备齐后,只需添加相应的读写部分,就能够在试验室内仿真现场通信情形,将节约大量时间。该方法已应用于多个航天控制项目,并取得良好效果。

[1]张海藩.软件工程导论[M].北京:清华大学出版社,2003.

[2]Jeffrey Richter.Window高级编程指南[M].王书洪,刘光明,译.北京:清华大学出版社,1999.

[3]Mickey Williams.Programming microsoft windows 2000 unleashed[M].前导工作室,译.北京:机械工业出版社,1999.

[4]赵兰涛,苏彦华.DELPHI串口通信技术与工程实践[M].北京:人民邮电出版社,2004.

[5]吴天准.Delphi 7程序设计技巧与实例[M].北京:中国铁道出版社,2003.

[6]谭 燕,赵 磊,李之明.Delphi高级辅助工具精解[M].北京:中国铁道出版社,2003.

猜你喜欢

板卡缓冲区进程
嵌入式系统环形缓冲区快速读写方法的设计与实现
债券市场对外开放的进程与展望
基于PCI9054的多总线通信板卡的研制
基于FPGA的多通道模拟量采集/输出PCI板卡的研制
一种基于光纤数据传输的多板卡软件程序烧写技术
关键链技术缓冲区的确定方法研究
一种通用模拟量及开关量信号采集板卡的设计
社会进程中的新闻学探寻
我国高等教育改革进程与反思
Linux僵死进程的产生与避免