I/O操作十篇

2024-08-05

I/O操作 篇1

无线传感器网由大量传感器节点组成,传感器节点负责对某区域内的某些特定数据进行采集,并将监测数据通过某一路径传输给汇聚节点(Sink节点)。Sink节点再将数据经由互联网或卫星传输给用户。整个无线传感器网络结构中,Sink节点是数据汇聚的中心,它负责将监测数据传输给数据采集终端,数据采集终端可以是一个采集设备或一个采集软件。Sink节点与数据采集终端之间的I/O问题成为数据传输的关键所在。

本文介绍了一个Tiny OS系统下的I/O控制程序,用来控制对Sink节点的输入和输出,并在CC2430芯片上实现了该程序。对该程序进行一定的扩展便可以实现对Sink节点与节点通信的控制。

1 测试平台的选择

1.1 Tiny OS操作系统

Tiny OS是美国加州大学伯克利分校专门针对无线传感器网络设计的开源操作系统,它是一个事件驱动的、基于组件的无线传感器网络操作系统。Tiny OS系统、库及应用程序都是用nes C语言写的,这是一种新的用于编写结构化的基于组件应用程序的语言。目前已经成为WSN研究领域实施上的标准平台。

Tiny OS全构件化、事件驱动、无内核和用户空间区分的设计原则满足了WSN的特殊需要。应用程序根据需要原配、修改和创建构件,使系统开销最小化。构件与构件之间通过Command和Event相联系,Command向下调用,Event向上调用。Tiny OS没有线程概念,不存在阻塞,也无需维护进程的上下文,只用维护返回栈。操作的调用与完成是分离的过程。Command的调用从不阻塞,返回时采用Event方式。因此,Tiny OS被称为“事件驱动”的操作系统。

1.2 nes C语言

nes C具有类似于C语言的语法,但支持Tiny OS的并发模型,同时具有机构化机制、命名机制,能够与其他软组件链接在一起从而形成一个鲁棒的网络嵌入式系统。其主要目标是帮助应用程序设计者建立可易于组合成完整、并发式系统的组件,并能够在编译时执行广泛的检查。

nes C程序的基本单元是组件,在nes C语言的定义中,存在两种不同功能的组件:模块(Module)和配件(Configuration),一个组件包括定义和实现两部分。组件间的交互是通过组件的规范元素来实现的,包括接口实例、命令和时间等,可由组件提供(Provided),也可被组件使用(Used)。

接口是一系列声明的有名函数集合,同时接口是连接不同组件的纽带。nes C中的接口是双向的,这种接口实际上是提供者组件和使用者组件间的一个多功能交互通道。一方面接口的提供者实现了接口的一组功能函数,称为命令(Commands);另一方面接口的使用者实现了接口的一组功能函数,称为事件(Events)。

模块是具体描述实现逻辑功能的组件,主要包括命令、事件、任务等的具体实现。必须实现模块提供接口声明的全部命令和模块使用接口声明的所有事件。

配件是具体描述组件间连接关系的组件,不同组件接口之间的关系是专门通过配件描述其实现过程。

2 CC2430芯片I/O原理

CC2430两个串行通信接口USARTx(这里的x是USART的编号,其数值为0或者1)能够运行于异步UART模式或者是同步SPI模式。UART模式提供异步串行接口,全双工传送。当Ux CSR.MODE设置为1时,就选择了UART模式,UART操作由USART控制寄存器Ux UCR以及状态寄存器Ux CSR来控制,Ux BAUD用于设置速率。

2.1 UART发送

当收/发数据缓冲器Ux BUF写入数据时,该字节数据会发送到输出引脚TXDx。字节传送过程中Ux CSR.ACTIVE位保持为1。Ux CSR.TX_BYTE位自动设为1表示数据传送结束。收/发数据缓冲寄存器准备接收新的发送数据时,就产生一个中断请求。该中断在传送开始之后立刻发生,使得字节正在发送时,新的字节能够装入数据缓冲器。

2.2 UART接收

设置Ux CSR.RE位为1使能数据接收。在UTART从输入引脚RXDx寻找有效起始位的过程中Ux CSR.ACTIVE保持为1,当检测出有效起始位时,收到字节传入接收寄存器,Ux CSR.RX_BYTE位自动设置为1,然后产生接收中断。通过寄存器Ux BUF读取收到数据字节的同时Ux CSR.RX_BYTE位由硬件清0。

2.3 UART硬件流控制

Ux UCR.FLOW设置为1使能硬件流控制,当接收寄存器为空且接收使能时,RTS输出为低,在CTS输入变低前不会发生字节传送。

2.4 UART特征格式

如果寄存器Ux UCR中的BIT9和奇偶校验位设置为1,那么奇偶校验产生而且检测使能。奇偶校验计算出来,作为第9位来传送。在接收期间,奇偶校验位计算出来而且与收到的第9位进行比较。如果奇偶校验出错,则Ux CSR.ERR位设置为1。当Ux CSR读取时,Ux CSR.ERR位清零。要传送的停止位的数量设置为1或者2,这取决于寄存器位Ux UCR.STOP。接收器总是要核对一个停止位。如果在接收期间收到的第一个停止位不是期望的停止位电平,就通过设置寄存器位Ux CSR.FE为1,发出帧出错信号。当Ux CSR读取时,Ux CSR.FE位清零,当Ux CSR.SPB设置为1,接收器将核对两个停止位。

2.5 硬件选择及解决方案

根据上述CC2430 I/O接口原理,在UART模式下,发送/接收数据、数据传送的停止与启动均由Ux CSR和Ux UCR控制。选用CC2430芯片板和编程采集板组合作为Sink节点,如图1所示。对Sink节点的I/O控制即转换成对CC2430芯片的I/O控制。

3 I/O控制程序

通过键盘输入指令对Sink节点的I/O进行控制。该程序的功能是通过键盘输入指令对Sink节点的I/O接口进行控制,键盘输入1时切换Sink节点板上的蓝色LED灯,输入2时切换黄色LED灯,并将两个LED灯的状态信息输出到计算机终端上。将该程序烧录到CC2430芯片上,接通Sink节点和计算机就可以实现该功能。

3.1 程序流程图

程序流程图如图2所示。

3.2 程序结构

3.2.1 实现I/O控制的配件文件

配件中定义了I/O控制的模块、Tiny OS主模块并提供了接口,是I/O控制的顶层配件。

3.2.2 模块文件

模块接口声明:

块中的接口和函数见表1。

3.3 运行结果

CC2430核心板插到Sink节点板上,执行make antc3install编译工程文件,并将程序烧录到CC2430中。进入计算机超级终端,打开超级终端设置,进行如下设置:选择COM1,波特率设为9 600,数据流控制选择“无”。

将网关板的串口通过串口线与计算机的串口连接起来,通过串口输入1、2切换控制LED灯亮、灯灭,其状态输出到计算机的超级终端上,如图3所示。

4 结语

无线传感器网络(WSN)综合了传感器技术、嵌入式计算技术、现代网络、无线通信技术及分布式信息处理技术,是备受关注的新兴前沿研究热点,可以实现人与自然物以及物与物的通信和计算。本文所述的程序可对无线传感器网络Sink节点的I/O进行控制以及一定的扩展和改进便可以实现对Sink节点与节点通信和数据传输的控制。例如:加入点对点射频模块可以实现Sink节点与节点的通信,加入温湿度采集模块可以实现温湿度的采集和回传。这对组件无线传感器网具有一定的参考价值。

参考文献

[1]孙利民,李建中,陈渝,等.无线传感器网络[M].北京:清华大学出版社,2005.

