首页> 中国专利> 直观显示对象文件的仿真器及其操作方法

直观显示对象文件的仿真器及其操作方法

摘要

一种用于在非本地计算机上(305)针对实时过程控制系统(100)以及利用此仿真器的实时过程控制系统的直观显示对象文件仿真本地环境的系统和方法。此直观显示对象文件包含绘图命令,用于与实时过程控制系统进行数据通信的地址指针和用于解释由触感屏接收的数据的规则。此系统包括有:显示例程,促使非本地计算机(305)控制连接到它的非本地直观显示器(200)以显示作为绘图命令的函数的图象:地址映射例程,作为地址指针的函数的在直观显示对象文件与实时过程控制控制系统之间作数据通信;和一输入翻译例程,将从一耦合到它的非本地指示装置(460)接收进非本地计算机的数据翻译成可由此规则解释的数据,由此此系统能使非本地计算机显示图象,与实时过程控制系统作数据通信和解释由从本地指示装置接收的数据。

著录项

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2013-11-13

    未缴年费专利权终止 IPC(主分类):G06F3/14 授权公告日:20070314 终止日期:20120923 申请日:19970923

    专利权的终止

  • 2007-03-14

    授权

    授权

  • 2000-04-26

    实质审查请求的生效

    实质审查请求的生效

  • 2000-04-19

    公开

    公开

说明书

本发明与下列相关申请中揭示的内容有关:

1、授权给Henzel的美国专利No.4607256,“设备管理系统”(August 19,1986);

2、授权给Bland等的美国专利No.5333298,“通过利用包含源和目的信息的数据文件使数据用于外部软件包的系统”(July 26,1994);

3、美国专利申请Serial No.(Attorney Docket No.HWEL-0159),“翻译直观显示对象文件的系统及其操作方法”(Sep 26,1996);

4、美国专利申请Serial No.(Attorney Docket No.120-00151),“用于分布式过程控制系统的改善UOS模件”(Oct 7,1996);和

5、美国专利申请Serial No.(Attorney Docket No.120-00152),“控制电路”(Oct 7,1996)。

上述相关文件均被指定给与本发明共同指定人,在此结合作全文参考。

本发明总的说是针对计算系统,较具体说是关于直观显示对象文件的仿真器及其操作方法。

自动化工厂控制系统(例如由霍尼韦尔公司所制造并已投放市场的TDC 2000或TDC 3000工业自动化系统)包括有高级的算法组和附属设施用来控制和监视例如一制造工厂中的各种过程。此控制系统能适应于满足工厂的全盘的或专用部分的很广范围的过程的需要。一般,此控制系统包括有多个各自具有其自己的硬件、固件(firmware)和软件的模块,被通信总线连接到一起,由此形成一分布式过程控制系统。系统的分布式特性提供有为不断地满足工厂的发展或改进需要而扩充系统的能力的高性能。

自动化工厂管理的第一个目的是提供综合其中所有的过程的工厂范围的控制来改善工作的整体效率的控制计划。第二目的是通过提供实时数据采集和通过收集历史的及实时数据并响应可能引起的与所需要操作的偏差和为操作人员显示这些数据监视工厂的运行的监视计划来将此控制计划贯彻到工厂设施。

关于第一目的,US专利No.4607256(前面提到的)提出一种用于监视和控制工业和电气应用工厂的全厂范围的系统,包括有系统内的通信和工厂内过程的有关管理。较具体说,此工厂管理系统包括有采用各种型式的独立模块的“令牌传递”安排。一模块发送信息到或从另一个位于一公共总线上的模块接收信息。每一模块在网络内均起同等作用和被指定一单独的网络地址。在模块间传送的令牌给予占有此令牌的模块访问总线和发送信号到另一位于于此总线上的模块的地址。如美国专利No.4607256中所揭示这样的自动化控制系统是本技术领域中公知的。

关于第二目的,重要的是访问涉及工厂运行的当前数据和以对操作人员有意义和有用的方式显示该数据。对于这一目的,先有技术已提供包括图形性质的直观显示器、键盘、批示器、触感屏等用户接口。作为举例,通常的显示包含有工厂中的设备的图形表示(例如桶、管道、泵、等等);与设备相关的操作或历史数据被与图形表述相关连来完成对操作员的直观综合。

不幸的是,产生用于生成用户接口例如直观显示的例程或文件的过程在历史上表现为很复杂和混乱。为继续此直观显示例,需要应用通常的计算机语言,其中首先必须定义基本图形元素(例如点、直线或曲线)而后将它相互配置来表征设备中的装置(例如桶、管道或泵)。即使出现通常的面向对象的编程语言,其中过程工厂设备被表征为组成它们的构成基本图形元素的对象和其中装置被递归分组以形成整个直观显示对象文件的组,产生用于生成直观显示的文件的过程仍然很困难和昂贵。当然对任何通常的用户接口可以作同样情形的描述。

相当大数量的现有设备控制系统采用利用通常的面向对象的编程语言开发的用户接口对象文件。在考虑是否要升级这些现有系统时,现有系统的所有者不愿处理他们已给予了很大投资的和对系统操作人员可信而又熟悉的对象文件。这些拥有者更宁愿作细微地和自动地对一不同的可能技术上更先进的或用户友好的升级,以最小的成本保持他们用户接口的“可视性和感觉”。

本技术中所需要的用于仿真对象文件被设计为在其上面运行的现有系统以避免人工翻译或重新开发它们的化费的系统和方法。

针对上面讨论的先有技术的缺点,本发明的基本目的是提供用于仿真对象文件被设计为在其上面运行以避免人工翻译或重新开发它们的化费的现有系统的系统和方法。

在达到这一或其它目的中,本发明的一个方面是提供用于对一实时过程控制系统的直观显示对象文件在一非本地的计算机上仿真本身的环境的系统和方法以及利用此仿真器的实时过程控制系统,此直观显示对象文件包含绘图命令,用于与实时过程控制系统作数据通信的地址指针和用于解释从一触感屏接收的数据的规则。此系统包括有:(1)显示例程,促使此非本地计算机控制耦合到它的一非本地直观显示器来在其上面显示作为绘图命令的函数的图象;(2)地址映射例程,作为地址指针的函数,在直观显示对象文件与实时过程控制系统之间作数据通信和(3)输入翻译例程,将从耦合到它的非本地的指示装置接收进非本地计算机的数据翻译成适于由规则解释的数据,由此系统能使非本地计算显示此图象,与实时过程控制系统进行数据通信,和解释由非本地指示装置接收的数据。

因此,本发明的这一方面就引入一种针对直观显示对象文件仿真—环境的途径,这避免了拥有者必须重新设计在此非本地计算机上运行的直观显示对象文件。如上述,直观显示对象文件的重新设计费时且昂贵,并可能导致意料不到的无法检测的、但却很关键的本地的与重新设计的直观显示对象文件之间的差异。这些差异可能引起被控制工厂的运行中的微妙的很可能有害的改变。

因此,凭借本发明提出的仿真,拥有者可节省重新设计的时间和成本,而操作人员能确信不会引入由于重新设计带来的偏差,降低操作人员的维持时间和保证设备继续如所期望地运行。

在本发明这一方面的优选实施例中,本地的环境是在小型计算机上实现的而非本地的计算机则基于微处理器。当然,大型高速机或其他型式的计算机也能提供本地环境。但一般复杂的实时过程控制系统均是采用小型机的。非本地计算机最好为一个人计算机。

在本发明这一方面的一优选实施例中,绘图命令是针对全屏幕直观显示的而非本地直观显示则是窗口化显示。计算机技术的熟练人员对窗口式直观显示及它们在灵活的和能以直觉地理解方面向操作人员传递信息上的优点是熟知的。本发明的这一实施例使得迄今被限定为占据整个直观显示器的直观显示能填充一窗口。这就使得直观显示的其余部分能为其他例程自由应用并使得窗口能按操作人员所希望的重定大小或加以封闭。

在本发明这一方面的一优选实施例中,地址指针对应于实时过程控制系统中的物理地址。通常,地址指针直接映射到实时过程控制系统的部件上(例如传感器和可控制设备)。但对本技术领域的熟悉人员会理解,可以采用简单或复杂的地址翻译方案来使地址指针在寻址部件中起更灵活的作用。

在本发明这一方面的一优选实施例中,非本地指示装置为—鼠标。当然,此非本地批示装置也可以是—跟踪球、跟踪板、游戏杆等。但此非本地指示装置不是触感屏,因为触感屏相对直观显示对象文件是本地的。

在本发明这方面的一优选实施例中,地址映射例程允许直观显示对象文件与实时过程控制系统之间能作双向数据通信。这使数据能从实时过程控制系统的部件写入和读出。当然,本发明的广的领域也支持单向数据通信,例如用于数据采集或遥测系统。

在本发明这方面的一优选实施例中,此系统与一在非本地计算机上执行的多任务操作系统相结合运行。此多任务操作系统有利地提供并行任务执行,允许操作员利用非本地计算机监视和控制工厂,而同时进行其他任务,例如写便笺式记录,安排会议,或作与实时过程控制系统的运行相关的历史数据的备份。

在本发明这方面的一优选实施例中,绘图命令、地址指针和规则在直观显示对象文件中的独立对象中实现。本技术领域的熟练人员熟悉面向对象编程的基本原理及优点。本发明优先地利用直观显示对象文件中的对象。但本发明的广的范围内也包括其他编程范例,例如过程(原始范例)和声明(例如在专家系统所采用的)。

在本发明这一方面的一优选实施例中,非本地计算机包括有能仿真可擦除媒体海量存储装置的虚拟存储装置仿真器,此仿真器与地址映射例程协作运行来提供直观显示对象文件与实时过程控制系统间的数据通信。本发明的这一方面使得与本地环境(即一特定类型的海量存储装置例如Bernoulli驱动器)相联的硬件装置能全部用软件进行仿真。这使得非本地计算机能尽可能地脱离通常的小型或主机计算机硬件。

