适配器范文10篇

时间:2023-03-17 22:31:41

适配器范文篇1

关键词:雷达极坐标指示器ARINC429总线适配器

直升机自动导航系统与机上设备的交连关系如图1所示。它主要由多卜勒雷达、导航计算机、自动驾驶仪、真空速度计算机、极坐标指示器导航信号适配器和多卜勒导般信号适配器以及各种仪表、指示器构成。本文主要介绍多卜勒导航信号适配器和极坐标指示器导航信号适配器的设计。

1接口适配器的研制

1.1多卜勒导航信号适配器

1.1.1接口信号分析

多卜勒转达输出模拟和数字两种制式的导航信息。模拟信号相对于水平面,它包括雷达输出的速度信息(以直流电压形式提供给速度指示器、400Hz交流电压形式提供给自动驾驶仪)、导航信息(纵向和横向速度的交流模拟电压);数字信号是相对于机体坐标的纵向和横向速度的数字信号。由于数字信号的脉冲宽度和信号灵敏度不符合导航计算机的要求,又因为多卜勒雷达给出的模拟信号质量优于数字信号,因此,将多卜勒雷达输出的模拟信号进行交换,实现与导航计算机的脉冲数字接口相匹配。

1.1.2适配器完成以下功能:

·将多卜勒雷达输出的以灵敏度为30mV/Kt的400Hz交流信号表示的飞机纵向(Vy)、横向(Vx)速度信号转换为以脉冲频率数表示的导航计算机的输入信号;

·将雷达输出的表示速度方向的离散信号转换为满足导航计算机需要的离散信号;

·将直升级真空速表输出的以交流模拟电压表示的真空速信号转换为以直流模拟电压表示的真空速信号送给导航计算机;

·将导航计算机输出的侧向控制信号和有效信号以及自动驾驶仪输出的巡航功能控制信号转换为自动导航的控制信号,实现自动驾驶仪的自动导航。

1.1.3适配器设计

适配器主要由A/D转换电路、AD/DC转换电路、离散信号转换电路、状态控制电路和电源电路等组成。

A/D转换电路由低通滤波器、缓冲隔离、梯度控制、A/D转换、钳位隔离等部分组成,如图2(a)所示。该电路的输入信号为雷达输出的模拟信号,制式为400Hz交流,灵敏度为30mV/Kt;输出为0.8V的脉冲信号,频率灵敏度为35.7Hz/Kt(可调)。

AC/DC转换电路由低通滤波、缓冲隔离、AC/DC转换、梯度控制电路构成,如图2(b)所示。该电路的输入信号为真空速表的输出,信号制式为400Hz交流、灵敏度为90mV/Kt;输出为直流电压、灵敏度为75mV/Kt(可调)。

离散信号转换电路由整形钳位、电平转换、反向器、缓冲器离电路组成,如图2(c)所示。该电路的输入信号为多卜勒雷达输出的代表速度方向(相对机体)的离散量,其输入高电平为+3.5V、低电平为+0.8V,输出高电平为+8V,低电平为+2V。

自动导航信号处理及控制电路包括信号控制电路和状态控制电路。信号控制电路由低通滤波、梯度控制、缓冲隔离电路等组成;而状态控制电路由电平钳位、逻辑控制、缓冲隔离及控制继电器等组成,如图2(d)所示。

上述所有功能电路,均经反复调试,优化设计,最后固化成模块。整个电路由六个模块组成,分别安装在两个印刷电路板上,如图3(a)和3(b)所示。

图中RGX-1A、RGX-1B为多卜勒雷达纵向速度信号和横向速度信号的预处理电路,包括低通滤波、缓冲隔离和梯度控制;RGX-IC为真空速信号的AC/DC变换;RGX-2为多卜勒雷达速度信号的A/D转换模块;RGX-3为离散信号的处理模块。

1.2极坐标指示器导航信号适配器

1.2.1适配器功能

该适配器完成导航计算机输出的地速串行数据(12.5±0.1kbit/s)中的目标方位、偏流角和待飞距离信号计算,并将目标方位和偏流角信号调整为极坐标指示器能够接收的符合ARINC407标准的同步器信号,将等飞距离信号调整为四位LED显示器的显示信号。

1.2.2硬件设计

以8031单片机为信心,结合相应的电路设计,构成一个ARINC429总线信号的求解和信号匹配系统。硬件设计框图如图4所示。

图中,8031作为核心芯片,它与27256程序存储器和61256数据存储器组成单片机最小应用系统,完成对导航计算机输出的ARINC429总线信号进行采集、转换、计算和信号匹配等操作并进行控制。

3282板以HS-3228、8255等芯片构成处理电路,现将导航计算机的32位ARINC429串行数据转换为符合8031单片机8位数据总线要求的并行数据,由单片机最小系统控制,实现数据的转换和采集。

SZZ板以高精度数字/轴角转换模块和8155等芯片为核心,构成目标方位角和偏流角的数字/轴角转换电路,实现将3282板采集来的目标方位角和偏流角的数字量转换为符合ARINC407标准的同步器信号,送给极坐标指示器,使其指示相应的参数。

8279板以8279芯片为核心,构成键盘和显示器驱动电路,实现待飞距离的显示数据的处理和四位LED显示器的功率驱动。

1.2.3软件设计

为了便于程序的调试和修改,软件设计采用模块化设计方法。程序模块主要包括主程序模块、中断服务(数据采集)子程序模块、数据转换子程序模块、信号匹配子程序模块、数码显示子程序模块等。其中数据采集子程序和数据转换子程序流程图如图5(a)、(b)所示。

适配器范文篇2

关键词:USBCAN总线固件编程适配器

现场总线作为二十世纪80年展起来的新兴技术,在工业现场已有了广泛的应用。在比较有影响力的几种现场总线中,CAN总线以其突出的优点不仅大量应用于工业现场,而且在楼宇自动化、智能终端设备等民用领域也有了长足的发展。

现场总线网络技术的实现需要与计算机相结合。以往CAN总线网络与计算机的连接采用RS232、ISA或PCI接口。但是随着计算机接口技术的发展,ISA接口已经逐渐被淘汰;RS232接口数据传输率太低;PCI虽然仍是高速外设与计算机接口的主要渠道,但其主要缺点是占用有限的系统资源、设计复杂、需有高质量的驱动程序保证系统的稳定,且无法用于便携式计算机的扩展。随着USB1.1、USB2.0规范的相继制定,为外设与计算机的接口提出了新的发展方向。USB的主要特点有:外设安装简单,可实现热插拨;通讯速率高,USB1.1全速传送速率为12Mbps,与标准串行端口相比,大约快100倍;支持多设备连接;提供内置电源。

本文给出一种在Windows2000下使用USB1.1协议实现CAN总线适配器的设计方法。整个设计主要开发适配器的固件及计算机的驱动程序、应用程序,以达到用USB接口连接现场CAN总线网络的目的。

图1

1适配器硬件接口设计

适配器硬件电路由微控制器、CAN总线接口、USB总线接口和DC-DC隔离电源模块等组成。原理框图如图1所示。

微控制器P89C51RD2是Philips公司生产的增强型MCS-51兼容单片机,片内集成64KB闪存和1KB扩展RAM,双数据指针,4级中断优先级,7个中断源,内置看门狗,可编程时钟输出,在6时钟模式下工作,速度是标准51单片机的两倍。此时外部最高频率可达20MHz。在高速、大程序容量、中小规模数据处理场合是一款非常理想的单片机型。

CAN总线接口使用Philips公司的独立CAN总线控制器SJA1000,并由光耦6N136进行总线隔离。SJA1000是一种独立控制器,用于移动目标和一般工业环境中的区域网络控制,符合CAN2.0A和2.0B规范,最高速率可在达1Mbps。CAN总线收发器采用PCA82C250。

PDIUSBD12是Philips公司推出的全速USB接口器件,完全兼容USB1.1规范。图1中D+引脚信号电平通过器件SoftConnect命令内部上拉,从而向主机表示为一个全速设备。EOT引脚自动检测USB接口的VBUS电压以确定USB电缆是否连接到了主机。SUSPEND是双向引脚,用以向微控制器指示器件是否挂起。当有USB总线事件发生时,引脚向微控制器发出中断信号。PDIUSBD12支持总线复用和非复用两种并行接口模式,以方便连接不同类型的微控制器。图1中采用总线复用方式,当用奇数地址访问PDIUSBD12时被认为是命令,偶数地址访问则被认为是数据读写。

各器件都需要外部时钟信号,而且它们自身也都有可编程的时钟输出功能,这就给系统的时钟设计带来了便利。图1中微控制器6时钟运行模式下,外部为12MHz晶振。P89C51RD2的P1.1引脚产生6MHz方波作为PDIUSBD12的输入时钟;通过PDIUSBD12的SetMode寄存器编程使CLKOUT输出时钟频率为24MHz,作为SJA1000的外部输入时钟。

2软件设计

软件设计包括微控制器的固件设计和计算机端USB驱动程序两部分。

2.1微控制器固件编程

固件编程是USB数据传输系统中终端设备程序设计的一个重要概念。微控制器通过固件是程序与计算机进行数据交换。固件设计的目的是:使PDIUSBD12在USB上达到最大的传输速率;增加系统的可扩展性和硬件无关性。

固件要实现的内容:一是对SJA1000初始化,接收CAN总线送来的数据,收集CAN网络状态信息,并将主机的数据下发到CAN网络;二是对PDIUSBD12初始化,完成USB总线连接过程,并组织CAN网络和主机之间的数据传送。设计中采用KeilC51软件编译环境,C51和ASM混合编程方式。

SJA1000和PDIUSBD12都有完善的中断机制,微控制器可以通过读它们的中断寄存器获得总线事件。为了提高固件的运行效率,主程序对系统进行实始化后开放中断,在中断服务程序中对事件进行分析和必要的处理,并设置相应的变量标志和数据缓冲区。主程序则循环查询变量标志,调用相应的子程序进行处理。这种程序结构使得主程序能够在前台处理各种数据传送任务,同时又可以通过中断在后台及时处理总线事件。