[2]李晓维,徐勇军,任丰原.无线传感器网络技术[M].北京:北京理工大学出版社,2007.

[3]赵得斌,陈远知,杨仕勇.无线传感器网络操作系统TinyOS[J].中国传媒大学学报:自然科学版,2008,15(4):71-75.

[4]BALLAL P M,TRIVEDI A C,GIORDANO V,et al.Dead lock-free dynamic resource assignment in multi-robot systemswith multiple missions:application in wireless sensor networks[J].Control Theory Application,2010,8(1):12-19.

[5]LIU Xiao-lu,ZHOU Shu-min.Evaluation of several time syn chronization protocols in WSN[C]//2010 International Conferenceon Information Science and Management Engineering.[S.l.]:IEEE,2010:488-491.

[6]HILL J,SZEWCZYK R,WOO A,et al.System architecturedirections for networked sensors[J].ACM SIGPLAN Notices,2000,35(11):93-104.

[7]郑伟,王钢.基于CC2430的配电网无线监测网络节点设计[J].现代电力,2010,27(6):79-82.

[8]王海,张能贵,高志刚.基于Ti nyOS的无线传感器网络节点[J].机电工程,2009,26(5):20-23.

[9]Texas Instruments.CC2430 data sheet(rev.2.1)[M].USA:Texas Instruments,2010.

I/O操作 篇2

在给学生讲定时器/计数器8253I/O接口芯片时, 我先给学生简单地说了一下8253I/O接口芯片的大体结构:由一个控制字寄存器和三个计数器构成;再说了一下它在PC机上的应用:计数器1作为实时时钟的输入信号, 计数器2作为扬声器的发声信号, 计数器3作为内存中的动态随机读写寄存器DRAM的刷新信号。讲完这些知识后, 学生就提出问题来:我们能否对通过8253I/O接口芯片编程, 使计数器2激励扬声器发出声音来?我说当然可以, 我立即用汇编语言编写出下列简单程序段, 并用计算机上的DEBUG软件运行之, 果然扬声器发出声音来。

OUT 61H, AL于是, 学生兴趣很大, 要求我分析说明这个程序段, 我的分析说明如下:这里的43H就是8253I/O接口芯片的控制字寄存器端口的地址, 控制字0A6H的机器数为10100110B, 其中每一位二进制数的控制意义是什么我都说明了;42H就是8253I/O接口芯片中确定计数2的计数周期的寄存器端口的地址;61H就是8255AI/O并行接口芯片的PB端口的地址, 3的机器数为00000011B, , 把这个机器数装入端口61H后, (PB0) 和 (PB1) 就都为1, (PB0) =1, 使GATE2=1, 便启动计数器2, (PB1) =1, 使与非门7408开通, 计数2的输出信号OUT2就顺利地通过7408而到达扬声器, 使其按照OUT2的频率来发声。

学生又问, 如果改变端口42H的数据, 是否就可以改变OUT2的频率, 从而改变扬声器的音调?我说当然可以;学生又问, 端口42H的数据和OUT2的频率有什么关系, 我就把这个关系给学生介绍了一下。然后, 我就根据学生的意思, 根据端口42H的数据和OUT2的频率的固定关系, 修改了一下上述程序段, 再用计算机上的DEBUG软件运行之, 果然扬声器又按照我们的意思、按照另一个频率发出声音来。

接着, 学生又问这又问那, 例如, 如果 (PB0) =0, 能关闭计数器2吗?;如果 (PB1) =0, 能关闭与非门7408吗等等。如果学生自己提出问题, 学生的注意力就非常集中, 老师讲起来就很有劲, 而且学生提出的问题几乎接近于本节课我希望学生掌握的全部知识, 于是我非常高兴地解答了学生提出的问题, 收到了非常好的教学效果。而且在刚下课后的休息时间, 学生们都纷纷去网吧自费上机做实验, 他们都象一个探索者, 去探索8253I/O接口芯片的性能。

我们给学生讲微机原理时, 要讲的I/O接口主要有8259A, 8255A, 8253A和8250。我结合学生对这些芯片要掌握的主要知识, 都相应地编了许多小程序, 能够让学生在运行、分析和理解这些程序时, 轻松愉快地掌握I/O接口的知识。

摘要:这篇论文是我对学生讲微机原理课时, 对I/O接口这方面的经验的总结, 因为对I/O接口这方面的知识, 老师普遍认为难讲, 学生也普遍认为难学, 本人作为一名微机原理课程的教师, 在讲解I/O接口时下了功夫, 总结了一个经验, 就是用对I/O接口的编程可以成功地代替对它的复杂实验, 而收到良好的教学效果。

关键词:接口,端口,控制字,寄存器,计数器,地址

参考文献

[1]雷丽文等编著:《微机原理与接口技术》, 电子工业出版社, 1997年。

[2]刘红丽主编:《微机接口实用技术教程》, 电子工业出版社, 2000年。

[3]顾元刚主编:《汇编语言与微机原理教程》, 电子工业出版社, 2003年。

[4]周细和黄文兰主编:《微型计算机机及其应用》, 华中理工大学, 1997年。

[5]王志军主编:《汇编语言程序设计》, 大连理工大学出版社, 2003年。

[6]李兆风编:《8088/8086汇编语言程序设计》, 中央广播电视大学出版社, 2000年。

[7]李德湖等主编:《十六位微型计算机原理及应用》, 电子科技大学出版社, 1995年。

串行通信与重叠I/O 篇3

关键词:串行通信;RS232;重叠;I/O;Win API

中图分类号:TN914文献标识码:A文章编号:1007-9599 (2010) 06-0000-02

Serial Communication and Overlapping I/O

Yu Lu,Li Qing

(PLA 91550 Troop,Dalian116023,China)

Abstract:The serial communication to facilitate easy,widely used in both military and civilian.In combination with the hardware described in detail in the Windows environment,use the Win API for asynchronous serial communication method.

Keywords:Serial communication;RS232;Overlap;I/O;Win API

一、前言

串行通讯在通讯领域被广泛应用,标准的RS232接口已成为计算机、计算机外设、交换机和许多通讯设备的标准接口。微机与微机、微机与外设、微机与程控交换机等都可以通过RS232接口进行方便的连接,以实现控制外设和传输数据等目的。

在Windows应用程序的开发中,我们常常需要面临与外围数据源设备通信的问题。笔者在实际工作中积累了一些经验,现结合硬件、软件,及需要注意的要点作一番探讨。希望对各位需要编写串口通信程序的朋友有一些帮助。

二、RS232串口标准

EIA-RS-232是美国电子工业协会正式公布的串行总线标准,也是目前最常用的串行接口标准。该标准规定:直接连接的最大物理距离为15m,通讯速率低于20kbps。

由于RS232并未定义连接器的物理特性,因此,出现了DB-25、DB-15和DB-9各种类型的连接器,其引脚的定义也各不相同。表1介绍了其中两种连接器(DB-25,DB-9)。

RS232标准接口有25条线,4条数据线、11条控制线、3条定时线、7条备用和未定义线,但常用的只有9根。

目前较为常用9针串口和25针串口,当通信距离较近时,可以用电缆线直接连接,若距离较远,须附加Modem。最为简单且常用的是三线制接法,即地、接收数据和发送数据三脚相连。表2列举了RS232串口通信接线方法。

EIA-RS-232对电气特性、逻辑电平和各种信号线功能都作了规定。

在TxD和RxD上:

逻辑1(MARK)=-3V~-15V。

逻辑0(SPACE)=+3V~+15V。

在RTS、CTS、DSR、DTR和DCD等控制线上:

信号有效:(接通,ON状态,正电压)=+3V~+15V。