在本明这一方面的一优选实施例中,此系统在非本地计算机上执行的WindowsNT操作系统(可由Microsoft得到)中执行,此操作系统提供用于在直观显示对象文件与实时过程控制系统之间进行数据通信的通道。本技术领域的熟练人员熟悉WindowsNT及其优点。但本发明的广的领域将包括能在任何操作系统中执行的系统,例如OS/2,Syctem7,UNIX或DOS。

在实现以上基本目的中,本发明还有另一方面为了在具有多个可通过存储在本地格式化的可擦除媒体海量存储装置中的逻辑块来寻址的部件的实时过程控制系统中的应用,提供可在一非本地的多任务操作系统中执行并可代替海量存储装置应用的仿真器。此仿真器包括:(1)块存储文件,具有与非本地多任务操作系统相兼容的结构,用于包含逻辑块;和(2)地址映射例程,作为本身直观显示对象文件中的地址指针的函数,与此块存储文件协作和在本地直观显示对象文件与实时过程控制系统之间进行调整以使得它们之间能进行数据通信。此地址映射例程推导出针对对应于此块存储文件中一特定逻辑块的地址指针的偏移量,由此该块存储文件和地址映射例程就可能替代海量存储装置而无需修改此直观显示对象文件。

因此本发明的这一方面就提出了一种免除实际上要由非本地操作系统来驱动海量存储装置的海量存储装置仿真器。依靠软件仿真海量存储装置,给此非本地操作系统在其能管理其中的逻辑块的方式上提供了很大的灵活性。

在本发明这一方面的一优选实施例中,此多任务操作系统为WindowsNT。本发明又是优先利用一广为公知的、被充分了解的、有效的现代操作系统。但在很广的范围上本发明包括可在任何操作系统中执行的系统,例如OS/2,System7,UNIX或DOS。

在本发明这方面的一优选实施例中,块存储文件被存储在一非本地海量存储装置上。此存储装置可以是一软盘或硬盘驱动器或一光学、磁光的或磁带驱动器。但是非本地海量存储装置不是对直观显示对象文件具有本地的格式的Bernoulli驱动器。

在本发明此方面的一优选实施例中,在多任务操作系统中执行的其他例程均能与地址映射例程同时利用块存储文件。虽然在本发明广的范围上并非必须的,而并行应用使得能作数据复制和备份,工厂状态报告等等。

在本发明这方面一优选实施例中,特定的逻辑块为256字节长。本发明在广的范围上包括不只256字节的逻辑块长度和可变逻辑块长度,以适合于给定的应用。

在本发明这一方面的一优选实施例中,块存储文件被存储在单一的物理盘驱动器上。但块存储文件可以存储在多个物理盘驱动器。

在本发明这方面的一优选实施例中,仿真器还包括一第二块存储文件,地址映射例程,该例程能有选择地与此第二块存储文件协作来在本地直观显示对象文件与实时过程控制系统之间进行调整以便使它们之间能作数据通信。因此本发明此实施例能应用多重块存储文件。这在修改实时工厂控制系统或在控制多个这样的系统时是有利的。

在另一方面,本发明提供实现上面提出的两个方面之一或两者的实时过程控制系统。

应用或配置本发明的有利实施方案是使用软件。软件实施方案包括有多个被存贮到通常的存贮媒体的处理系统指令。优选存贮媒体无限制地包括磁的、光的和电的,以及它们的恰当配置的组合。处理系统指令可被一个或多个以上说明的处理系统读取并执行以在一非本地计算机上仿真对一实时过程控制系统和一利用此仿真器的实时过程控制系统的直观显示对象文件的本地环境进行仿真。在替代实施例中,固件或硬件也可恰当地被用来实现本发明的原理。

前面已经较广地概括了本发明的特点和技术优点,从而使熟悉本技术领域的人士将能更好地理解随后对本发明的详细说明。后面将说明构成发明权利要求的主题的本发明的附加特点和优点。熟悉本技支术领域的人士将会理解他能容易地利用所提示的原理和特定实施方案作为基础进行用于实现本发明的相同目的修正或设计其他结构。熟悉本技术领域的人士也会认识到这样的等同结构并不背离最广泛形式中的本发明的精神实质和范畴。

为更全面理解本发明及其优点,参考结合所列的附图所作的详细说明,附图中同样标号表示相同或等同的对象。所列附图为:

图1表明一提供本发明可能被应用中的环境的过程控制系统的方框图;

图2表明按照本发明的一示例直观显示;

图3A表示操作非本地计算机以提供一种在此非本地计算机上仿真实时过程控制系统和利用此仿真器的实现过程控制系统的用户接口对象文件的本地环境的途径的示例操作方法的流程图;

图3B表明按照本发明的原理操作图3A此非本地计算机以提供在此非本地计算机上仿真一本地可擦除媒体海量存贮装置的示例操作方法的流程图;

图4A(1)~4A(3)表明提供本发明可在其中实现和运行的适当环境的三个示例计算机网络拓朴结构;

图4B表明提供本发明可在其中能适当地实现和运行的环境的通常计算机的等比例示图;

图4C表明可与图4B计算机适当地结合来提供本发明可在其中适当地实现和运行的环境的示例处理电路的高层方框图;

图5表明一按照霍尼韦尔公司TDC 3000平台的示范通用站仿真器的原理方框图;

图6表明按照本实施例的TDC 3000平台的图5的通用站仿真器的示范环境和设备接口层的原理方框图;

图7表明一按照本发明原理的示范仿真器线程模型的原理方框图;和

图8表明按照本发明的原理的PCI驱动器的示范功能设计模型的原理方框图;

在说明本发明的系统和方法之前,了解本发明可在其中应用的系统环境将是有用的。因而首先参照图1,表明一在其中可看到本发明的系统和方法的过程控制系统100的方框图。过程控制系统100包括一借助网络接口模块(“NIM”)140和高速网关(“HG”)145通过一通用控制网络(“UCN”)130和数据高速路135分别耦合到多个过程控制器120、125的工厂控制网络110。如果希望的话,还可将其他的过程控制器与工厂控制网络110实施连接。过程控制器120、125将模拟输入、输出信号和数字输入、输出信号(分别为“A/O”、“A/I”、“D/I”、“D/O”)由多种现场装置包括阀门、压力开关、压力计、热电偶等等接口到过程控制系统100。

这里所用的术话“包括”、“包括有”是指无限定的包括;这里所用的词语“与……相关连”以及其他派生词是指包括在内、与之相连接、含有、被包含在之中、连接到或与之连接、耦合到或与之耦合、能与之通信、并置、与之协作、交替、为一种特性的、被约束到或与之相密切相关、等等;而术语“或”在这里工厂用为包括在内,意即和/或。

工厂控制网络110结合工厂操作员(未图示)提供对被控制过程的全面监控,和获取为进行此监控功能所需的所有信息,并包括有与此操作员的接口。此工厂控制网络110包括有多个物理模块,其中有通用操作员站模块(“US”)150,应用模块(“AM”)160,历史模块(“HM”)170,计算机模块(“CM”)180和可能为进行被控制过程的所需控制/监视功能所需要的这些模块的备件(和其他类型模块,未图示)。这些物理模块均被有效地连接到使这些模块的每一个均在需要时能互相通信的本地控制网络(“LCN”)190。NIM140和HG145分别提供LCN190与UCN130和数据通路135之间的接口。

工厂控制网络110的每一个物理模块150、160、170和180包括其独特地功能性。而且,物理模块150、160、170、180为了在它们之间传送信息对过程控制系统100的通信媒体或LCN190的同样访问是相互相同的或对等的。

工厂控制网络110的US150是用于一或多个工厂操作人员的工作站。它包括有作为工厂操作员或操作员与他们负责的工厂的过程之间的接口的操作员控制台。各US150和任何备用模块(未图示),例如,被连接到LCN190,US150与工厂控制网络110的任一其他模块(例如AM160、HM170、NIM140)包括任一备用模块(未图示)之间的所有通信均借助LCN190。US150访问LCN190的数据和资源以及通过或来自工厂控制网络110的任一其他模块的可用数据。各US150包括有一视觉表述,例如包括有通常的显示装置,这进而包括例如一视频显示发生器,操作员键盘,软盘数据存贮装置,方位笔记录器,状态显示器等(未图示)。

在本发明的优秀实施方案中,本发明的系统和方法可被实现在作为至少US150的一部分的非本地计算机环境中。这在后面更详细地讨论。

工厂控制网络110中包括的另一类型的物理模块是提供海量数据存贮能力的HM160。各HM160至少包括有一个能提供很大容量二进数据存贮能力的通常的磁盘海量存贮装置。由这样的海量存贮装置存贮的数据型式通常为趋向历史或可由之确定这样的趋向的数据,组成或构成显示的数据,用于对模块(例如US150、AM160)的过程控制器120、125的单元的或用于工厂控制网络110的模块的单元的程序的拷贝。

结合进工厂控制网络110另一型式模块是AM160。AM160在支持由过程控制器120、125执行的过程控制功能中方面提供附加数据处理能力,例如数据采集、报警,批量历史收集和在需要时提供连续控制计算设施。AM160的数据处理能力由其模块处理器和模块存贮器(未图示)提供。

CM180可利用所有物理模块的标准或公共单元来使得一中等至大规模的通用数据处理系统能与工厂控制网络110的其他模块(例如US150、AM160)和分别通过LCN190与这些模块的单元及通过NIM140或HG145与过程控制器120、125的单元进行通信。CN180的数据处理系统被用来提供监控、优化;综合化用户程序准备和这样的程序在高级程序语言中的执行。一般,CM180的数据处理系统具有利用通信处理器和通信线路与其他这样的系统通信的能力,这在本技术领域中是熟知的。CM180可包括有数种计算机和操作系统之一。例如CM180中可采用霍尼韦尔DPS-6计算机。

