接口协议实用13篇

接口协议
接口协议篇1

HART通信接口的软件设计包括AD5421的控制程序和HART协议通信程序。AD5421的控制程序主要是对环路电流4mA-20mA输出的控制和系统供电电压+3.3V输出的控制,较为简单。HART协议通信程序即为HART协议数据链路层和应用层的软件实现。HART协议通信遵从主从方式半双工通信,变送器作为从设备,除了处于突发模式外,只有在接收到主设备(上位机或手操器)发来的命令后才会作出应答。为了能及时接收到主设备发送的命令而又不影响主程序的正常运行,HART协议通信程序主要由串口接收发送中断实现。变送器在上电或看门狗复位后,首先主程序对HART协议通信部分进行初始化配置,包括设定ADuCM361内部UART模块工作方式、串行通信波特率、数据帧格式、清通信缓冲区、中断等,之后将其设置为等待状态,等待状态下,一旦上位机有命令发来,AD5700的载波检测口CD变为高电平,触发中断,启动接收并关闭载波检测中断,程序进入接收部分。命令帧数据接收完毕,经ADuCM361做出相应处理后,把要发回的应答帧内容放入通信缓冲区中,触发中断,进入发送程序,发回应答帧,由此完成一次命令的交换,然后再次进入等待状态,等待下一条主机命令。HART协议通信接口通过图3所示的中断调用子程序的方法,完成现场仪表和主机之间的通信,可以使主机完成对现场仪表的工作参数设置、测量结果读取、仪表状态检测等工作。

3应用效果

图4所示为HART变送器连线图,采样电阻RL(取值300Ω)串接于4mA-20mA回路中,将电流信号和HART信号转换为电压信号,通过RS232HART转换器与上位机通信。上位机软件采用第三方HART通信软件,测试结果表明可进行点对点HART通信,并能实现所支持的各条HART命令,在4mA-20mAHART总线上再接入一块第三方的HART涡轮流量计,也能正确进行多点HART通信,完全达到了HART协议技术要求。

接口协议篇2

1.1 “子板”方式

广域网串口应用中的通用实现方法是为所需的每一种物理协议提供一个独立的子板。一个支持EIA-232,EIA-449及V.35协议的系统,通常需要三个独立的子板以及三个不同的连接器。这种方法由于每种协议要求配置一块子板,因此系统需要对PCB子板、收发器芯片、连接器等进行管理,这样既浪费资源,又会使管理工作复杂化。

1.2 通用连接器方式

为解决“子板”方式的缺点,可使用一块母板及通用连接器。一个母板上有多种收发器芯片,可以满足多串口协议的要求,并可共用一些通用器件,同时可减少资源的浪费。在配置中,应注意因连接器的管脚较少而带来的问题,较好的办法是根据信号而不是根据协议来分配管脚,即给每一个信号分配一个通用管脚,而不管其物理协议如何定义。如对EIA-232,EIA-449,EIA-530,V.35和V.36来说,其TxD信号可连至连接器相同的管脚。即SDa信号连接到管脚2,SDb信号连接到管脚14。然后利用这对管脚来描述所有协议的发送信号TxD。

这种方法同样也会带来一个问题,即所有收发器的I/O线至通用连接器的管脚必须彼此共用。例如,一个V.28驱动器芯片中的发送数据信号线的接连接器DB-25的管脚2;同时,一个V.11驱动器芯片中的发送数据信号线要接至连接器的管脚2和14;而V.35驱动器芯片中发送数据信号线也会接至连接器的管脚2和14。这样,通用连接器的管脚2将同时接有三根信号线,管脚14接有两根信号线。这样,在这一配置中,所有的驱动器都必须具有三态特性,以禁止不必要的输出。若收发器没有三态特性,则需要使用一个多路复用器来选择相应的输出端。由此带来的另一个问题是收发器在禁止使用时会产生漏电电流。如果选择了V.28协议,其输出电压理论值为15V。此时对于V.11协议的驱动器会被禁用,而处于三态时,其输出漏电电压就必须足够低,才能使得连在同一连接器管脚的V.28协议的驱动器信号不受影响。如果在发送器与接收器之间有隔断开关,则开关也要考虑漏电情况。

1.3 串口的DTE/DCE模式切换

DTE/DCE的切换可通过选择不同的连接器转换电缆来实现,这样,在实现DTE/DCE转换时可最大程度地减小收发器的复杂性,但缺点是需要更换电缆,尤其是设备放置位置不便或DTE/DCE需要频繁切换时这一点尤为突出。

如果保持传输电缆不变,则可将收发器配置为两套以分别支持DTE、DCE方式。而将DTE收发器的驱动器输出与DCE收发器的接收器输入相连,而将接收器输入端与DCE收发器的驱动器输出相连。为了控制DTE或DCE方式,驱动器或接收器的输出必须为三态。当选择为DTE方式时,DCE芯片禁止,其驱动器和接收器处于三态,反之亦然。

该方法虽然解决了对电缆的频繁更换问题,但由于多用了一套收发器而使得设计成本大为提高,且串口板的体积也大了很多。

2 多协议串口通信的实现原理

传统设计中,针对某种协议通常应选择相应的收发芯片,如对于RS-232协议,常用DS-1488/DS-1489、MAX232或SP208等收发器芯片;而对于RS-449协议,则常使用SN75179B、MAX488、MAX490等收发器芯片。当同时使用RS-232、RS-422和V.35协议时,就需要多个收发器芯片来支持不同的协议。

现在,一些收发器的生产厂商研制出了多协议收发器芯片。Sipex是第一家生产出RS-232/ RS-422软件可选择协议芯片SP301的公司。这种芯片可将RS-232和RS-422收发器的电气特性综合到一个芯片中实现。其中SP50X系列产品最多可支持8种协议标准。其它生产厂家如Linear公司生产的LTC154x系列、LTC284x系列芯片也具有以上功能。用户可根据自己的需要选择适当的芯片。

图2为采用分立的收发器芯片与采用一片多协议收发器芯片实现多协议串口通信的通信卡。从图可知,前者实现的复杂度要远远大于后者,具体的性能比较如表1所列。

表1 两种方法实现串口通信的性能比较

分立器件板综合器件板供电电压+5V,-5V,+12V,-12V+5V所需收发器芯片数121支持的物理层协议RS-232,RS-422,RS-449,EIA-530,V.35,V.36RS-232,RS-422,RS-449,RS-485,EIA-530,EIA-530A,V.35,V.36协议选择方式跳线或开关软件或硬件(通过内部译码)串口板大小除了15个收发器芯片外还需其它硬件支持非常小功耗大约1W大约100mW~250mW除此之外,与分立收发器芯片相比,多协议收发器对驱动器使能控制和对输出漏电电流的处理要容易得多。当通过软件或硬件方法选择某一协议时,驱动器和接收器的电气参数将调整至适当的大小,电路内部将自动控制驱动器的输出电平、接收器的输入门限、驱动器和接收器的阻抗值以及每一物理层协议的常用模式范围。

另外,由于外部网络终端对V.35的需求,使得与V.35收发器的连接不能象其它协议那么简单。当使用分立收发器芯片时,常常通过采用昂贵的继电器开关电阻在选择其它协议接口时将V.35网络终端断开,或者要求用户每选择一个新的接口标准就改变一次终端模块,这样既浪费资源又会使接口电路变得复杂,因而不是一种理想的实现方法。而多协议串口芯片则自动提供适当的终端和片上开关来符合V.10、V.11、V.28和V.35电气协议,从而解决了电缆终端转换问题。

3 基于LTC1546/44的多协议通信

为了说明多协议串口芯片的工作原理,现以Linear公司的LTC1546/1544芯片为例进行分析。

3.1 LTC1546/LTC1544的性能

LTC1546芯片是一个3驱动器/3接收器的收发器,其主要特点如下:

带有软件可选的收发器可支持RS232、RS449、EIA530、EIA530A、V.35、V.36和X.21协议

可提供片上电缆终端

与LTC1543引脚兼容 与LTC1544配合可完成完整的DTE或DCE

工作在5V单电源

占位面积小。

LTC1544芯片是一个4驱动器/4接收器的收发器,其主要特点有:

软件可选的收发器支持RS232、RS449、EIA530、EIA530A、V.35、V.36和X.21协议

采用LTC1344A作为软件可选的电缆终端

采用LTC1543、LTC1544A或LTC1546可实现完整的DTE或DCE端口

与LTC1543同样工作于5V单电源。

这两种芯片均采用28引线SSOP表面贴封装,图3所示为其引脚排列。

由LTC1546/ LTC1544可组成一套完整的软件可选择DTE或DCE接口,以应用于数据网络、信息业务单元CSU和数据业务单元(DSU)或数据路由器中,它支持多种协议,电缆终端可在片上提供,因此不再需要单独的终端设计。其中,LTC1546每个端口的一半用来产生和适当终止时钟和数据信号。LTC1544则用来产生控制信号及本地环路返回信号(Local Loop-back,LL)。接口协议通过模式选择引脚M0、M1和M2来决定,具体选择方式见表2。

表2 通信协议的模式选择

LTC1546模式名称M2M1M0DCE/DTED1D2D3R1R2R3未用(缺省V.11)0000V.11V.11V.11V.11V.11 RS530A0010V.11V.11ZV.11V.11V.11RS5300100V.11V.11ZV.11V.11V.11X.210110V.11V.11ZV.11V.11V.11V.351000V.35V.35ZV.35V.35V.35RS449/V.361010V.11V.11ZV.11V.11V.11V.28/RS2321100V.28V.28ZV.28V.28V.28无电缆1110ZZZZZZ未用(缺省V.11)0001V.11V.11V.11ZV.11V.11RS530A0011V.11V.11V.11ZV.11V.11RS5300101V.11V.11V.11ZV.11V.11X.210111V.11V.11V.11ZV.11V.11B.351001V.35V.35V.35ZV.35V.35RS449/V.361011V.11V.11V.11ZV.11V.11V.28/RS2321101V.28V.28V.28ZV.28V.28无电缆1111ZZZZZZ由表2可知,如果将端口设置为V.35模式,模式选择引脚应当为M2=1,M1=0,M0=0。此时,对于控制信号,驱动器和接收器将工作在V.28(RS232)模式;而对于时钟和数据信号,驱动器和接收器将工作在V.35模式。

模式选择可通过控制电路或利用跳线将模式引脚接至地或Vcc来实现对引脚M0、M1和M2的控制,也可通过适当的接口电缆插入到连接器上实现外部选择控制。若选用后者,则当移开电缆时,全部模式引脚均不连接,即M0=M1=M2=1,此时LTC1546/ LTC1544进入无电缆模式。在这种模式中,LTC1546/1544的供电电流将下降到500μA以下,并且LTC1546/ LTC1544驱动器输出将被强制进入高阻状态。同时,LTC1546的R2和R3接收器应当分别用103Ω端接,而LTC1546和LTC1544上的其它接收器则应通过30kΩ电阻接到地。

通过DCE/DTE引脚可使能LTC1546中的驱动器3/接收器1、LTC1544中的驱动器3/接收器1和驱动器4/接收器4;LTC1544中的INVERT信号对驱动器4/接收器4起使能作用。可以通过下面两种方法中的一种将LTC1546/LTC1544设置为DTE或DCE工作模式:一种是将专门配有适当极性的连接器接至DTE或DCE端;另一种是通过专用DTE电缆或专用DCE电缆发送信号给LTC1546/LTC1544,同时使用一个连接器构成一种既适合DTE又适合DCE的工作模式。

3.2 典型应用