2.1.1CAN协议实现

SJA1000支持BasicCAN和PeliCAN两种协议模式。在适配器设计中采用了BasicCAN模式。中断设为电平中断方式,SJA1000中断服务程序框图如图2所示。

2.1.2USB1.1协议实现

PDIUSBD12支持所有的四种USB数据传输方式。在适配器的设计中使用了控制传输、中断传输和批量传输。控制传输中只用来传递控制信息,固定使用端点0;中断传输使用端点1,用来传送CAN网络状态信息;批量传输用来实现主机和CAN网络节点之间的数据传送,使用端点2。图3是PDIUSBD12中断服务程序框图。

2.2驱动程序设计

USB驱动程序属于WDM(Windowsdrivermodule)类型。WDM驱动程序是分层的,引入了FDO(FunctionDeviceObject)和PDO(PhysicalDeviceObject)两个新类来描述硬件,每一个物理硬件有一个PDO,但是可以有多个FDO,在驱动程序中直接操作的是PDO和FDO。系统通过全局唯一标识符GUID实现驱动程序的识别。应用程序和WDM驱动程序通信时,系统为每个用户请求打包形成一个I/O请求包发送到驱动程序。

图4是Windows中USB的通信层次结构模型。图4系统软件方块中的底部是Windows系统提供的驱动程序,包括主控制器驱动程序(OPENHCI.SYS或者UHCD.SYS)、HUB驱动程序(USBHUB.SYS)是一个类驱动程序(USBD.SYS)。

Windows2000下驱动程序的设计工具是VC++和Win2000DDK,但是直接使用DDK编程有相当大的难度。目前有第三方软件厂商提供了一些驱动程序开发工具,如Jungo公司的WinDriver、Compuware公司的DriverStudio等。这些工具仍然是基于WindowsDDK的,但是进行了新的封装,提供了驱动程序设计向导。

适配器设计中采用了DriverStudio作为驱动程序开发工具。利用其中的DriverWorks一步步地作出选择并修改少量参数,即可生成驱动程序框架和测试台应用程序框架,对USB设备的通用性部分支持得很好。在程序框架,对USB设备的通用性部分支持得很好。在VC++中对向导生成的代码作修改,并对设备特殊功能部分添加处理代码,然后用VC++编译为*.SYS文件,就是一个完整的驱动程序。SoftIce是DriverStudio的另一个调试工具,可以对驱动程序进行操作系统内核级的跟踪与调试。

适配器范文篇3

关键词:LonWorks神经元芯片并行口I/O模式EZ-USB

LonWorks技术是美国Echelon公司于上世纪90年代初推出的一种现场总线技术。LON(LocalOperatingNetwork)的意思为局部操作网络,它是用于开发监控网络系统的一个完整的技术平台,LonWorks现场总线在网络通讯方面具有突出的优点,作为现场总线中的佼佼者在国内各个领域的测控系统中广泛流行。

通用串行总线(UniversalSerialBus,即USB)是一种快速、灵活的总线接口。与其它通信接口相比,USB总线接口最大的特点是易于使用,这主要表现在成本低、适用于多种设备、支持热插拔等方面,并且所有的配置过程都由系统自动完成,无需用户干预。目前,市场上供应的USB控制器主要有两种:带USB接口的单片机(MCU)和纯粹的USB接口芯片。本文采用Cypress公司推出的带智能USB接口的EZ-USB单片机。该单片机极大地降低了USB外设的开发难度,为PC机外设的制造商提供了一个性能优良、价格较低的设计方案。采用USB接口设计开发的LON网互联适配器很好地解决了传统适配器由于RS-232与PC/Laptop互联而造成的速度上的瓶颈。

1系统框图及工作原理

1.1系统框图

系统框图如图1所示。

互联适配器是LON网与PC/Laptop的接口,在通信过程中起着关键的作用,它既完成了LON网与PC/Laptop的互联,又实现了数据的交换。互联适配器作为LON网的一个特殊的网络节点——通信处理器,能按照LonTalk协议与LonWorks总线上所有分布在现场的智能节点进行对等的数据通信,起到上传下达的桥梁作用。当现场的测控设备有数据送到LonWorks网络上时,互联适配器负责把所有发送给它的信息接收下来,将测控设备发送来的LonTalk显式报文重新打包装帧,向PC/Laptop发送。同时,它将从PC/Laptop接收来的已解析的数据按LonWorks现场总线通信协议构造LonTalk显式报文,发送给LonWorks网上的测控设备。

相对USB系统而言,PC/Laptop是USB主机,互联适配器只是USB外部设备。在整个USB系统中只有一个主控制器,即主机(PC/Laptop),主机是总线控制者,USB设备响应主机请求。系统软件设计部分也是针对主机和外部设备这两部分展开的。

1.2工作原理

互联适配器中采用Neuron芯片预定义的并口I/O应用模式实现双CPU的通信,并行口的速率可达3.3Mbps,实现了高数据速率。

并行I/O应用模式下利用Neuron芯片的11个I/O口进行通信,其中,IO0~IO7为双向数据线,IO8~IO10为控制信号线,借助令牌传递/握手协议,并行I/O口可用来外接处理器,实现Neuron芯片与外接各类微处理器之间的双向数据通信,在这里采用EZ-USB单片机与Neuron芯片互连。主机PC/Laptop控制USB外部设备,通过互联适配器与LON网各现场节点通信,其实质就是互联适配器中EZ-USB单片机与Neuron芯片之间的通信。

并行口的工作方式有三种,即主模式、从A模式、从B模式。不同的模式下,IO8~IO10这三根控制信号线的意义不同,这里应用的是从A模式。在从A模式中,认为Neuron芯片为从CPU,EZ-USB单片机为主CPU,主CPU和从CPU之间的数据传输通过虚拟的写令牌传递协议(VirtualWriteToken-PassingProtocol)得以实现。主CPU和从CPU交替地获得写令牌(WriteToken),只有拥有写令牌的一方可以写数据(不超过255个字节),或者不写任何数据传送一个空令牌。传送的数据要遵从一定的格式,即在要传送的数据前面加上命令码和传送的数据长度,命令码有CMD_XFER(写数据)、CMD_NULL(传递空令牌)、CMD_RESYNC(要求从机同步)、CMD_ACKSYNC(确认同步)四种,最后以EOM字节结束。在从A方式中,整个握手/应答协议以及数据传送的实现过程是自动完成的。在通信以前,主CPU和从CPU之间先建立握手信号,即HS信号有效(这由3150的固件自动实现)。然后,主CPU再送一个CMD_RESYNC命令,要求从CPU同步,而从CPU接收到这个信号以后,则发送CMD_ACKSYNC,表示已经同步、可以通信了。同步以后,虚写令牌就在主CPU和从CPU之间无限地、交替地传递,拥有虚写令牌的一方就可以向数据总线上写数据,即主CPU可以往从CPU写数据,从机也可以将数据传往主CPU。

需要特别说明的是,Neuron芯片的握手及令牌传递的实现是自动的,但是对于非Neuron芯片的微处理器(EZ-USB),就要求编程人员通过编程使非Neuron芯片的微处理器能够执行Neuron芯片的握手/令牌传递算法,也即是复制Neuron芯片的行为,从而实现双方的通信。

图2互联适配器硬件结构框图

2硬件设计

互联适配器的结构框图如图2所示,主要由神经元芯片和EZ-USB单片机组成。

神经元芯片(NeuronChip)是LonWorks技术的核心?熏芯片中含有Lontalk协议的固态软件(简称固件),使其能可靠地通信。神经元芯片主要包含TMPN3150和TMPN3120两大系列,由日本东芝公司生产。TMPN3150支持外部存储器,适合更为复杂的应用,而TMPN3120则不支持外部存储器,它本身带ROM。所以,在互联适配器的设计中选用的是TMPN3150,该芯片内有三个微处理器,即MAC处理器、网络处理器和应用处理器。对神经元芯片进行电路的设计和扩展,使之成为LonWorks网上的一个特殊的LON节点,这样它不仅可以与LonWorks网络上的LON节点进行通信,还可以作为适配器的协通信处理器。

TMPN3150片内存储器的地址范围是E800H~FFFFH,包括2KB的RAM、0.5KB的EEPROM、2.5KB保留空间和1KB的用于存储器映象I/O的空间。TMPN3150有16根地址线,可寻址64K空间,可以外接存储器,如RAM、ROM、EEPROM或FLASH等。由于开发Neuron芯片时采用NeuronC语言,内存占用大,另外其作为通信协议处理器使用要求有大量的数据缓冲区进行数据交换,而仅仅利用3150内部的2KRAM空间是远远不够的,因此扩展了外部存储器FLASH和RAM。FLASH选用AT29C512,其地址范围是0000H~7FFFH;RAM选用IS61C256AH-15N,其地址范围是8000H~DFFFH。AT29C512和IS61C256AH-15N的地址范围由Neuron芯片的地址线和控制线E及相关的逻辑门电路来确定。神经元芯片的晶振为10MHz。Neuron芯片与LON的网络介质的接口采用上海工业自动化仪表研究所生产的双绞线收发器。收发器按其传输速率可以分为TPT/XF-78(传输速率为78kbps)、TPT/XF-1250(传输速率为1.25Mkbps)两种型号,用于满足不同的通讯要求。这里选用的是TPT/XF-1250。

EZ-USB单片机采用的是EZ-USB2100系列中具有44个引脚的AN2131S。AN2131S是互联适配器的主CPU,利用其I/O端口足以完成所需的功能。EZ-USB芯片中包含内部程序/数据RAM共8KB?熏不再需要ROM或其它非易失性存储器。主CPU与辅CPU的连接很简单,即与辅CPU的11个I/O口进行连接。单片机的PB口接上辅CPU的IO0~IO7,为两个CPU的并行通讯数据端口。单片机的PC0~PC2分别接神经元芯片IO8~IO10,完成控制功能。AN2131S再通过引脚USBD+和USBD-与主机PC/Laptop互联。