应指出,虽然本发明原理是在一本地US150的至少一部分的非本地计算机上的仿真中提示的,但过程控制中心100的任一模块也可至少部分地适宜于在一利用过程控制系统100的适宜功能的非本地计算机上仿真。还应指出,这里应用的术语“计算机”可包括单一的“独立应用”计算机,以及协同操作计算机的网络,或其一部分。

本实施例的LCN190可利用将工厂控制网络110的所有模块(如US150、AM160)相互连接的高速位串行双冗余通信总线。LCN190提供主要数据源如NIM140、HG145、AM160和HM170与这些数据的主要用户如US150、AM160和CM180之间唯一数据通路。LCN190还提供可通过它将大数据块如存贮器图象由一模块如HM170转移到另一模块如US150的通信媒体。

本实施例工厂控制网络110的每一物理模块(例如US150、AM160)包括一定的或所要求的标准单元。对工厂控制网络110和物理模块的更全面的说明可参看美国专利No.4607256、5333298和5386503,它们全都在此被结合作全文参考。

现在回头看图2,说明按照本发明的一示例直观显示。这一般以200指明的直观显示以图形方式传送发生在一工厂(未图示)中的简单化学过程给用户,使得用户能控制此过程。直观显示200包括采用容纳液体的桶的基本形状的第一图形元素210,它对应于并象征此工厂中的第一个桶(未图示)。同样,第二图形元素220采用一液体桶的基本形状并对应于和象征此工厂中的第二个桶(未图示)。第三图形元素230采用用于控制液流速率的阀门的基本形状并对应于和象征此工厂中一阀门(未图示)。最后,第四和第五图形元素采用管道断面的基本形状并对应于和象征此工厂中的分别将第一桶连接到阀门和将阀门连接到第二桶的第一和第二管道断面。

此简单的化学过程可以如下述。第一桶中含有催化剂。在第二桶中发生发热式化学反应。图1的过程控制系统100监视第二桶的温度并控制阀门来调整第一桶中所含液体从第一桶到第二桶的流通。在此过程中,如果第二桶中的温度认为太低,就增加引入其中的催化剂,以此增加热的生成和桶温。同样,如果认为第二桶的温度太高,就减少引入其中的催化剂,由此来降低热的生成和桶温。

因此对于这一示例重要的是,直观显示200至少要指示第一和第二桶的温度。这些值被分别标为260和270。而且还希望表明第一和第二桶双方的液体平面以保证液平面不超出能容纳的范围。这些值被分别指定为280和290。

在图1的设备控制系统100内部存在一直观显示生成程序,而更具体说即为示范的US150。如前已说明的,此程序利用一直观显示对象文件结构来生成图2的直观显示200。因此此直观显示对象文件应包含生成直观显示200所需的数据,包括用于生成第一、二、三、四和五图形元素210、220、230、240和250的数据以及为获得温度和液体平面指示器260、270、280和290所需的数据(地址指针等)。这些数据被按照标准结构集中组织在直观显示对象文件之中。

现在看图3A,表明操作一非本地计算机以提供一种在此非本地计算机上对实时过程控制系统和应用此仿真器的实时过程控制系统的用户接口对象文件例如一直观显示对象文件的本地环境进行仿真的途径的示例方法(一般标注为300)的流程图,所有均按照本发明的原理。

如上面所说的,本发明一优异实施方案可以用软件实现,但可替换实施方案也能适宜于以固件、硬件或三者的某种组合来实现。因此,示范方法300可在一通常的计算机或处理系统(一般标注为305)中,特别是与通常的处理电路(一般标注为310)相关连。

为了说明,此本地环境可以是图1的示范US150而用户接口对象文件则可以是与之相关的直观显示对象文件。此直观显示对象文件可以是由非本地计算机305本地生成的,由LCN190接收的,或者它们的某种组合。直观显示对象文件包括为产生至少一部分本地计算机显示所需的数据,并可优先地连到一绘图命令、用于与实时过程控制系统例如图1的过程控制系统100作数据通信的地址指针、和用于解释由相应的通常显示装置的触感屏接收的数据的规则。

开始,用户“引导”非本地计算机305,最好促成方法300的执行(处理步骤315)(此优异实施方案的引导过程将在后面详细说明)。应指出的是,非本地计算机300在过程控制系统10的大部分中并与之相关连地替代常规US150。处理电路310执行方法300,初始化直观显示对象文件的处理(处理步骤320)。非本地计算机305可适当地为一或多个基于微处理器的计算机,当然主机或其他类型计算机也是适用的。非本地计算机305可通过用来将非本地计算机与LCN190进行接口的应用的专用电路来与过程控制系统10相连系。这一电路的有利实施方案是一LCN处理器板(“LCNP”),它是美国专利申请Serial Nos.的主题(Attorney Docket No.I2000151)和(Attorney Docket No.I2000152)名称分别是为“分布式过程控制系统的改善UOS模块”和“控制电路”,与本申请同时递交并在此结合作为全文参考。

示范方法300包括一显示例行程序,运行来促使非本地计算机305控制一耦合到它的通常的非本地直观显示器显示至少作为绘图命令的函数的图象(过程步骤325)。按照所说明的实施例,此绘图命令可指向全屏幕直观显示而此非本地直观显示则是窗口式显示。窗口式直观显示和它们在传送信息给操作人员的灵活性和便于形象地理解方面的优点是众所周知的。这一实施方案使得在此之前被限定于占据整个直观显示器的直观显示能填充到一窗口的范围内由此空闲直观显示器的其余部分可以用于其他的例行程序并使得窗口能按操作员的希望简化为一个图标,重定大小,加以封闭等等。

示范方法300包括有一地址映射例行程序,运行来使得非本地计算机305在直观显示对象文件与实时过程控制系统100之间作为地址指针的函数进行数据通信(处理步骤330)。按照所述实施方案,此地址指针可适当地对应于实时过程控制系统100中一物理地址。通常,地址指针直接映射到实时过程控制系统100的部件(例如传感器,可控设备等)。但熟悉本技术领域的人士会理解,简单或复杂的地址翻译方案可优先地用来使地址指针在寻址部件中起更灵活的作用。

按照优秀的实施例,地址映射例程使得能在直观显示对象文件与实时过程控制系统100之间作双向数据通信,由此而使得数据既能被写入到又能由实时过程控制系统100的部件读出。所说明的实施方案也支持单向数据通信。

示范方法300包括有一输入翻译例行程序,运行来将从一耦合到它的非本地指示装置接收进非本地计算机305翻译成为适宜于由规则解释的数据,由此使非本地计算机305能显示图象,与实时过程控制系统100作数据通信和解释由非本地指示装置接收的数据(处理步骤335)。按照所述实施例,此非本地指示装置为一鼠标,跟踪球,跟踪板,游戏杆,非本地触感屏,等等。

可取的是,非本地计算机305可与一多任务操作系统相关连。此多任务操作系统有利地提供并行任务,使得一操作人员能利用此非本地计算机监视和控制与过程控制系统100相关的设备,而同时能进行其他任务,例如写便笺、安排会议,发送电子邮件,备份与此实时过程控制系统100有关的历史数据,等等。

此多任务操作系统可以是一在非本地计算机305上执行的、其间提供在直观显示对象文件与实时过程控制系统100之间数据通信的通道的指示WindowsNT操作系统(由Microsoft Corp ofRedmond,Washington作市场供应)。其他优秀的实施例可使用多任务操作系统OS/2、System7、UNIX、DOS等。

所述实施方案引入一种仿真用于一用户接口对象文件例如此示范直观显示对象文件的环境的途径,它免除持有者不必须重新设计在非本地计算机上起作用的同一环境。如上述,用户接口对象文件的重新设计既费时又昂贵而且还可能导致意外的、无法检测、但很关键的原始的与重新设计的用户接口对象文件之间的偏差。这些偏差可能引起微妙的可能有害的被控工厂的运行中的改变。

如后面将更详细讨论的,本发明的一重要方面是,绘图命令、地址指针和规则可放置在直观显示对象文件内独立对象中。本技术领域熟悉人员对面向对象编程的基本原理及其优点是了解的。本发明可优先地利用直观显示对象文件中的对象。但本发明在很广的范围上也包括其它编程策略,例如过程(原始范例),声明(如专家系统中所用),等等。

现在再看图3B,表明操作一非本地计算机305以提供一种在非本地计算机305上仿真一本身可擦除媒体海量存贮设备的途径的示范方法(一般标注为303)的流程图,此仿真器与地址映射例程协作(在步骤330开始)来(按照本发明原理)提供直观显示对象文件与实时过程控制系统100之间的数据通信,所述实施例的这一方面使得与本地环境(即一特定类型的海量存贮设备例如一本地Bernoulli驱动器)相关连硬件装置可被整个地以软件仿真。这使得非本地计算机能尽可能地与通常的小型或主机计算机硬件脱离。

本发明的此所述实施例仍然以软件实现。因此,示范方法303在非本地计算机305中并特别与处理电路310相连中实现和运行。

在一非本地的多任务操作系统中,非本地计算机305将块存贮文件存贮在一非本地的海量存贮设备上,例如一软盘或硬盘驱动器或一光学、磁光的或磁带驱动器,甚至例如一非本地的Bernoulli驱动器。为开始仿真此海量存贮装置,与此块存贮文件相关连的地址映射例行程序促使计算机305截取此本地直观显示对象文件的一地址指针(处理步骤340)。

计算机305由地址指针推导出对应于此块存贮文件中一特定逻辑块的偏移量(处理步骤345)。此块存贮文件优先地包括有与此非本地的多任务操作系统相兼容的并包含逻辑块的结构。当然,在替代实施例中,可能有多个块存贮文件,而地址指针可对应于第二、第三等的块存贮文件中的特定逻辑块。