信号无效:(断开,OFF状态,负电压)=-3V~-15V。

三、Win32串口应用程序

(一)打开串口

Win32系统把文件的概念进行了扩展。无论是文件、通信设备、命名管道、邮件槽、磁盘、还是控制台,都是用API函数CreateFile来打开或创建的。该函数的声明为:HANDLE CreateFile(LPCTSTR lpFileName,//文件名DWORD dwDesiredAccess,//访问模式DWORD dwShareMode,//共享模式LPSECURITY_ATTRIBUTES lpSecurityAttributes,//通常为NULL

DWORD dwCreationDistribution,//创建方式

DWORD dwFlagsAndAttributes,//文件属性和标志

HANDLE hTemplateFile // 临时文件的句柄,通常为NULL

);

如果调用成功,那么该函数返回文件的句柄,如果调用失败,则函数返回INVALID_HANDLE_VALUE。

(二)串口配置和串口属性

在打开通信设备句柄后,常常需要对串口进行一些初始化工作。这需要通过一个DCB结构来进行。DCB结构包含了诸如波特率、每个字符的数据位数、奇偶校验和停止位数等信息。在查询或配置串口的属性时,都要用DCB结构来作为缓冲区。

调用GetCommState函数可以获得串口的配置,该函数把当前配置填充到一个DCB结构中。一般在用CreateFile打开串口后,可以调用GetCommState函数来获取串口的初始配置。要修改串口的配置,应该先修改DCB结构,然后再调用SetCommState函数用指定的DCB结构来设置串口。

除了在DCB中的设置外,程序一般还需要设置I/O缓冲区的大小和超时。Windows用I/O缓冲区来暂存串口输入和输出的数据,如果通信的速率较高,则应该设置较大的缓冲区。调用SetupComm函数可以设置串口的输入和输出缓冲区的大小。

(三)串口读写

在用ReadFile和WriteFile读写串口时,既可以同步执行,也可以重叠(异步)执行。在同步执行时,函数直到操作完成后才返回。这意味着在同步执行时线程会被阻塞,从而导致效率下降。在重叠执行时,即使操作还未完成,调用的函数也会立即返回。费时的I/O操作在后台进行,这样线程就可以干别的事情。例如,线程可以在不同的句柄上同时执行I/O操作,甚至可以在同一句柄上同时进行读写操作。“重叠”一词的含义就在于此。

ReadFile函数只要在串口输入缓冲区中读入指定数量的字符,就算完成操作。而WriteFile函数不但要把指定数量的字符拷入到输出缓冲中,而且要等这些字符从串口送出去后才算完成操作。

ReadFile和WriteFile函数是否为执行重叠操作是由CreateFile函数决定的。如果在调用CreateFile创建句柄时指定了FILE_FLAG_OVERLAPPED标志,那么调用ReadFile和WriteFile对该句柄进行的读写操作就是重叠的,如果未指定重叠标志,则读写操作是同步的。

函数ReadFile和WriteFile的参数和返回值很相似。这里仅列出ReadFile函数的声明:

BOOL ReadFile(

HANDLE hFile,//文件句柄

LPVOID lpBuffer,//读缓冲区

DWORD nNumberOfBytesToRead,//要求读入的字节数

LPDWORD lpNumberOfBytesRead,//实际读入的字节数

LPOVERLAPPED lpOverlapped//指向一个OVERLAPPED结构

);//若返回TRUE则表明操作成功

需要注意的是如果该函数因为超时而返回,那么返回值是TRUE。参数lpOverlapped在重叠操作时应该指向一个OVERLAPPED结构,如果该参数为NULL,那么函数将进行同步操作,而不管句柄是否是由FILE_FLAG_OVERLAPPED标志建立的。

当ReadFile和WriteFile返回FALSE时,不一定就是操作失败,线程应该调用GetLastError函数分析返回的结果。例如,在重叠操作时如果操作还未完成函数就返回,那么函数就返回FALSE,而且GetLastError函数返回ERROR_IO_PENDING。

在使用重叠I/O时,线程需要创建OVERLAPPED结构以供读写函数使用。OVERLAPPED结构最重要的成员是hEvent,hEvent是一个事件对象句柄,线程应该用CreateEvent函数为hEvent成员创建一个手工重置事件,hEvent成员将作为线程的同步对象使用。如果读写函数未完成操作就返回,就那么把hEvent成员设置成无信号的。操作完成后(包括超时),hEvent会变成有信号的。

如果GetLastError函数返回ERROR_IO_PENDING,则说明重叠操作还为完成,线程可以等待操作完成。有两种等待办法:一种办法是用象WaitForSingleObject这样的等待函数来等待OVERLAPPED结构的hEvent成员,可以规定等待的时间,在等待函数返回后,调用GetOverlappedResult。另一种办法是调用GetOverlappedResult函数等待,如果指定该函数的bWait参数为TRUE,那么该函数将等待OVERLAPPED结构的hEvent事件。GetOverlappedResult可以返回一个OVERLAPPED结构来报告包括实际传输字节在内的重叠操作结果。

如果规定了读/写操作的超时,那么当超过规定时间后,hEvent成员会变成有信号的。因此,在超时发生后,WaitForSingleObject和GetOverlappedResult都会结束等待。WaitForSingleObject的dwMilliseconds参数会规定一个等待超时,该函数实际等待的时间是两个超时的最小值。注意GetOverlappedResult不能设置等待的时限,因此如果hEvent成员无信号,则该函数将一直等待下去。

在调用ReadFile和WriteFile之前,线程应该调用ClearCommError函数清除错误标志。该函数负责报告指定的错误和设备的当前状态。

调用PurgeComm函数可以终止正在进行的读写操作,该函数还会清除输入或输出缓冲区中的内容。

(四)超时设置

在用ReadFile和WriteFile读写串口时,需要考虑超时问题。如果在指定的时间内没有读出或写入指定数量的字符,那么ReadFile或WriteFile的操作就会结束。要查询当前的超时设置应调用GetCommTimeouts函数,该函数会填充一个COMMTIMEOUTS结构。调用SetCommTimeouts可以用某一个COMMTIMEOUTS结构的内容来设置超时。

有两种超时:间隔超时和总超时。间隔超时是指在接收时两个字符之间的最大时延,总超时是指读写操作总共花费的最大时间。写操作只支持总超时,而读操作两种超时均支持。用COMMTIMEOUTS结构可以规定读/写操作的超时,该结构的定义为:

typedef struct_COMMTIMEOUTS {

DWORD ReadIntervalTimeout;//读间隔超时

DWORD ReadTotalTimeoutMultiplier;//读时间系数

DWORD ReadTotalTimeoutConstant;//读时间常量

DWORD WriteTotalTimeoutMultiplier;//写时间系数

DWORD WriteTotalTimeoutConstant;//写时间常量

} COMMTIMEOUTS,*LPCOMMTIMEOUTS;

COMMTIMEOUTS结构的成员都以毫秒为单位。总超时的计算公式是:总超时=时间系数×要求读/写的字符数+时间常量

例如,如果要读入10个字符,那么读操作的总超时的计算公式为:读总超时=ReadTotalTimeoutMultiplier×10+ReadTotalTimeoutConstant

可以看出,间隔超时和总超时的设置是不相关的,这可以方便通信程序灵活地设置各种超时。

如果所有写超时参数均为0,那么就不使用写超时。如果ReadIntervalTimeout为0,那么就不使用读间隔超时,如果ReadTotalTimeoutMultiplier和ReadTotalTimeoutConstant都为0,则不使用读总超时。如果读间隔超时被设置成MAXDWORD并且两个读总超时为0,那么在读一次输入缓冲区中的内容后读操作就立即完成,而不管是否读入了要求的字符。