图4为一个带有DB-25连接器端口并可被设置为DTE或DCE工作模式的多协议串口通信电路,图中LTC1546/LTC1544芯片一边与连接器相连,另一边接至HDLC芯片,M0、M1、M2及DCE/DTE引脚接至EPLD硬件控制电路以实现对通信协议和工作模式的选择。其中DTE或DCE工作模式需要连接对应的电缆以保证正确的信号发送。例如,在DTE模式中,TxD信号通过LTC1546的驱动器1发送到引脚2和14。在DCE模式中,驱动器则将RxD信号发送到引脚2和14。

图4中,LTC1546采用一个内部容性充电泵来满足VDD和VEE。其中,VDD为符合V.28的正电源电压端,该端应连接一只1F的电容到地;VEE为负电源电压端。一个电压倍增器在VDD上将产生大约8V电压,而电压反相器则将在VEE上产生大约-7.5V的电压。四只1μF电容均为表面贴装的钽或陶瓷电容,VEE端的电容最小应为3.3μF。所有电容耐压均应为16V,同时应尽可能放置在LTC1546的附近以减少EMI干扰。

图4 用LTC1546/LTC1544芯片实现多协议串口通信(DTE/DCE可选)

在V.35模式中,LTC1546中的开关S1和S2将导通,同时应连接一个T型网络阻抗,以将接收器的30kΩ输入阻抗与T网络终端并联起来,但不会显著影响总输入阻抗,因此对于用户来说,这种模式下的电路设计与其它模式下完全相同。

由于LTC1546是3驱动器/3接收器的收发器,LTC1546是4驱动器/4接收器的收发器,所以如果同时采用RL、LL和TM信号,则LTC1546/LTC1544就没有足够的驱动器和接收器。因此,可用LTC1545来替换LTC1544。LTC1545为5驱动器/5接收器的收发器,它能够处理多个可选的控制信号,如TM和RL。

接口协议篇3

接入网所覆盖的范围可以由三类接口来界定,如图1所示。接口的标准化、综合性直接影响到接入网的建设成本及接入网能承载的业务能力,为此,ITU-T综合考虑各种需要,终于通过了关于接入网和本地交换机之间标准化的V5.1和V5.2接口的建议[1,2]。

V5接口是一种在接入网中适用范围广、标准化程度高的新型开放的数字接口,对于设备的开发应用、多种业务的发展和网络的更新起着重要的作用。V5接口的标准化代表了重要的网络演进方向,影响深远。其意义在于交换机通过此接口可以支持多种类型的用户接入,而且V5接口的开放性意味着交换机和接入网的技术和业务演进完全独立开来。接入网的发展可以不受交换机的限制,使得接入网市场完全开放。

一、V5接口协议结构

窄带V5接口包括V5.1和V5.2接口。V5.1接口由1条2048Kb/s链路构成,通过时隙传递公共控制信号,支持模拟电话接入,基于64Kb/s的综合业务数字网基本接入(2B+D)和用于半永久连接的、不加带外信令信息的其他模拟接入和数字接入。这些接入类型都具有指配的承载通路分配,即用户端口与V5.1接口内承载通路有固定的对应关系。V5.2接口按需要可以由1~16个2048Kb/s链路构成,除支持V5.1接口的业务外,还支持ISDN PRI(30B+D)接入,其基于呼叫的时隙分配使得V5.2接口具有集中功能。V5.1接口是V5.2接口的子集,V5.1接口应当能够升级到V5.2接口。

V5接口协议由3层组成,接入网侧和本地交换机侧呈不对称布置,层与层之间的信息传递采用原语实现,而同层子层间的信息传递则采用映射。

V5接口物理层由1~16条2048Kb/s的链路构成,电气和物理特性符合G.703建议,帧结构符合G.704/G.706建议。每帧由32个时隙组成,其中:时隙TS0用作帧定位和CRC-4规程;时隙TS15、TS16和TS31可以用作通信通路(C通路),运载信令信息和控制信息,通过指配来分配;其余时隙可用作承载通路。

V5接口的数据链路层仅对于C通路而言。第二层协议(LAPV5)规范以建议Q.921中规定的LAPD协议和规程为基础,允许将不同的信息流灵活地复用到C通路上去。第二层协议分为两个子层:封装功能子层(LAPV5-EF)和数据链路子层(LAPV5-DL)。此外,第二层功能中还应包括帧中继功能(AN-FR)。

V5接口的第三层协议簇包括PSTN协议、控制协议、链路控制协议、BCC协议和保护协议(后三种协议为V5.2接口特有)。PSTN协议负责处理与PSTN业务有关的信令;控制协议负责用户端口状态指示与控制,协调两侧在网管控制下的数据指配;链路控制协议负责协调和控制AN、LE两侧的链路阻塞、链路解除阻塞和链路标识功能;BCC协议用来把一特定2048Kb/s链路上的承载通路基于呼叫分配给用户端口;保护协议提供V5.2接口在出现故障时通信路径切换的保护功能。

如图2所示,当第三层协议有信令信息需要发送时,通过数据链路子层(LAPV5-DL),请求封装功能子层(LAPV5-EF),用给定的封装功能地址传送数据链路子层端到端数据。

二、V5接口的实现

笔者曾参与IDS2000综合数字通信系统(接入网侧)V5.2接口的开放研制工作。IDS2000综合数字通信系统是电力自动化研究院为了满足电力通信网发展的需要而开发的一种综合接入设备。该设备具备V5接口,使得IDS2000系统可以很方便地通过开放接口和大型交换设备互连,取代了原先接入大型交换设备时所用的音频Z接口或专用接口。

V5接口协议分3层结构。物理层和数据链路层部分功能由硬件实现,这在超大规模集成电路飞速发展的今天,难度已不是太大。Mitel公司生产的大规模E1接口芯片MT9075就是一种很合适的芯片[3]。MT9075是一种单E1接口,综合了成帧器和LIU。重要特性包括数据链路接入、告警、中断、环回和诊断,并内嵌了两个HDLC控制器(MT8952),特别适用在V5接口(封装功能子层功能和HDLC协议类似)。

V5接口的第三层协议包含内容较多,由软件实现。本文主要结合嵌入式系统编程来介绍V5接口的第三层软件结构,对于协议细节的实现不多赘述。

1.实时多任务操作系统[4]

目前,嵌入式应用领域的一个发展倾向是采用实时多任务操作系统RTOS(Real Time Operating System)。RTOS的广泛使用与应用的复杂化有关。过去1个单片机应用程序所控制的外设和履行的任务不多,采取1个主循环和几个顺序调用的子程序模块即可满足要求;但现在1个嵌入式控制系统可能要同时控制/监视很多外设,要求实时响应,有很多处理任务,各个任务之间有很多信息传递,如果仍采用原来的方法,存在两个问题:一是中断可能得不到及时响应,处理时间过长;二是系统任务多,要考虑的各种可能也多,各种资源若调度不当就会造成死锁,降低软件可靠性,程序编写任务量成指数增加。正是这种情况的出现,推动着RTOS的应用迅速发展。

对于V5接口,系统软件工作量相当大,包括5个核心协议功能的处理,须管理很多定时器,有很多用户端口需要监视,并且要求实时处理,若采用传统的软件编程方法,很难实现。在IDS2000系统中,笔者采用VRTX实时多任务操作系统[5]作为开发平台,大大减轻了软件的工作量,而采用面向对象的编程方法和

事件驱动的消息机制,使得协议程序具有高可靠性、可控、可观测、易于维护和管理。 2.V5接口软件框图

如图3所示,V5接口软件主要包括:

(1) 数据链路层模块(仅包括数据链路子层功能,封装功能子层由硬件板完成);

(2) PSTN协议处理模块;

(3) 控制协议处理模块(包括用户端口状态机、指配控制状态机、公共控制状态机);

(4) 链路控制协议处理模块(包括链路控制状态机、链路控制L3状态机);

(5) BCC协议处理模块;

(6) 保护协议模块;

(7) V5接口AN侧系统管理模块;

(8) V5接口AN侧资源管理模块;

(9) 定时器管理模块;

(10) 消息处理模块;

(11) 用户端口模块;

(12) 10ms定时中断。

上述模块中,模块1~7完成V5接口协议的核心功能。其中,数据链路层模块对模块2~7所产生的消息进行处理,交由V5硬件接口板完成封装功能,再发送给LE侧实体;PSTN协议处理模块主要功能是建立用户端口状态和LE侧国内协议实体之间的联系;控制协议模块用于表示用户端口状态指示与控制,还和系统启动、重新启动、指配有关;V5接口AN侧系统管理模块是协议功能正常实现的重要部分,在AN和LE中,不同的FSM之间或第二层协议实体之间没有直接的通信,而是通过系统管理来协调V5接口各个协议实体之间的操作。另外,系统管理负责从AN或LE的各种功能模块中接收和处理有关状态和故障的信息。系统管理还是维护台或网管系统与V5接口之间的桥梁,它负责接收维护命令,并对V5接口执行相应的操作,随时向上层网管报告系统的运行状况。

模块8~12完成V5接口协议的辅助功能。其中用户端口模块负责用户端口状态扫描与控制,直接与硬件端口联系;AN侧资源管理模块配合BCC协议处理模块完成V5接口中BCC协议功能;消息处理模块是为了减轻操作系统的负担设立的,它负责协同操作系统管理各模块的消息队列;定时器管理模块负责产生、管理系统中所需要的定时器,当定时器溢出时,发送消息至相应模块;10ms定时中断程序负责调度系统中需周期性运行的任务,采用“信号量”(semaphores)的通信机制完成。

3.有限状态机

在上述程序模块中,存在大量的有限状态机(FSM),如控制协议中的用户端口FSM、公共控制FSM、BCC协议中的承载通路连接FSM等。有限状态机是描述通信协议过程的一般方式,是一种面向对象的描述方法,与具体实现程序无关。有限状态机具有有限状态集,在任意给定的时刻,必有惟一确定的状态,在某状态下必须依赖于外部输入的特定消息触发,才能引起状态转移或执行某种任务。

有限状态机对于系统其他软件而言相当于一个“黑匣子”。它可以接收有限的消息组,也可以发送特定的消息组,但其内部结构不为系统其他部分所知。它的功能完全由它接收和发送消息顺序所决定。

有限状态机的这种描述方式很适合用面向对象的方法实现。在传统的实现方法中,状态变量和状态表可以在状态机模块外被访问,易于遭到破坏。面向对象的实现方法提供了一种更加结构化和更加直观的FSM实现方法,更利于“数据隐藏”,而且这些优点随着FSM规模的增大越发明显。我们只须要定义一个FSM基类,利用封装、继承和多态性的特点,就很容易从先前定义的基类中派生出所需要的FSM,大大减少了软件的工作量,软件也易于维护。

4.定时器的实现机制

定时器对于正确实现通信协议功能有着很重要的作用。V5接口协议中存在大量的定时器,当话务量较大时,可能有数百个定时器同时运行。定时器的设计是正确完成V5接口协议功能的一个重要部分。

本系统中由定时器管理进程负责管理V5接口中所有的定时器。由于各种定时器所要求的精度各不相同,所选择时间的长度对各定时器进行监视和计数累计是问题的关键:时间间隔太小,影响系统运行效率;时间间隔太长,影响定时器的精度。为了解决这个问题,系统中设定了三种不同分辨率的定时器:10ms、100ms和1s(分辨率指计数时间间隔)。

若某应用进程须要使用定时器,首先要向定时器管理进程发送一消息,消息中应包含申请定时器的分辨率、预置计数值、溢出后应发送的消息等信息。定时器管理进程收到该消息后,根据定时器的分辨率将其放到合适的定时队列中,启动定时。若定时器计数为零,则表示该定时器溢出,定时器管理进程应向相应的应用进程发送溢出消息,同时应释放该定时器。应用进程若主动要求放弃一定时器,则应向定时器管理进程发送一释放定时器消息。消息中应包含所申请定时器的标号、分辨率以及溢出目标进程、目标对象等。定时器管理进程接收到此消息后,在合适的定时器队列中寻找到该定时器后,将其释放。 定时器管理进程管理其他各应用进程所申请的定时器。在定时器管理进程中,有三个链表分别用于存放这3种不同分辨率的定时器。