计算机305访问作为此偏移量的函数的块存贮文件(联机存贮步骤350)。因此地址映射例程与块存贮文件协同运行并在本地直观显示对象文件与实时过程控制系统100之间进行调整来使它们之间能作为本地直观显示对象文件中的地址指针的函数进行数据通信。地址映射例程由地址指针推导出对应于块存贮文件中一特定逻辑块的偏移量,由此而能无需修改直观显示对象文件而替代海量存贮装置。

所述实施例引入一种免除了实际需要以非本地操作系统驱动海量存贮装置的海量存贮装置仿真器。依靠以软件仿真海量存贮装置,非本地操作系统即在它能管理其中的逻辑块的方式上提供巨大的灵活性。

重要的是应注意到,示范性非本地计算机305能适当地结合多任务操作系统运行来与地址映射例程并行地执行能利用块存贮文件的多任务操作系统中其他例行程序(处理步骤355)。虽然对本发明广义上说不是必须的,但并行利用可以作数据复制和备份,工厂状态报告等等。

按照后面将讨论的一优选实施例,此特定逻辑块为256字节长,虽然本发明为适应给定的应用程序还包括非256字节长的固定的逻辑块和可变长的逻辑块。应注意到所述实施例的块存贮文件可以存贮在一单一物理盘驱动器上或存储在多个物理盘驱动器上。

如果此示范仿真器包括多于一个的块存贮文件,地址映射例程就能相应地与第二块存贮文件协同操作在本地直观显示对象文件与实时过程控制系统100之间进行调整以使它们之间能作数据通信。这一实施方案使得能应用多个块存贮文件,而这在修改实时设备控制系统100时或在控制多个这样的系统时可能是有利的。

现在看图4A(1)~4A(3),表明三个提供本发明可在其中适当地实现和运行的合适的非本地计算机环境的示范计算机网络拓朴结构305。更具体说,图4A(1)表明一通常的总线拓朴结构;图4A(2)表明通常的环型拓朴结构;和图4A(3)表明一通常的星型拓朴结构,所有这些均是本技术领域中公知的。其他可替代的网络拓朴结构以及它们的恰当组合也是本技术领域中公知的。

现在看图4B,表明一通常的计算机305的等比例视图,例如象PowerPC这样的个人机(“PC”),它提供本发明可在其中适当地实现和运行的一示范非本地计算机环境。由于本发明不限于个人计算环境中的应用,所以图4B仅只是说明性的。

示范PC305包括一显示装置或监视器410,一其中有各种电子部件的主机架420(参照图4C讨论),和多个示范的通常的用户接口,包括一键盘450和鼠标460。

显示装置410、键盘450、和鼠标460协同操作来使PC305与用户(未图示)间能进行通信。主机架420示例性地包括有一专用硬件复位开关430(运配来当用户按压复位开关430时触发主机架420内的硬件复位电路(未图示)以重新引导或重新启动PC305)和一功率开关(能中断和恢复PC305的电源)。功率电源的中断和恢复使得PC305重新启动。

显示装置410在PC305内执行的一通常的图形用户接口(“GUI”)操作系统(未图示)的控制下提供用于图形数据显示用的区域200。GUI操作系统管理在PC305上执行的各种应用任务例如示例仿真方法300和303之间的计算机资源的分配。GUI操作系统可运行以将显示装置410的区域200分成相应排列的显示对应于每一应用任务的数据的窗口。各个窗口可被适宜地允许根据用户的希望占据显示装置410上提供的区域200的一部分或整体。各个不同的窗口可适当地或者整个地或者部分地互相封闭。

尽管已总体上利用示范网络305和PC305说明了非本地计算机305,应当指出本发明的原理可以采用任一相应排列的计算机系统在非本地计算机305上仿真实时过程控制系统的用户接口对象文件的本地环境,例如包括膝上/笔记本式、小型、主机和超级计算机,以及象局域、都市区域和广域网等的计算机网络。

看图4C,表明一示范处理电路(一般标明为310)的高层方框图,它可适当地结合一计算机例如一PC205来提供一本发明可适合于在其中实现和运行的非本地环境。处理电路310说明性包括有一处理器470,通常的随机存取存贮器(“RAM”)475,总线控制器电路480,通常的只读存贮器(“ROM”)485,通常的视频随机存贮器(“VRAM”)490和一组外设端口495。给出一示范主机总线495,适宜于结合处理器470、RAM475和总线控制器电路480运行。给出一示范输入/输出(“I/O”)总线498可结合总线控制器电路480、ROM485、VRAM490和该组外设端口495运行。这组外设端口495可适当地将I/O总线498耦合到多个通常的被作适当配置的外设装置中的一个或数个以便与其进行。在这组外设端口495中所包括的相应有一或多个串行或并行端口,例如常规PCI槽。事实上,下面讨论的一优选实施例利用此PCI槽将计算机305通过应用专用电路LCNP与过程控制系统相联,如美国专利申请Serial Nos.(Attorney DocketNo.I20001514)和(Attorney Docket No.I2000152)中提示的,它们均已在此结合作全文参考。

总线控制器电路480提供可将主机总线497与I/O总线相连系的适当装置,由此提供对它们之间通信的通路和管理。所述总线497和498每一个均需要驱动电流来运载其上的信号。因而此说明性电路与提供此所需驱动电流的通常的系统控制器(未图示)相结合运行。当然,具有单一总线或多于3个总线说明性电路可适当地实现。

按照所述实施例,示例RAM475可适当地至少部份适配以用于存储由处理器470执行的任务。处理器470可在执行一或多个存贮任务时可运行来访问示范VRAM490以在显示装置410的区域200中显示数据。如上所说的,一或多个这些任务可恰当地体现本发明的原理对实时过程控制系统的用户接口对象文件仿真本地环境。

在替换的有利实施方案中,处理电路310以及应用外设端口495的应用专用电路,整个或部分地可由任何合适的处理配置代替或组合,包括可编程逻辑设备,例如可编程陈列逻辑(“PAL”)和可编程逻辑陈列(“PLA”),数字信号处理器(“DSP”),现场可编程门陈列(“FPGA”),应用专用集成电路(“ASIC”),大规模集成电路(“LSI”),超大规模集成电路(“VLSI”),以构成这里所述和所要求的各种型式的电路。

William Stallings著的”“计算机组织和结构””(MacMillanPublishing Co.出版,1993第三版)中更全面地讨论了通常的处理系统体系结构;Darren L.Spohn著的“数据网络设计”(McGraw-Hill,Inc.出版,1993)中较全面地讨论了通常的处理系统网络设计;和R.D.Gitlin,J.F.Hayes和S.B.Weinstein著的“数据通信原理”(Plenum Press出版,1992年)和James Harry Green著的“The Irwin远程通信手册”(Irwin Proffessional Publishing出版,1992年第二版)中较全面地讨论了通常的数据通信。上述刊物均在此结合作为全文参考。

在着手讨论与实时过程控制系统的霍尼韦尔公司TDC 3000平台相关连的本发明一优选实施例之前,应了解以下术语的意义:“本地窗口”可以指提供一通常的NTWindows中一标准TDC通用站(图1的US150)显示的任何功能,其中的功能性支持显示、选择和输入动作;“仿真器”可以指在非本地NT环境中运行的软件代替存在于通常的US150中的物理硬件而动作,被仿真的装置的示例为视频、触摸屏、键盘、磁盘等;“Daemon(数据自适应鉴定监视器)”可以指为高级应用程序提供对通常的TDC存贮器的中级接口因此可称之为由通常的UXS环境移植的软件接口程序的在非本地NT环境中运行的软件;“PCI”是指被用在“PCI BUS”计算机305的后板上的通常逻辑总线协议;“LCNA”是与LCNP为同义语,可以指一当被插进一适当的NT站305的PCI槽中时操作来运行TDC软件的LocalControl Network Aclapter(局部控制网络适配器)板(US专利申请Serial Nos(Attorney Docket No.I2000151)和(Attorney DocketNo.I2000152)中揭示的应用专用电路,LCNP);“UntS”指提供US150功能性的基于指示WindowsNT的计算机系统305;“SCSI”指定义一用于接口如磁盘、磁带、CD驱动器等的外设的外设总线和命令集的小计算机系统接口(ANSI标准X3.131-1986);“工作站接口”(“WSI”)可以指共享存贮器被用来实现一高速的面向信箱传递消息接口时的一TDC与一工作站(按照现在情况为NT)之间的用户板接口;和“Client Area(客户区)”可以指除滚动棒、标题棒、菜单区、工具棒、控制按钮、状态区等等外的NT指示中的区域200。

TDC 3000平台实施例的设计概念包括一GUS Native Window(本地窗口)功能,它提供由US 150所要求的TDC硬件环境的仿真,以使它们将在提供标准TDC处理器和LCN190硬件等同件的设置有PCI的LCNP板中运行,一般存在的其余硬件(即:键盘、触摸屏、视屏显示、SCSI盘,ASPI打印机等)将由NT环境的软件仿真并满足以下二标准:通常的TDC软件(1)可成功地执行,和(2)可以对通常的TDC操作人员极为熟悉的方式由NT运行。因此可期望此仿真将最小地改变通常的TDC软件。

现在看图5,表明一按照本实施例的TDC 3000平台与非本地计算机305相关联的示范US150仿真器的原理方框图。此实施例的目的是提供WindowsNT环境的应用窗口之内的TDC 3000平台生成的US150显示200,一“Native Window(本身窗口)”。支持在这一窗口中的交互作用,其中要使操作人员能以基本上与通常所完成的同样方式操作US150,即,显示基本上相同,暗示很大程度不改变,通过过程控制系统100的导航是熟悉的,等等。

此实施例的另一目的的提供TDC 3000平台生成的US150对WindowsNT环境的其他功能如Multiple Schematics(多重略图)等的访问。这是希望以同一共用支持机制支持Native Window需要和立用需要双方。