3软件设计

适配器的软件程序设计分为两大块。一块为对主机PC/Laptop程序的软件设计,另一块为对USB设备——互联适配器程序的软件设计。

3.1USB主机的软件设计

主机的软件设计主要包括两部分:一是基于USB的互联适配器的驱动程序。如图3所示,USB通信使用分层驱动模型,每层处理一部分通信过程,这样可以使不同设备在一些任务上使用相同的驱动。这里使用MicrosoftWDMDDK和MicrosoftVisualC++6.0来完成。

二是USB通信程序和用户服务程序。用户服务程序通过USB通信程序与系统USBDI(USBDeviceInterface)通信,由系统完成USB协议的处理与数据传输。从逻辑上讲,USB数据的传输是通过管道进行的。USB系统软件通过缺省管道(与端点0相对应)管理设备,设备驱动程序通过其它的管道来管理设备的功能接口。为了满足不同外设和用户的要求,USB提供了四种传输方式:控制传输、同步传输、中断传输和块传输。本系统使用的是块传输。EZ-USB提供了16个用于块传输的端点,包括7个IN端点(EP1_IN~EP7_IN)和7个OUT端点(EP1_OUT~EP7_OUT)。每个端点都有一个64字节的缓冲区。块端点无方向控制,一个端点地址对应一个方向,所以端点IN1的地址不同于端点OUT1的地址,本适配器就采用这对端点传输数据。其中,端点0在USB系统中有特定含义,它是EZ-USB芯片中唯一的控制端点,用于传输控制信息。

开发可以访问互联适配器的应用程序,可使用任何一个支持win32函数CreateFile()和DeviceIoControl()的编译器。首先调用CreateFile()函数,来取得访问设备驱动程序的句柄,CreateFile()使用设备的链接符作为函数参数。然后调用DeviceIoControl()函数来提交I/O控制码,并且为CreateFile()函数返回的设备句柄设置I/O缓冲区。最后,还要调用CloseHandle()关闭设备。其中,最重要的函数是DeviceIoControl(),它的功能是完成应用程序与驱动程序之间数据的交换。DeviceIoControl()函数的具体格式为:

BOOLDeviceIoControl(

HANDLEhDevice,//外设句柄

DWORDdwIoControlCode,//I/O操作控制代码

LPVOIDIpInBuffer,//输入缓冲区指针

DWORDnInBufferSize,//输入缓冲区大小

LPVOIDIpOutBuffer,//输出缓冲区指针

DWORDnOutBufferSize,//输出缓冲区大小

LPDWORDIpBytesReturned,//实际返回的字节数

LPOVERLAPPEDIpOverLapped//用于异步操作的结构指针

);

3.2USB设备——互联适配器的软件设计

这一部分的软件编写也包括两部分。一部分为对主CPU(EZ-USB)的编写。USB内核功能强大,可以自动完成USB协议的转换,从而大大简化了8051的代码。采用C51语言,并使用EZ-USB的固件函数库和程序框架。框架完成了一个简单的任务循环,用户函数TD_Poll()能够实现USB外设的功能。因为从CPU(NeuronChip)的并行模式是芯片内部定义的,遵从虚拟的写令牌传递协议,所以需要编写芯片EZ-USB的程序来模拟3150的I/O并行口的从A模式。所以TD_Poll()函数主要完成四项工作:与辅CPU同步、握手、令牌的传送以及并行口数据的读写。

另一部分为从CPU的软件程序的编写,用神经元的编程语言即NeuronC语言完成。从CPU主要完成将并口得到的报文解析,再利用NeuronC的消息传送机制,将解析的消息传送给适配器下层的应用节点;同时,还将从适配器下层的应用节点以消息形式传送上来的数据或信息构造成EZ-USB可识别的报文,通过并口传送给EZ-USB。由从机内部定义的与并行I/O对象有关的函数主要有:

io_in_ready():当并口上有数据传送到来时,此函数值为TRUE。此时可调用io_in?穴?雪函数接收数据。

io_out_request():此函数用来向并口总线发出请求以获取令牌。

io_out_ready():当并口总线处于可写状态即3150获取到令牌后,此函数值为TRUE,此时可调用io_out()函数将数据发送到并口。在调用此函数之前应先调用io_out_request()。

io_in():将并口上的数据接收到缓冲区。

适配器范文篇4

关键词:Lonworks以太网RTL8019as80C51单片机

随着互联网的发展,在使用计算机进行互联的同时,各种智能家电、工业控制、智能仪器仪表、数据采集都在逐步趋向网络化。但由于以太网在实时性和可靠性的先天不足,各种现场总线技术应运而生;更因为其彻底的开放性、分散性和完全可互操作性等特点,正成为未来新型工业控制系统的发展方向。以太网以其应用的广泛性和技术的先进性,逐渐垄断了商用计算机的通信领域和过程控制领域的上层信息管理与通信。为实现上层管理网络与下层控制网络的集成,在实际中必须实现现场总线与以太网互联。

Lonworks现场总线是美国Echelon公司1991年推出的局部操作网络。Lonworks现场总线在网络通信方面具有突出优点,如网络物理层支持多种通信介质,支持多种网络拓扑结构等。目前使用Lonworks技术的产品广泛应用于工业、楼宇、家庭、能源等自动化领域。本文提出的适配器连接方案,能将LON控制网与以太网无缝连接,实现透明传输。

图1互连适配器的电路框图

1互连适配器硬件电路设计

适配器使用的主要芯片为神经元芯片TMPN3150、51单片机89C51RD和以太网控制器RTL8019as。主要分为Lonworks控制模块、协议转换模块和以太网通信模块。其中,协议转换由单片机内部软件完成。

1.1Lonworks控制模块

Lonworks控制模块主要完成对LON网数据的管理并向单片机传输数据,其核心是神经元芯片。神经元芯片与其他设备的互连是通过其11个I/O口,编程人员可以定义多个引脚为输入/输出对象。用户程序可通过io_in()和io_out()访问这些I/O对象,并在程序执行期间完成输入/输出操作。本文设计的适配器采用Neuron芯片预定义的并行I/O对象,实现了高数据速率和全双工工作方式。

并行I/O对象利用Neuron的11个I/O口进行通信。其中IO0~IO7为双向数据线,IO8~IO10为控制信号线。借助令牌传递握手协议,并行I/O口可外接处理器,实现Neuron芯片与外接各类微处理器之间的双向数据通信。并行口的速率可达3.3Mbps,工作方式有三种,即主模式、从A模式和从B模式。不同的模式下,IO8~IO10这三根控制信号线的意义不同。本文应用从A模式与单片机连接如表1所示。

表1Neuron芯片与单片机的连接

IO8片选信号线(CS)接P2.5

IO9读写信号线(R/W)接P3.6

IO10握手信号线(HS)接P1.0

IO0~IO7数据总线接P0.0~P0.7

从A模式中,Neuron芯片为从机,51单片机为主机。主机与从机间的数据传输通过虚拟的写令牌传递协议(VirtualWriteToken-PassingProtocol)实现。主机和从机交替地获得写令牌,只有拥有写令牌的一方可以写数据(不超过255字节),或者不写任何数据传送一个空令牌。传送的数据要遵从一定的格式,即在要传送的数据前面加上命令码和传送的数据长度。命令码有CMD_XFER(写数据)、CMD_NULL(传递空令牌)、CMD_RESYNC(要求从机同步)、CMD_ACKSYNC(确认同步)四种,最后以EOM字节结束。写数据和传递空令牌的格式分别如表2、表3所示。

表2写数据的格式

CMD_XFERLengthDataEOM

表3传递空令牌的格式

CMD_NULLEOM

1.2以太网通信模块

以太网通信模块由51单片机和RTL8019as组成。以太网控制器RTL8019as由台湾Realtek公司生产,100脚PQFP封装。它支持8/16位数据总线及16个I/O基地址选择,使用Ne2000兼容的寄存器结构。它有一块16K字节的RAM,地址为0x4000~0x7fff。实际上它是双端口RAM,可以同时被网卡读/写和用户读/写,相互之间不影响。网卡读写比用户读写的优先级高。RAM分页存储,每256字节称为一页。将前12页作为发送缓冲区(0x4000~0x4bff),后52页作为接收缓冲区(0x4c00~0x7fff)。

以太网的介质访问控制、CRC校验及数据帧的接收和发送都由网卡自动完成,只需将IP包加上目的MAC地址和源地址,再通过远端DMA接口对RTL8019as内部RAM进行读写即可。网卡的地址线共20根。用到的网卡地址为十六进制的0240H~025FH,基地址为0240H,从地址240H~25FH。地址线的A19~A5是固定的000000000010010,只需5根地址线即可。所以RTL8019as输入输出地址共32个,地址偏移量为00H~1FH(对应于240H~25FH)。对于8位操作方式,32个地址中只有18个有用:00H~0FH共16个寄存器地址,10H为DMA地址,1FH为复位地址。本适配器采用轮询方式,不使用中断。故RTL8019as与单片机的连接如表4所示。

表4RTL8019as单片的连接

IORB读信号,接P3.6

IOWB写信号,接P3.7

RSTDRV复位信号,P3.4

AEN地址信号,接地

IOCS16接下拉电阻,选择8位模式

S0~S7数据总线,接单片机P0口

A19~A10,A6地址线接地

A9,A5接P2.5(高电平时选中)

A4~A0接单片机P2.0×P2.4

表5单片机发往RTL8019as的数据格式

以太网首部IP首部UDP首部数据

14字节20字节20字节128×n字节

本适配器使用UDP传送数据,同时支持ICMP的回应应答和回应请求报文(Ping命令),单片机发往RTL8019as的数据帧格式如表5所示。

用单片机实现UDP协议要作一些简化,不考虑数据分片和优先权。因此,在IP首部中不讨论服务类型和标志偏移域,只需填“0”即可。

1.3互连适配器的硬件电路设计