定时器管理进程完成以下一些基本功能:

(1)管理10ms、100ms和1s三种定时器链表。

(2)当10ms定时间隔到,应遍历10ms定时器链表,完成对链表中各定时器的计数处理。若有定时器溢出,则向相应的进程发送溢出消息,并从定时器链表中释放该定时器。同样,当100ms或1s的定时间隔到时,也应对100ms或1s定时器链表作相同处理。

(3)处理从其他进程接收到的消息。当收到从其他进程发送的申请定时器的消息时,应在相应分辨率的定时器链表中插入所申请的定时器;在接收到从其他进程来的释放定时器的消息后,应寻找到该定时器,并将其释放。

5.编写可重入函数

V5接口中有大量的函数需要编写。和传统的编程环境不同,本系统中,V5接口软件运行在多任务环境上,函数的可重入性(reentrancy)显得很重要。

所谓可重入函数是指一个可以被多个任务调用的过程,任务在调用时不必担心数据是否会出错。在编写函数时应尽量只使用局部变量,对于要使用的全局变量需要加以保护(如采用关中断、信号量等措施),这样构成的函数一定是可重入的;而编译器是否具有可重入的库,与它所服务的操作系统有关,如DOS下的Borland C和Microsoft C/C++等就没有可重入函数库,这是因为DOS是一个单用户、单任务的操作系统。

为了确保每一个调用函数的任务控制自己私有变量,在一个可重入的C函数中,将这样的变量申明为局部变量,C编译器将这样的变量存放在调用栈上或寄存器里。在VRTX操作系统下编写可重入的函数,须要遵循以下原则:

(1)将所有局部变量申明为auto或寄存器(register)类型;

(2)尽量不要使用static或extern变量,不可避免使用全局变量时,需加以保护;

(3)用VRTX库函数sc_gblock分配大的数据结构。

接口协议篇4

近年来,短消息业务得到了飞速发展,但是由于采用“存储转发(store-forward)”机制,其应用受到了一定的限制。USSD(Unstructured Supplementary Service Data,非结构化补充数据业务)是在GSM短消息系统基础上开发的数据交互技术,采用面向连接、提供透明通道的交互式会话方式,具有比短消息服务更高的传输速率和更强的交互性。USSD的诸多优点使其成为了一种能够适应大多数普通移动用户大部分日常需求的有效客户服务接入方式。

1 USSD应用接口协议

1.1 网络结构

如图1所示,USSD业务中心可以通过USSD网关为手机用户提供使用梦网业务、访问sP资源的接入手段。USSD业务网关是外部服务提供商(SP)与移动网内USSD中心之间的中介实体,其中,USSD网关与SP交互采用了USSD接口协议。通过USSD服务,手机用户可以使用SP提供的手机支付、股票信息、交通信息(航班时刻、火车时刻、公交行车路线查询等)、话费查询、车主服务(交通违章通知、车牌年检通知、驾驶证年审通知等)、考试成绩查询(中考、高考等)和游戏等服务。

1.2 USSD应用接口协议原理

USSD接口协议与HTTP(Hyper Text Transfer Protocol),FFP(File Transfer Protocol),SMTP(Simple Message Transfer Protocol)等协议一样同处于TCP/IP网络模型的应用层。USSD服务在TCP层必须有惟一对应的端口号,以保证TCP层向应用层的正确提交。协议采用的长连接方式,是指SP与USSDC以C/S方式建立TCP连接,用于双方信息的相互提交。TCP/IP连接建立后,由Client端(SP)发起建立应用层连接,然后进行数据传输。当信道上没有数据传输时,客户端应发送链路检测包以维持此连接,服务端如果在一定时间内未收到客户端的数据则断开此连接。

2 USSD接口协议的分析和设计

对于处于应用层的这样一个协议,为了减少程序编写的复杂性,采用了分层的方式来组织,如图2所示,每一层都建立在下层之上,目的都是向它的上一层提供一定的服务,而把如何实现这一服务的细节对上一层屏蔽。从移动运营商USSD服务器送来的信息,经过USSD层,USSD扩展层的解析和处理,最后交给USSD应用逻辑层;从USSD应用逻辑层发出的内容,经过USSD扩展层和USSD层的处理和封装,最后由移动运营商的USSD服务器发送到用户手机。

接口协议篇5

一、EPP接口协议介绍

EPP协议最初是由Intel、Xircom、Zenith三家公司联合提出的,于1994年在IEEE1284标准中。EPP协议有两个标准:EPP1.7和EPP1.9。与传统并行口Centronics标准利用软件实现握手不同,EPP接口协议通过硬件自动握手,能达到500KB/s~2MB/s的通信速率。

1.EPP引脚定义

EPP引脚定义如表1所列。

表1 EPP接口引脚定义

引脚号SPP信号EPP信号方 向说 明1StrobenWrite输出指示主机是向外设写(低电平)还是从外设读(高电平)2~9Data0~7Data07输入/输出双向数据总线10AckInterrupt输入下降沿向主机申请中断11BusynWait输入低电平表示外设准备好传输数据,高电平表示数传输完成12PaperOut/EnDSPare输入空余线13SelectSpare输入空余线14AutofdnDStrb输出数据选通信号,低电平有效15Error/FaultnDStrb输入空余线16InitializeSpare输出初始化信号,低电平有效17Selected PrinternAStrb输出地址数据选通信号,低电平有效18~25GroundGroundGND地线2.EPP接口时序

EPP利用硬件自动握手实现主机与外设之间的高速双向数据传输,软件只须对相应端口寄存器进行读/写操作。

(1)EPP写操作时序如图1所示。

CPU实现向外设写数据的操作步骤如下:

①程序对EPP数据寄存器执行写操作;

②nWrite置低;

③CPU将有效数据送到数据总线上;

④nDStrb(nAStrb)变低(只要nWait为低);

⑤主机等待nWait变高,确认数据发送成功;

⑥主机等待nWait变高,确认数据发送成功;

⑦EPP写周期结束。

(2)EPP读操作时序如图2所示。

CPU实现从外设读数据的操作步骤如下:

①程序对相应EPP端口寄存器执行读操作;

②nDStrb(nAStrb)置低(如果nWait为低);

③主机等待nWait为高,确认数据发送成功;

④主机从并行口引脚读取数据;

⑤nDStrb(nAStrb)置高;

⑥EPP读操作周期结束。

3.EPP端口寄存器

EPP接口除了保留SPP的3个端口寄存器以外,还新增了5个端口寄存器,如表2所列。

表2

地 址端口名称方 向基地址+0SPP数据端口写基地址+1EPP状态端口读基地址+2EPP控制端口写基地址+3EPP地址端口读/写基地址+4EPP地址端口读/写基地址+5EPP数据端口读/写基地口+6未定义(32位传输)读/写基地址+7未定义(32位传输)读/写EPP状态端口寄存器

WAITINTRUSER1USER2USER3××TMOUTWAIT:Wait状态位(1有效);

INTR:中断请求状态位(1有效);

USER1~USER3:用户自定义;

TMOUT:保留(EPP1.7)超时标志位(EPP1.9)。

EPP控制端口寄存器。

××DIRIRQENASTRBINITDSTRBWRITEDIR:方向位(1输入,0输出);

IRQEN:中断使能位(1有效);

ASTRB:地址选通位(0有效);

INIT:初始化(1有效);

DSTRB:数据选通位(0有效);

WRITE:读/写状态位(0:写,1:读)。

读取接口状态和控制接口都只须对相应的端口寄存器进行操作。以初始化为例:

读操作初始化:outportb(port+2,0x24);

//port为SPP数据端口地址

写操作初始化:outportb(port+2,0x04);

//port+2为EPP控制端口地址

4.EPP1.7和EPP1.9

EPP接口最先有EPP1.7标准定义,由于硬件厂商的原因,EPP现有两个标准:EPP1.7和EPP1.9,可以在BIOS/设备/并行口(BIOS/Peripheral Setup/Parallel Port Mode)方式中进行设置。两者有如下不同点:

(1)EPP状态端口寄存器的最低位bit0,在EPP1.9中定义为TMOUT。在EPP操作时序中,如果PC机数据(地址)选通信号变低后,且在10μs时间内,外设未能将nWait置为低,则TMOUT置为1,表示延时。

(2)EPP1.9标准中,只有当nWait为低时,才能开始一个操作周期;但在EPP1.7中,无论nWait状态如何,nAstrb(nDstrb)都会被置低,从而开始一个新的数据(地址)操作周期。

二、EPP接口传输数据的一个实例

在某单片机系统中,须要将单片机系统中数据存储器的大量数据传输到PC机中进行分析处理。EPP接口(采用EPP1.7标准)硬件电路及软件流程图如图3~图5所示。

GAL译码电路方程式为/O1=/I1*/I2*/I3*I4*/I5,EPP接口选通地址为2

000H。当单片机执行如下指令:MOV DPTR,#2000H

MOVX @DPTR,A

就将寄存器A中的数据锁存到数据总线上,便于PC机利用EPP接口进行读操作。

C语言例程:

#define SPPDATA 0x0378 //定义各寄存器地址

#define SPPSTAT 0x0379

#define SPPCNTL 0x037A

#define EPPADDR 0x037B

#define EPPDATA 0x037C

#include

FILE *fp;

Int data;

Long i;

int k;

fp=fopen(filename,"wb"); //打开要存储数据的文件

outportb(SPPCNTL,0x24);

//向控制端口发00100100代码,初始化为读操作模式for(i=0;i<524288;i++)

{

while(!((inportb(SPPSTAT))&0x80))

//查询是否发送完毕

{}

data=inportb(EPPDATA); //读数据

fputc(data,fp); //将数据存入文件

}

fclose(fp); //关闭文件

单片机汇编语言程序为:

FLAG1 BIT P1.7 ;标志位

FLAG2 BIT P3.4

STADD EQU 0000H ;要传输数据段的起始地址

NUM EQU FFFFH ;要传输数据端的字节个数

COMMUN:MOV DPTR,#STADD

COMM1:MOVX A,@DPTR

PUSH DPH

PUSH DPL

MOV DPTR,#EPP_CE

MOVX @DPTR,A

POP DPL

POP DPH

SETB FLAG1 ;将P1.7置高

CLR FLAG2 ;将P3.4置低

JB FLAG1,$;查询P1.7为低,即nDStrb为低,表示PC读操作已完成

SETB FLAG2 ;将P3.4置高

SETB FLAG1 ;将P1.7置高

INC DPTR

CJNE NUM,COMM1 ;循环NUM次

RET

实际应用该接口电路,能实现1MB/s的传输速率,并且性能稳定可靠。

接口协议篇6

2 PS/2接口硬件

2.1 物理连接器

一般,具有五脚连接器的键盘称之为AT键盘,而具有六脚mini-DIN连接器的键盘则称之为PS/2键盘。其实这两种连接器都只有四个脚有意义。它们分别是Clock(时钟脚)、Data数据脚、+5V(电源脚)和Ground(电源地)。在PS/2键盘与PC机的物理连接上只要保证这四根线一一对应就可以了。PS/2键盘靠PC的PS/2端口提供+5V电源,另外两个脚Clock(时钟脚)和Data数据脚都是集电极开路的,所以必须接大阻值的上拉电阻。它们平时保持高电平,有输出时才被拉到低电平,之后自动上浮到高电平。现在比较常用的连接器如图1所示。

2.2 电气特性

