查看完整版本: 基于80C166单片机PEC服务的PROFIBUS-FDL从站协议实现

liyf 发表于 2014-10-5 10:51:46

基于80C166单片机PEC服务的PROFIBUS-FDL从站协议实现

基于80C166单片机PEC服务的PROFIBUS-FDL从站协议实现


摘要:在详细分析西门子80C166单片机PEC服务工作机制和PROFIBUS-FDL帧格式的基础上,提出了基于该种单片机PEC服务机制的PROFIBUS-FDL从站协议的实现方法,并在实际工作中得到成功应用。    关键词:80C166 PEC服务 PROFIBUS-FDL
当前工业设备制造技术正向高性能、专用化、分布式、网络化方向发展。以前,大量使用PLC实现的控制系统,实践证明虽然安全可靠,但由于PLC本身的技术原因,很难达到更快速的实时控制要求它们正被高性能的嵌入式专用控制器替代。这种专用控制器的设计,可以进一步提高设备的控制性能;引入现场总线技术,保证专用控制器的系统可集成性,以适应当前分布式、网络化的应用趋势。
本文是在研制棒材生产线飞剪的专用控制器时涉及的一个子课题。为保证该控制器能与现有PLC网连接以及与远程操作站通信,在几乎不增加硬件的基础上,利用核心CPU——西门子80C166所具有的一个类似DMA的功能高效率地实现PROFIBUS-FDL从站协议。
1 西门子80C166单片机
80C166单片机是西门子C166系列16位嵌入式微控制器的第一代产品。其体系结构如图1所示。它结合RISC处理器的优点,克服了CISC处理器在嵌入式应用中的瓶颈;在25MHz时钟频率下,可达到12.5MIPS,几乎所有的指令执行时间小于80ns;在指令处理上,采用四级指令流水线管道结构;在存储管理上,统一线性地址空间可达256KB,具有段代码、页数据式管理机制;采用寄存器池,上下文切换时间只要80ns;16位乘法400ns,32位除法800ns,中断响应时间最慢400ns;外部事件控制器PEC服务具有类似DMA的功能,可实现存储器与外设之间的高速数据传输;丰富的在片外设:1KB RAM、10路A/D、76路I/O、7个定时器/计数器、16个比较/捕获单元、2个串行通信接口、在片的WATCHDOG等。


图1 西门子80C166体系结构

2 80C166的PEC服务
2.1 80C166的PEC服务机制
PEC是外部事件控制器的英文缩写。PEC服务是80C166提供的一种特殊数据传输机制。其目的是在原有的中断控制器基础上,用较小的硬件代价、尽可能少占用处理机周期实现内存与外部设备的快速数据交换类似DMA,但无需专用的DMA控制器。80C166有8路PEC服务通道。用PEC服务进行一次数据传输,仅占用处理机一个机器周期20MHz时100ns,且不影响当前程序的执行。
2.2 PEC服务的工作过程
通常,当普通中断事件发生时,系统将保存当前CPU状态PSW和程序的地址;然后,根据不同的中断源,进行上下文切换,装载相应的中断矢量,执行相应的中断服务程序;执行完后,恢复被中断程序的上下文,继续执行被中断程序。
对于某一PEC服务,它总是与一具体中断源、中断矢量或中断服务相联系。在80C166中,当一个中断的中断优先级为最高级14或15且定义了与之相关联的PEC服务通道时,该中断就具有PEC服务功能。这时,当该中断请求发生时,将不触发中断服务程序的执行,而是触发PEC服务。当PEC服务经过设定的若干次的外部事件触发后,再触发执行相应的中断服务程序(一个普通中断过程)。

    如图2所示。一次PEC服务的工作过程是由PEC控制寄存器定义的,其中计数位域(8位传送计数器)COUNT定义了PEC服务的数据传输次数;源指针、目的指针指明具体的数据传输来源和目的;PEC服务的数据传输过程完全由硬件执行:当中断请求发生时,由硬件将源指针所指单元的内容传给目的指针所指的单元,然后由PEC控制寄存器相应定义位控制是源指针还是目的指针增加1或2,同时COUNT值减1;当多次中断请求使COUNT减为0时,PEC服务完成,触发与之关联的中断服务程序。
2.3 PEC服务应用优势
以串口接收一帧16字节的数据为例。若采用传统的串口接收方式,每接收到一字节,产生一个中断;在中断服务程序中,要将它从串口接收缓冲器中取出,顺序放到帧接收缓冲区相应单元中;当接收满16字节后,进行帧处理。
如果采用PEC服务的方式,只要事先定义好PEC通道就可以了。首先,定义串口接收中断优先级为14或15以及与之相关联的PEC通道。即定义相应PEC通道控制寄存器为:COUNT为16字节传输,源指针为串口接收缓冲器,目的指针为帧接收缓冲区首址且每次传输完成后,目的指针加1。这样,串口每接收到一字节,将触发一次PEC服务,由硬件将数据从串口接收缓冲器中取出,顺序放到帧接收缓冲区相应单元中,但当前执行的程序并不被中断;当16字节完全接收完成后,触发串口接收中断服务程序,进行帧的处理。
与传统的串口接收方式相比较,PEC服务方式在进行数据传输时不中断当前程序的执行,因此节省了大量的上下文切换时间,处理机效率得到大大提高。
下面讨论采用80C166的PEC服务实现PROFIBUS-FDL从站协议的方法。
3 PROFIBUS-FDL帧结构分析
3.1 PROFIBUS-FDL帧结构
PROFIBUS帧的格式有多种形式,但对于从站来说,只要处理三种帧即可。
.无数据且长度固定的帧:

.带数据域且长度固定的帧:

. 带数据域且长度可变的帧:


    其中,各字段说明如下:
SD1:无数据帧的开始定界符,#10H;
SD2:可变长度帧的开始定界符,#68H;
SD3:固定长度帧的开始定界符,#A2H;
ED:结束定界符,#16H;
LE与LEr:LE与LEr相同,都表示长度占一个字节,它是DA+SA+FC+DATA-UNIT的字节数总和;
DA与SA:DA目的站地址与SA源站地址各占一个字节;
FCS:校验段,占一个字节,它采用不计进位的求和运算得到校验码。校验域为DA+SA+FC+DATA-UNIT;
FC:帧控制字字段,占一个字节;
SYN:同步字段,至少33空闲位(逻辑电平1),但仅在请求帧及令牌帧前出现,不允许在字符之间出现。
3.2 PROFIBUS帧结构的特点
从上面的帧格式可以看出帧的长度不固定。发送时,帧的长度是已知的;但接收时,帧的长度是未知的。因此,要提高接收效率,只能采用分段方式接收,随时解析和保存关键信息,并确定随后接收的字节数。

4 PROFIBUS-FDL从站协议的PEC服务实现
PROFIBUS-FDL从站的数据接收及应答过程分三个阶段完成:第一阶段,帧的完整接收;第二阶段,根据接收到的FC帧控制字字段,判断主站正在进行怎样的数据请求;第三阶段,从站组织应答帧,启动帧的发送过程。
第二阶段的帧控制字处理请参考PROFIBUS标准的相关内容。对于第三阶段的组织和发送应答帧,由于数据长度和内容已知,只要定义好串口发送中断/服务,定义好相应的PEC通道:源地址为发送数据缓冲区首址+1、目的地址为串口发送缓冲器、COUNT域为发送字节数-1,将所要发送数据的第一个字节写入串口发送缓冲器,即可触发串口发送相关的PEC服务;当COUNT减为0时,触发串口发送中断服务子程序,完成串口数据发送过程。由于该过程实现简单,不作详细讨论。这里主要讨论第一阶段的帧完整接收实现过程。
从上面的帧结构分析可见,帧的长度是不固定的。因此,为提高接收效率,应用PEC服务分三步进行数据的批量接收。
4.1 第一步:帧头接收
首先,初始化时,定义串口接收PEC服务为连续接收三字节,用于接收帧的前三字节。
由第一个字符SDx(x=1,2,3)判断帧类型;对于不带数据固定长度帧和带数据固定长度帧接下来的两个字符是DA、SA,判断DA是否为本机地址;而对于带数据长度可变帧,接下来的两个字符是LE、LEr,判断其是否相等。
若以上判断都成立,则需定义下一次PEC服务的接收字符数:对于固定长度帧,定义PEC批量接收三字节数据,并保存DA、SA;对于可变长度帧,定义PEC服务接收四字节数据,转第二步;
若LE≠LEr或DA目的地址非本站地址,则重回到初始状态,进行帧头接收。
4.2 第二步:帧控制字接收
由于主站帧的连续发送,会再次触发PEC服务。由串口接收PEC服务连续接收三或四字节后,处理如下:
.不带数据固定长度帧,接收三字节,分别为FC、FCS、ED。对FCS和ED分别完成累加和校验与帧结束判断后,将帧控制字FC保存,转去执行帧控制字处理。
.带数据固定长度帧 接收三字节分别为FC和数据单元的前两个字节,保存FC,定义PEC服务接收后八个数据字节,转第三步。
.带数据可变长度帧,接收了四字节,分别为SD、DA、SA、FC。对SD再进行一次判断,之后判断DA是否为本机地址,保存DA、SA、FC,定义PEC服务接收余下的数据字节长度由LE确定,转第三步。
4.3 第三步:帧数据接收
当串口接收PEC服务连续接收八或更多的字节后,处理如下:
.带数据固定长度帧,接收八个字节,分别为余下的六字节数据和FCS、ED。在累加和校验与帧结束判断完毕后,转去执行帧控制字处理。
.带数据长度可变帧,接收了DATA-UNIT+2个字节,分别DATA-UNIT个数据字节和FCS、ED。在累加和校验与帧结束判断完毕后,进行协议要求的目的地址和原地址的地址扩展判断和保存,转去执行帧控制字处理。
4.4 串口接收中断服务子程序
以上三步都由串口接收中断服务子程序负责完成。每一步对应不同的处理状态。为提高程序的执行效率,用有限状态机实现。以1、2、3分别表示上述帧接收三个步骤,4表示帧控制字处理状态,其状态转换如图3。
采用这种协议实现方法,在最近研制的棒材生产线的飞剪控制器中运行效果良好。

李小路 发表于 2021-6-25 09:21:00

谢谢分享!:D

www 发表于 2022-6-14 13:37:35

很棒让我学到了很多
页: [1]
查看完整版本: 基于80C166单片机PEC服务的PROFIBUS-FDL从站协议实现