由于P89C51RD2只有四个8位I/O口,无法同时与RTL8019as和TMPN3150通信,故使用P0口作为数据总线。P2.5作为片选信号,高电平为RTL8019as,低电平为TMPN3150。图1给出了互连适配器的电路框图。其中3150和RTL8019as复用同一条8位数据线,依靠P2.5进行片选。当P2.5高电平时,RTL8019as地址(1XXXXX)有效,被选中。Max232作为单片机的下载线,互联适配器也可使用RS232口与计算机通信。

图2适配器工作流程图

2互连适配器的软件设计

适配器的软件编写包括两部分:一部分是TMPN3150上用NeuronC语言编写;另一部分是在P89C51上用C51语言开发TCP/IP协议栈和与TMPN3150、RTL8019as的通信软件,可读性强,可方便地移植到其他51核心单片机上。

2.1适配器的初始化

P89C51单片机和TMPN3150之间先建立握手信号,即HS信号有效(由TMPN3150的固件自动实现);然后,主机发送一个CMD_RESYNC命令,要求从机同步,而从机接收到这个信号后,则发送CMD_ACKSYNC,表示已同步,可以通信了。RTL8019在通信前要先读取93C46的内容并设置内部寄存器的值(配置寄存器CONFIG1~4,网络节点地址),再由89C51对RTL8019的页0与页1相关寄存器进行初始化,即可正常工作。

2.2适配器工作流程

考虑到LON网主要作为监控网络,特别在楼宇自动化中的监控,由LON网发往以太网的数据较多,应首先保证其优先权。且89C51RD只有1024字节的内存,无法处理大的以太网帧。经过实验比较,在最后具体实现时,选择LON最大为每帧64字节,尽量做到每收10个LON帧,发一个以太网帧,流程如图2所示。

适配器范文篇5

关键词:现场总线组态软件COMVxD

COM(ComponentObjectModel)组件技术是构造二进制兼容软件的规范,通过它可以建立能够相互传输数据的组件,其服务器-客户机结构非常适合工控软件应用程序的开发。由于工控软件不仅包括PC机上的HMI(人-机界面)程序,还包括与各种基于ISA或PCI总线的数据采集卡进行数据交换的程序,这部分程序对开人员的硬件水平要求较高,而且开发难度较大,与HMI程序是相互独立的,所以可以把工控软件分成两部分,即把HMI程序作为客户机端程序,把与硬件进行数据交换的程序作为服务器端程序。基于这种思想,本文将服务器-客户机结构应用到现场总线控制系统的组态软件中,着重介绍客户机和服务器的功能及实现。首先介绍现场总线控制系统的组成。

1系统组成

现场总线控制系统主要由PC机、ISA或PCI总线智能适配器、智能测控模块、组态软件、HMI软件、COM服务器、用户软件等构成。

现场总线系统中所有信息的传递都是双向的,COM服务器介于智能适配器和上位机软件之间,负责完成数据的传输。上位机软件相当于客户机端应用软件,它使用COM服务器提供的接口来操作适配器,对适配器进行初始化及向特定单元写入和读出数据。

由于在Windows保护模式下不能直接访问存储器,所以需要编写VxD驱动程序,将物理地址转换成线性地址,然后COM就可以象使用DLL一样调用VxD的函数,完成对ISA或PCI总线智能适配器的操作。

从测控模块到上位机软件自下而下的数据传输完成了用户对测控模块的监测;而上层软件通过COM将数据送往适配器,再由适配器送往测控模块,实现了用户对测控模块工作参数的设置及工作状态的管理。图1给出了系统软件结构框图。

2组态软件的功能

现场总线控制系统组态软件是一套基于Windows98和Windows2000平台(或更高版本)、用于快速构造和生成上位机监控系统的组成软件,它提供了从数据采集到数据处理、远程控制、报警处理、报表输出等实际工程问题的完整解决方案。它使用COM服务器提供的接口与适配器进行数据交换,是COM客户机端的程序。

3COM组件技术

组件是完成一定功能的软件块,可以被其它程序使用,而且容易替换。为了使每个人编写的组件具有可移植性,必须建立一个标准,保证其兼容性和可互换性。COM正是这样一种标准,遵循COM规则就可以建立能够相互交换数据的组件。

在现场总线控制系统中,COM组件服务器负责组态软件等上位机软件与智能适配器之间的数据传输,因为适配器通过CAN现场总线与测控模块连接,所以对适配器的操作就是对模块的监测与控制。

COM服务器提供的接口中有适配器初始化、模块检查、向模块发送数据及读取模块数据等函数。下面着重介绍数据发送接收模式及如何编写这4个有代表性的函数。

3.1适配器初始化函数

只有适配器初始化成功后,才能进行其它操作。由于在Windows保护模式下不能直接访问适配器,COM程序需要调用VxD程序将存储对应的物理地址转换成线性地址指针lpBaseAddress,这样对适配器的操作就转换成对以该指针为首地址的数组的操作。向这个数组的0x3F0、0x3F1和0x3F8单元分别写入上闰机节点号以及适配器与模块间的通信波特率和适配器程序规定的命令字0xC6(表示适配器初始化),等待几十ms后,如果适配器接收到上面的数据并做出适当的反应,它会将0x3F8单元清零,这就表示初始化适配器成功;如果该单元不为零,则初始化失败。

3.2数据传输格式

适配器初始化成功后,就可以同它交换数据了。下而简单说明一下发送数据和接收数据的格式。

适配器初始化得到的线性地址指针lpBaseAddress的1~5单元分别存放上位机节点号、模块节点号、保留字、发送或接收字节长度及模块操作的命令字。lpBaseAddress[6]~lpBaseAddress[256]存放所要发送的数据;从lpBaseAddress[0x106]单元开始存放接收到的数据,lpBaseAddress[0x3F8]存放操作适配器的命令字,适配器根据这个单元内容进行处理,如果是0xC6,则初始化适配器和模块上的CAN控制器;如果是0xC7,则将数组里的数送给模块上的E2PROM,模块收到数据后根据lpBaseAddress[5]的命令字进行相应处理;如果是0xB0,则按照接收到的数据配置模块工作状态;如果是0xA5,则将此时的测量值送到适配器上,由COM程序读出。

3.3模块检查函数

适配器初始化成功后,还要检查适配器与下面的测控模块是否连接好,或者是否存在组态软件要组态的模块,也就是要进行模块检查操作。模块检查的命令字是0xAD,向数组的1~5单元分别写入上位机节点号、模块节点号、保留字、发送数据长度和模块检查命令字0xAD,向0x3F8单元写入0xC7(表示向适配器写入数据),等待几十ms后,如果0x3F8单元清零而且0x100单元被置为0xAA,表示该模块存在而且可以通信;否则,表明该模块不存在或者硬件上有问题。

3.4写适配器数据函数

在确定了网络中存在哪些可通信的模块之后,就可以向它们发送数据并进行配置。为了实现向适配器发送数据,总共编写了4个函数、SendData([in]BYTESendBuf[256])、SendFinish([in]BOOLbFinish)、FinishQuery([out]BOOL*bFinish)和ReceiveResult([out]BOOL*bSendFinish)。SendData负责把一个模块所需要发送的数据以数组的形式放到服务器的一个二维数组(Room[64][256])里,每个模块的数据作为一行。由于向适配器发送数据后,要等待一段时间判断模块是否接收成功,所以SendFinish中开启辅助线程来发送数据并等待结果,这相可不占用COM主程序的时间,使客户调用接口函数后能立即返回,执行其它操作。FinishQuery查询数据发送是否结束。ReceiveResult弹出一个非模式对话框,显示哪些模块接收到数据,哪些没有。

3.5读适配器数据函数

除了向适配器发送数据,还可以从适配器上读取模块传上来的数据。读取数据的命令字是0xA5。实现该任务的函数是GetPV([in]BYTEbDesNode,[out]floatvalue[8]),第一个参数是模块节点号,第二个参数是返回的测量值数组。

这里,COM是用ATL编写的本地服务器,COM对象的线程是套间线程。接口定义了6个函数,COM程序流程图如图2所示。

COM对象接口的函数声明以及适配器初始化的程序如下:

COM接口定义:

interfaceINCardWork:IDispatch

{

[id(1),helpstring("适配器初始化函数,返回值为是否成功")]

HRESULTNcardInit([in]BYTE

bSrcNode,[in]BYTEbIntrAdd,[in]BYTEbRate,[in]longbSegmantAdd,[out]BOOL*flag);

[id(2),helpstring("将客户端传送的数组赋值给Room[][]")]

HRESULTSendData[in]BYTESendBuf[256]);

[id(3),helpstring("启动多线程")]

HRESULTSendFinish([in]BOOLbFinish);

[id(4),helpstring("此函数返回值表示数据是否已向下位机发送完毕,同时可显示哪些模块未被配置,通常在此函数前先用FinishQuery([out]BOOL*bFinish)查询发送是否完毕")]

HRESULTReceiveResult([out]BOOL*bSendFinish);

[id(5)],helpstring("此函数返回值表示数据是否已向下位机发送完毕,“真”表示发送完毕")]

HRESULTFinishQuery([out]BOOL*bFinish);

[id(6),helpstring("网络检查,用来在发送数据前检测是否有该节点存在")]

HRESULTNetCheck[in]BYTEsour,[in]BYTEdes,[in]BYTEtype,[out]BOOL*flag);

[id(7),helpstring("读取模块的测量值")]

HRESULTGetPV([iv]BYTEbDesNode,[out]floatvalue[256]);

}

适配器初始化函数:

#include<conio.h>

#include"winioctl.h"

//包含其它头文件

……

STDMETHODIMPCNCardWork::NcardInit(BYTEbSrcNode,BYTEbIntrAdd,BYTEbRate,longbSegmentAdd,BOOL*flag)