PS/2通讯协议是一种双向同步串行通讯协议。通讯的两端通过Clock(时钟脚)同步,并通过Data(数据脚)交换数据。任何一方如果想抑制另外一方通讯时,只需要把Clock(时钟脚)拉到低电平。如果是PC机和PS/2键盘间的通讯,则PC机必须做主机,也就是说,PC机可以抑制PS/2键盘发送数据,而PS/2键盘则不会抑制PC机发送数据。一般两设备间传输数据的最大时钟频率是33kHz,大多数PS/2设备工作在10~20kHz。推荐值在15kHz左右,也就是说,Clock(时钟脚)高、低电平的持续时间都为40μs。每一数据帧包含11~12个位,具体含义如表1所列。

表1 数据帧格式说明

1个起始位总是逻辑08个数据位(LSB)低位在前1个奇偶校验位奇校验1个停止位总是逻辑11个应答位仅用在主机对设备的通讯中表中,如果数据位中1的个数为偶数,校验位就为1;如果数据位中1的个数为奇数,校验位就为0;总之,数据位中1的个数加上校验位中1的个数总为奇数,因此总进行奇校验。

2.3 PS/2设备和PC机的通讯

PS/2设备的Clock(时钟脚)和Data数据脚都是集电极开路的,平时都是高电平。当PS/2设备等待发送数据时,它首先检查Clock(时钟脚)以确认其是否为高电平。如果是低电平,则认为是PC机抑制了通讯,此时它必须缓冲需要发送的数据直到重新获得总线的控制权(一般PS/2键盘有16个字节的缓冲区,而PS/2鼠标只有一个缓冲区仅存储最后一个要发送的数据)。如果Clock(时钟脚)为高电平,PS/2设备便开始将数据发送到PC机。一般都是由PS/2设备产生时钟信号。发送时一般都是按照数据帧格式顺序发送。其中数据位在Clock(时钟脚)为高电平时准备好,在Clock(时钟脚)的下降沿被PC机读入。PS/2设备到PC机的通讯时序如图2所示。

当时钟频率为15kHz时,从Clock(时钟脚)的上升沿到数据位转变时间至少要5μs。数据变化到Clock(时钟脚)下降沿的时间至少也有5 μs,但不能大于25 μs,这是由PS/2通讯协议的时序规定的。如果时钟频率是其它值,参数的内容应稍作调整。

上述讨论中传输的数据是指对特定键盘的编码或者对特定命令的编码。一般采用第二套扫描码集所规定的码值来编码。其中键盘码分为通码(Make)和断码(Break)。通码是按键接通时所发送的编码,用两位十六进制数来表示,断码通常是按键断开时所发送的编码,用四位十六进制数来表示。

3 PS/2接口的嵌入式软件编程方法

PS/2设备主要用于产生同步时钟信号和读写数据。

3.1 PS/2向PC机发送一个字节

从PS/2向PC机发送一个字节可按照下面的步骤进行:

(1)检测时钟线电平,如果时钟线为低,则延时50μs;

(2)检测判断时钟信号是否为高,为高,则向下执行,为低,则转到(1);

(3)检测数据线是否为高,如果为高则继续执行,如果为低,则放弃发送(此时PC机在向PS/2设备发送数据,所以PS/2设备要转移到接收程序处接收数据);

(4)延时20μs(如果此时正在发送起始位,则应延时40μs);

(5)输出起始位(0)到数据线上。这里要注意的是:在送出每一位后都要检测时钟线,以确保PC机没有抑制PS/2设备,如果有则中止发送;

(6)输出8个数据位到数据线上;

(7)输出校验位;

(8)输出停止位(1);

(9)延时30μs(如果在发送停止位时释放时钟信号则应延时50μs);

通过以下步骤可发送单个位:

(1)准备数据位(将需要发送的数据位放到数据线上);

(2)延时20μs;

(3)把时钟线拉低;

(4)延时40μs;

(5)释放时钟线;

(6)延时20μs。

3.2 PS/2设备从PC机接收一个字节

由于PS/2设备能提供串行同步时钟,因此,如果PC机发送数据,则PC机要先把时钟线和数据线置为请求发送的状态。PC机通过下拉时钟线大于100μs来抑制通讯,并且通过下拉数据线发出请求发送数据的信号,然后释放时钟。当PS/2设备检测到需要接收的数据时,它会产生时钟信号并记录下面8个数据位和一个停止位。主机此时在时钟线变为低时准备数据到数据线,并在时钟上升沿锁存数据。而PS/2设备则要配合PC机才能读到准确的数据。具体连接步骤如下:

(1)等待时钟线为高电平。

(2)判断数据线是否为低,为高则错误退出,否则继续执行。

(3)读地址线上的数据内容,共8个bit,每读完一个位,都应检测时钟线是否被PC机拉低,如果被拉低则要中止接收。

(4)读地址线上的校验位内容,1个bit。

(5)读停止位。

(6)如果数据线上为0(即还是低电平),PS/2设备继续产生时钟,直到接收到1且产生出错信号为止(因为停止位是1,如果PS/2设备没有读到停止位,则表明此次传输出错)。