示范非本地计算机305表明一分层的体系结构,概念上将通常的GUS环境分成为4个示范层,即,一应用层,一环境层,一设备接口层和一物理层。此应用层包括多重略图和其他高级功能。环境层包括多个仿真器(例如本地窗口)和应用服务器和Daemons(提供针对应用层功能的TDC对象的数据访问)。物理层包括提供现有TDC软件执行的TDC 3000环境兼容计算机卡。H-HAL层包括WindowsNT驱动器支持它通过PCI总线提供存储器和子进程到TDC3000环境的访问。

为了讨论,探讨在用户的非本地计算机305与TDC 3000平台之间的多种情况或交互作用是有得的,

用户接通与TDC 3000过程控制系统相关连的WindowsNT非本地计算机的电源用户

假设目前为切断电源的非本地计算机300被接通电源。WindowsNT操作系统开始引导和启动,包括通常TDC 3000平台GUS支持服务的初始化,和LCNP板(美国专利申请Serial Nos.(Attorney DocketNo.I2000151)和(Attorney Docket No.I2000152)中揭示的应用专用电路)开始电源通初始化程序。

WindowsNT非本地计算机305保持TDC 3000平台复位状态,WindowsNTEmulator Service(仿真器服务)开始。CommonBoard Response,(公共板响应“CBR”)系统启动,并连接到PCI驱动器(对SCSI的连接和对Peripheral display Generator(外设显示发生器“PDG”)的连接)。CBR启动一指定的仿真器,完成初始化和清除LCNP上的任何“RESET(复位)指示”,由此使得LCNP能运行通过引导过程。

用户关断电源和重新起动与TDC 3000过程控制系统相关连的WindowsNT非本地计算机

WindowsNT系统给用户一“严历”警告,即这一动作将终止LCNP板中的操作。如果用户仍然希望进行重新引导,即由CBR软件在切断服务之前发送一BOARD RESET(板复位)到LCNP板。WindowsNT系统进行其正常的关断并可选择地重新起动。如如选择重新起动,即进入以上定义的程序。

用户关断TDC3000过程控制系统电源并有选择地重新引导运行TDC3000过程控制系统

如果本地窗口中发生关断,此关断由TDC初始化而WindowsNT予先不知道此事件。TDC发信号到WindowsNT,和WindowsNT无需终止此Native Window应用程序或EmulatorService,预料到可能的TDC系统重新引导。

如果是通过WindowsNT中一应用程序出现一关断请求,此LCNP就将被发送一“SHUTDOWN”消息,它将使TDC重新进入固件等待装载请求。

用户利用一指示装置“触摸”或实际触摸屏幕

如果用户在WindowsNT屏幕上按击鼠标,则仿真器即发送一光标定位命令到TDC。在光标通过屏幕移动时它将改变形状来反映它是否跨过一对象。如果一“按击”事件出现在一对象上,TDC即作正常响应,相应地产生一新屏或其他数据。

如果用户在Native Window的客户区触摸或按击,则传送二个事件到TDC:(1)光标移动到所触摸位置事件,和(2)在此位置的检取事件。

TDC按照Native Window的当前内容作出应答。此应答通过更新所显示图象的命令传送给Native Window。

用户按键输入

在WindowsNT中,仅有一窗口在任何给定时刻具有输入焦点。此具有输入焦点的窗口接收键盘事件。这样,Native Window应用程序在其具有输入焦点时响应键盘的操作。当发出击键操作同时Native Window具有输入焦点时,此击键信号即被根据应用中键盘的类型变换到适当的TDC键代码。此经变换的键代码被传送到TDC。TDC以就象此击键信号是在一附着到通常的通用站键盘的对应键盘上输入那样完全相同方式响应。

例如,TDC执行任何为此被按压按钮所调用或配置的操作。TDC送出用来相应地更新Native Window的适当命令。

在光标停留在通常的TIP期间发出击键引起附加的处理。不管光标是否停留在一TIP中均将适当的键代码传送到TDC。但是当在TIP中时,TDC传送TIP处理命令到仿真器。TIP处理机构比标准屏幕更新更复杂。标准TDC绘图命令包含所有为处理此命令所需的信息。例如,一绘制文本命令包含要绘制的文本和要在其上绘制的屏幕座标。但是,由TDC发出的以返回字符进TIP的命令并不指明字符的去向。仿真器必须从一被TDC维护的通常的TIP Context Array(文本阵列)读取数据。此仿真器还必须保持一指明所有在屏幕上的TIP文本的屏幕图象表(存贮在TDC上)。由TDC发出TIP处理命令,例如Echo Character(回应字符),Erase Character(擦除字符),Erase Line(擦除行),Copy Line(复制行)等等。仿真器确定光标在哪一TIP中并执行适当的文本编辑功能和相应地更新屏幕。

仿真器启动

WindowsNT根据WindowsNTRegistry入口项在早期启动中起动一软件PCI驱动器。在此WindowsNT起动顺序中,自动地启动一称之为“Emutaler Service”的WindowsNT服务。这一服务的主程序首先将其内部数据库初始化为“空”然后读取指明需要哪些仿真器的配置信息。

按照所述实施例,对各存在的LCNP WindowsNT在至少三个CBR线程(一个用于SCSI,一个用于PDG,一个用于WSI2)上启动。

WSI、SCSI和PDG CBR线程启动它们各自的外设仿真器(键盘,视频装置,等),然后进入循环等待驱动器报告TDC写到I/O空间,包括命令。

仿真器线程对特定的槽地址范围感兴趣的CBR线程注册自己然后它们进入等待要进行工作的通知的无限循环。

由TDC发布的绘制命令

绘制命令被存贮在为传送到PDG所结集的“显示清单”指令的缓存器中。它们通过与一I/O控制Buffer(“IOCB”)相关连的缓存器传给PDG,其处理以针对PDG板的START COMMAND(启动命令)作初始化。

在WindowsNT一方,START COMMAND的发出产生一个到PCI驱动器的中断。它确定被写的地址(在此情况下为相关槽的命令寄存器),和读取此命令寄存器的内容(亦即命令)。检测到这是一命令寄存器写,它可确定第一IOCB的地址。然后确定哪一个CBR线程对该命令有兴趣,并“完成”它们的未完成的读请求。

按照所述实施例,一PdgThread是此通知的接收者,在发觉后确定哪一个单独的仿真器线程对处理这一事件有兴趣,并激活它们中的每一个在现在的情况下为Video Emulator线程。

当此视频仿真器线程激活和找到与由TDC生成的STARTCOMMAND相关的地址时,它利用数个可被作为对象实现的CBR库例程来访问作为这一命令的主题的IOCB和相关的缓存器。视频仿真器处理每一缓存器,按需要提取显示清单命令和执行相关的初始绘制。此初始绘制命令更新WindowsNT的Native Window。在缓存器具有所需的绘制命令时,通知CBR此缓存器被完全处理。进而CBR将IOCB状态返回到TDC和生成任何所需中断,发出表示绘制任务完成信号

某些命令,例如示范的Draw Text和Draw Line命令导致直观屏幕的改变。其他的则改变影响随后的命令的可直观地感受到的特征(例如闪烁、彩色等)。 

TDC导致对磁盘的写

在一指定设备上的一“逻辑扇区”发出来自TDC的写。此来自TDC的写请求导致建立写命令的SCSI IOCB,随后有对SCSI槽发出的START COMMAND。此写(操作)产生针对WindowsNT系统的中断。WindowsNT系统响应此中断,记录此STARTCOMMAND,和指出已接收此命令。

缓存器被写到一WindowsNT文件系统文件中的一个记录,其名称由IOCB中的单元号确定。要被写的此文件中的特定的256字节的记录是该请求中指定的逻辑扇区。

此文件有可能存在或不存在,对应于装置的是否被安装。一WindowsNT实体使用户能“安装”和卸载“磁盘”(被表示为WindowsNT文件)而不管它们的安装状态可能实际上保留在WindowsNT盘上(或者可通过作网络访问)。如果此文件不存在,即返回TDC一出错消息。如果文件存在且被安装,即可进行写。

此写操作是对由SCSI请求中所指明的逻辑扇区号指定的记录的256字节的写。此文件可能足够或不够包含这一记录的长度。如果它不够长,和此请求不是针对该“磁盘”的予先配置的最大长度的扇区,则此文件被伸展到所需长度和此扇区被写入。

在完成此操作后,返回到CBR更新IOCB状态来表明操作的结果,和如果特定IOCB要求时生成IOCB中断。

应指出,按照所述实施例,响应一单个的写命令和在此相关ICOB中所指定的扇区数可能写多个连续的256字节的块,。而且在替代实施例中,此256字节值也可作适当地变更。

TDC导致由磁盘的读

TDC Read命令与Write命令非常相似,但差别在于(1)用于读的缓存区无需转换到WindowsNT,而是代之以由WindowsNT磁盘文件读的数据被转变回到TDC存储器;和(2)如果由一超过当前文件长度(但在合法的予先配置的磁盘的最大长度之内)的扇区请求读,则返回一填满空的零记录,但文件不被扩展到此长度。

同样应指出,按照所述实施例,响应一单个读命令和在相关ICOB中指定的扇区数可读取多个连续的256字节的块。而且在替代实施例中,此256字节值也可作适当变更。

TDC导致打印屏幕

Print-Screen(打印屏幕)请求被Vidio Printer(视频打印机)仿真器截取,被识别为一屏幕打印,使得对打印机的I/O流(例如屏幕打印字符)被放弃以代替作为位映象被俘获的Native Window屏幕并通过通常的WindowsNT打印命令对话框被送往打印机。

TDC导致打印文件

取自打印命令的输出缓存器的字符被由ASPI解释成相当的WindowsNT字符,可能时,(1)文本字符被由TDC映射到WindowsNT格式并“印刷”在打印机复制表面上;(2)运送移动命令被映射在WindowsNT图形命令用于在此复制表面上移动;和(3)当前页面被传送到打印机,复位当前位置到一新的、空白的、页面大小的复制表面的左上角。