{

NcardCtrlcardctrl;//NcardCtrl类的函数调用VxD函数

exbSrcNode=bSrcNode;//给上位机节点赋值

exbRate=bRate;//下位机与适配器的通信波特率

BOOLtransfersign;//初始化是否成功标志

DWORDdwSegmentaddress=bSegmentAdd;//适配器段地址

HANDLEhDevice=NULL;//指向线性指针对句柄

LpBaseAddress=(PBYTE)cardctrl.MapLinearAddress(dwSegmentaddress,0x400,hDevice);

//调用VxD函数,获得指向ISA总线物理地址的线性地址指针

cardctrl,UnMapLinearAddress(lpBaseAddress,hDevice);

//关闭VxD

//调用适配器初始化函数

_outp(0x310,0x01);//打开邮箱锁

lpBaseAddress[0x3F0]=bSrcNodeNumber;//上位机节点号

lpBaseAddress[0x3F1]=bRate;//波特率

lpBaseAddress[0x3F8]=0xC6;//适配器初始化命令字

DrvDelay(20,false);//延时20ms

…………//初始化后其它操作

_outp(0x310,00);//关闭邮箱锁

returnS_OK;

}

4虚拟设备驱动程序

VxD是虚拟设备驱动程序(VirtualDeviceDriver)的缩写,中间的x表示某一设备。它能够无限制地访问所有硬件设备、自由地检测操作系统的数据结构(如描述符和页表)以及访问任何内存位置。

本文中,VxD将ISA总线对应的物理地址转换成段线性地址,供应用程序使用。VxD的开发工具是VtoolsD,转换时用的函数为MapPhysToLinear。以下是部分程序代码:

//定义结构体

typedefstruct_MapDevRequest

{

PVOIDmdr_PhysicalAddress;DWORDmdr_SizeInBytes;

PVOIDmdr_LinearAddress;WORDmdr_Status;

}MAPDEVREQUEST,*PMAPDEVREQUEST;

#include<vtoolscp.h>

//包含其它头文件

…………

PARAMSpDIOCParams

{

PMAPDEVREQUESTpRea;//自己定义的结构体

switch(pDIOCParams->dioc_IOCtlCode)

{

caseDIOC_OPEN:

caseDIOC_CLOSEHANDLE:break;

caseMDR_SERVICE_MAP:

pReq=*(PMAPDEVREQUEST*)pDIOCParams->dioc_InBuf;

pReq->mdr_LinearAddress=MapPhysToLinear

(pReq->mdr_PhysicalAddress,pReq->mdr_SizeInBytes,0);

if(pReq->mdr_LinearAddress==NULL)

pReq->mdr_Status=MDR_STATUS_ERROR;

else

pReq->mdr_Status=MDR_STATUS_SUCCESS;

break;

caseMDR_SERVICE_UNMAP:break;

default:

returnERROR_INVALID_FUNCTION;

}

returnDEVIOCTL_NOERROR;

适配器范文篇6

关键词:充电控制器/选择器DPMbq24700/01

1概述

bq24700/bq24701是专为笔记本PC而定制的高集成度电池充电控制器和选择器。bq24700/1利用其动态电源管理(DPM)和AC墙上适配器来自动调节电池的充电电流,从而可使电池充电时间缩至最短,并可选用低成本的适配器。bq24700/1利用选择器可以选择电池或AC墙上适配器作为主系统电源。同时可利用300kHz的固定频率和PWM来精确控制电池的充电电流和电压。在对镍镉/镍氢电池和锂离子/锂聚合物电池组(包)充电时,充电电流精度为±4%。当对Li+电池充电时,充电电压精度可达±0.4%。器件中的PWM控制器适合于在墙上适配器电压高于电池电压情况下的降压变换器中使用。在电池过放电情况下,为了保护电池,bq24700/1可执行耗尽电池检测与指示功能。

2引脚功能和推荐工作条件

bq24700/1采用24引脚TSSOP封装,引脚排列如图1所示。表1列出了它们的引脚功能。

表1bq24700/01的引脚功能

引脚名称引脚号I/O功能

ACDET1IAC或适配器电源检测端。当该脚电压低于1.2V门限电时,器件进入睡眠模式,在睡眠模式下仅消耗15μA电流

ACDRV24OAC或适配器电源选择输出

ACN11I适配器电流感测放大器负差分输入

ACP12I适配器电流感测放大器正差分输入

ACPRES2O开路漏极输出,用作指示AC电源的存在

ACSEL3I该脚为逻辑低电平,选择电池;为逻辑高电平时,选择AC适配器作为系统电源

ACSET6I用于在DPM发生时编程适配器电流

ALARM19O枯竭电池报警输出

BATDEP4I已耗尽枯竭的电池电平设定输入

BATDRV23O电池电源选择输出

BATP13I电流充电调整电压检测输入

BATSET9I该脚电压>0.25V时,用作设定充电电平;该脚电压≤0.25V或接地时,内部电池误差放大器反相输入端连接内部1.25V(±0.05%)的参考电压

COMP10O从反相端输入到PWM比较器,该端同时也是跨导(gm)放大器的输出

ENABLE8I充电赋能

GND17-电源地回复,公共参考

IBAT14O电池电流差分放大器输出

PWM21O栅极驱动器输出

SRN15I电池电流感测放大器负差分输入

SRP16I电池电流感测放大器正差分输入

SRSET5I电池充电电流编程端,用于设定充电电流的限制电平

V22I工作电源

VHSP20O驱动外部MOSFET的电压源

VREF7O5V、±0.6%的参考电压

Vs18I系统(负载)电压输入脚

bq24700/1的推荐工作条件如下:

电源电压(Vcc):7~20V(选择器工作电压为4.5~20V);

ACN、ACP(11脚、12脚)输入电压:7~20V;

SRN、SRP(15脚、16脚)输入电压:5~18V;

PWM、BATDRV、ACDRV(21脚、23脚、24脚)输出电压:-0.3~20V;

1~5脚、8~10脚、13~14脚和18~19脚的输入或输出电压:-0.3~8V;

工作环境温度(TA):-40~85℃。

3应用电路及工作原理

bq24700在笔记本PC充电管理中的应用电路如图2所示。电路的输入端连接AC墙上适配器,输出端连接笔记本PC系统。Q1(P沟道MOSFET)为充电器开关,Q2为适配器选择开关,Q3为电池选择开关。

3.1电路工作原理

a.动态电源管理(DPM)

电池充电电流IBAT为适配器电流IADPT与系统电流ISYS之差,即IBAT=IADPT-ISYS。如果IBAT与ISYS之和超过适配器的电流限制,通过DPM功能可减小电池充电电流,从而使整个输入电流消耗保持在墙上适配器的限定容量之内。随着系统电流的减小,充电电流会相应增大,从而使电池充电时间缩短到最低限度。

DPM可通过电池充电来调节电压、充电电流和适配器,以使充电电流的三个控制环路进入PWM控制器。如果三个用户的编程门限有任意一个达到,相应的控制环路将命令PWM控制器减小占空因数,以减小电池充电电流。

b.AC适配器检测

IC的ACDET脚(1脚)通过外部电阻分压器来检测AC适配器的存在及其功率损耗。在应用电路中,由于R1连接于阻塞二极管D1的负极,故要求适配器电压VADPT≥18V(当VADPT<18V时,R1连接到D1正极)。当ACDET脚上电压低于内部比较器的1.2V参考电平时,IC将进入睡眠状态,PWM控制截止,Q2关断,Q3导通,从而选择电池作为系统电源。系统(负载)电压可通过VS脚上的电阻分压器进行监控,以便在Q2出现短路而适配器电源仍存在时,对系统电源提供保护。

c.电池充电操作

bq24700/1中的固定频率PWM控制器可用于为电池充电提供闭环控制。电池电压VBAT、电池充电电流IBAT和适配器充电电流IADPT三个控制参数,既可由键盘DAC或IC5V参考电压外部的电阻分压器来进行编程,也可利用内部参考电压(1.25V)来编程。适配器电流和电池充电电流可分别利用低值电阻R5和R6来检测,并被反馈到IC内部相应的跨导(gm)放大器上。电池电压则通过R7和R9组成的分压器检测,并将检测信号反馈到IC内部的第三个gm放大器。

(1)电池充电电压设定

电池充电调整电压VBAT可利用R7和R9组成的电阻分压器并通过IC的BATP(13)脚反馈到电池误差放大器,只要BATSET(9)脚上的电压VBATSET大于内部0.25V的参考电压,电池充电电压便可设定为:

VBAT=[(R7+R9)/R9]·VBATSET

(2)电池充电电流设定

电池充电电流IBAT可由IC脚SRSET(5)上的电压VSRSET和传感电阻R6共同决定,公式如下:

IBAT=VSRSET/(25R6)

上式中,VSRSET的最大值为2.5V。该电压可通过来自VREF(5V)的电阻分压器获得,也可以从键盘控制器DAC得到。

图2bq24700组成的笔记本PC电池充电器电路

(3)适配器电流设定

适配器电流IADPT可通过IC脚ACSET(6)上的电压VACSET和适配器电流感测电阻R5来确定:

IADDPT=VACSET(25R5)

d.电池耗尽检测

电池耗尽电平可由通过电阻分压器施加到IC脚BATDEP(4)上的电压来设定。当电池放电过量时,ALARM(19)脚会发出报警信号并输出高电平,而并不关心电源选择。

当电池电压低于已耗尽电平的80%时,被认为是电池深度放电。当电池耗尽时,bq24700仍会停留在已选择的电源上。但是,bq24701却会在电池耗尽时,自动切换到适配器电源。表2列出了两种器件的可用选择方式。

表2bq24700/01的选择方式

条件

TA=-40~85℃选择器操作

bq24700bq24701

电池作为电源

电池移开自动选择AC适配器自动选择AC适配器

电池重新插入基于选择器

输入选择当适配器

移开时选择电池

AC适配器作为电源

适配器移开自动选择电池自动选择电池

适配器重新接入基于选择器输入选择基于选择器输入选择

已耗尽的电池条件

电池作为电源发送报警信号自动选择适配器发送报警信号

AC适配器作为电源发送报警信号发送报警信号

报警信号有效

耗尽电池条件耗尽电池条件

选择器输入不匹配于选择器输出

3.2主要元件选择

a.MOSFET选择

MOSFET的选择取决于栅-源电压、输入电压和输入电流。P沟道MOSFET的栅-源耐压至少是20V,击穿电压BVDSS≈VIN+1V。平均输入电流的计算公式如下:

IIN(avg)=[(VOIO)×1.2[/VIN

有效值电流由下式确定:

IIN(RMS)=IIN(avg)(1/D)1/2

式中,D为占空比。

b.肖特基二极管D1的选择

选择肖特基二极管D1时,要求D1必须能承受输入电压VIN。

c.电感的选择

为防止电流斜坡太陡而导致过大的纹波,电路中电感器的电感值不能过小,推荐按下式选取:

适配器范文篇7

关键词:地理信息服务;异构服务集成;适配器;ArcGISServer

随着大数据时代的到来,GIS的工作模式正在朝着以Web为中心的模式演变,使得地理信息网络服务成为研究热点。在地理信息网络服务不断渗入到日常生活的过程中,越来越多的地理信息以各种不同的方式被不同机构及部门等提供,多源异构数据日益增多,不同数据的处理也比较复杂,使得地理信息的共享集成和协同应用难以实现,人们无法广泛应用及共享地理信息[1]。同时由于不同机构及部门采用相对独立的空间数据模型和技术协议标准,形成了异构的地理信息Web服务和应用系统,对更大范围、更海量信息的共享造成一定阻碍。为解决此问题,实现地理信息的网络共享,越来越多的部门开始采用SOA架构,利用WebServices技术来建立开放的地理空间信息访问接口,为人们提供各种数据及处理服务[2-4]。同时,目前国内外很多部门或组织开始尝试开发或设计服务集成模型,除多数采用SOA架构及WebServices技术外,也有少部分基于语义、基于多协议或ESB技术等各种不同的方法,但大部分是进行同构服务集成,关于异构服务集成的研究并不是很多[5-9]。而当下人们正在尝试建立云端GIS,为广大用户提供一个真正意义上的内容、应用、开发、共享和协同的平台,该网络平台的特点决定了异构服务集成的必要性,可更好地实现GIS数据和功能的共享,进而实现更广泛的地理信息网络服务,并满足用户更加多样化的地理信息应用需求。

1总体研究思路

由于不同领域和部门的Web服务开发者在描述服务时,使用不同的语义模型、空间数据模型以及服务描述方式,导致对外提供的接口不同,就产生了异构服务[10]。对于传统意义上的异构服务集成,请求方必须知道响应方的技术实现细节才可进行访问,其弊端是扩展性差,无法适应灵活多变的互操作要求。与传统集成方式不同,WebService系统在进行异构服务集成时,将现有的GIS系统中的功能改造成Web服务,为服务集成和管理提供了一种技术支撑,一个系统可以跨平台、跨语言方便地调用远程对象,通过WebService的对象复用实现更高层次的对象复用。例如,可以将现有的多个不同供应商提供的Web地图服务集成起来,形成一个新的、面向专题的地图服务。本文的重点在于研究Web环境下基于WebService体系结构的异构服务集成技术。首先,研究切片服务原理,对原始数据图像进行分割编码,通过编程实现对相应图片的调用,切片服务;接着,在Erdas平台上利用完全采用OGC的接口和参数的ApolloWeb地图服务,在ArcGIS平台上应用ArcGIS自定义的接口和参数的Web地图服务,再将3个来自不同供应商提供的地图服务集成,形成一个新的、面向专题的地图服务。同时,为了更好地分析评价该集成模型的集成效率及处理效果等,又做了一个两种异构服务集成的对比实验,通过调用mapboxjavascriptAPI的方式将基于切片服务实现的mapbox地图与通过ArcGISServer的web地图服务集成。通过对两种异构服务集成方式的比较,分析各自的优缺点,进行可行性评价。该研究可以使分布的地理空间信息服务高效集成,实现功能更加完善的WebGIS,为Web环境下的在线地理空间信息应用提供一种可行的、现实的方法。同时,可将已开发的服务集成作为大型原型系统的一部分,通过更好的集成异构服务,为处理服务提供数据支持,为具体的地理信息工程应用的分析评价提供对比,具有重要理论和实际意义。本文的总体研究思路如图1所示。图1异构服务集成的总体研究思路Fig.1Generalresearchideaofheterogeneousserviceintegration通常在进行Web地图服务集成时,其异构主要表现在显示和操作的时候,具体有以下几点:1)不同平台提供的地图不能简单地叠加在一起显示;2)各种地图即使能够实现叠加,其的操作命令,也不能得到每一个服务的响应;3)不同地图的操作命令即使能够得到响应,返回的消息格式也不一定相同,最终导致客户端不能理解返回的信息到底是什么。为解决这些问题,在充分研究了适配器原理后,提出面向服务描述的适配器,开发出可以将多种不同平台的异构服务集成的适配器模型,如图2所示。