在用重叠方式读写串口时,虽然ReadFile和WriteFile在完成操作以前就可能返回,但超时仍然是起作用的。在这种情况下,超时规定的是操作的完成时间,而不是ReadFile和WriteFile的返回时间。

四、结束语

以上给出了用Win32 API设计串行通信的基本思路,这个重叠(异步)I/O操作的串行通信程序,曾多次应用于大型任务,表现出良好的性能。在实际应用中,可以以此为模型稍加改造,设计出满足需要的各种串行通信程序。

参考文献:

[1]李现勇.Visual C++串口通信技术与工程实践[M].人民邮电出版社,2004,7

I/O操作 篇4

主动式以太网I/O提供了强大的在线服务

该公司研发了一个集成的电子服务平台, 使客户能够远程监控家里或办公场所的设备。最终该公司选择了Moxa主动式以太网I/O作为I/O服务器连接各个被监控设备中的传感器, 通过网络实现建筑物安全管理、家居管理、能源管理和楼宇自动化等功能。

基于S N M P的自动化系统

io Logik E2210有12个数字输入和8个数字输出, 内建SNMP协议, 便于控制系统软件的编写。M X I O函数库支持V B、V C、BCB、.NET和C语言, 可协助程序员自行编写软件。此外, Moxa的Click&Go TM逻辑功能采用简单的IF-THEN-ELSE语句, 即使是不会编程的工程师也可在几分钟内快速完成配置。

基于Web进行监控的CGI命令

io Logik E2210可通过用户自定义的CGI命令来控制PTZ摄像头, 当事件发生时, 可立刻抓拍现场。采用CGI命令, 用户可以通过网络浏览器随时随地访问io Logik设备。

IT友好界面

智能家居系统是一个需要高度信息化的网络, 让IA和IT高度整合和互通。Moxa的SNMP具有IT友好界面, 可让系统集成商和IT专业人士轻松地访问使用IA资源。而使用整合Moxa SNMP功能的ioLogik产品, IT用户可以轻松地将任何传感器和设备连接到骨干以太网中, 扩展系统的报警能力, 适用于环境监测、电信、电力和交通等行业。

io Logik E2210特点

●支持SNMP, 用于I/O报警和监控

●Click&Go TM逻辑语句, 可基于事件响应

I/O操作 篇5

近年来,因为处理器的迅速发展,其速度变得越来越快,然而,资料的存取系统却无法跟上处理器的速度,这使得处理器会因为存取系统过于缓慢而常常处于闲置状态,因此,平行档案系统被广泛的用来解决这个问题。除此之外,由于电脑被使用于平行处理平台的普及率逐步上升,这造成使用于电脑上的平行处理软体需求量持续增加,但是,却有可能缺乏平行I/O的系统,这让平行档案系统被要求为电脑来提供高效能的平行I/O系统,虽然它非常适合用来解决因为贫乏的效能所导致的瓶颈, 可是大多数现存的平行档案系统都是基于像Unix的作业系统,因为这个理由 ,利用微软的.NET架构实做了一个基于视窗作业系统的平行档案系统,这篇论文除了有描述这个系统的设计构思与实现方法还有做了些效能的测试,读取跟写入的效能都比只用单一磁碟还要好。结果显示,写入的效能最高可以达到110 MB/s,读取的效能最好也有75 MB/s。

2 理论基础

外部设备是计算机与外界联系的主要对象。计算机的应用环境千差万别, 与计算机相连的外设各式各样,有机械式的、电动式的、电子式的、光电式的,有模拟的、数字的,有并行的、串行的,有高速的、中速的、低速的,有简单的、复杂的,这使得大多数外设不能直接与计算机系统相连接,而必须通过接口与计算机系统总线连接起来。

I/O接口是位于计算机系统与外设之间的连接电路,是计算机系统与外设连接的桥梁,起着沟通、协调两者关系的作用。针对不同的外设,I/O接口通常具有几个基本功能。

(1) 提供信息传递通道。由于接口位于计算机系统与外设中间, 因此它必须为两者提供信息传递的通道,通道一般是利用接口中的端口(寄存器)来实现的。我们可以设计多个通道, 并有效控制各通道的工作时刻,使计算机系统与外设间的多种信息可以在各通道中分时传输。

(2) 进行数据格式转换。我们通常将外设提供或接收的信息广义地称为数据, 其形式有多种, 如模拟数据、数字数据、并行数据、串行数据等。而计算机系统传输、处理的数据只是数字化的并行数据。因此,在两者进行信息交换时若数据格式不一致,则必须进行数据格式转换。

在I/O接口中完成的数据格式转换有几种方式。

模 / 数转换。若外设是模拟设备,则其发送与接收的信息为模拟数据。当计算机系统从模拟外设获取信息时,必须将外设的模拟数据转换成并行数字数据,才能被计算机系统接收。同样,当计算机系统给模拟外设加载信息时,必须将计算机的并行数字数据转换成模拟数据,才能被外设接收。

串 / 并转换。若外设是数字化的串行设备,其发送与接收的信息为串行数据,则必须将外设的串行数据转换成并行数据,才能被计算机系统接收。同样,需将计算机的并行数据转换成串行数据,才能被外设接收。

数位转换。某些外设虽然是数字化的并行设备,但其传输的并行数据数位若与计算机系统的并行数据数位不符,也需要通过接口将两者的数位作适当的变换。

(3) 进行速度匹配。大多数情况下外设的速度低于计算机系统的速度,由于这种速度的不匹配会造成外设与计算机系统传输信息时出现错误, 因此必须通过I/O接口来协调两者的速度。

一种常用的速度变换方法是在接口中设计数据缓冲器,通过数据缓冲器的“缓冲”功能,使快速的计算机系统与慢速的外设之间达到有效的信息传递。

(4) 进行负载匹配。目前的微机系统均采用总线结构, 系统中所有部件都是通过总线相互连接在一起的,其中外设与微机系统的连接实际上是通过将外设经过接口连接在微机的系统总线上来实现的。由于每种外设对总线呈现的负载不同,而系统总线的负载能力是有限制的,因此,当大负载外设或多外设连接到微机系统时,接口中必须设计负载匹配电路。驱动器可以作为一种能够提供大电流的电流负载匹配电路来使用。

(5) 提供中断能力。当接口中包含中断请求电路时 ,可以支持外设以中断方式与计算机系统进行信息交换,这样可以提高I/O接口自身在多种输入 / 输出方式下的适应性。

由于我们需要在外设和计算机系统之间建立多个通道,因此一个外设接口可能由多个端口构成。假定外设已数字化,并利用数据、状态、控制(命令)三类信息与计算机系统进行信息交换。接口中的数据端口提供了外设与计算机系统间数据交换的通道,命令端口传递CPU发给外设的控制命令,状态端口将外设的工作状态反映给CPU。

3 分析与设计

简单来说,本文设计的系统包含元数据服务器、iod和library三个部分。其架构如图1所示。

初始化模块。该模块功能主要在Driver Entry函数里实现。

处理流程有几个步骤。

1) 初始化驱动名。

2) 注册以该驱动名命名的驱动设备对象 ,并将该对象添加到设备堆栈里。

3) 初始化全局变量,包括本地的元数据hash table。

4) 设置分发 例程入口 , 包括IRP_READ,IRP_CREATE等功能函数。

5) 设置FASTIO例程入口 设置回调 函数接口 , 如Fast IoR ead函数和Fast Io Create等。

6) 注册文件系统操作。