逻辑设计—最高层

现在回到图6,表明一按照本发明TDC3000平台的图5的US150仿真器的示范环境和Device Interface(设备接口)层的原理方框图。全盘仿真器任务被分割成为下列三个分层次子系统:(1)PCI Driver(驱动器);(2)Common Board Response(公共板响应);(3)VideoEmalator(视频仿真器);(4)Keyboard Emalator(键盘仿真器);(5)Pointer Emulator(指示器仿真器);(6)Printer Emulator(打印机仿真器);(7)SCSI Disk Emulator(SCSI磁盘仿真器);(8)Debug PortEmulator(调试端口仿真器);和(9)WSI2 Emulator,下面分开讨论其中的每一个。

但首先应当提出,最下层和子系统是作为一通过非本地计算机305的PCI总线与TDC相关连的实际的WindowsNT驱动器的PCI驱动器。它提供对包括Native Window以及存在于Application(应用)层中的Application Layer功能的设备仿真器双方的支持。中间层是仿真对所有板共用的通常的TDC模块总线板功能(了解命令、槽地址、IOCB、等)的Common Board Response。最上层由6个独立的设备仿真器组成:键盘,视频,指示器,SCSI,打印机,工作端接口(“WSI”),和调试端口。这些仿真器提供实际“应用功能”,即按照通常的TDC体系结构对每一被仿真的设备的最终服务。

PCI驱动器的设计

示范PCI驱动器被分成二个子系统:(1)请求的对象仿问;和(2)非请求的对象访问。请求的对象访问管理那些由环境层初始化的环境层与物理层之间的交互作用。这些是由环境层的各不同仿真器要求的存储器访问(读和写两者)。非请求对象访问管理那些由物理层(即TDC)初始化的环境层与物理层之间的交互作用,例如通过TDC的槽地址写。

PCI驱动器中有二个数据库:(1)槽存储器高速缓存;和(2)中断接收器注册。槽存储器高速缓存数据库反映LCNP上存在的槽存储器的整体以代替正常应由LCNP板提供的实际槽存储器。这一数据库被读取和写到WindowsNT应用程序并(间接)被写到TDC(通过非请求对象访问)。中断接收器注册数据库记录哪些WindowsNT任务对写到特定槽地址的通知感兴趣。

在最下面,PCI驱动器通过4种通用机制与TDC对象交互作用:(1)读和写到TDC模块存储器位置;(2)写到TDC I/O空间地点;(3)写到LCNP板上的中断触发机制;和(4)写到LCNP板上的适配器命令机制。在最上面,PCI驱动器通过二超级机制与环境层实体交互作用:(1)作为支持WindowsNT初始化的交互作用的接口的请求的对象访问;和(2)作为支持TDC初始化的交互作用的接口的非请求的对象访问。

公共板响应设计

示范CBR由不分成子系统的接收LCNP命令的单一系统组成。CBR处理LCNP命令并通知对应的仿真器。另外,CBR还负责对IOCB例如IOCB认证等的初始处理。

CBR包括有所支持的仿真器和PCI接口上的对应槽号的数据库(以登记形式读取)。

在底层,CBR利用PCI驱动器的高层接口,亦即Create File(生成文件),它附着到PCI设备,和通过TDC从PCI设备读取非请求写到I/O空间的IOCTL。在顶层,CBR将TDC初始化的事件传递到高层仿真器,它然后“提供”I/O活动间所要求的功能。仿真器通过调用RegisterDevice(寄存器装置)利用CBR将它们的主题“寄存”特定槽中。然后它们等待通过WaitForNoticeFromPdgThread接口的来自CBR的通知(这根据一或多个通常的WindowsNT信标)。

一示范CBR的伪码实施例在此作为附录被列于后并作为这里相结合用的全文参考。此伪码实施例说明:(1)上述CBR仿真器是如何利用CBR服务被加以编码的;(2)CBR自己是如何作“原理上”构成的;和(3)下面的PCI驱动器如何设计来支持CBR的需要。暂时参看图7,表明一按照本发明的原理的示范仿真器线程模型的原理方框图(线程、任务、子例程、模块化编程等的概念在本技术领域内是众所公知的,而任一这类术语的应用均能恰当地作为与任何其他通常的程序组织词案的同义词),此模型说明CBR的选择处理配置,其相关的仿真器和LCNP或TDCA驱动器。

视频仿真器设计

示范视频仿真器由不分成为子系统的单一系统组成,负责将由TDC人—机接口(“MMI”)子系统所指定的视频图象变成为NativeWindow。此Native Window为MicrosoftWindows窗。视频图象由TDC MMI通过命令如Draw Line(绘直线)、Fill Rectangle(填矩形)、Draw Text(绘制文本)等来指定。这些命令通过由公共板响应子系统提供的非请求对象访问接口传送给视频仿真器。

并非所有由TDC MMI发出的命令都是绘图命令。数个命令是关于文本输入端口(“TJP”)的处理。这些命令给视频仿真器增加了复杂性。为了正确地处理TIP处理命令,视频仿真器必须访问保持在TDC模块总线存储器中的数据库和支持简单文本编辑能力。

管理光标形状是视频仿真器的另一责职。这一仿真器保证光标以正确形状显示。不同光标形状被显示来指明光标位于通常的TIP或PICK区的时刻。

视频仿真器还负责显示Native Window的初始帧、标题棒、菜单、和状态条。此视频仿真器还管理Native Window的“客户区”。但是,对Native Window的用户输入由键盘和指示器仿真器管理。

为正确仿真TDCUS150中提供的视频功能性,视频仿真器必须维持分开的图形和文本图象。然后这些分开的图象被按照优先级所指定的逐个字符地混合到一起。这些优先级由各种绘图命令给出。所得到的图象在Native Window中显示给用户。

4个数据库可被用来进行这一混合进程,即,(1)文本图象,所有当前在屏幕上显示的文本的单色位映象;(2)图形图象,所有当前在屏幕上显示的图形的单色映象;(3)属性矩阵,一属性值的n×m矩阵,其中n为填充屏幕宽的字符数和m为填充屏幕高的字符数,属性值指明属于组成字符基元的位的彩色、强度、和闪烁属性,和此值还另外包括有指示如何相对于文本混合图形的优先级;和(4)混合图象,描述屏幕上显示的实际图象的16色位映象,这一图象的需要是因为直接混合到屏幕会导致无法接收的屏幕颤动。

还可以有三个TDC模块总线存储器驻留数据库以支持TIP处理命令和光标形状管理,即,(1)TIP文本阵列,说明在屏幕上的TIP区的位置,用来在TIP处理期间在屏幕上正确布置文本和管理光标形状;(2)屏幕图象表,包括有屏幕上当前显现文本的ASCII值;和(3)PICK区阵列,说明屏幕上PICK区的位置和其他信息。

在底层,视频仿真器利用在CBR的上层非请求的对象访问接口,CBR请求的对象访问接口被用于读和写模块总线存储器驻留数据库。在顶层,视频仿真器为一只写应用程序,不提供外部接口,对Native Window的接口由键盘和指示器仿真器提供。

键盘仿真器的设计

示范键盘仿真器由不分割成子系统的单一系统组成,用于将键盘输入传送到TDC MMI。Windows的键代码被变换为被通常的TDCUS150键盘所用的键代码。标准PC键盘键代码被映射到由通常键盘所用的键代码。其他专用键盘则被映射到在这些键盘附着到通常的US150时由它们当前所产生键代码。特别是,TDC使用者/工程键盘在被串行端口接口附着到WindowsNT机器时将得到支持。

标准US150按钮配置应用程序被用来定制按钮功能,而无需基于MS-Windows配置软件。

虽然可以期望在键盘仿真器中发现TIP处理功能,而实际上这一功能性是在视频仿真器中得到支持的。当Native Window光标被置于TIP期间,输入的击键信号被与所有其它击键相同地处理。TDCMMI用于确定此击键与TIP相关。此TDC MMI以发送TIP处理命令作出响应。所有TDC MMI命令均由视频仿真器处理。

如果Native Window被配置有一菜单或加速器,此键盘仿真器执行与可应用的键序列相关连的操作。例如,如果此Native Window包含一带有关闭菜单项的文件菜单,键盘仿真器在当键入键序列Alt+F+C时即关闭Native Window。

此键盘仿真器要求每一键盘型式一单个数据库。这些数据库提供由WindowsNT键盘驱动器所生成的键代码与标准US150键代码间的键代码映射。键盘仿真器还含有有关的配置动作的键序列的数据库,至少一个说明一Native Window菜单和至少另一个说明Native Window加速器键序列。

在底层,键盘仿真器利用被用于传送击键信号到TDC MMI的CBR顶部的请求的对象访问接口。在顶层,键盘仿真器为一从WindowsNT的击键事件读取器,提供标准WindowsNT键盘映射接口。这一接口使得当键入与Native Window菜单和加速相关的键序列时进行相应的操作。所有其他击键均被映射到US150键代码并经由CBR子系统所提供的请求的对象访问接口被传送到TDCMMI。此Native Window被创建以使得Native Window自己不吸收任何US150所要求的键序列创建。

指示器仿真器设计

示范指示器仿真器由一不分割为子系统的单一系统组成,用于将由Windows指示装置接收的输入映射到TDC MMI事件。任何受WindowsNT驱动器支持的通常的指示装置,包括鼠标、跟踪球、非本地触摸屏、跟踪板等,均由此指示器仿真器支持。屏幕触摸被WindowsNT触摸屏驱动器变换到左按钮按击。指示器仿真器将Native Window客户区中发生的左按钮按击变换成TDC US150检取事件。

指示器仿真器在当Native Window帧、菜单、和/或状态棒中发生左按钮按击时进行所予期的操作。以下为某些这种期望操作的示例,包括有:移动/重定大小窗口;最大/最小化窗口;激活菜单选择;关闭窗口。