2异构地理信息服务集成实验与分析

2.1服务集成实验一

1)集成框架在进行异构服务集成时,采用已设计的服务适配器模型,遵从事先定义的服务契约,将异构地理信息Web服务统一接口、统一协议、统一服务描述,从而为用户提供统一的接口,为用户提供更好的在线地理服务,进行更精确的服务分析。Erdas及ArcGIS的地图服务以及切片服务虽然都是地图服务,却属于异构服务。Erdas采用OGC的接口与参数,遵循OGC标准Web地图服务;切片服务根据自身特点,进行接口参数定义,并MapService;ArcGIS为满足用户需求,提供更广泛的Web服务,并未完全按照OGC标准,而是开发了自己的一套接口和参数,因此其适配器的开发相对较难。为了更详细地阐述如何通过适配器实现统一接口,集成统一的地理信息Web服务,仅以ArcGISServer适配器为例,说明适配过程。利用ArcGISServer的适配器,把提前定义好的统一的接口实现,ErdasApolloWMS和切片服务也用相同的方式实现。先把每一个原子服务定义好服务接口和消息格式,定义好相关实现方式,具体包括参数和返回的数据格式,所有服务接口都应该满足要求。2)ArcGISServer适配器处理流程及效果展示基于ArcGISServer适配器处理流程如图3所示。

2.2服务集成实验二

本实验主要对开源提供的mapbox与ArcGISServer的WMS两种异构服务进行集成,两种地图服务基于不同的平台,具有各自不同的接口,通过调用应用程序编程接口API来实现服务集成。此实验主要是为了与基于适配器模型集成的异构服务进行比较,通过对两种不同的技术实现的异构服务集成进行比较,分析各自的优缺点。实验首先在ArcGISServer中已转换过坐标系的加拿大冰层数据。然后在网上查找MapboxJavascriptAPI,选择一张开源Mapbox作为底图,将已的WMS加载。最后,设计IceWeeklyCharts及IceWeeklyPoints两种数据显示模式,加载地图后设置图层样式。

2.3对比分析

实验一与实验二通过不同的方式进行异构服务集成,意在探索方法的优劣性。通过开发适配器模型实现异构服务的集成,具有统一的公共接口,统一的服务描述,去除服务描述与底层技术的耦合,实现多源地理信息Web服务的集成与共享,可以集成多平台多类型的异构服务。集成模型可用于大型平台,为用户提供更快捷、更全面的服务,解决了传统空间数据服务在数据访问、查询接口和应用模式等方面存在的难题,并可以减少由于底层平台变化导致的服务实现方式的变更。用户可以根据自己的需求对Web服务进行按需动态集成,参考各种功能相似的服务,综合考虑各种要素,实现最优评价。相比较于逐一调用分布的服务,集成服务的优势显而易见,不仅能在同一界面显示,且能减少Web服务开发、集成和维护的精力、时间和开销。将各个业务系统之间存在很多重复的功能与数据集成,提高业务上运作效率。功能更全面,维护更简单,获取更便捷。实验二通过调用在线地图提供的API进行集成,虽然程序更简单一些,但限于很多地图服务API获取困难,应用并不广泛,对于大型平台的借鉴意义不是很大,与之相比,实验一基于适配器模型开发的集成机制,具有“一次开发,永久使用”的特点。具体分析见表1。

3结束语

本文研究基于适配器原理的异构地理信息服务集成,从服务器端进行开发设计,并做了对比试验,但限于现有技术水平,仍然还有很多的问题没有解决,以下几个方面可以作为本研究的进一步研究方向:1)利用适配器模型只是实现异构服务的集成的一种方法,其开发需要较高的编程技术及较扎实的理论基础知识,可进一步研究是否存在更简单更高效的集成模型。2)为减少重复投资,节省时间成本,将功能相似的服务进一步集成,使得这些服务能够互相弥补彼此的不足,更好地适应当前多样化地理信息需求,满足区域、行业、部门间协作等方面的要求,由此可知,本研究应更注重提高开发效率。3)基于适配器的服务集成模型明显适用于组织机构内部开发的平台,是否适用于公有云GIS平台还需进一步研究。

参考文献:

[1]吴信才.面向网路的新一代地理信息系统[M].北京:科学出版社,2009.

[2]HEALEYRG,ELVEJD.IntegratingGISanddataware-housinginaWebenvironment:AcasestudyoftheUS1880Census[J].InternationalJournalofGeographicalInformationScience,2007(21):603-624.

[3]杜云艳,冯文娟,何亚文,等.网络环境下的地理信息服务集成研究[J].武汉大学学报:信息科学版,2010,35(3):347-349.

[4]武昊,廖安平,彭舒.面向服务契约的地理信息Web服务自适应集成方法研究[J].测绘通报,2012(1):74-77.

[5]高升,陈能成,龚健雅,等.基于多协议的地理信息服务集成[J].测绘信息与工程,2006,31(6):16-18.

[6]于海龙,邬伦,刘瑜,等.基于WebServices的GIS与应用模型集成研究[J].测绘学报,2006,35(2):153-159.

[7]郭广军,刘安丰,郭育青,等.基于ESB的Web服务集成技术[J].计算机应用与软件,2008,25(11):283-285.

[8]林怀恭,聂瑞华,罗辉琼,等.基于SOA架构的服务集成技术的研究[J].计算机技术与发展,2009,19(7):141-144.