(7 输出应答位。

(8) 检测奇偶校验位,如果校验失败,则产生错误信号以表明此次传输出现错误。

(9)延时45 μs,以便PC机进行下一次传输。

读数据线的步骤如下:

(1)延时20μs;

(2)把时钟线拉低

(3)延时40μs

(4)释放时钟线

(5)延时20μs

(6)读数据线。

下面的步骤可用于发出应答位;

(1)延时

15μs;(2)把数据线拉低;

(3)延时5μs;

(4)把时钟线拉低;

(5)延时40μs;

(6)释放时钟线;

(7)延时5μs;

(8)释放数据线。

4 用于工控机的双键盘设计

工控机通常要接标准键盘,但是为了方便操作,常常需要外接一个专用键盘。此实例介绍了在工控PC机到PS/2总线上再接入一个自制专用键盘的应用方法。

该设计应能保证两个键盘单独工作,而且相互不能影响。因此,不能直接把专用键盘和标准键盘一起接到工控PC的PS/2口。鉴于这种情况,本设计使用模拟开关CD4052并通过时分复用工控PC的PS/2口,来使在同一个时刻只有一个键盘有效,从而解决上述问题。其硬件原理图如图3所示。其中P2口和P1口用于键盘扫描电路(图中未画出),P0.0为数据端,P0.1为时钟端,P0.2为模拟开关选通端。由于专用键盘不需要接收工控PC机的命令,所以软件中并不需要写这部分相应的代码。

通过软件可在专用键盘复位后把P0.2清0,以使模拟开关CD4052打开相应的通道。这时工控PC的标准键盘将开始工作。标准键盘可以完成工控PC刚启动时对外设检测的应答。复位后的专用键盘不停地扫描有没有按键,如果有键按下则识别按键,并且按照预先的设计进行编码,同时调用发送程序并通过PS/2口发送到工控PC。此时模拟开关关闭相应通道(将P0.2置1),专用键盘接入工控PC PS/2口的时钟线和数据线而工作,但标准键盘被模拟开关从PS/2的时钟线和数据线中断而不工作,这样,双键盘便可时分复用同一个工控PC机的PS/2口。相应的发送子程序如下:

#define DATA P00 用P0.0做数据线

#define CLK P01 用P0.1做时钟线

#define INHIBIT P02 用P0.2做CD4052的INH端

#define PORTR P1 用P1口做读入口

#define PORTW P2 用P2口做写出口 可以实现64个自定义键

void send(uchar x)/***function for send a char da-ta***/

{

uchar i,temp,char_temp;

bit flag_check=1;

INHIBIT=1;//disable standard keyboard

delay_ ms(3);

temp=x;

for(i=0;i<8;i++)//find the number of 1 in this uchar x is odd or not

{

char_temp=temp&0x01;

if(char_temp==0x01)

{

flag_check=!flag_check;

}

temp=temp>>1;

}

CLK=1;//send 1 to P1 then read P1

while (!CLK) //if CLK is low wait

{

;

}

CLK=1;DATA=1;//send 1 to P1 then read P1

if(CLK==1)

{

delay_us(30);//

}

if(CLK==1&&DATA==1)//send data

{

DATA=0;//start bit 0

delay_us(10);

CLK=0;

delay_us(5);//

temp=x;

for(i=0;i<8;i++)//send 8 bits LSBfirst

{

CLK=1;

delay_us(5);

char_temp=temp&0x01;

if(char_temp==0x01)

{

DATA=1;

}

else

{

DATA=0;

}

//DATA=(bit)(temp&0x01);

//LSB

delay_us(10);

CLK=0;

delay_us(5);

temp=temp>>1;

}

CLK=1;//send check bit

delay_us(5);

DATA=flag_check;

delay_us(10);

CLK=0;

delay_us(5)

CLK=1;//send stop bit

delay_us(5);

DATA=1;

delay us10

CLK=0

delay_us(5);

CLK=1;

delay_us(30); 

CLK=1;DATA=1;//send 1 to P1 then read P1

if(CLK==1&&DATA==0)

{

return; //pc is sending data to mcu, go to

receiving function

}

INHIBIT=0; //enable standard keyboard

接口协议篇7

2.1 连接器

一般,具有五脚连接器的键盘称之为AT键盘,而具有六脚mini-DIN连接器的键盘则称之为PS/2键盘。其实这两种连接器都只有四个脚有意义。它们分别是Clock(时钟脚)、Data熓据脚牎ⅲ5V(电源脚)和Ground(电源地)。在PS/2键盘与PC机的连接上只要保证这四根线一一对应就可以了。PS/2键盘靠PC的PS/2端口提供+5V电源,另外两个脚Clock(时钟脚)和Data熓据脚牰际羌电极开路的,所以必须接大阻值的上拉电阻。它们平时保持高电平,有输出时才被拉到低电平,之后自动上浮到高电平。现在比较常用的连接器如图1所示。

2.2 电气特性

PS/2通讯协议是一种双向同步串行通讯协议。通讯的两端通过Clock(时钟脚)同步,并通过Data(数据脚)交换数据。任何一方如果想抑制另外一方通讯时,只需要把Clock(时钟脚)拉到低电平。如果是PC机和PS/2键盘间的通讯,则PC机必须做主机,也就是说,PC机可以抑制PS/2键盘发送数据,而PS/2键盘则不会抑制PC机发送数据。一般两设备间传输数据的最大时钟频率是33kHz,大多数PS/2设备工作在10~20kHz。推荐值在15kHz左右,也就是说,Clock(时钟脚)高、低电平的持续时间都为40μs。每一数据帧包含11~12个位,具体含义如表1所列。

表1 数据帧格式说明

1个起始位 总是逻辑0

8个数据位 (lsb)低位在前

1个奇偶校验位 奇校验

1个停止位 总是逻辑1

1个应答位 仅用在主机对设备的通讯中

表中,如果数据位中1的个数为偶数,校验位就为1;如果数据位中1的个数为奇数,校验位就为0;总之,数据位中1的个数加上校验位中1的个数总为奇数,因此总进行奇校验。

2.3 PS/2设备和PC机的通讯

PS/2设备的Clock(时钟脚)和Data熓据脚牰际羌电极开路的,平时都是高电平。当PS/2设备等待发送数据时,它首先检查Clock(时钟脚)以确认其是否为高电平。如果是低电平,则认为是PC机抑制了通讯,此时它必须缓冲需要发送的数据直到重新获得总线的控制权(一般PS/2键盘有16个字节的缓冲区,而PS/2鼠标只有一个缓冲区仅存储最后一个要发送的数据)。如果Clock(时钟脚)为高电平,PS/2设备便开始将数据发送到PC机。一般都是由PS/2设备产生时钟信号。发送时一般都是按照数据帧格式顺序发送。其中数据位在Clock(时钟脚)为高电平时准备好,在Clock(时钟脚)的下降沿被PC机读入。PS/2设备到PC机的通讯时序如图2所示。

当时钟频率为15kHz时,从Clock(时钟脚)的上升沿到数据位转变时间至少要5μs。数据变化到Clock(时钟脚)下降沿的时间至少也有5 μs,但不能大于25 μs,这是由PS/2通讯协议的时序规定的。如果时钟频率是其它值,参数的内容应稍作调整。

上述讨论中传输的数据是指对特定键盘的编码或者对特定命令的编码。一般采用第二套扫描码集所规定的码值来编码。其中键盘码分为通码(Make)和断码(Break)。通码是按键接通时所发送的编码,用两位十六进制数来表示,断码通常是按键断开时所发送的编码,用四位十六进制数来表示。

3 PS/2接口的嵌入式软件编程方法

PS/2设备主要用于产生同步时钟信号和读写数据。

3.1 PS/2向PC机发送一个字节

从PS/2向PC机发送一个字节可按照下面的步骤进行:

(1)检测时钟线电平,如果时钟线为低,则延时50μs;

(2)检测判断时钟信号是否为高,为高,则向下执行,为低,则转到(1);

(3)检测数据线是否为高,如果为高则继续执行,如果为低,则放弃发送(此时PC机在向PS/2设备发送数据,所以PS/2设备要转移到接收程序处接收数据);

(4)延时20μs(如果此时正在发送起始位,则应延时40μs);

(5)输出起始位(0)到数据线上。这里要注意的是:在送出每一位后都要检测时钟线,以确保PC机没有抑制PS/2设备,如果有则中止发送;

(6)输出8个数据位到数据线上;

(7)输出校验位;

(8)输出停止位(1);

(9)延时30μs(如果在发送停止位时释放时钟信号则应延时50μs);

通过以下步骤可发送单个位:

(1)准备数据位(将需要发送的数据位放到数据线上);

(2)延时20μs;

(3)把时钟线拉低;

(4)延时40μs;

(5)释放时钟线;

(6)延时20μs。

3.2 PS/2设备从PC机接收一个字节

由于PS/2设备能提供串行同步时钟,因此,如果PC机发送数据,则PC机要先把时钟线和数据线置为请求发送的状态。PC机通过下拉时钟线大于100μs来抑制通讯,并且通过下拉数据线发出请求发送数据的信号,然后释放时钟。当PS/2设备检测到需要接收的数据时,它会产生时钟信号并记录下面8个数据位和一个停止位。主机此时在时钟线变为低时准备数据到数据线,并在时钟上升沿锁存数据。而PS/2设备则要配合PC机才能读到准确的数据。具体连接步骤如下:

(1)等待时钟线为高电平。

(2)判断数据线是否为低,为高则错误退出,否则继续执行。

(3)读地址线上的数据内容,共8个bit,每读完一个位,都应检测时钟线是否被PC机拉低,如果被拉低则要中止接收。

(4)读地址线上的校验位内容,1个bit。

(5)读停止位。

(6)如果数据线上为0(即还是低电平),PS/2设备继续产生时钟,直到接收到1且产生出错信号为止(因为停止位是1,如果PS/2设备没有读到停止位,则表明此次传输出错)。

(7 输出应答位。

(8) 检测奇偶校验位,如果校验失败,则产生错误信号以表明此次传输出现错误。

(9)延时45 μs,以便PC机进行下一次传输。

读数据线的步骤如下:

(1)延时20μs;

(2)把时钟线拉低

(3)延时40μs

(4)释放时钟线

(5)延时20μs

(6)读数据线。

下面的步骤可用于发出应答位;

(1)延时15μs;

(2)把数据线拉低;

(3)延时5μs;

(4)把时钟线拉低;

(5)延时40μs;

(6)释放时钟线;

(7)延时5μs;

(8)释放数据线。

4 用于工控机的双键盘

设计 工控机通常要接标准键盘,但是为了方便操作,常常需要外接一个专用键盘。此实例介绍了在工控PC机到PS/2总线上再接入一个自制专用键盘的应用方法。

接口协议篇8

DSP64X具有32条外部引脚接口,通过DSP复位期间对特定的芯片管脚使能,可以配置HPI接口支持16位宽的数据总线和32位宽的数据总线两种模式(文中一律简称为HPI 16模式和HPI 32模式)。不管是HPI 16模式还是HPI 32模式,HPI都是以字传输来实现对DSP存储空间的访问。

1HPI外部接口描述

通过配置,外部HPI信号可以与各种主机部件实现接口。配置HCS 与HDS[1:2] 三个锁存信号的电平,可产生一个低电平有效的内部锁存信号HSTROBE 。HSTROBE 表示内部产生的选通信号,在其下降沿会对主机驱动的输入控制信号HCNTL[1:0],HHWIL,HR/W 进行采样。

2 HPI的寄存器配置

HPI是通过特定的寄存器配置来实现外部主机与CPU之间的通讯的。DSP64X中共有4个寄存器:HPI数据寄存器(HPID)、HPI地址寄存器(HPIA)、HPI控制寄存器(HPIC)、HPI传输请求控制寄存器(TRCTL)。主机能对HPIC、HPIA、HPID三个寄存器进行读/写访问,而CPU能对HPIC、HPIA、TRCTL进行访问。外主机通过访问HPI实现与DSP传输的基本流程为:主机首先通过配置外部引脚到适当的电平,写地址寄存器HPIA,配置主机所要访问的DSP存储空间的地址;然后改变外部控制信号,发出访问主机接口的数据寄存器的命令,主机接口根据命令产生相应请求提交给EDMA控制器。如果EDMA控制器忙,则向HPI发送忙信号,HPI将外部HRDY信号拉高,表示DSP忙,使主机进入等待状态,直到EDMA完成当前操作。如果EDMA 控制器处于空闲状态,将直接响应HPI的请求,并对HPI送来的地址进行译码,送到相应的EDMA通道进行存取。

3HPI的总线访问描述

DSP64X的HPI总线访问可分为HPI 16和HPI 32两种模式。为保证数据正确传输,在任何一个HPI进行传输(包括HPIC、HPIA和HPID寄存器访问)之前,都必须保证HRDY 信号为低电平,否则传输的正确性不能得到保证。

3.1配置为HPI 16模式的总线访问

配置为HPI 16模式传输,在对两个半字访问时,HCNTL[1:0]和HR/W 必须要设定为相同的值。对于第一个半字传输,HHWIL应配置为低电平;而对于第二个半字的传输,HHWIL必须配置高电平。HPI 16模式数据传输包括HAS 信号不使用时读、写操作和HAS 信号使用时的读、写操作4种情况。

3.1.1锁存控制信号

在信号配置时,是否使用HAS 信号,锁存控制信号的方式也不相同。如果HAS 没有使用,并且连接在高电平,则由HSTROBE 的下降沿锁存控制信号;如果使用HAS ,则由HAS 的下降沿锁存控制信号,此时HAS 信号的下降沿必须领先于HSTROBE 信号的下降沿。

3.1.2HPID寄存器的读操作

(1) 固定地址读HPID模式。在一次固定地址读中,当HPI向EDMA发送请求时,此时HRDY 信号应被置高电平,直到被请求的数据被加载如HPID寄存器;在第二个半字读取的时,因为请求数据已经存在于HPID寄存器之中,所以HRDY 信号应为低电平。

(2)自增地址读HPID模式。如果是第一次HPID寄存器读操作,那么在HSTROBE 信号的下降沿之后,HRDY 要被配置为高电平。当第一个数据由EDMA送入内部缓存后,数据应地址自动指向下一个,HPI继续执行连续的数据捕获。当前读操作完成时,如果缓存中已有准备好的数据,HRDY 信号应该在下一次读操作时保持有效,所以在检测到HRDY 有效前,外部主机不能停止读周期。

3.1.3HPID寄存器的写操作

(1)固定地址写HPID模式。在一次固定地址写HPID寄存器操作中,主机要向HPID依次传输2个半字,写访问结束(由HSTROBE 的第二个上升沿标示)后,HPID里的32位数据开始按照HPIA寄存器指定的地址进行传输。因此在检测到HRDY 信号为低电平之前,主机不应该终止一个写周期。

(2)自增地址写HPID模式。自增地址写HPID寄存器的数据应先被写入内部缓存区,直到缓存半满或者写操作结束时,DSP再启动EDMA进行内部传输。此时,由于数据已存在于缓存区,HPID可以立即接收下一个写数据,HRDY 信号会在主机进行下一次写操作时保持有效,所以在检测到HRDY 有效前,外部主机不能停止写周期。

3.1.4HPIC和HPIA寄存器访问操作

接口协议篇9

在电力、能源与化工等自动化工业控制领域中,现有技术工业控制监控系统与智能电子设备(IED)之间的通讯组网方式是:将一定数量的智能电子设备串接为一组作为一个通讯总线,然后将该通讯总线连接到通讯管理机的通讯采集端口进行该通讯总线上各智能电子设备的数据采集,这种单通讯端口独立总线运行的方式,常常由于通讯总线因故断开后,导致该通讯端口上连接的所有智能电子设备通讯的中断。如图1所示,图中各字母含义如下:

LANx,表示通讯管理机的第几个以太网口,如LAN1表示第一个以太网口;

Px,表示通讯管理机的通讯串口编号,如P1表示第一个串口;

IEDxy,表示第几个总线上的第几个智能电子设备,如IED11表示总线1上的第1个智能电子设备;IED2n则表示总线2上的第n个智能电子设备;

Prx,表示端口协议,如Pr1表示端口协议1。

智能电子设备都是通过独立串行总线连接通过通讯端口连接到通讯管理机上的,各总线之间没有通讯,由于采用的是单协议单端口的通讯方式,当总线因故中断后,尤其当重要监控智能电子设备的通讯中断后,对整个工业控制系统的可靠稳定运行造成极大影响。

另外,如果通讯总线上各个智能电子设备有两个不同通讯协议端口时,由于通讯协议不统一,导致通讯组网时难以将对不同通讯协议的智能电子设备采集到的数据进行整合,而只能采取接入其中一个协议端口的方案,这样,就使得不同通讯协议端口的智能电子设备不能接入到一个通讯总线上来,导致兼容性太差,且浪费了智能电子设备的资源。如图12所示,各种具有双协议的智能电子设备只能通过相同协议的端口连接到通讯总线上来,且各总线之间没有通讯,大大浪费了设备资源

二、原理研究

本研究旨在避免上述现有技术的不足之处,对现有技术工业控制系统中智能电子设备通讯网络组态进行改进,提出一种通讯稳定可靠、兼容性强的智能电子设备可靠通讯的方法。

为实现本研究目的,提出一种智能电子设备可靠通讯的方法,智能电子设备监控网络包括后台监控系统、交换机、通讯管理机和智能电子设备子网络;所述智能电子设备子网络包括至少一个智能电子设备IED;所述智能电子设备IED包括单协议端口设备和双协议端口设备;尤其是,所述通讯管理机包括至少两个通讯端口;所述后台监控系统和所述智能电子设备子网络之间可靠通讯的方法包括如下步骤:

1、采集准备监控的所述智能电子设备子网络中智能电子设备IED的基本信息;

2、将确定被监控的智能电子设备组成智能电子设备子网络,并将该智能电子设备子网络和所述通讯管理机的通讯端口连接;

3、根据步骤1中所述智能电子设备子网络中智能电子设备IED的基本信息来确定监控网络的设备组态;

4、建立包括监控网络设备组态信息的通讯网络工程文件;

5、将步骤4所述的通讯网络工程文件配置完成后即可生成通讯管理机主程序,根据监控网络的设备组态确定监控网络的数据冗余方式。所述的通讯端口为通讯管理机上的串口。

步骤1所述的采集准备监控的所述智能电子设备子网络中智能电子设备IED的基本信息,包括采集所述智能电子设备子网络中智能电子设备IED的标识符ID及其可运行的通讯协议、智能电子设备的数量、智能电子设备的重要程度。

步骤2所述的智能电子设备子网络连接方式为线型、星型、环网或链式。所述的通讯管理机为两个以上时,各通讯管理机之间用UDP方式连接进行数据交换、数据同步或切换控制。

步骤3所述确定监控网络的设备组态包括如下步骤:如果所述智能电子设备子网络中智能电子设备IED均为单协议端口设备,就采用通讯端口冗余的方式;如果所述智能电子设备子网络中智能电子设备IED均为双协议端口设备,就采用协议冗余或端口协议混合冗余方式;根据所述智能电子设备子网络中智能电子设备IED数量及其监控的重要程度确定通讯管理机冗余方式。

所述通讯端口冗余是将通讯管理机上的通讯端口根据主/从通讯端口的先后顺序进行通讯端口的通讯冗余定义;所述协议冗余是将所述具有双协议端口的智能电子设备IED根据协议口的主/从协议口先后顺序进行通讯冗余定义;所述通讯管理机冗余是为监控网络配置两台以上的通讯管理机来连接所述智能电子设备子网络。

步骤4所述的监控网络设备组态信息包括智能电子设备子网络信息、通讯管理机信息、通讯管理机通讯端口信息、通讯端口运行的通讯协议和设置通讯管理机通讯端口的冗余关系。

步骤5所述的监控网络的数据冗余方式包括:单通讯管理机双通讯端口冗余方式、单管理机双协议冗余方式、双通讯管理机双通讯端口冗余、双通讯管理机双协议冗余和双通讯管理机双协议双通讯端口冗余方式。

与现有技术相比较,本研究具有以下有益效果:

1、智能电子设备和后台监控系统通讯稳定可靠;本研究改变了现有技术智能电子设备通讯组网方式,将通讯管理机通讯端口的采集的数据进行冗余处理,采用了单管理机双端口冗余、单管理机双协议冗余、双管理机双端口冗余、双管理机双协议冗余或双管理机双端口双协议的冗余模式,这种有效地组网策略和设备组态,将智能电子设备按照通讯端口冗余的方式扩展了智能电子设备和通讯管理机的通讯链路,形成了设备通讯的热备份,保证了智能电子设备和后台监控系统通讯的可靠稳定。

2、兼容性强;现有技术智能电子设备网络只能接入相同协议的智能电子设备,本研究为智能电子设备定义了两套参数,组成端口协议冗余模式,可以将具有两个协议端口的智能电子设备同时接入同一通讯网络,使得任何种类的智能电子设备都能接入网络,兼容性更强。

三、方案实施

具体实施方式 以下结合附图所示之优选实施例作进一步详述。根据工程实际情况,首先需要对准备建立通讯监控的智能电子设备进行基本信息整理(包括采集的点及运行的通讯协议),确立智能电子设备的组网方案。基本原则是:如果智能电子设备只有一个通讯协议口,那么就采取端口主/从冗余的方式;如果智能电子设备支持两个协议端口,那么就需要考虑端口协议冗余或双端口双协议冗余方式。另外,根据智能电子设备数量的多少及监控的重要程度,确定需要的管理机数量及管理机冗余的方式。在工程设计中,针对不同的使用情况,将通讯管理机进行灵活的组网,可以配置为单管理机双端口冗余、单管理机双协议冗余、双管理机双端口冗余、双管理机双协议冗余、双管理机双协议双端口冗余的数据冗余组网方式。

按照上述工程中的实际情况,本研究可有多个实施例,下面根据数据冗余组网方式来对实施例进行描述。

实施例一:单管理机双端口冗余组网方式。

图2所示是单管理机双端口冗余组网方式,该组网方式将智能电子设备IED串接在一起,引出的两根主干线分别接到通讯管理机的两个通讯串口上。通讯管理机的两通讯串口是主/从工作方式,两通讯串口不同时工作,分为工作口和备用口,工作口具备收发权限,备用口无发送权限,处于端口数据流检测状态。当工作端口无数据流时,具备发送权限的工作端口停止发送数据,将权限交给备用口,由备用口启动发送权限。P1口的主干线因故断开后,作为备用口德P2口不能检测到端口的数据流,此时,P1口主动停止本端口的报文发送,P2口停止数据流检测接受发送权限,改由P2口去完成智能电子设备的通讯。这样,当其中一个通讯主干线因故断开后,就可以很快地由备用端口进行通讯管理,保证了智能电子设备和后台监控系统通讯的实时可靠。

实施例二:单管理机双协议端口冗余组网方式。

图3所示是单管理机双协议端口冗余组网方式,该组网方式的通讯主干线同样有两路网络分支,不同的是两路网络分支所运行的通讯协议可以不同,分主从协议口,每个智能电子设备信息点包含两套参数分别对应不同的两种协议,智能电子设备两个协议端口正常时都处于收发状态,但只有主协议口可以完成参数设置或控制及事件处理,并且每一智能电子设备两协议端口控制权限可以交互。当工作端口所有智能电子设备通讯都中断后,则控制权限交给冗余协议端口完成。如果某智能电子设备其中一个协议端口通讯中断后,也可由该智能电子设备的另一个协议端口去完成通讯。当协议口P1的Pr1协议挂接的所有智能电子设备通讯中断后,则可以通过协议端口P2的Pr2协议继续进行通讯;如果智能电子设备IED11的Pr1协议端口故障不能通讯中断后,IED11的信息采集由Pr2协议口通过P2端口去完成。这样解决了智能电子设备双协议不能同时接入的问题。

实施例三:双管理机双端口冗余组网方式。

图4所示是双管理机双端口冗余组网方式,该组网方式由两台通讯管理机组成,也即双管理机方式;该组网方式将智能电子设备IED串接在一起,通讯主干线同实施例一相同,也有两路网络分支,但是两路网络分支分别接入到两台通讯管理机通讯端口上,通讯管理机之间用UDP方式连接进行数据交换、数据同步或切换控制。在该种方式下,两通讯管理机的智能电子设备信息点完全一致,采用热备份工作方式,可完成对多客户端进行数据信息的转发,两台通讯管理机都可以进行信息转发。

实施例四:双管理机双协议冗余组网方式。

图5所示是双管理机双协议冗余组网方式,该组网方式由两台通讯管理机组成,具有双协议端口的智能电子设备通过两路网络分支分别和通讯管理机相连,在该种方式下,两通讯管理机接入的智能电子设备是完全一致的,两通讯管理机之间通过UDP方式连接为热备份工作方式,可完成对多客户端进行数据信息的转发,两台通讯管理机之间可以进行信息转发。该方式将本通讯管理机双端口协议冗余后再把智能电子设备相同协议的两端口进行端口冗余,可以充分保证智能电子设备信息采集的可靠。在该种工作方式下,通讯管理机的通讯口分为主协议主口、主协议从口、从协议主口、从协议从口这四种类型。这几种协议端口的优先权限按如下过程循环:主协议主口、从协议从口、主协议从口、从协议主口。

实施例五:双管理机双端口双协议冗余组网方式。

图6所示是双管理机双端口双协议冗余组网方式,该组网方式在将本通讯管理机双端口协议冗余后再把通讯管理机相同协议的两端口进行端口冗余,可以充分保证设备信息采集的可靠。在该种工作方式下,通讯管理机的通讯口分为主协议主口、主协议从口、从协议主口、从协议从口这四种类型。这几种类型口的优先权限按如下过程循环:主协议主口、从协议从口、主协议从口、从协议主口。

通过以上四种端口类型的逻辑优先权限的判断,然后以UDP信息同步的方式交互两通讯管理机的信息,以达到两通讯管理机间不同端口类型的报文收发及控制权限的管理。两通讯管理机的遥测、遥脉以变化率方式同步,事件、遥信变位和控制命令则实时同步。这样有效地控制了网络流量,又由于两通讯管理机间是以非连接的UDP方式进行信息同步,可以很好地提高实时性,同时也起到了可靠通讯的目的。

通过以上五种实施例的组网方式,智能电子设备的通讯组网方式确定后,就需要配置该工程的设备组态。在应用中,先建立一个工程文件,以后该工程的设备组态信息都在该工程目录中,然后在该工程节点下添加需要的通讯管理机,再为各通讯管理机添加通讯串口,并设置串口运行的通讯协议,接着设置通讯管理机串口间的冗余关系(端口冗余或协议冗余)。这样,基本的组网策略就配置完成了。剩下的工作就是为通讯管理机的通讯口添加智能电子设备及设备采集的信息点。当智能电子设备的信息点添加完成后,再为转发协议端口添加需要转发的信息点。如果是双通讯管理机冗余方式,还需要配置好完成数据同步的以太网端口的IP地址,这是完成双通讯管理机冗余的关键。这些配置都完成后,就可以生成通讯管理机运行所需的设备配置文件,然后下载到通讯管理机,引导通讯管理机协议程序运行,进行配置文件正确性的基本检测。

接口协议篇10
接口协议篇11

1.1 蓝牙协议体系

蓝牙协议规范所措述的协议栈模式如图1所示。

蓝牙体系结构中的协议可分为四层:

核心协议:基带控制协议(Baseband)、链路管理协议(LMP)、逻辑链路控制应用协议(L2CAP)、服务发现协议(SDP);

电缆替代协议:RFCOMM;

电话传送控制协议:TCS二进制、AT命令集;

可选协议:PPP、UDP/TCP/IP、OBEX、WAP、vCard、vCal、IrMC、WAE。

在协议中,规定了为基带控制器、LMP、硬件状态及控制寄存器提供命令接口的主机控制器接口(HCI)。在不同的应用模式下,HCI所处的位置不同。它可以位于L2CAP的下面,也可以在L2CAP之上。

1.2 电缆替代协议应用模式

基于ETSI标准的TS07.10信令的RFCOMM协议,提供了一个基于L2CAP协议之上的串口仿真应用模式。蓝牙协议1.0版中,RFCOMM提供的上层服务模式主要有三种:对9针RS-232接口仿真模式、空Modem仿真模式和多串口仿真模式。典型的RFCOMM应用模式框图如图2所示。

1.3 蓝牙嵌入式应用模式

仅仅以RFCOMM协议为基础,作为串口的电缆替代应用,无形中限制了蓝牙设备的应用范围,降低了蓝牙设备的应用价值。目前计算机与外部设备的接口种类繁多,比较常见的有RS-232、RS-485、Parallel Port、CAN总线、SPI总线、I2C总线等。如果要使蓝牙设备在各种场合发挥作用,必须使蓝牙设备具备适合这些应用场合的多种接口功能。使用DSP数字信号处理器作为嵌入式控制器,不仅实现蓝牙物理设备的初始化、蓝牙高层协议,而且利用其接口灵活的特点,可以方便地对蓝牙电缆替代协议进行有效扩展。具体应用模式如图3所示。

2 系统硬件结构

本系统的构成在硬件上分为两个部分,蓝牙基带和射频部分采用爱立信(ERICSSON)公司提供的蓝牙模块ROK101007;嵌入式控制器采用美国TI公司的TMS320VC54X系列的DSP数字信号处理器。

2.1 ERICSSON蓝牙模块

ROK101007是根据蓝牙规范1.0版(Bluetooth 1.0B Version)而设计的短距离蓝牙通信模块,它包括三个主上部分:基带控制芯片、Flash存储器和Radio芯片。它工作在2.4GHz~2.5GHz的ISM频段,支持声音和数据的传输,其主上功能参数有:

Bluetooth 1.0B预认证;

2级RF射频功率输出;

提供FCC和ETSI纠错处理;

最大460 KB/s UART数据传输速率;

提供UART、USB、PCM、I2C等多种HCI接口;

提供内部晶振;

内部预制HCI框架;

点到点、点到多点操作;

嵌入式屏蔽保护。

ROK101007特别适合计算机及设备、手持设备、端口设备使用。其内含的蓝牙协议构架及内部系统框图如图4、图5所示。

2.2 DSP处理器

TMS320C54X是16-bit定点DSP,适合无线通信等实时嵌入式应用的需要。C54x使用了改进的哈佛结构。CPU具有专用硬件算术运算逻辑,大量的片内存储器、增强的片内外设以及高度专业化的指令集,使其具有高度的操作灵活性和运行速度。主要特点如下:

运算速度快:指令周期为25/20/15/12.5/10ns,运算能力为40/50/66/80/100MIPS;

优化的CPU结构:内含1个40位的算术运算逻辑单元,2个40位的累加器,2个40位的加法器,1个17×17的硬件乘法器和1个40位的桶形移位器。有4条内部总线和2个地址产生器等。先进的CPU优化结构可以使DSP高效地实现无线通信系统中的各种功能。

低功耗方式:54x系列DSP可以在3.3V或2.7V电压下工作,而有些DSP内核采用1.8V电压工作以减小功耗。

智能外设:除了标准的串行口和分时复用(TDM)串口外,54x还提供了多路缓冲串口(McBSP)和外部处理器通信的HPI并行接口。

2.3 系统构成

本系统中,采用单5V电源供电,嵌入式系统控制器与蓝牙模块之间的HCI接口采用UART方式。硬件构成框图如图6所示。整个系统分为四个部分:发射机、嵌入式控制器、电源管理、接口逻辑。

(1)发射机由蓝牙模块ROK101007和阻抗为50Ω的天线构成。初始化阶段,模块接收控制器通过UART发送的HCI命令,实现蓝牙设备的复位、启动、地址查询、跳频算法、自动寻呼等初始化操作,与附近的蓝牙设备建立可靠的物理链路,并对物理链路进行相应的加密。在数据传送阶段,接收控制器(HCI驱动模块)送来的HCI数据包,经过模块中HCI固件(HCI Firmwire)转化为基带数据包并送给基带协议层(Baseband)处理,基带对上层送来的数据进行解码,将其变为可以发送的位数据流,按照设定的跳频算法,采用高斯频移键控(GFSK)编码方式通过天线送出去。接收数据时,以相反的过程将接收到的数据进行编码,组合成HCI数据包格式并通过UART口送给控制器。具体的收发执行过程可以参考ROK101007数据及应用手册以及蓝牙协议相关部分。

(2)嵌入式控制器由TI的定点数字信号

处理器TMS320C54x、Flash Memory、SRAM组成,完成对蓝牙模块的初始化、数据传送、协议实现等功能。

(3)接口控制逻辑包括应用接口和控制接口。控制接口为控制器的HPI接口,主要实现系统的在线特殊控制和Flash在线编程数据传送口。HPI控制接口通过DSP的HPI主机接口实现。应用接口包括RS-232/RS-485串行接口逻辑、并行接口逻辑(如IEEE488总线)、SI同步串口逻辑,在不同的嵌入式应用中,分别通过不同的接口形式实现本嵌入式系统与主设备控制器的接口。应用接口通过DSP的片内外设(enhanced peripherals)或者通用I/O端口模拟实现。(4)电源管理。系统通过单5V电源供电,可以简单地从主设备接口中获取电源,无须另加电源器件。电源管理模块采用TI专用电路,提供两路电压输出,+3.3V工作电压和+1.8V控制器内核工作电压。

接口协议篇12

6.2.3 service 协议数据收发流程

service 正确绑定至协议栈后,就可以接收sar end驱动层传入的该协议类型数据报文并对其处理,根据处理的结果选择转发或丢弃;对于协议栈下发的报文,也可以方便地进行相应协议封装,再交给 end驱动发送。其收发流程框图如图 6-1 所示。

图6-1 service 收发流程示意图

接收流程(虚线箭头所示):

1)sar 模块收到报文,产生中断,进入接收中断处理例程

2)调用end_rcv_rtn_call将报文返回给协议栈(reserved 中存放协议类型)

3)mux层询问该报文的协议类型

4)sar驱动层将 reserved 中的类型返回给mux层