在底层,指示器仿真器利用CBR顶部的请求的对象访问接口。这些接口被用来将检取事件传送到TDC MMI。在顶层,指示器仿真器是一来自WindowsNT的指示器事件的读取器。标准Windows接口在当光标处于Native Window的各不同帧中时被用来处理指示器事件。当在Native Window客户区中发生指示器按击时利用请求的对象访问接口来通知TDC MMI。

WSI2仿真器的设计

示例WSI2仿真器由不分割成子系统的单一系统组成,作为一“哑”板操作,在板上无微处理器以生成复杂的功能。但WSI2仿真器可包括有能用作为TDC与WindowsNT之间的邮箱区的公享RAM。这一邮箱区可由一GUS数据访问系统(“LXS”)直接管理而决不由此仿真器或Native Window进行仿真或管理。

包括有一WSI仿真器的理由是为体系结构上的一致性,因为它是一与这里已仿真的其他板并不是不同的板。另外,在体系结构上各别的仿真器如希望的话将提供用于未来的功能性的柔性区(flexarea)(如中断处理)。

在底层,WSI2仿真器利用CBR顶部的请求的对象访问接口,这仅仅是在未来某时刻应用中断时的情况。在顶层,WSI2仿真器这时未被定义功能,因为此板直接由GUS数据访问操作。

SCSI仿真器设计

示范SCSI仿真器用于处理来自在LCNP上执行的文件系统和诊断软件请求的磁盘访问。这些请求采用实际的SCSI命令的形式,该命令由仿真器以被送回到LCNP的适当的命令应答加以处理。

通常的US150磁盘子系统含有一或多个带有150Mb可移动盘盒的Bernoulli磁盘(美国应用的20Mb盘盒的早先版本,现已基本废弃)。在当前系统上,或UntS 305,仿真器以二种方法提供对LCNP盘请求的支持,即,(1)逻辑盘访问;和(2)本地格式盘访问。

一示范的逻辑盘访问方法提供一可利用WindowsNT文件管理设施作为一“标准”文件管理的逻辑盘。一逻辑盘作为一被作为单个的WindowsNT文件管理的空间信息块存在。此仿真器将用于读或写逻辑块(一般为256字节)的LCNP请求映射到逻辑盘文件中适当的偏移和进行数据传送。因为实际数据存在于WindowsNT兼容的文件中,所以其他应用、管理工具之类可以访问此数据。例如,就有可能通过将一逻辑盘拷贝到磁带或其他物理媒体对其加以备用。

如果一Bernoulli驱动器可用,它就可被用来保持此逻辑盘,但重要的是应注意,此盘是经格式化与WindowsNT文件系统相兼容的,因而它是非本地的。

当利用逻辑盘时,用户有可能指定所希望的盘大小,和可能选择地指定是否要予先分配空间或者是按需要分配。利用将此逻辑盘与硬盘上的文件相连系,就有可能提供LCNP服务向无需Bernoulli驱动器。另外,可在盘上生成并维持多个逻辑文件供随后的从LCNP的访问(要求一逻辑安装/卸除)。

一示范本地格式盘访问支持在LCNP上生成的本地格式Bernoulli盘盒的应用。盘的格式对WindowsNT文件系统是未知的,而所有数据传送均利用WindowsNT物理盘访问服务进行。因为本地盘格式不为WindowsNT文件系统所了解,所以除本实施例仿真器外无法适当地执行由应用程序访问数据。

示范SCSI仿真器除了仿真来自LCNP的SCSI盘访问命令,此仿真器还提供用于定义和管理逻辑盘的接口。示范性功能可适当地包括有生成盘,安装盘,卸除盘,删除盘,配置,或其它类似功能。

SCSI仿真器由单一系统组成,不分割成子系统。

为了仿真对LCNP的SCSI盘访问,SCSI仿真器可保持“静态”和“动态”的信息。静态信息说明被仿真的盘和它们的特性并驻留在WindowsNT的登记中。动态信息包含当前运行时间环境的特定的信息,执行时驻留在仿真器应用程序的存贮器空间中。

在底层,SCSI仿真器利用CBR顶部的接口。在顶层,键盘仿真器与用于访问逻辑或本地格式盘的WindowsNT提供的系统服务进行交互作用。

打印机仿真器设计

示范打印机仿真器由单一系统组成,不分割成子系统,它用于处理来自在LCNP板上运行的软件对打印的请求。

在底层,打印机仿真器利用CBR顶部的接口。在顶层,打印机仿真器是一针对WindowsNT系统中各种打印机驱动器的写入器。

调试端口仿真器设计

示例调试端口仿真器由不分割成子系统的单一系统组成,虽然它包括有二子部份,即,(1)调试PCI驱动器支持,和(2)WindowsNT终端程序。

调试端口仿真器中的编程接口是由PCI驱动器的调试端口部分提供的对WindowsN终端程序的接口。此接口形成“通道”,通过该通道终端通信看起来象一串行端口,即使实际上只是与LCNP上的一组寄存器通话。还有针对调试端口仿真器的人员接口,设有这一接口是为了便于对LCNP键入和看到输出。另外,终端程序还具有记录设施和支持标准的剪切和粘贴操作。

PCI驱动器的功能模型

参看图8,表明一按照本发明原理的PCI驱动器的示范功能设计模型的原理方框图。示范PCI驱动器存在于体系结构的H-HAL层内。它由二子系统构成,请求的对象访问和非请求的对象访问。包含有二个数据库,槽存储器和中断接收器登记。

请求的对象访问支持由WindowsNT初始化的交互作用。交互作用可以由提供Native Window功能性的仿真器初始化,由支持高级应用程序功能性的服务器和Daemons初始化,或者双方。交互作用可相混杂而无需对其用户方进行明确的同步或协调;任何需要的串行化均是在PCI驱动器内部无形地提供的。

请求的对象访问子系统包括有6个示范接口。2个用于读和写模块存储器,2个用于读和写I/O空间存储器,1个用于产生中断,和1个用于生成对LCNP的与板有关的命令(如复位)。图示的物理层中此请求的对象访问框与适配器卡之间的点连接线被编号来对应于上部请求的对象访问接口。

非请求的对象访问提供一其用户借助其能登记它们对通过TDC写入I/O空间的需要的接口。这样,在发生对I/O空间的写时,感兴趣方即由登记数据库确定并通告此写事件。另外,不管是否感兴趣方已登记特定的写,非请求对象访问均要更新被请求的对象访问针对I/O空间读所访问的槽存储器高速缓存数据库。

所有命令均具有作为一参数的“对象”设备。在替代实施例中,此对象将使得能声明数种可应用的LCNP板中之一。在本实现中,这一参数将被指明为“0”。

由上述很显见,本发明提供一种用于针对实时过程控制系统和应用此仿真器的的实时过程控制系统的用户接口对象文件在一非本地计算机上仿真一本身环境的系统和方法。此用户接口对象文件含有绘图命令,用于与实时过程控制系统作数据通信的地址指针,和用于解释由触感屏接收的数据的规则。此系统包括:(1)显示例程,使非本地计算机控制耦合到它的非本地直观显示器来在它上面显示的作为绘图命令的函数图象;(2)地址映射例程,作为地址指针的函数地在用户接口对象文件与实时过程控制系统之间进行数据通信;和(3)输入翻译例程,将由一耦合到它的非本地指示装置接收进此非本地计算机的数据翻译成适合于被此规则解释的数据,据此此系统即能使此非本地计算机显示图象,与实时过程控制系统进行数据通信,和解释由此非本地指示装置接收的数据。

虽然已详细说明了本发明及其优点,但本技术领域的熟悉人去会理解,他们可能在这方面作出各种改变、替换和变体而不背离本发明在其最广泛意义上的精神和范畴。

 APPENDIX//EMULATOR(typìcal)//////////////////////////////////////////////////////////////////////////////main (){//GENERAL SYSTEM CONFIGURATIONObtain ConfigurationInitialize Target/Slot/Channel tableInitialize shared data bases//START EMULATORSFor each LCNP Target{Get handle to LCNPif(EpdgPdgEmulator) Start EpdgPdgThread(IN Target);if(EpdgScsiEmulator) Start EpgdScsiThread(IN Target);if(WSIEmulator) Start WSIThread(IN Target);if(EpdgDebugPortEmulator)Start DebugPortThread(IN Target);Wait for Acknowledgement from the started threadsRlease the LCNP resetclose LCNP handle}wait for service control manager messages which turn the CBR services on or off}								//////////////////////////////////////////////////////////////////////////////hSemaphore RegisterDevice(IN DeviceObject,IN PdgOrScsiDeviceHandle){Add Target/Slot/Cbannel to tableCreate syncronization object(semaphore?)return semaphore}//////////////////////////////////////////////////////////////////////////////<??>PdgSlotThread(IN Target,IN Slot){PdgSlotPathName=F(Target,Slot);PdgSlotHandle=CreateFile(PdgSlotPathName,...);Initialize LCNP slot;if need video emulator{open named pipe videoPipestart VideoEmulatorThread(IN target,IN slot,IN pdgHandle,IN videoPipe);read videoPipe;}if need keyboard emulator{								 open named pipe keybdPipe start keybdEmulatorThread(IN target,IN slot,IN pdgHandle ,IN keybdPipe); read keybdPipe; }if need pointer emulator { open named pipe pointerPipe start pointerEmulatorThread(IN target,IN slot,IN pdgHandle ,IN pointerPipe); read keybdPipe; } if need printer { open named pipe printerPipe start printerEmulatorThread(IN target,IN slot,IN pdgHandle,IN printerPipe); read printerPipe; } wait for acknowledgement for the started threads; send acknowledgement to parent thread(thread“0”); //common board response command processing: while(EmulatorRunning) { deviceIOCtl(pdgSlotHandle,getCommand) switch(command) {								case‘videoCommand’:write command to named pipe for the video emulatorcase‘keyboardCommand’:write command to named pipe for the keyboard emulatorcase‘pointerDeviceCommand’:write command to named pipe for the pointer emulatorcase‘printerCommand’:write command to named pipe for the printer emulator}}///////////////////////////////////////////////////////////////////////////////ScsiSlotThread(IN Target,IN Slot){ScsiSlotPathName=F(Target,Slot);ScsiSlotHandle=CreateFile(ScsiSlotPathName,...) initialize LCNP slot; open named pipe SCSIPipestart SCSIEmulatorThread(IN Target,IN Slot,IN ScsiSlotHandle,IN SCSIPipe);wait for acknowledgement for the started SCSI thread;send acknowledgement to parent thread(thread“0”);//common board response command processing:while(EmulatorRunning)								{ deviceIOCtl(ScsiSlotHandle,getCommand); write command to SCSI named pipe for the SCSI emulator;}//////////////////////////////////////////////////////////////////////////////WSISlotThread(IN Target,IN Slot){WSISIotPathName=F(Target,Slot);WSISlotHandle=CreateFile(WSISlotPathName,...)initialize LCNP slot;open named pipe WSIPipewait for acknowledgement for the started WSI thread;send acknowledgement to parent thread(thread“0”);//Note,no commands for the WSI//////////////////////////////////////////////////////////////////////////////videoEmulatorThread(IN target,IN slot,IN pdgHandle,IN videoPipe);{create named pipe videoPipe,and get hahdle to it//create device object and get handle to ithdev=createDeviceObject(IN target,IN slot,IN slotHandle,IN channel,IN pipeHandle);//do any other initialization;								 while(EmulatorRunning){ read commands from the named pipe; switch(command) { case‘start-command’: { //call method in IOCB object to initialize the IOCB pdgIOCB∷init(IOCBAddrInTDCMemory); //complete the start-command command_complete(hdev,command,operational-status); while(validIOCB()){process iocb buffer//call method in IOCB object to complete the IOCBpdgIOCB∷complete(IOCBStatus,size);}}case‘other-command’:{//process command}}}