[9]刘勇,李成名,印洁.语义地理信息集成框架[J].测绘科学,2010,35(5):74-76

适配器范文篇8

【关键词】网络分层WinDis32技术网络信息截获数据帧NDIS网络适配器

1.前言

随着计算机网络技术的发展,各类网络规模的扩大,远程访问的增加,虚拟专用网(VPN)的出现和Internet的普及,网络安全性已成为计算机网络领域一门重要的研究学科。

网络监控是保障网络安全性的基本措施之一。网络监控,用于监测网上流动信息,并对网络信息给予适当控制。网络监控,可用于调试网络应用程序,判断应用程序是否正确地发送或接收了数据包。网络监控,还可用于监视网络信息,杜绝不健康站点的不健康内容,维护网络环境。应用于安全防范,可监视我方信息内容、保障网络安全,截获情报、分析怀有敌意方的网站。在计算机网络上实施有效的攻击与保护,是网络监控技术在军事上的重要发展方向之一。

本文论述的网络通信实时监测的实现,是用于特殊目的的数据通信程序设计的突破口,是网络监控技术的基础部分,其实现基于网络体系结构与WinDis32技术。

2.网络体系结构

现代计算机网络设计是按高度的结构化方式进行的,国际标准化组织(ISO)为更广泛的计算机互联制定了标准化的开放系统互联(OSI)网络体系结构,如图1所示。

OSI参考模型用结构描述方法,即分层描述的方法,将整个网络的通信功能划分为七个部分(也叫七个层次),每层各自完成一定的功能。由低层至高层分别称为物理层、数据链路层、网络层、传输层、会话层、表示层和应用层。两台网络主机之间进行通信时,发送方将数据从应用层向下传递到物理层,每一层协议模块为下一层进行数据封装,数据流经网络,到达接收方,接着再由下而上通过协议栈传递,并与接收方应用程序进行通信。

在通用网络中,数据链路层由网络适配器实现,本文中网络通信监测的立足点在于数据链路层,基于电缆是固有的广播性介质,通过对网络适配器的控制,实时截获与分析经过网络适配器的所有网上流动信息。

3.WinDis32技术

WinDis32全称为Win32NDIS(NetworkDriverInterfaceSpecification)网络驱动接口规范,用于开发Windows产品,可在Windows9X和WindowsNT上直接访问NDIS媒体访问控制(MAC)驱动接口。图2显示了Windows网络驱动组件与Win32NDIS结构组件:

图2.Windows网络驱动组件与Win32NDIS结构组件

WinDis32网络组件由四部分组成:NDIS适配器、PCANDIS5NDIS协议驱动、W32N50WinDis32APIDLL、WinDis32应用程序。WinDis32应用程序调用W32N50.DLL动态链接库提供的API应用程序接口,通过NDIS协议驱动模块,实现对NDIS适配器进行的存取操作。网络驱动接口规范NDIS的主要特征是所有适配器相关驱动均由NDIS接口打包,例如,最底层NDISNIC驱动不能对网卡直接执行I/O,它通过NDIS打包服务来访问硬件;高层WindowsNDIS网络组件使用NDIS打包界面与适配器相关驱动通信。只有NDIS协议驱动可以调用NDIS打包,访问NDIS适配器。

WinDis32应用程序接口函数包括:W32N_OpenAdapter(),打开一个已被命名的NDIS适配驱动器,若操作成功,则生成一个面向适配器对象的WinDis32适配器句柄,这一句柄被随后多个在该适配器上操作的W32N_XXX函数所用;W32N_CloseAdapter(),关闭已打开的适配器句柄;W32N_PacketRead(),数据帧读操作;W32N_PacketReadEx(),数据帧异步读操作;W32N_PacketSend(),发送数据帧操作;W32N_PacketSendEx()、W32N_MakeNdisRequest()等等。

WinDis32技术使得从Win32应用层进行NDIS请求如同在一个内核模式的驱动器内部进行请求一样简单,并支持多个网络适配器同时打开,完成各自的信息发送与接收。

4.网络信息监测的实现

网络信息监测程序分为信息截获与信息分析两大部分,其中信息截获程序流程如图3所示,采用多进程与多线程技术,完成数据的实时截获。

其中网络适配器列表通过读取系统注册表生成;网络适配器详细信息包括适配器型号、网络适配器物理地址、传输最大帧、传输速率以及机内标识符,通过函数W32N_MakeNdisRequest()获得。

协议过滤部分是包括PCAUSA端口的PCANDIS5协议驱动,BPF过滤器是由UNIX环境到Windows的模拟机制,为Win32应用程序提供了一种普通而又便利的机制,可过滤指定协议,由协议驱动执行,拒绝不想要的数据帧。支持协议包括:传输控制协议TCP、互连网协议IP、地址解析协议ARP、反向地址解析协议RARP、互连网控制报文协议ICMP、互连网组管理协议IGMP、NovellSPX/IPX协议IPX、用户数据报协议UDP、NetBEUI协议、AppleTalk协议。

信息分析部分利用已获知的媒体访问控制协议,提取出数据帧中的有效域值,如源主机物理地址、目的主机物理地址、帧长度等。并同时为每一被截获的数据包打上时标,注上序列号,为下一步数据重组提供可靠依据。

接收数据帧显示与信息统计结果范例如下:

包序列号:0000000032时间:0005860470msec长度:54/54

Ethernet目的:00.40.05.39.A2.B0源:00.00.B4.86.74.FA类型:0x0800

000000:00400539A2B00000:B48674FA08004500.@.9......t...E.