5)mux层根据协议类型将报文提交给相应的 service.

6)service 解封装后,调用 do_protocol_with_type将报文提交给协议栈

发送流程(实线箭头所示):

1)协议栈通过mux层发送报文

2)mux 层将报文传给预先绑定的 service

3)service 对数据进行封装后,return false,将数据返回 mux 层

4)mux 层将数据发送到 sar 模块相应的 pvc 接口

5)sar 模块相应的 pvc 接口发送该报文。

6.3 rfc1483协议报文处理

由于 rfc1483数据报文的封装格式比较简单,我们将该类型报文的封装、解封装例程放在 end 驱动中实现,以提高系统对该类型报文的处理效率。

6.3.1 rfc1483 报文封装格式

rfc1483 标准描述了atm网络上承载无连接网络互连业务(即路由和桥接的协议数据单元)的两种不同方法。第一种方法允许在一条 atm 虚电路上复用多个协议,这是需要在所传送的 pdu 前加上 ieee802.2 逻辑链路控制信头,以此来表示所传递的 pdu 的协议,这种方法称为 llc 封装; 第二种方法是一个高层协议由一条atm虚电路来承载,这种方法成为基于 vc 的复用。

6.3.1.1 llc 封装

在 llc 封装中,路由协议通过在 pdu 前加一个ieee802.2 llc 信头来进行标识, ieee802.2 llc 信头后接 ieee802.1a 子网络附属点(snap)信头。在 llc 类型 1 的操作中,llc 信头包括 3 个字节,如下:

dsap

ssap

ctrl

在用于路由协议的llc 封装中,llc信头编码有两种格式:一种为 0xfe-fe-03, 用于说明后接的是 iso 路由协议的 pdu;另一种为 0xaa-aa-03,用于说明后接的是非 iso 路由协议。控制字段编码为 0x03,用于说明后接的是无编号信息的命令 pdu。

对于 iso 路由协议pdu,其aal5 cpcs-pdu 净荷字段的格式为

llc 0xfe-fe-03

iso pdu (up to 2^16 - 4 octets)

对于非 iso 路由pdu (如 ip 协议),其封装格式为

llc

0xaa-aa-03

oui

00-00-00

ethernet type(2字节)

非iso pdu (up to 2^16 - 4 octets)

(其中,如果是 ip 报文的话,ethernet type 值为 0x0800)

对于桥接协议报文,在 llc 封装的 snap 信头中应标识出桥接媒体的类型。与非 iso 路由协议的封装一样,llc信头编码值 0xaa-aa-03 表示存在 snap 信头, snap 信头中的oui值是 802.1组织编码 0x00-80-c2,桥接媒体的实际类型由2字节的 pid 来标识。此外, pid还标识是否在封装的桥接 pdu 中保留源帧校验序列(fcs)。以最常见的以太网/802.3为例,用于封装 802.3 pdu的aal5 cpcs-pdu净荷帧格式如下

llc 0xfe-fe-03

oui 0x00-80-c2

pid 0x00-01 or 0x00-07

pad 0x00-00

mac 目的地址

mac 源地址

mac 帧其它内容

帧校验(如果 pid是 00-01)

6.3.1.1 基于vc 的复用

在基于 vc 的复用中,不同的协议报文可以通过不同的 vc 通道传递,因此在 aal5的cpcp-pdu 净荷上就不再包含明确标识所承载协议的信息了,使得处理开销最小。

路由协议的 pdu 在 aal5 cpcs-pdu 的净荷中直接承载。

桥接协议的 pdu 和llc封装格式描述相同,但仅包含 pid 字段后的内容。其 aal5 cpcs-pdu 净荷字段格式如下所示:

pad 0x00-00

mac 目的地址

mac 源地址

mac 帧其它内容

帧校验(由vc 连接特性决定)

6.3.2 rfc1483 报文的封装处理

上层协议在调用 muxsend 之前,会先调用 endaddressform 函数进行二层数据封装,我们在这个函数里实现ip 报文到ethernet类型报文的数据封装。sarendsend函数里会调用 atmsrv_encap 进行 ethernet 报文到 aal5 相应协议类型的封装。

6.3.3 rfc1483 报文解封装处理

在中断接收处理函数里,会调用 atmsrv_decap 解除atm协议封装,同时将二层协议类型存于 mblkpkthdr.reserved 中,由 endpacketdataget通知 mux。

7增加 nat 支持

目前已经有很多for vxworks 的第三方 nat 协议产品, 而且 windriver 公司自己也推出了tornado 开发平台下的 nat 组件, 但价位实在太高。 由于该协议本身实现的难度不大,而且有 linux 或 bsd 的相关模块可供参考和移植,所以我们决定自己实现这个协议。难点主要在于nat收发处理函数的绑定, nat 端口地址转换hash表的建立及查找算法的实现。

7.1  nat 模块主处理流程

主要包括lan口和wan口的ip地址转换。如图 7-1 所示。

图7-1 nat 主处理流程示意图

7.2 nat 模块初始化

7.2.1 nat 数据结构初始化

1) nat_session结构,记录每一连接的连接信息:

struct nat_session

{

uchar ip_proto; //协议类型

struct in_addr src_addr, dst_addr, new_addr; //源地址,目标地址,转换后地址

/* port numbers are in host uchar order: */

union

{

/* for tcp _and_ udp: */

struct { uint16 src_port, dst_port, new_port; } tcp; //端口

/* for icmp: */

struct { uint16 src_ident, new_ident; } icmp; //identification

} u;

enum nat_session_state state; //连接状态

unsigned long timestamp; //时间戳

nat_alg *alg; //应用层网关函数指针

int alg_use; //标志,是否需要应用层网关

nat_session *parent; //ftp中指向控制连接session的指针

nat_session *next_hash; //hash表下一表项

};

2)nat_interface接口结构

struct nat_interface

{

nat_interface *next; //指向下一个接口结构

struct in_addr ipaddress; //接口地址(转换地址)

/* pointer to table of session structures, and hash table: */

nat_session *sessions; //指向session结构表

nat_session **hashtable; //指向hash结构表

int next_session;

/* pointer to table of fragment structures */

nat_fragment *fragments; //指向fragment结构表

int frag_queued; //记录保存有多少个分片队列

/* stats - counts of sessions */ //各种计数器

uint32 tcp_out, udp_out;

uint32 icmp_q_out, icmp_err_out, icmp_err_in;

uint32 discard_in, discard_out, refused_in, del_early;

};

7.2.2 nat 收发处理函数的绑定

仔细分析 vxworks 协议栈代码后,觉得使用 _ipfilterhook 绑定 nat 接收报文处理函数的方式比较可行,该钩子函数在协议栈接收到数据报文时被调用,函数输入输出格式如下:

bool natipfilterhookrtn

(

struct ifnet rcvifnet, /* 数据接收的接口*/

struct mbuf **m, /* 数据报文地址 */

struct ip **ip, /* ip 头部地址 */

int hlen /* ip 头的长度 */

)

返回值: 为 false时表示报文处理正常,协议栈可继续转发或处理

为true 时指示系统丢弃该报文

由于无法找到协议栈输出报文的钩子,我们打算把输出报文 nat 转换放在 _ipfilterhook 的 lan 口钩子中处理,即在 lan口报文进入协议栈之前就更改源ip和端口地址。但这样做的缺点是:此时系统还没有检索过该报文的路由目的接口,需要人为增加查找路由表算法,当发现是发往指定 wan 口时再行转换,处理的效率较低。

为充分利用协议栈的报文路由处理功能,决定采用更改协议栈代码的方式,在 ip_output 函数适当位置处人为增加一个钩子 _func_natoutput,重新编译 vxworks 协议栈库函数。 这样,nat 模块初始化时即可将nat输出报文处理函数绑定至该钩子。函数的输入输出关系格式如下:

int natoutput