////////////////////////////////////////////////////////////////////////////// keybdEmulatorThread(IN target,IN slot,IN pdgHandle,IN keybdPipe);{create named pipe keybdPipe,and get handle to it//create device object and get handle to ithdev=createDeviceObject(IN target,IN slot,IN slotHandle,IN channel,IN pipeHandle);//do any other initialization;while(EmulatorRunning){read commands from the named pipe;switch(command){case‘start-command’:{//call method in IOCB object to initialize the IOCBpdgIOCB∷init(IOCBAddrInTDCMemory);//complete the start-commandcommand_complete{hdev,command,operational-status);while(validIOCB()){process iocb buffer//call method in IOCB object to complete the IOCBpdgIOCB∷complete(IOCBStatus,size);}}case‘other-command’:{//process command }}}//////////////////////////////////////////////////////////////////////////////pointerEmulatorThread(IN target,IN slot,IN pdgHandle,IN pointerPipe);{create named pipe pointerPipe,and get handle to it//create device object and get handle to ithdev=createDeviceObject(IN target,IN slot,IN slotHandle,IN channel,IN pipeHandle);//do any other initialization;while(EmulatorRunning){read commands from the named pipe;switch(command){case‘start-command’:{ //call method in IOCB object to initialize the IOCBpdgIOCB∷init(IOCBAddrInTDCMemory); //complete the start-commandcommand_complete(hdev,command,operational-status);while(validIOCB()){ process iocb buffer //call method in IOCB object to complete the IOCBpdgIOCB∷complete(IOCBStatus,size);}}case‘other-command’:{//process command}}}/////////////////////////////////////////////////////////////////////////////////printerEmulatorThread(IN target,IN slot,IN pdgHandle,IN printerPipe); {create named pipe printerPipe,and get handle to it//create device object and get handle to ithdev=createDeviceObject(IN target,IN slot,IN slotHandle,IN channel,IN pipeHandle);//do any other initialization;while(EmulatorRunning){read commands from the named pipe;switch(command) {case‘start-command’:{//call method in IOCB object to initialize the IOCB pdgIOCB∷init(IOCBAddrInTDCMemory);//complete the start-commandcommand_complete(hdev,command,operational-status);while(validIOCB()){process iocb buffer//call method in IOCB object to complete the IOCBpdgIOCB∷complete(IOCBStatus,size);}}case‘other-command’:{//process command} }}
//////////////////////////////////////////////////////////////////////////////scsiEmulatorThread(IN>//do any other initialization;while(EmulatorRunning){read commands from the named pipe;switch(command){case‘start-command’:{//call method in IOCB object to initialize the IOCBScsiIOCB∷init(IOCBAddrInTDCMemory);//complete the start-commandcommand_complete(hdev,command,operational-status);while(validIOCB()){process iocb buffer//call method in IOCB object to complete the IOCBScsiIOCB∷complete(IOCBStatus,size);}}case‘other-command’:{//process command}}} DEBUG PORT EMULATOR//////////////////////////////////////////////////////////////////////////////DebugPortThread(IN Target,IN Slot){//CONNECT TO DRIVERDebugPortHandle=CreateFile(DebugPortPathName,...);//START THREAD FOR UNSOLICITED INPUTStart DebugUIThread()//RUN CONTINUOUSLY UNTIL TERMINATEDwhile(EmulatorRunning){//READ A DEBUG COMMANDDeviceIoControl(DebugPortHandle,...)//GIVE DEBUG COMMAND TO TDC CONSOLE EMULATORprocess request on debug port}}
CLASSES/OBJECTS class physicalBuffer{public:memoryAdress;memorySpace[8];}class TdcBuffer{pointerToNTCopyMemory;size;direction;currentIndex;public:initialize(pointerToTDCBuffer,size,direction);initialize(TDCBufferAddress,size,direction);complete(transferred);getNextWord();getBufferAddress();*operator*(){return getBufferAddress();};}class Iocb{protected:TDCiocb//place to hold TDC IOCB in the NT environment TDCBuffer Buffer//wrapper for TDC buffervirtual long GetBufferAddress()=0;long getNextAddress(){return LCNPddrToULong(&IocbAddress);public:initialize(IocbAddressInTdcMemory);initialize(pointerToLCNPddressOfIocb);complete(IocbStatus,transferred);//complete IOCBTdcBuffer*GetBuffer(Direction);GetTransferSize();//report buffer size to transfer}class pdgIocb{protected:virtual long GetBufferAddress;public:initialize(IocbAddressInTdcMemory);initialize(pointerToLCNPddressOfIocb);complete(IocbStatus,transferred);//complete IOCBTdcBuffer*GetBuffer(Direction);GetTransferSize();//report buffer size to transfer}class ScsiIocb{protected: virtual long GetBufferAddress;public:initialize(IocbAddressInTdcMemory);initialize(pointerToLCNPddressOfIocb);complete(IocbStatus,transferred);//complete IOCBTdcBuffer*GetBuffer(Direction);GetTransferSize();//report buffer size to transfer*GetSuffix()//get a pointer to the IOCB suffix};//////////////////////////////////////////////////////////////////////////////LCNP DRIVER//THIS ROUTINE HANDLES EPDG INTERRUPTS FROM THE LCNPIoSpaceWriteIsr(IN Target,IN AddressWritten){//ARE THERE ANY VERY QUICK THINGS THE DRIVER HANDLES ITSELF?DO IT HEREIrb[]=AddressWritten;Irb[]=Target;QueueIoSpaceWriteDpcRoutine;} //THIS ROUTINE HANDLES DEBUG PORT INTERRUPTS FROM THE LCNPDebugPortWriteIsr(IN Target,IN AddressWritten){//ARE THERE ANY VERY QUICK THINGS THE DRIVER HANDLES ITSELF?DO IT HEREIrb[]=AddressWritten;Irb[]=Target;QueueDebugPortWriteDpcRoutine;}QueueIoSpaceWriteDpcRoutine(IN Irb){//PICK UP INFO ABOUT WHO.WROTE TO I/O SPACEAddressWritten=Irb[];Target=Irb[];//calculate base pointer for target that interrupted//GET THE DATA THAT WAS WRITTEN AT THIS ADDRESSDataWritten=SomePCIcomamndsToRead(IN Target,IN AddressWritten);IoCacheMemory[Target,AddressWritten]=DataWritten;//CALCULATE THE SLOTSlot=(AddressWritten-$40000)/$1000; //IS IT SOMETHING THE DRIVER RESPONDS TO DIRECTLY?IF SO,DO ITHERE//WAS THIS A COMMAND WRITE?IF SO,GET THE ADDRESS OF THE FIRSTIOCB if((AddressWritten AND $FF)=$8){//GET THE CHANNEL CONTROL BLOCK FOR THE CHANNEL OFINTERESTCcbAddress=BaseAddress+$80400+(Slot*$1000);IocbAddressPointer=BaseAddress+CcbAddress+(Channel*4);IocbAddress=SomePciCommandsToRead(IN Target,IN CcbAddressPointer);}elseIocbAddress=0;//DISTRIBUTE THE EVENTif(some thread waiting for that slot)wake that thread elseremember this write for later}QueueDebugPortWriteDpcRoutine(IN Irb){//PICK UP INFO ABOUT WHO WROTE TO I/O SPACE AddressWritten=Irb[];Target=Irb[];if(some thread waiting for that slot)wake that thread elseremember this write for later}//THIS FUNCTION HANDLES DeviceIoControl() FROM EMULATOR SERVICEStatus ReadFunctionInDriver(IN Handle,IN WaitForData, IN Target,IN Slot, OUT AddressWritten,OUT WordWritten){ if(a remembered write is pending) erase record of remembered write return immediately with AddressWritten and DataWritten else record that we are waiting for this slot sleep}

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号