7) 初始化相关资源,同步对象和链表头。

8) 启动工作线程, 主要的线程包括MDS队列处理线程和IRP处理线程。

MDS交互模块。该模块主要功能在HIFS Mds.c里实现。每当有需要和MDS交互的时候,文件系统驱动填充MDS_CMD_QUEUE结构,并且加入MDS命令队列等待处理。

OSD交互模块。Client和OSD间的数据传输采用i SCSI通道。Client与OSD首先要建立会话session,每个会话都有启动端(Initiator)和目标端(Target),client作为i SCSI initiator, 发送OSD命令 ,OSD作为i SCSItarget,响应命令并返回送数据。i SCSI initiator的每个会话都有 自己的发 送线程hifs_tx_thread和接收线 程hifs_rx_thread实现发送 与接收i SCSI协议数据 单元(Protocol Data Unit,PDU)的功能。在对象存储系统中 ,数据或命 令按照T10标准封装 成iscsi命令 ,i SCSIinitiator的入队管理模块将iscsi命令加入到命令队列中,并且将命令交付给相应的发送线程处理。

发送线程hifs_tx_thread的处理流程。发送线程首先与target端建立连接, 启动接收线程。如果命令队列中没有命令发送,则处于阻塞状态;如果命令队列中有命令发送, 则获取命令cmd并将它加入待处理命令队列中,置cmd->tx_done为0,判定命令类型,根据i SCSI协议, 发送命令类型中有Login Request、Logout Request、Text Request、SCSI Command、NOP_OUT,每个发送命令产生一 个分支模 块 , 命令发送 出去以后 , 置cmd->tx_done为1, 并且设置发送线程事件为信号态 ,激活发送线程。

接收线程接收命令基本头部数据,获取待处理的命令cmd指针,判定cmd->done是否为1,如果cmd->done不为1,说明此命令还没有被发送到target端,处于阻塞状态,直到发送线程激活;如果cmd->done为1,则重置接收线程事件为非信号态,并且将cmd从待处理命令队列中摘除,判定cmd的类型根据iSCSI协议,

Create。Create的命令在Windows里实际上有两种,一种是Open即打开操作,另一种才是熟知的Create即创建操作。

有别于Linux系统有一 个root根目录的存 在 ,在Windows系统中还有卷。所以在执行Create操作之前 ,首先要判断的是是否对卷进行操作。如果文件名是空,则表示打开卷的操作。

虽然在HOSS系统里,无论文件夹还是文件,都是以对象的形式存放的。但在Windows下,必须区分清楚文件和文件夹,因为这两种的对象的操作是不同的。

I/O操作 篇6

关键词:I/O口,MCU,PCA9554/A,LabVIEW

0引言

随着电子技术的飞速发展,各类电子产品像雨后春笋般大量的进军电子市场,其中也包括正在蓬勃发展的汽车电子行业。一般汽车电子行业对这些电子产品的要求比较高,会有很多的技术指标去规范它们,其中很重要的一环便是环境实验。出于对工作效率的考虑,一个环境测试台架往往要求能对多个产品进行同时测试。而这些产品的引脚数量一般也会比较多,这样一来,测试台架上所需的测试通道数量就会很多,往往多达几百个。

一般多数用于汽车电子产品的环境测试台架里面会集成有NI公司的DIO驱动板卡,由于它们的驱动端口比较多,便专用来负责产品的环境实验测试。以NI-6509为例,这是一个12×8的板卡,总共有12个通道,每通道8位I/O控制组成,总计96路I/O控制;NI-2532的矩阵板卡,其能支持的通道数是32×16,共512路。这些I/O端口,针对一般的应用是够的,但如果用于引脚数量比较多的产品测试,便会出现I/O口数量不够用的局面。假如环境实验要同时测试12个产品,每个产品有40个引脚,那么对于产品引脚继电器就必须要有480个,再加上一些外围辅助仪器介入的切换,那么在这种情况下,这类DIO板卡的应用就显得很勉强。

针对此类问题,本文提出了一种有效的解决方法,便是应用单片机的I/O口配合市面上一些常见的I/O扩展芯片,进行端口的扩展。单片机有4个端口,每个端口8位,总计32个位控制;扩展芯片,比如I2C芯片,只需要2根线(SDA & SCL)即可,因此可以连16组I2C通信,且每组可同时支持8个芯片(每组最大可容纳8个地址),每个芯片又可控制8个端口。因此,单片机理论上,至少可支持16×8×8个端口。并且,如果芯片头地址可以不一样的话,例如PCA9554和PCA9554A,那么端口数量又可以增加一倍,达到2 048个,这是一般的板卡所远远不能及的。

1系统硬件设计

本文所涉及到的硬件比较简单,上位机与MCU之间通过RS 232串口连接,MCU靠外部电源提供的5 V直流电进行工作。再将MCU的2个端口模拟成SCL,SDA两根线与PCA9554/A进行通信连接。这样就形成了上位机发送指令,单片机接受指令并进行相应解析后再通过SDA、SCL两根线向PCA9554/A发送命令数据,控制它的输入与输出。

1.1 PCA9554/A芯片介绍[1]

PCA9554和PCA9554A是16脚的CMOS器件,它们提供了I2C的应用中的8位通用并行输入/输出口(GPIO),PCA9554/54A包含一个8位配置寄存器(输入或输出选择)、8位输入寄存器、8位输出寄存器和一个极性反转(高电平或低电平操作有效)寄存器。系统主控制器通过写I/O口相应的配置位来激活端口的输入或输出。PCA9554/A有3个硬件管脚(A0,A1,A2)来实现不同的I2C地址,最多允许8个器件共用一个I2C总线上。PCA9554与PCA554A的惟一区别在于I2C地址不同,这样最多允许16个器件(9554和9554A各8个)连接接到同一个I2C总线上。

1.2 基于PCA9554/A的硬件设计[2]

按I2C规约,PCA9554的器件地址为0x40,PCA9554A的器件地址为0x70,当然,由于硬件地址引脚A0~A2可寻址8个器件,所以器件地址并不惟一,例如:A0接GND,A1接VCC,则PCA9554的器件地址为0x4C。下面给出了本文的基本应用原理图如图1所示。在图中使用STC89C52单片机为主控芯片,单片机的P1.3管脚与PCA9554的SDA管脚相连,P1.2管脚与PCA9554的SCL管脚相连。4个LED灯可以受四个按键控制,也可以受上位机进行控制。

2系统软件设计[3]

本文系统软件设计主要分为两部分,一个是上位机的LabVIEW程序设计;另一个则是单片机底层C语言的程序设计。

2.1 LabVIEW的程序设计[4,5]

上位机的程序设计主要是与MCU串口通信,通过向MCU发送控制命令来达到对PCA9554/A的I/O口进行控制的目的。

LabVIEW是一种图形化编程语言,由美国国家仪器(NI)公司研制开发的,类似于C和BASIC开发环境。使用这种语言编程时,基本上不写程序代码,取而代之的是流程图。使用它进行原理研究、设计、测试并实现仪器系统时,可以大大提高工作效率。

本文主要是用LabVIEW语言编写与MCU的串口通信程序,界面友好、操作方便。LabVIEW控制单片机是通过Instrument I/O的Serial控件调用来实现的。主要用到其中的VISA配置串口节点,包括串口配置、读、写、关闭等节点。通过对这些节点的调用就可以方便的对串口进行操作。程序的前面板显示如图2所示。

这里,Command to RS 232栏中的指令必须与单片机事先烧录好的代码相符合。这样,单片机才能将接收到的指令进行正确匹配,并执行相应操作。其程序框图为图3所示。

