前面的查表函数。本文依次改写了初始化部分,并且按类
型重编制了相关函数。
2改写函数部分
我们知道,任一硬件设备的访问无非是这么几条
语句:
(1)打开;(2)读;(3)写;(4)关闭;(5)刷新。
只需编制该类型对应的这几条函数即可访问所有这一类板卡。例如A/D类,编写统一的这5句函数,就可以访问818HD,818HL等所有A/D卡了。同理,D/A卡、数字I/O卡亦然。
某些I/O卡支持中断,例如PCIl751卡,提供2路中断支持,实际使用时,从研华提供的例子无法辨识出到底是哪个中断,从服务电话中,也没有得到满意答复。经过反复实验后发现,在中断处理时需要开发者自己想办法辨识。作者使用再读I/O口的方法成功辨识了中断。再一方面,研华给出的中断例子缺省中断等待时间为1 003 s,对于等待一个不知道何时到来的中断远远不够,他的帮助在这方面也不够完善。要使用研华的DLL,请在工程文件中包含如下文件Driver.pas,Global.pas。
3调试器设计部分
该调试器的设计目标为:按类型访问设备,对一类设备而言,所有通道信息都可以读/写。并带记忆功能,将中断与数字I/O结合起来一起使用。这样可以观察到中断发生时端口上电平怎样变化,I/O部分可以定义确定时间间隔,十六进制I/O支持等。下面以数字I/O为例说明编程要点,其他类型板卡访问同理。调试器使用delphi 7.0编写。
I/O卡初始化(带中断支持,这里可以带条件编译相关,如果允许则开中断支持,不允许则关中断支持) 以下是作者改写后的数字I/O卡初始化函数,这一函数适用于任一研华的数字I/O卡,而不仅仅是PCI 1751卡,因为他是依据文件句柄辩识设备的。




本文在例子中判断出了一个中断,另一个使用同样方法。研华给出的中断例子看不出怎样判断到底是哪个中断,作者通过多次实验使用中断到来后再读中断口的办法成功解决了中断辨识问题。

文中仅以PCI_1751卡为例写了一部分内容,其他同理。在试验中,作者使用外接时钟源曾做到2 ms一次中断,在Windows 2000环境中仍然可以正常工作。
关闭函数注意要先关中断,再关设备。记忆等功能本文全略之。
4 结 语
以上内容为该调试器设计的部分关键内容。为了使该调试器做到通用性,当然要编写很多异常处理代码在其中,文中全略之。在调试软件时,我们查了研华的所有产品目录及网站上的几乎所有资料,为了使该调试器适用于所有的研华产品,我们对每一类设备的读写都是依据他的卡中的最大容量为标准而编制的,比如A/D转换可以直接给&出全32通道的数据并带有记忆功能(可以Copy输出内容)。目前,该调试器可以调试所有A/D,D/A,数字及中断卡,在项目开发中该调试器对我们帮助很大。调试器对于多个I/O端口带记忆的十六进制显示及位级的输入可以大大加快控制软件开发,希望文中内容对读者诸友有所启发。