集成电路技术分享

 找回密码
 我要注册

QQ登录

只需一步,快速开始

搜索
查看: 1358|回复: 0

基于FPGA的PROFIBUS-DP集线器设计

[复制链接]
weibode01 发表于 2010-11-5 14:39:41 | 显示全部楼层 |阅读模式
基于FPGA的PROFIBUS-DP集线器设计   

王 鑫

(信息产业部电子第六研究所,北京 100096)

0 引言

PROFIBUS是一种国际化、开放式、不依赖于设备生产商的现场总线标准。PROFIBUS的传送速度在9.6kbaud~12Mbaud范围内,而且,当总线系统启动时,所有连接到总线上的装置都被设成相同的速度。PROFIBUS的最大优点是其具有稳定的国际标准EN50170作保证,故其稳定、可靠、故障率低,且经实际应用验证具有普遍性。因此,研究PROFIBUS具有重要的意义。

目前工业现场应用中的PROFIBUS—DP大部分是线性总线结构,该结构上一个点出现问题将导致整个DP网络通讯故障,数据无法传输,且难以定位故障点;另外,采用该总线结构,在现场设备分布比较分散时,会对布线造成困难,很容易超出DP协议规定的通信距离。而星型或树形拓扑结构则可以有效地解决此类问题,但DP协议并不支持这两种拓扑结构。为此,本文提出利用DPHUB来改变DP网络拓扑结构,从而解决了DP总线在实际应用中的缺陷。

1 PROFIBUS—DP协议

众所周知,国际ISO标准组织的0SI网络通信模型是国际上通用的标准框架,PROFIBUS—DP使用了其中的第1、2层(即物理层、数据链路层)和一个用户的应用接口,而对通用模型上的第3~6层没有加以定义描述,这种精简结构的好处是数据传输快速和效率高。用户的应用接口又称为直接数据链路映像程序,它规定了可调用的应用功能,可使第三方应用程序得到直接调用。图1所示是PROFIBUS—DP协议层的定义。



2 PROFIBUS—DP的传输
PROFIBUS—DP总线上的一个主站控制着多个从站,主站与每一个从站都建立一条逻辑链路;主站发出命令,从站给出响应;从站可以连
续发送多个帧,直到无信息发送、达到发送数量或被主站停止为止。数据链路中的帧传输过程分为数据链路建立、帧传输和链路释放三个阶段。一般情况下,DP协议中的FDL层报文帧结构仅有5种类型。
其中,SDl是无数据域,只用作查询总线上的激活站点,其格式如下:



SD2是带有固定8字节数据域,格式如下:



SD3的数据域长度可变,常用于SRD(发送数据,且要求回复数据)服务,格式为:



SD4是令牌帧,格式如下:



SC为短应答,格式为:



在PROFIBUS—DP协议中,RS485和光纤通常使用UART编码格式,而在UART编码中,每个字符由一个UART结构的11位构成,具体如下:



其中,Start=0;Parity=偶校验位;Stop=1

为了保证数据的准确传输,必须知道起始位和结束位。判断起始和结束的条件是要知道DP的传输速率。

3 DP数据转发方式比较

DP HUB的数据转换方式大体可分为两种,即不检验帧结束转发和检验帧结束转发。

3.1 不检验帧结束转发

不检验帧结束转发是当一路485检测到信号线上有低电平信号时(DP协议定义信号线上闲时为高电平),由FPGA将其余七路485设置成发送状态,而把一路进来的低电平脉冲信号转发给其余七路。低电平脉冲结束后,FPGA再将其余七路恢复成接收状态,以等待下一个低脉冲的到来。

该方法的优点是实现简单,缺点是当HUB的主站给从站发送数据时,其余路端如果进来低电平干扰且恰好遇到主站485接收的是高电平信号,则系统就会误认为主站发送数据结束而将其变为从站。然后将有低电平干扰的从站变为主站,将低电平干扰当作正常数据向其他从站转发。

3.2 检验帧结束转发

检验帧结束式转发即一路485检测到信号到来时,由FPGA将其余七路485设置成发送状态,并按位将其转发。它采用一定方法判断帧的结束位,并当判断这个帧结束时,由FPGA将七路485重新设置成接收状态,以等待下一个帧的到来。

该方式的优点是数据传输准确率高,但是也存在着系统资源占用较多的缺点。事实上,考虑到DP通信的安全性和可靠性,还是先检测波特率后按位传输较好。下文将介绍DP—HUB是如何基于判断帧结束这种方法来实现数据转发的。

4 帧结束检测

帧结束的检测理论上可以分为码元宽度检测法和穷举法判断波特率两种方法。

4.1 码元宽度检测法

本方法检测的基本思想是找出13个脉冲中长度最小的位宽,该位宽即为码元宽度,因为UART编码和传输的方式使得在一个字节包括11个编码位加上其前后2位共13个位,其中一定有1位码元存在。这个码元的宽度可用nT表示,其中T为时钟周期,n为时钟周期的个数。然后可以检验数据的高电平持续长度,如果这个数据有一段高电平的长度大于16nT,则认为该帧结束。这样设计的依据是:一个帧的最短长度为一个字节,一个字节是由11个码元组成。通常为了保证结束判断准确而需要多取几位,这里将其定为16个码元。同时由于DP协议中规定报文帧中间的各个字符没有空闲静止状态,而且数据通信上要有33个码元的空闲时间来做为同步表示(SYN)。这样,取16个码元长度既能判断出帧的结束,而又不会把下一次通信中的高电平信号误认为是上一个帧的结束。

这种方法的优点是算法简单,不需要解析帧的结构。缺点是检测码元的时钟频率要求较高(为了准确的测量码元的宽度),因而功耗较大。

4.2 穷举法判断波特率

由于DP的数据传输波特率为9.6 kbps~12 Mbps中有限的10种。因此,对于可靠性要求较高的DP传输,可以采用穷举法来检测传输的波特率。穷举法即逐个代入法,方法是先假设一个特定的速率,然后检验SDl/SD2/SD3/SD4的值是否为0X10、0XA2、0X68、0XDC。在实际检测中,若检测到SDl、SD2、SD3、SD4中的任意一个,即认为1次检验完成。这样,连续完成5次便认为传输速率符合该波特率。如果不能解析出相应的数值,则换下一个速率,直到可以解析为止,图2所示是穷举法波特率检测流程图。



该方法的优势是可以准确而且可靠地检测出波特率,从而明确帧的结束位置。但是,缺点是帧结构解析算法比较复杂,同时要占用FPGA比较多的资源。但无论如何,该方法在实际中的应用还是比较多的。

5 实现过程

本文以8路DP—HUB为例,其默认状态为所有通道均处于接收状态。当某一通道有数据传输时,可将接收到的数据按位无差别的发送到其他7个通道。而当检测到帧结束后,则将所有通道转为接收状态,以等待新帧的到来。本模块的功能:一是波特率检测,二是数据转发。由于DP协议为主从通讯方式,因此,从应用层就可以保障不会产生数据碰撞,而DP协议同时也有严格的响应时间要求,因而只能以按位转发的方式进行转发。图3所示是系统状态机转换图。



6 结束语

通过本文的方法可以解决PROFIBUS—DP在应用中出现的故障隔离问题。因此,将线性拓扑结构变为星形或树形结构具有一定的实用价值.

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?我要注册

x
您需要登录后才可以回帖 登录 | 我要注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

QQ|小黑屋|手机版|Archiver|fpga论坛|fpga设计论坛 ( 京ICP备20003123号-1 )

GMT+8, 2024-12-26 13:37 , Processed in 0.084320 second(s), 20 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表