000010:0028260340002006:A3256464647A6464.(&.@...%dddzdd

000020:64650406008B0040:BF14006C24B95010de.....@...l$.P.

000030:223812EA0000:"8..............

包序列号:0000000033时间:0005860764msec长度:109/109

Ethernet目的:00.40.05.39.A2.B0源:00.00.B4.86.74.FA类型:0x0800

000000:00400539A2B00000:B48674FA08004500.@.9......t...E.

000010:005F270340002006:A1EE6464647A6464._''''.@....dddzdd

000020:64650406008B0040:BF14006C24B95018de.....@...l$.P.

000030:2238DEC600000000:0033FF534D421A00"8.......3.SMB..

000040:0000000000800000:0000000000000000................

000050:00000308252D0308:014C080108008010....%-...L......

000060:0000100000000000:0000000000................

包序列号:0000000034时间:0005860766msec长度:1514/1514

Ethernet目的:00.00.B4.86.74.FA源:00.40.05.39.A2.B0类型0x0800

000000:0000B48674FA0040:0539A2B008004500....t..@.9....E.

000010:05DC640B40008006:FF68646464656464..d.@....hdddedd

000020:647A008B0406006C:24B90040BF4B5010dz.....l$..@.KP.

000030:20B786DA00000000:10007E8B77DAD2D0.........~.w...

000040:D727599A8F18D377:15D56C860F2C623E

...

停止数据帧接收

应用统计:

已接收数据帧数目:34

已发送数据帧数目:0

5.进一步研究与发展

本文所研究的网络信息监测属于计算机网络系统安全对策研究的一部分,属于网络信息监测的基础性研究。以此研究成果为基础,可进行进一步的软件开发,从而实现网络通信状况实时监测、情报获取、网上各站点地址分析、站点类型分析,为计算机网络的安全维护提供监测手段,因此,具有特别的意义。

参考文献

1.PCAUSAWinDis32V5.0文档1998.3

2.刘锦德等计算机网络大全电子工业出版社1997.7

3.KrisJamsa等INTERNET编程电子工业出版社1996.5

4.DavidJ.KruglinskiVisualC++技术内幕清华大学出版社1996.5

5.廖湖声面向对象的Windows程序设计基础人民邮电出版社1996.2

6.张国峰C++语言及其程序设计教程电子工业出版社1992.12

7.汤子瀛等计算机操作系统西安电子科技大学出版社1998.4

8.刘彦明等实用网络编程技术西安电子科技大学出版社1998.4

适配器范文篇9

关键词:Lonworks;神经元芯片;并行口I/O模式;TMPN3150

1引言

1993年美国Echelon公司发明了Lonworks技术,该技术提供了一个开放性很强且无专利权的底层通讯网络——局部操作网络(LON)。该通信协议采用Lontalk协议,网络上的节点采用神经元芯片。神经元芯片(Neuron芯片)是Lonworks技术的核心,它含有Lontalk协议的固态软件(简称为固件),因而能进行可靠地通讯。为了实现Neuron芯片与I/O设备之间的通信,Neuron芯片的11个引脚可定义为34种I/O对象,其中包括并行I/O对象、串行I/O对象、直接I/O对象、定时/计数器输入对象等。用户可根据实际应用的需要在应用程序中定义不同的I/O对象,然后调用ioin或ioout等函数来实现对I/O对象的数据读写操作,即实现Neuron芯片与I/O设备之间的通信。文中介绍了神经元芯片的一种I/O应用模式,即并行I/O模式(ParallelI/OMode)。该神经元芯片采用日本东芝公司的TMPN3150芯片。

RS-232标准是一种常见的电气和通讯接口标准,而Lonworks现场总线在网络通讯方面具有突出的优点(如网络物理层支持多种通信介质,支持多种网络拓扑结构等),它以其突出的统一性、开放性及互操作性受到各行各业的重视,并且作为现场总线中的佼佼者在国内各个领域的测控系统中广泛流行。因此,将现场设备的RS-232信号转换为包含LonTalk协议的信息来实现与其它LON节点以及LON网络管理设备之间的通讯,具有拓宽LON应用范围的意义。笔者基于神经元芯片的并行I/O应用模式设计了一个适配器,从而实现了RS-232通信网络与Lonworks现场总线的集成。

图1基于TMPN3150的RS-232网络与Lonworks现场总线的适配器硬件框图

2神经元芯片的并行I/O应用模式

通过定义并行I/O对象,Neuron芯片可以实现与外接各类微处理器之间的双向数据通信,并行口的速率可达3.3Mbps。并行I/O对象利用Neuron的11个I/O口进行通信,其中IO0~IO7为8根数据线,IO8~IO10为控制信号线。并行口的工作方式有3种,即master、slave-A和slave-B。在不同模式下,IO8~IO10这3根控制信号线的意义不同。笔者应用的是slave-A模式,即从A模式。

在从A模式中,IO8为片选信号线(CS),IO9为读写信号线(R/W),IO10为握手信号线(HS)。在此模式中,应将Neuron芯片作为从机(slave),微处理器作为主机(master),主机和从机之间的数据传输可通过虚拟的写令牌传递协议(virtualwritetoken-passingprotocol)来实现。主机和从机交替地获得写令牌(writetoken),拥有写令牌的一方既可以写数据(不超过255个字节),也可以不写任何数据而传送一个空令牌。传送的数据要遵从一定的格式,即在要传送的数据前面加上命令码和所传数据的长度,命令码有CMD_XFER(写数据)、CMD_NULL(传递空令牌)、CMD_RESYNC(要求从机同步)、CMD_ACKSYNC(确认同步)等四种,最后以EOM字节结束。其中写数据和传递空令牌的格式分别为:

在通信以前,主机和从机之间应先建立握手信号,即HS信号有效(由TMPN3150的固件自动实现),然后,主机再送一个CMD_RESYNC命令要求从机同步。当从机接收到这个信号后,则发送CMD_ACKSYNC以表示同步完成,可以通信了。此后,写令牌就在主机和从机之间无限的交替传递,拥有写令牌的一方可以向数据总线上写数据,即主机可以往从机写数据,从机也可以将数据传往主机。

3实例应用

基于上述神经元芯片TMPN3150的并行I/O应用模式来实现RS-232通信网络与Lonworks现场总线的集成适配器主要由Lonworks控制模块和MCS51系列的P89C51单片机两大部分组成。其中Lonworks控制模块用于Lonworks现场总线的网络通信管理,P89C51和MAX232芯片则用来实现RS-232通信网络的链路和协议。其硬件框图如图1所示。

适配器的软件编写应包括两个部分。一部分为对主机程序的编写,可用C语言编写。因为从机(TMPN3150芯片)的并行模式是在芯片内部定义的,它遵从虚拟的写令牌传递协议,所以需要编写P89C51程序来模拟TMPN3150的I/O并行口的从A模式,该程序主要完成与TMPN3150的同步、握手、令牌的传送以及并行口数据的读写等四项工作。另一部分是编写从机程序,该程序应使用神经元芯片的编程语言——NeuronC语言来编写。当从机将并口得到的报文进行解析后,本系统将利用NeuronC的消息传送机制将解析的消息传送给适配器下层的应用节点,同时将适配器下层的应用节点以消息形式传送上来的数据或信息所构成的P89C51能识别的报文通过并口传送给P89C51。

适配器范文篇10

进行图形程序设计时,还须考虑视频接口的一个重要特性——虚拟终端功能,因为它允许控制几个独立的图形应用窗口,允许多个应用程序在同一个终端上进行切换。本文提供针对IBM标准终端对虚拟终端进行有效管理的手段。

微机UNIX直接视频图形程序设计有两种方法,一种是利用设备驱动程序(见参考文献1),另一种是针对IBM标准终端进行编程,本文介绍后者。

一、图形程序设计

1.检测视频适配器

视频显示器是由视频适配器硬件控制的,视频适配器决定了图形方式下显示图形的分辨率及可能的颜色[2]。利用系统调用ioctl中的CONS-CURRENT命令可以检测到当前的视频适配器,即:

ioctl(0,CONS-CURRENT,NULL)

返回-1时表示出错,即没有相应的视频适配器硬件,如果检测到VGA卡则返回值为VGA,如果检测到EGA卡则返回值为EGA,……。

2.初始化图形系统

初始化图形必须完成下列任务。

(1)获取当前的视频显示方式

ioctl的CONS-GET命令用来判断当前适配器的显示方式,即:

ioctl(0,CONS-GET,NULL)

它返回显示方式的值,这些值在包含文件vtkd.h中均有定义,如:SW-VAG640x480C为VGA适配器设置成640x480分辨率彩色图形模式。

(2)设置图形模式

直接将图形模式值放入ioctl中的命令项即可设置相应的图形模式,如ioctl(0,SW-VGA640x480C,NULL)

将VGA适配器设置成640x480分辨率的彩色图形模式。

(3)获取图形模式下视频缓冲区物理地址

利用ioctl的MAPCONS命令可以实现此功能,即:

char*scrnmem;

scrnmem=(char*)ioctl(0,MAPCONS,NULL)

所有实现基本图素的操作都将针对scrnmem进行,scrnmem就是EGA/VGA相应的四个位平面的重叠地址,有关EGA/VGA的结构可参阅[2]。

3.实现基本图素

DOS操作系统下,对EGA/VGA的各种视频I/O寄存器进行操作是很方便的,可以直接使用汇编语言in和out指令进行读写。然而,UNIX操作系统下,对物理硬件的访问都是由UNIX系统核心和设备驱动程序管理的,要访问EGA/VGA的各种I/O寄存器,必须获得对其访问的特权,为了实现这种功能要求,可以使用下列ioctl系统调用方式:

ioctl(0,VGA-IOPRIVL,1)获取VGA的各种I/O寄存器的访问特权

ioctl(0,EGA-IOPRIVL,1)获取EGA的各种I/O寄存器的访问特权

UNIX操作系统基本上是采用C语言编写的,只是在低层的系统内核方面才使用低级的汇编语言,遵循这一原则,对EGA/VGA的I/O寄存器的访问可以采用汇编语言,而实现图形系统的基本图素则采用C语言。

如果用户的UNIX系统中已有inb()和outb()函数(嵌入在/usr/include/sys/inline.h中),则可以直接使用它们完成对各种I/O寄存器的读写,否则,必须编写下列低级汇编语言例程:

/*向一端口输出一字节*/

/*从一端口输入一字节*/

voidoutb(intport,ucharvalue)

{

-asmpushedx

-asmmovedx,port

-asmmoval,value

-asmoutdx,al

-asmpopedx

}

ucharinb(intport)

{

-asmpushedx

-asmmovedx,port

-asminal,dx

-asmpopedx

}

基本图素一般包括:设置颜色,对调色板的操作,画点、线、弧、矩形、圆、椭圆、多边形、画扇形、饼图,任意图形填充,多边形填充,保存屏幕,恢复屏幕等,这些操作均可用C语言实现,细节问题可参阅[2]。

4.关闭图形系统

退出图形系统之前必须恢复EGA/VGA各I/O寄存器的值,并将显示模式恢复到进入图形模式之前的模式。采用下列ioctl调用实现:

ioctl(0,MODESWITCH|oldmode,NULL)

oldmode是进入图形方式之前获取的方式,UNIX系统中,获取的方式和设置的方式之间的关系为:

设置方式值=获取方式值|MODESWITCH

二、虚拟终端的使用

虚拟终端(VirtualTerminal,简称VT)加强了UNIX系统V/386的接口功能,它不仅允许单个用户开发一个图形应用软件,而且允许多用户、多道程序在同一个物理终端上运行,在开始一个用户的应用程序之前不必停止另一个应用程序,而且各个用户之间可以互相切换。

虚拟终端有两种操作方式[1],一种是自动操作方式(VT-AUTO),这是默认情况,比较简单,应用程序并不了解终端用户接受或放弃当前VT的请求,这意味着被切换掉的进程的任何输入输出都可能丢失。另一种方式是进程控制方式(VT-PROCESS),该方式支持应用程序与其它正在使用VT的进程之间同步,应用程序可以负责接受或放弃使用VT。

[1]中介绍了以进程方式控制VT的过程,并以设备驱动程序方式介绍了接受和放弃对VT控制的信号处理例程。本文给出针对IBM标准终端编制VT的程序和相应的信号处理例程。

/*设置虚拟终端*/

voidsetvirtualterm(void)

{

structvt-modevtmode;

signal(SIGUSR1,release-disp);//release-disp为放弃VT的信号处理例程

signal(SIGUSR2,acquire-disp);//acquire-disp为接受VT的信号处理例程

vtmode.mode=VT_PROCESS;//设置进程控制方式

vtmode.relsig=SIGUSR1;

vtmode.acqsig=SIGUSR2;

if(ioctl(0,VT-SETMODE,&vtmode)==-1)exit(1);//出错即终止此进程

}

/*放弃VT的信号处理例程*/

voidrelease-disp(void)

{

signal(SIGUSR1,release-disp);

保存整个图形屏幕于内部缓冲区videobuf中;

ioctl(0),MODESWITCH|oldmode,NULL);

//oldmode为进入图形模式之前的显示方式

ioctl(0,VT-RELDISP,VT-TRUE);

//VT-TRUE表明同意放弃VT,如果此项为0,则表示拒绝放弃VT.

}

/*接受VT的信号处理例程*/

voidacquire-disp(void)

{

signal(SIGUSR2,acquire-disp);

ioctl(0,newmode,NULL);//newmode为应用程序所处的图形模式

scrnmem=(char*)ioctl(0,MAPCONS,NULL);

//重新获取图形缓冲区的物理地址

从videobuf中恢复整个图形屏幕,并释放videobuf;

ioctl(0,VT-RELDISP,VT-ACKACQ);//VT-ACKACQ表明接受VT

}

在微机UNIX操作系统下,针对EGA/VGA进行直接视频程序设计,独立开发一个图形程序包,不仅小巧方便,而且可以重用以前在DOS下开发的图形应用程序。笔者在SCOUNIX系统下开发了一个小的低层图形软件包,许多以前的DOS图形应用程序都可以移植到UNIX系统下来。

另外,本文介绍的程序在使用前还应包含下列文件,即:

#include<stdio.h>

#include<sys/types.h>

#include<sys/console.h>

#include<sys/vtkd.h>

#include<termio.h>

#include<sys/signal.h>

分配空间时还应加上#include<malloc.h>

参考文献