程序左端调用Configuration模块,进行串口的基本配置,比如BaudRate、数据位等,使这些参数与单片机里面的串口预定义设置相一致;右侧是Close模块,用于程序退出时,释放对串口的控制;中间是程序主体,包含对串口的读、写操作,实现对串口的双向通信。为了程序简洁、形象易懂,此次程序中用到了对LabVIEW子函数的调用,如RS 232-ini,RS 232W-R等模块,这些子函数就是用VISA串口节点来编写的,只是做了封装而已。

2.2 MCU的串口通信[6]

上位机是通过串口将指令字符传递给单片机的。单片机对串口的读操作是通过中断的方式实现的,以字符为单位,每接收到一个8位的字符,MCU产生一个读中断RI=1,此时,单片机将接收到的字符储存起来,然后软件将RI复位置0,继续接收下一个字符。本系统中,所有计算机发送给单片机的指令均以‘?’结尾。MCU接收到‘?’后,产生一个终止位,然后与事先定义好的指令进行匹配,如果指令事先有定义,那么就会执行相应的操作。

以下为单片机的配置、写字符、写字符串、读字符串代码程序[7,8]:

2.3 MCU的I2C时序模拟[9]

上位机向单片机发送指令数据,如果这些指令已在单片机中事先定义好,那么单片机将会通过模拟的SDA与SCL两个引脚,根据PCA9554/A的datasheet时序图,将控制命令数据传递给PCA9554/A,从而实现对PCA9554/A 的I/O口进行控制。

2.3.1 PCA9554/A的写操作

根据I2C总线传输协议以及PCA9554/A的总线读写特性,可以看出:对PCA9554/A端口的写操作主要是通过对它的输出端口寄存器进行写操作的。具体过程为:在SCL为高电平期间,SDA由高电平向低电平转换作为起始信号,SDA由低电平向高电平转化则为停止信号。在起始条件后,必须是从机地址,对于PCA9554来说从地址的高4位是0100,而PCA9554A则是0111,A2,A1,A0的高低电平状态可以有8种组合,最后一位是读写选择位。从地址发送完后便是等待从机的应答信号ACK,从机正确应答后便开始由主机发送命令字节,接着又是等待从机应答,应答后便开始发送数据了。以下为PCA9554的写操作部分代码[10]。

2.3.2 PCA9554/A的读操作

对PCA9554/A的读操作稍微麻烦一点,需要在收到第二次从机应答信号后再一次发送总线起始信号及从机地址即可。部分程序如下所示:

由于篇幅原因,以上均只给出了部分重要程序。需要提出的是I2C总线上的起始、停止、以及读写数据的时序模拟均要参考PCA9554/A的datasheet中的时间参数要求,严格对应。

3结语

本文运用单片机与I/O扩展芯片PCA9554/A采用I2C通信进行I/O扩展,提出了具体的软硬件设计,完成了上位机对PCA9554/A端口的直接控制,并进行了I/O的有效扩展。并成功的应用在对多个汽车电子产品同时测量的环境试验中,取得了很好的效果。

参考文献

[1]Anon.PCA9554datasheet[EB/OL].[2008-8-15].http://www.ti.com.

[2]施邦平.采用I2C器件扩展单片机的多机通信[J].自动化与仪器仪表,2006(6):63-64,67.

[3]陈锡辉,张银鸿.LabVIEW8.20程序设计从入门到精通[M].北京:清华大学出版社,2007.

[4]李江全,曹卫彬.计算机典型测控与串口通信开发软件应用实践[M].北京:人民邮电出版社,2008.

[5]刘其和,李云明.LabVIEW虚拟仪器程序设计与应用[M].北京:化学工业出版社,2011.

[6]谢维成,杨家国.单片机原理与应用及C51程序设计[M].2版.北京:清华大学出版社,2009.

[7]陈涛.单片机应用及C51程序设计[M].2版.北京:机械工业出版社,2011.

[8]曹天汉.单片机原理与接口技术[M].3版.北京:电子工业出版社,2009.

[9]何立民.I2C总线应用系统设计[M].北京:北京航空航天大学出版社,1995.

[10]甘辉.模拟I2C总线实现AVR与MCS-51单片机通信[J].宜春学院学报,2008,30(4):54-56.

[11]贾权,郭计云,王晓亮.基于虚拟仪器的浊度测试系统的设计[J].现代电子技术,2009,32(17):143-146.

I/O操作 篇7

为了更好地理解unboxed这个概念,我们来看一个变量在存贮中是怎样表示的,假设一个整数类型变量x,它的值为2,那么它在存贮中有一个存贮单元,这个单元有它的地址,也就是指针。这个单元将2这个值像盒子一样装起来:

因此,形象地讲,我们平常所理解的变量就象一个盒子(box),变量的值只有将盒子打开才能取出来,所以就把变量的值形象地叫为unboxed值,2就是一个unboxed值,unboxed值已从变量所在的存贮单元中取了出来,它在存贮单元没有地址,只是一个值而已。

2主要思想:用unboxed类型进行程序转换

考虑下列函数定义:

f x y=y-x

在x,y相减之前,x,y必须计算出来,但这个事实是隐含的,但是我们可以通过使用case表达式使这个事实明确化:

这样定义的思想是数据类型Int不再是基本的类型,相反,我们可以想象Int是这样定义的:

data Int=MkInt Int#

也就是说,Int类型是一个代数数据类型,它具有一个构造子MkInt,MkInt构造子具有一个元素Int#,它就是unboxed整数的基本类型,一个新的基本操作-#将类型Int#的值相减。通常,我们用#号表示unboxed类型和类型为unboxed的变量。

在f的定义中,最外层的case表达式计算y,并抽取其unboxed成份y#,下一个case表达式计算x并抽取x#,最后一个case表达式,计算y#,x#的差,并将差赋给t#,通过作用MkInt构造子到t#上,函数返回类型Int的值。

我们注意到,从f的第一种形式转换成第二种形式可以用系统的方式来实现,我们只要给出下列减法运算的定义即可:

f的第一种形式转换成第二种形式只是一个β-归约而已:((-)pq)yx。

现在,Int已用更为基本的类型来表示,整数0,1等等必须看成是MkInt 0#,MkInt 1#等等,其中0#,1#是0和1的unboxed常量。

2.1避免重复计算

考虑下列表达式:

x+x

就像上面我们给出一的定义一样,我们也可以给出+的定义(略),这样x+x就可以转换成:

这里x被计算了两次,我们可以使用下列转换规则进行优化:

case e of …c x1…xn->case e of…c y1…yn->body…;…⇒

case e of…c x1…xn->…body[x1/y1…xn/yn]…;…

将这个规则作用到x+x上,我们将得到下列优化的表达式:

case x of

MkInt x1#->case(x1#+# x1#)fo

T#->MkInt t#

2.2删除冗余操作

考虑下面的表达式:

这个表达式太复杂,我们可以运行下面的转换规则进行简化:

case(case e of p1->e1;…;pn->en) of alts⇒

case e of p1->(case e1 of alts);…;pn->(case en of alts)

当case检查的表达式仍是case表达式时,它们之间能够相互交换,我们称这个规则为case-of-case变换。通常,存在重复代码的可能性,因为如果内部的case有多个分支,alts将被重复,在我们要转换的这个表达式中,内部的case仅有一个分支,我们就可能连续使用多次case-of-case变换,得到如下结果:

2.3unboxed调用

考虑下列函数afac:

afac计算其变元,并把它们的值以unboxed方式传递给afac#。现在我们可以对afac#进行工作了。先展开*,-,afac的定义,并应用前面描述过的交换规则,除此之外,还需要另外一个变换规则:

let x=c x1…xn in … (case x of …;c y1…yn->body;…)…

let x=c x1…xn in…(body[x1/y1…xn/yn]

这个变换为a和n使用了let语句,当a,n不使用时,let语句就可以抛弃掉,通过展开*,-,afac的定义,并应用这些变换规则,最后结果如下:

不难看出,afac#的类型为Int#×Int#->Int,其结果类型为Int。

3I/O系统的实现

在纯函数式语言中,IO类型具有如下形式:

type I/O a=state RealWorld->I/ORea a

data I/ORes a=MkIORes#a#(atate RealWorld)

则unitST,bidST的定义可写成如下形式:

unitST a w=MkIORes a w

bindST m k w=case(m w)of

MkIORes a w’->k a w’

其中(I/O,unitST,bindST)构成了一个Monad。

不失一般性,假设a为字符类型,这样写成unboxed方式:

data Char=MkChar Int#

这样,我们就可以将IO类型转换unboxed方式:

typc unboxed I/O#a#=World->I/ORes# a#

data unboxed I/ORes# a#=MkI/ORes# a#World

下面我们将讨论如何用unboxed数据类型去实现ccall。

将uxboxed类型应用于ccall,我们并不直接实现ccall,而使用ccall的unboxed调用ccall#,在使用ccall之前,我们都要展开ccall,使其变元计算明确化:

4一个例子

我们来看下面的纯函数式I/O程序:

这一变换过程如果是人工来完成的话,那么工作量大太,但幸运的是这一变换过程机械的,可以通过转换程序来完成,转换到这个程序后,可以根据我们以上描述的简单的C代码生成的方法,生成最后的C代码:

不难看出,这还不是真正的C代码,但已非常接近我们平常用C语言写的C语言程序。

参考文献

[1]袁华强,肖倩,孙永强.基于非确定Monad的纯函数式树搜索算法.软件学报,1997,8(增刊):189-193.

[2]袁华强,孙永强.纯函数式I/O的操作语义.计算机学报,1998,21(11):1009-1014.

[3]石跃祥,袁华强,孙永强,陈静.函数式语言中的赋值语句.软件学报,1999,10(3).

[4]石跃祥,袁华强.纯函数式语言中的状态转换器与调用.湘潭大学自然科学学报,2000,22(3):25-29.

[5]袁华强.函数式I/O系统的实现与研究:一种Monad方法[D].上海:上海交通大学,1996.

[6]Moggi E.Computational Lamda-calculus and monads.In:Proc Symposi-um on Logic in Computer Science,CA,1989:14-24.

[7]Moggi E.Notions of computation and monads.Information and Compu-tation,1991,93:55-97.

I/O操作 篇8

尽管我们尽力在片内提供所有I/O功能, 但是高端嵌入式微处理器在与外围电路接口时还是经常需要帮助。这些附加的接口电路已经要求包含可编程逻辑器件 (PLD) 、分立逻辑器件、专用功能集成电路 (IC) 和8位微控制器。群星 (stellaris) 微控制器为这些I/O解决方案提供了多个优势。

现实中, 用于设计中的高端微处理器可以完美地集成片内外设。外设可以与期望的管脚相连, 并且不会存在系统延迟问题。而事实上, 复杂的I/O实现方案还存在很多因素。

1 I/O处理器实例

现实中, 用于设计中的高端微处理器可以完美地集成片内外设。外设可以与期望的管脚相连, 并且不会存在系统延迟问题。而事实上, 复杂的I/O实现方案还存在很多因素。表1列出了系统增加I/O处理器的常见原因。

1.1 I/O系统选项

群星 (Stellaris) 微控制器为经济解决方案和共同的工具链提供了主机CPU, 从而使得微控制器成为最通用的解决方案。

1.2 ARP协议的缺陷

ARP协议是建立在信任局域网内所有结点的基础上的, 它很高效, 但却不安全。它是无状态的协议, 不会检查自己是否发过请求包, 也不管 (其实也不知道) 是否是合法的应答, 只要收到目标MAC是自己的ARP reply包或arp广播包 (包括ARP request和ARP reply) , 都会接受并缓存。

2主机CPU接口

用户需要特别考虑的是I/O处理器与主机微处理器之间的接口的类型。群星 (stellaris) 微控制器为主机微控制器提供3类串行接口。表2列出了每条串行总线的属性。

2.1开发和调试

在一个包含其他ARM器件的系统中使用群星微控制器的最大好处就是可以使用共同的开发工具。系统中所有目标微控制器都可以使用相同的集成开发环境 (IDE) 和调试器硬件, 因而可以减少开发时间和预算。

3架构

群星 (Stellaris) 微控制器使用ARM的Cortex-M3微处理器 (ARMv7系列的一部分) 。Thumb-2技术结合16位和32位指令, 可供高性能处理器使用。

与早期的ARM发生器相比, Cortex-M3提供了改良的中断处理能力, 这对于注重时间的嵌入式控制应用非常重要。Cortex-M3的嵌套中断控制器 (NVIC) 将进入中断所需的时钟周期减少高达70%。I/O处理代码可以在多个优先中断源中快速有效地移动。

对于整个灵活性来讲, 群星 (stellaris) 微控制器还允许将任意的GPIO管脚配置成边沿和电平触发中断。

3.1 I/O处理器的设计

以下设计向低成本的高端嵌入式微处理器系统增加了以下3个接口:

PS/2键盘接口

8个通用输出管脚

声音报警器 (audio beeper)

在将PS/2端口直接与一个嵌入式微处理器接口时存在几个挑战:

主机微处理器不含片内PS/2接口;

PS/2是一个5V接口;

PS/2键盘以高于10k Hz的速率为数据输出计时。该格式与SPI和I2C不兼容, 因而接收该数据流时需要特定的硬件, 或者每个时钟都带有中断。这一点可能大多数嵌入式操作系统都不能做到, 也可能是对微处理器带宽的无效使用。

通过将群星微控制器选作I/O处理器, 这三个挑战都可以迎难而解。Luminary Micro公司的群星LM3S101微控制器通过使用留作将来扩展用的资源, 只需一美元就可实现所有这3个功能。本实例使用一个UART接口和基于ASCII的简单协议与主机通信。使用LM3S102器件取代微控制器将可以使能I2C与主机CPU通信。

4功能描述

键盘会以10-15k Hz的速率向LM3S101微控制器产生同步的PS/2时钟和数据信号。LM3S101微控制器对数据流中的这些信号、时钟进行监控, 并验证其奇偶性。PS/2接口实际上是一个双向接口, 但本实例只演示了键盘发送的情形。

一旦接收到字节并经过验证后, LM3S101微控制器软件将数据写入UART, 并将它传输给主机微处理器。软件可以扩展成将PS/2扫描代码传送前转换至ASCII当量 (equivalent) 。

整个I/O接口电路如图2所示。

摘要:本文主要介绍I/O处理器的背景信息、体系结构因素和实际的实现实例。设计实例通过UART接口增加了一个PS/2键盘接口, I/O线和一个声音报警器 (audio beeper) , 使用一个UART接口和基于ASCII的简单协议与主机通信。使用LM3S102器件取代微控制器将可以使能I2C与主机CPU通信。

关键词:StellarisTM微控制器,集成开发环境,Cortex-M3微处理器,PS/2键盘接口

参考文献

[1]王永宏, 徐炜, 郝立平.STM32系列ARM Cortex-M3微控制器原理与实践[M].北京:北京航空航天大学出版社, 2008.

[2]Sloss A N, Symes D.ARM沈建华译.嵌入式系统开发——软件设计与优化[M].北京:北京航空航天大学出版社, 2005.

[3]郑扣根译.操作系统概念[M].北京:高等教育出版社, 2004.

[4]邵贝贝等译.嵌入式操作系统μC/OS-Ⅱ[M].第二版.北京:北京航空航天大学出版社, 2005.

[5]PHIL IPS公司L PC2200User Manaul[R].PHILIPS公司, 2004, 5.

I/O操作 篇9

埕岛油田测控系统一期投运于96年进行项目论证, 97~98年一期系统进行了系统组态、开发和现场安装, 99年系统投入试运行, 2000年正式投产。经过不断扩充, 现已建成了包括1座陆地监控中心、2座中心平台站和70余座卫星平台站的大型滩海油田SCADA系统, 提高了海上原油生产的管理水平, 改善了职工的工作条件, 确保了安全高效生产。

一、埕岛中心三号平台自控系统简介

整个埕岛区域自控系统采用“三级站场、二级控制”的管理模式, 第一级是陆地中心站, 设在海洋开发公司办公楼陆地监控中心, 它是整个油田的调度管理中心, 可以通过中心平台站监视整个埕岛油田的生产运行情况, 处理油田生产信息和报表。第二级是中心平台站, 设在中心平台, 中心平台站作为海上生产管理控制中心, 除对本平台进行监控外, 还负责监控所属卫星平台的生产运行情况。中心平台站负责向陆地中心站传送海上平台的实时数据。第三级是井口平台站, 设在各卫星平台, 负责监视和控制卫星平台的生产运行情况, 响应中心平台发来的生产控制命令。二级控制是指中心平台站对井口平台站的遥控和井口平台站就地控制, 陆地中心站仅具有就地监视功能, 对海上平台可以监视但不能控制。

中心三号平台为中心平台, 即第二级站场, 其作为海上生产管理控制中心, 除对本平台进行监控外, 还负责监控所属卫星平台的生产运行情况, 同时向陆地中心站传送海上平台的实时数据。因此就决定中心三号自控系统, 同样分为两个部分:综合控制系统和卫星平台SCADA系统。为兼容已建卫星平台并与中心1号、中心2号SCADA系统保持一致, 服务器软件采用H oney w ell Ex per ion PKS系统。

二、埕岛中心三号平台自控系统硬件构成

本系统采用PLC加远程I/O的系统架构, 冗余的PCS PLC和SIS PLC作为平台的核心控制器位于生活动力平台生活楼中控室, 现场信号全部接入就近的远程I/O控制盘, 电气部分参数进位于电气控制室的远程I/O机柜, PLC与远程I/O间用冗余的远程I/O网络连接。这样的系统架构可在保障系统安全性的前提下, 最大限度减少电缆及施工工作量。

PLC采取埕岛油田常用的AB 1756Contr ol Logix系列PLC, 生产平台远程I/O机柜采用AB 1794FLEX I/O系列, FLEX I/O提供较大体积、基于背板I/O的所有功能, 而没有空间要求, 可以单独选择I/O、端子类型以及网络来满足应用要求。三、埕岛中心三号平台自控系统网络构成

Net Linx—是罗克韦尔自动化新一代的开放网络技术, 实现了从企业管理系统到车间现场的无缝连接与集成。Net Linx架构内的网络Device Net、Control Net和Ether Net/IP使用通用的应用层协议, 网络内的设备能够相互实现通讯, 不用进行数据转换或者编写一些特殊的程序, 可以实现数据的的跨网络共享。

埕岛中心三号平台自控系统网络系统是由Ether Net/IP、Contr ol Net两级网络组成, 撬块与远程I/O单元通过Modbus进行通讯, 实现数据上传下达, PLC CPU控制器与远程I/O单元通过冗余Control Net网络连接, 实现PLC控制器对数据的集中处理。同时, PLC控制器通过冗余的工业以太网Eth er Net/IP将数据处理信息上传上位机系统, 以达到画面参数的集中显示与控制。

四、AB 1794FLEX I/O模块的简介

每个FLEX I/O系统至少包含一个适配器、一个端子基座和一个I/O模块。可通过FLEX电源 (1794-PS13或-PS3) 或任何其它兼容电源为系统供电。一个适配器根据现场需求最多可以同8个I/O模块通讯, 可混合并匹配使用I/O模块。

FLEX I/O模块插入端子基座, 连接到I/O总线和现场设备。由于没有直接接线到I/O模块, 所以用户能够带电插拔模块, 在不用断开现场接线、其它I/O模块或FLEX背板电源的情况下更换模块。消除了代价很高的停机时间以及系统的无效重起。I/O类型的选择灵活多样, 选择范围可以从数字量、模拟量到温度、运动控制。FLEX I/O允许用户在每个适配器上使用最多八个端子基座, 提供最大256数字量I/O点或96路模拟量通道。可以通过安装和接线选项混合匹配数字量和模拟量I/O, 提供成功统解决方案。

五、分布式I/O系统优点

FLEX I/O模块是分布式应用的灵活、模块化I/O。FLEX I/O提供较大体积、基于背板I/O的所有功I/O、端子类型以及网络来满足用户应用要求。

1.独允许用户将电力以菊花链方式连接到邻近的端子基座上。

2.一个适配器最多可以同8个I/O模块通讯。允许将适配器连接到:256点数字量输入/输出模块, 96路模拟量输入/输出模块, 混合模块, 满足需求。

3.模块化的FLEX I/O系统提供网络选择, 而且易于扩展。

4.与现场设备的接线工作几乎完全在端子基座上完成。

5.可调节的键形开关防止不正确的模块插入到预先配置的端子基座内。将I/O模块插入到端子基座内, 连接I/O总线和现场设备。

6.可带电插拔模块。不直接接线到模块使用户在更换模块时, 不需断开现场设备接线或系统电源。

结束语

分布式I/O在埕岛中心三号平台自控系统的成功应用, 节省了施工费用及电缆用量, 提高施工进度, 同时在单个远程I/O单元出现问题时, 不会影响整个系统运行, 大大方便了检修。冗余通讯模式实现了多通道通讯, 保证了数据传输可靠性, 在浅海油田自控系统具有很高的推广应用价值。

摘要:AB FLEX I/O是一种灵活的, 高性能价格比适合于分布式应用的模块化I/O系统, 它可以提供那些有大型、机架安装的I/O系统所能提供所有功能, 但是没有相应的空间要求。

I/O操作 篇10

R-83XX系列模块是一款以太网数据采集及控制模块, 它能够在一个模块中实现所有的I/O、数据采集和网络功能。

该模块能够帮助您组建一套经济的分布式监控解决方案, 满足各种工业应用的需求。

R-83XX系列模块使用的是标准的以太网, 能够接收来自传感器的I/O值, 并将这些I/O值输出给局域网、Intranet和Internet上的网络节点。由于采用了以太网技术, R-83XX模块能够组建一套低成本的分布式数据采集及控制系统, 将其应用于楼宇自动化、环境监控、设备管理和制造业。

R-83XX模块使用了一片10/100 Mb/s以太网芯片, 支持TCP/IP中的通用工业Modbus/TCP协议。R-83XX I/O模块能够同时将一个I/O数据流发送到8个以太网节点。

R-83XX系列以太网数据采集和控制模块可以当作一个以太网I/O数据处理中心工作。这款新产品不仅是一台标准的I/O设备, 而且还是一套带有本地控制功能、支持Modbus/TCP标准的智能化系统, 可方便与组态软件及HMI连接。用户可以很方便地在它的基础上开发各种基于以太网的应用。

上一篇:室外管线下一篇:《天窗》教学设计论文