(

struct mbuf** m0, /* 数据报文地址 */

struct ip **ip, /* ip 头部地址 */

struct in_ifaddr* ia /* 报文目的接口 */

)

返回值: ok 或 error (error 时将丢弃并释放该报文)

7.3 nat模块主要算法

7.3.1 nat 端口地址转换hash算法

napt 转换表查找算法可分为按端口查找和按地址查找两种。在实际的 adsl接入环境中,局端很少会为一个连接分配多个 ip,因此我们采用按端口查找的算法来简单实现。

1) session 结构数组的初始化

nat初始化时根据系统支持的最大转换数目建立一个按端口分布的 nat_session结构数组(nat_session 节点的定义见7.2.1), 同时建立一个指向nat_session 的空 hash 表。hash节点结构如下:

typedef struct nat_hash_bucket_

{

struct nat_hash_bucket_ *next; //指向下一个节点

struct nat_hash_bucket_ *prev; //指向前一个节点

unsigned nat_session *psession; //指向nat链表中相应的节点

}nat_hash_bucket;

2) 新建 session

get_free_session 在session静态表(结构数组)中获得一个free session,并将其从hash表中unlink出来。查找的依据为时间戳, 顺序遍历session表,直到找到第一个超时的session。若未找到,则覆盖当前指针指向的session。

填充该 session 结构,返回该session 所对应的端口号。根据 tcp/udp 报文的源 ip 和源端口号计算出 hash 头,增加到 hash 头所对应的链表后。其中,hash 头的算法如下:

local uint16 ipnat_hash_fn(ipaddrtype addr1,

ipaddrtype addr2,

uint16 port1,

uint16 port2)

{

uint16 bucket;

bucket = addr1 >> 16;

bucket ^= addr1 & 0xffff;

bucket ^= port1;

bucket ^= addr2 >> 16;

bucket ^= addr2 & 0xffff;

bucket ^= port2;

bucket = bucket % ipnat_hashlen;

return(bucket);

}

转换后的 tcp/ip 报文源ip变为 wan口ip,源端口变为session 索引值,这样做的优点是:外部返回的报文可以通过tcp/ip报文的目的端口号直接定位到 session 数组中,查找的速度最快。

3) 查找 session

通过 tcp/udp 报文的源 ip 和源端口号计算出 hash 头,然后遍历该头所对应的链表,直到找到相匹配的hash 节点。

4) 删除 session

收到 tcp/udp 连接关闭请求后,根据目的端口号找到 session 数组,释放该 session, 并将其从 hash 表中 unlink 出来。

7.3.2 tcp/udp 协议端口地址转换

setup_tcpudp_outgoing 为从内部网络出去的tcp/udp连接建立一个session,记录下连接的源地址、端口,目标地址、端口,转换后的地址、端口,协议类型以及连接建立时间等信息。

translate_outgoing_tcpudp 核心函数,根据 session 的对应记录,转换数据包的ip地址、端口,同时重新调整ip校验和及tcp/udp校验和,其中,校验和调整主要用到了adjust_chksum函数。算法如下:

void adjust_chksum(ulong *chksum, ushort oldw, ushort neww)

{

*chksum -= oldw & 0xffff;

if ((*lchksum) <= 0)

{

(*chksum) --;

(*chksum) &= 0xffff;

}

(*chksum) += neww & 0xffff;

if ((*chksum) & 0x10000)

{

(*chksum) ++;

(*chksum) &= 0xffff;

}

}

8 设计总结

本系统的优点是,仅需采用一块 cpu 即可同时实现 adsl接入和路由两项功能,硬件资源利用率高,而且,两种功能在同一套系统平台中可以有机结合,避免因中间插入多余转换接口导致包处理效率降低。

文中所述的仅实现了一个最简单的 adsl 共享接入方式,并不能完全满足实际使用中的种种需求,还需要补充其它如协议报文处理、icmp报文处理、应用层网关处理等功能。 此外,在实际测试中,感觉 nat 地址转换hash 表的算法还不够理想:在新建一个节点时需要重新遍历整个 nat_session 数组,这将导致在连接数较多的情况下再新建一条连接非常困难,系统效率急剧降低。

在这次开发设计前期,由于对操作系统的架构不够熟悉,在设备驱动编写方面没有经验,导致编写的驱动层次感很差,不利于维护和后期扩展。走了很多弯路之后,总结出经验:开发前期的调研工作非常必要,在着手写代码之前应该多花些时间了解开发平台、熟悉整个系统的架构、模块在系统之间的地位及模块间的接口关系。磨刀不误砍柴工,总体规划充分之后才能编写出效率高、易维护、易扩展的模块代码出来。

参考文档

itu-t recommendation i.363.5 aal specification: type 5 aal, march 1993

ietf rfc1483. multiprotocol encapsulation over atm adaptation layer5, july.1993

ietf rfc1577. classical ip and arp over atm, january 1994

ietf rfc2364

ietf rfc2516

ietf rfc791 ip

ietf rfc768 udp

ietf rfc793 tcp

ietf rfc792 icmp

ietf rfc826 arp

ietf rfc1631 nat

接口协议篇13

提高电气监控系统实时性的方法有多种,总体可分为升级电气监控系统硬件和优化软件算法两方面。本文采用软件上对网络通信协议进行优化的方法,实现电气监控系统实时性能的提升。

(一)IEC60870-5-103协议的实时性优化

国际标准的103协议电气接口有2种,一种为光纤接口,另一种是EIARS485接口。光纤传输具有抗干扰能力强,传输速度快等优点。当继电保护装置与监控系统在同一个变电站内或距离较近时,光纤接口与EIARS485接口的传输速度差别可忽略不计。采用光纤接口和EIARS485接口在通信链路拓扑上是相同的,因此光纤接口与EIARS485接口的分析方法是一致的。下面重点对EIARS485接口进行分析。EIARS485接口是一种三线制半双工接口,在一个时间点只能进行信号的接收或者发送,即信号收发不能同时进行。在工程上常采用图4的通信拓扑结构。EIARS485总线上并联的3个继电保护装置轮流获得通信权,向通信前置机发送数据。继电保护装置的数据能否尽快地传送给通信前置机,取决于获得通信权的时间间隔。基于这样的机制,就会出现如果一个继电保护装置传输多个信号时,将会占据比较长的传输时间。特别是当发生大面积电气故障时,继电保护装置可能会产生较多的变位信号。如果按一个继电保护装置上传5个遥信信号计算,传输这5个变位遥信信号要通过至少20帧报文才能完成。为保证继电保护装置的信号能实时传输给通信前置机,在考虑EIARS485接口连接继电保护装置的数量时,就需要计算极端情况下,在EIARS485接口中继电保护装置信号传输的最大延时。计算EIARS485数据的传输延时,本文参考国标GB/T18657.2-2002中的非平衡传输过程进行计算。

(二)IEC60870-5-104协议的实时性优化

104协议是基于以太网传输的,以太网RJ45接口是一种平衡传输的全双工接口。影响104协议实时性的主要有2个因素:一是以太网的传输性能。这是由网络拓扑结构和以太网带宽决定的。二是104协议报文的信号携带效率。下面主要通过对第二个因素优化来提高104协议的实时性。104协议通过I格式帧进行数据传输。104协议中规定一个ASDU在不超过249个字节时,既可以传输一个信号(如开关变位信号),也可以传输一组信号(包含多个遥信信号)。在现有的监控系统104协议使用中,一个I个格式帧通常只传输一个变位遥信信号。如果能够做到在一个I个格式帧内尽可能传输多个数据,无疑提高了信号的传输效率。本文认为可以采用一个I个格式帧包含5~10个遥信变位信号。这样传输虽然增加了I个格式帧的长度(增加了15~50个字节),但对于100M以太网的传输性能来说,增加15~50个字节的影响可以忽略不计。采用这种方法传输后,原先传输500个遥信变位信号需要1000帧报文(一个遥信变位包括一帧遥信变位报文和一帧SOE报文),现在只需要500帧报文,传输延时可节约接近1半。

提高电气监控系统可靠性的优化方法

电气监控系统可靠性主要依靠通信前置机、数据服务器、远动机等设备的冗余配置和通信网络的冗余配置实现。在现有的使用过程中,硬件虽然冗余配置,但冗余设备之间的相互无扰无缝切换却是一直存在的问题。本文通过优化网络通信协议应用,使通信前置机冗余切换和通信网络冗余切换的可靠性得到提高,从而提升电气监控系统的可靠性。

(一)IEC60870-5-103协议双机热备接口切换

103协议在采用EIARS485接口时,一个EIARS485接口只能有1台主机,即2台通信前置机不能通过同一个EIARS485接口向1台继电保护装置发送报文。为提高103协议传输的可靠性,本文认为可将2台通信前置机的所有EIARS485接口并接运行。1台通信前置机处于工作状态(向继电保护装置发送和接收报文),另1台通信前置机处于热备状态(通过该EIARS485接口,只接收工作状态通信前置机与继电保护装置的通信报文)。当热备状态通信前置机检测到工作状态前置机的任何一个EIARS485接口通信中断(该EIARS485接口没有通信报文)时,热备状态前置机接过该EIARS485接口的主机地位,通过该EIARS485接口向继电保护装置发送和接收报文。此时,工作状态通信前置机则放弃该EIARS485接口的主机地位,从而实现IEC60870-5-103协议双机热备接口切换。

(二)IEC60870-5-104协议双以太网(双通道)并行数据传输

现有的监控系统大多都采用通信前置机、数据服务器、远动机和以太网的冗余配置。冗余配置大大提高了信号传输的可靠性。但目前常用的双机双网切换机制都为“硬切换”,即正常情况下冗余的两台通信前置机中只有其中一台使用冗余通信网络中的一条与远动机或服务器进行通信。当正常运行的前置机发生故障或者正常运行的通信网络中断时,通信切换到冗余的另一台通信前置机或另一条通信网络。但是使用这种机制最大的缺点是:通信前置机的切换和通信网络的切换是通过通信前置机内部软件进行判断实现的,切换过程通信是中断的,无法做到无扰连续切换。2008年,IECSC65WG15了IEC62439高可用性自动化网络协议,其中IEC62439-3规定的并行冗余协议(PRP),提出了将设备连接在具有相同特性并列运行的2个LAN网络结构上,在设备上实现冗余网络通信的数据处理。

IEC60870-5-104协议没有规定如何使用冗余通信网络进行数据传输。如果采用并行冗余协议(PRP),需要在各设备内部增加链路冗余体(LRE)进行冗余网络通信的数据处理。但传统变电站现有的监控系统设备并不具有这样的功能结构。如果采用并行冗余协议(PRP),无疑需要重新设计现有的监控系统设备。本文根据并行冗余协议(PRP)的通信原理和104协议的通信机制,在不改动现有设备的基础上,对现有的104协议的通信方式进行修改,从而实现104协议在冗余网络上的并行数据传输。

下面以通信前置机与远动机通信为例,介绍104协议并行数据传输方法(如图5)。在通信前置机和远动机的104协议程序中定义冗余传输的以太网口A和以太网口B。在以太网口A与以太网口B冗余并列通信时,双方链路初始化结束后,总召换和对时报文均由远动机通过以太网口A启动,通信前置机通过这2个以太网口,以相同的报文(包括相同的发送序号和数据内容)向远动机发送报文。远动机则同时从本机冗余传输的以太网口A和以太网口B读取报文,判断2个以太网口收到报文的发送序号,舍弃发送序号较小的报文。如果其中一条以太网链路发生翻动(因路由器或交换机的原因导致通信链路短时中断)时,通信前置机与远动机对这条以太网链路重新进行通信链路初始化(如图6)。初始化结束后,通信前置机并不将该条链路报文的发送序号置0,而是使用与另一正常链路相同的报文(包括发送序号和数据内容)继续发送,从而保证在冗余的通信网路上进行数据的同步传输。

在线咨询