Chinaunix首页 | 论坛 | 博客
  • 博客访问: 271170
  • 博文数量: 85
  • 博客积分: 2500
  • 博客等级: 少校
  • 技术积分: 525
  • 用 户 组: 普通用户
  • 注册时间: 2009-06-12 21:41
文章分类

全部博文(85)

文章存档

2013年(37)

2011年(2)

2010年(3)

2009年(43)

我的朋友

分类: C/C++

2009-06-26 10:55:38

0 引言
单片机附加协议芯片是常用的从站实现方案之一,与单片机附加内部软件的方案相比,用于控制通信状态机制的内部程序已经大大减少。
SPC3芯片是西门子公司向用户推出的功能强大的协议芯片之一,其通信机制是由其内部各个寄存器完成,通常单片机处理的内部程序都用于芯片内部RAM 空间分配的计算以及对SPC3进行设置。熟悉SPC3的内部结构及各个寄存器的工作机制,掌握了芯片寄存器初始化以及为数据交换配置通信缓冲区的方法,开发人员就可以脱离对开发包中功能强大但计算过于繁琐的FW固件的依赖,自行根据从站的需求对SPC3芯片进行设置。

1 SPC3芯片应用
由于已经集成了大部分的通信状态机制,应用了SPC3芯片的从站只需要针对数据传输部分进行硬件及内部程序的开发。
SPC3芯片内部的双口RAM可作为单片机的外部RAM使用,用于与微处理器进行数据交换。在芯片内部已经搭建了完整的SAP通信结构,用户可以直接从各个缓冲区中直接获取报文中的相关数据。简单来说,内部程序设计的主要任务就是SPC3芯片的初始化、数据传输、从站诊断以及中断程序的处理。在内部程序中搭建完整的SPC3芯片寄存器数据结构后,以上问题都可以轻松解决。

2 芯片初始化
芯片的初始化要在SPC3尚处于offline状态时完成,是从站接口的所有程序中比较重要且繁杂的一部分。在初始化过程中需要完成从站基本信息及功能相关寄存器的配置,SPC3内部数据缓冲区指针的计算以及外部中断相关的各种定义。
2.1 功能性设置
SPC3内部寄存器中有数个字节用于保存从站的ID号,地址,中断屏蔽以及硬件模式等基本信息。通过对这些寄存器的设置,可以使从站拥有相关的功能。用户可以根据开发需要直接对SPC3寄存器内各位进行设置。下面针对各个寄存器不同的功能,对如何进行设置进行详细的介绍。
2.1.1 从站信息相关寄存器
在从站上电初始化时,要确定一些与从站本身相关的信息,如从站ID号,与硬件地址等。和这些信息有关的寄存器分别位于SPC3芯片内部RAM的3A、3B以及16H,只要将产品ID号以及用户设定的从站地址写入相应的寄存器即可。
2.1.2 中断屏蔽寄存器
SPC3智能芯片中的中断控制器由中断请求寄存器,中断屏蔽寄存器与中断响应寄存器三部分组成,具体结构如图1所示。用户可以自由选择从站所需的外部中断功能,并由中断屏蔽寄存器使之有效。

图1 中断控制器结构
中断屏蔽寄存器IMR占用地址04、05H, 其中各位与其它寄存器不同,为逻辑0有效。试举例说明,根据中断屏蔽寄存器中各位的含义,一个在V0通信中支持GO_LEAVE_DATA_EX、WD_DP_MODE_TIMEOUT、NEW_GC_COMMAND、NEW_SSA_DATA、NEW_CFG_DATA、NEW_PRM_DATA、BAUDRATE_DETECT外部中断的从站,其中断屏蔽寄存器中应写入的值为0xF1F0。
2.1.3 模式寄存器
SPC3芯片有两个内部模式寄存器mode_reg 0/1,分别占用了06,07H与08,09H四个字节的空间。
位于06,07H的模式寄存器0只能在SPC3芯片的offline状态下设置。各种选择性功能以及用户时基都应在模式寄存器0中进行定义。一个支持同步冻结功能,中断优先级为低,并要求用户WD时基为10 ms的简单从站I/O的模式寄存器内应写入数值为0xC005。与其它可选择性的功能设置不同,DP_MODE这一位始终要求置为逻辑1,表示支持DP通信。
与模式寄存器0不同,位于08,09H的模式寄存器1中的各控制位都可以独立的进行设置或解除,不仅限于offline状态才可以设置。SPC3芯片完成初始化之后,由offline至passive-idle状态之间的转换就是通过将模式寄存器1中的START-SPC3位置为逻辑1而实现的。其它各位的设置,如重置看门狗定时器Res user WD等等,都可以根据从站的需要灵活应用。
2.2 内部空间分配计算
完成DP通信设置相关的初始化之后,开始进行DP通信数据缓冲区的相关设置。主站与从站之间的交换数据并不一定会占用芯片内部所有的空间。但是,当所需传输的数据长度过长时(如,输入输出各244字节,过大的用户参数),可能会出现1.5K的内部RAM无法满足通信需要的情况。这种情况是不允许的,要求用户在初始化时就根据各个报文传输数据的长度进行相关的空间计算,以排除类似的错误。
空间占用数据总长度的计算十分容易,其公式如下:
数据总长度=(输出缓冲区+输入缓冲区)×3+诊断缓冲区×2+配置缓冲区×2+站地址改变缓冲区+参数化缓冲器+AUX 1+AUX 2
需要注意的是,SPC3芯片是将数据进行分段存储的。1.5K的空间被分为192段,每段为8个字节。因此,一个标准长度为7字节的参数化报文,它在SPC3内部实际占用的字节长度为:(7+7)&0xf8=8个字节,也即占用了SPC3芯片中1段共8字节的空间。
参见图1中的SAP结构可以发现,各个缓冲区的长度即为相关报文中DU部分在SPC3芯片内占用的段空间长度。但是,两个辅助缓冲区AUX 1/2的长度设定稍有特殊。AUX 1/2两个寄存器用于暂存获得的配置,参数化数据(如果支持站地址改变,还应加入SSA数据),它们所需的长度要保证数据传输的完整性,同时也应最大限度的节省空间。因此,在配置长度时对参数化报文和配置报文的DU部分长度进行反复比较,将最小值赋给AUX1,最大值赋给AUX2。这样,辅助缓冲区的长度计算就会出现两种情况:
 参数化数据长度与配置数据长度不相同。如,用户参数化数据48字节,配置数据6字节,不支持站地址改变的从站AUX辅助缓冲区长度设置为:AUX1缓冲器长度8字节,而AUX2实占48字节。
 当出现参数化和配置数据在SPC3内部占用段空间相同时,实际利用的AUX寄存器只有一个,也即AUX1长度设置,而将AUX2配置为0,在通信中并不使用。如,参数化数据长度为7,配置数据长度为6的情况下,AUX1的长度为8,而AUX2设置为0。
为了设置不同的功能,某些从站可能会定义很长的用户参数。如果想利用辅助寄存器完整的转移这些用户参数,则需要SPC3从内部RAM中为其留出不小的空间,这样可能会造成空间不足。这种情况下建议在模式寄存器0中(07H,bit 12)设置Spec_Prm_Puf_Mode,使得参数化数据不通过辅助寄存器,而是直接写入参数化缓冲区中。这样可以保证辅助寄存器的简洁,最大限度的节省空间。
根据以上的说明进行举例计算,一个48字节输入输出,无用户参数,不支持站地址改变,不使用spec_prm的从站需要在SPC3内部占用的空间长度为8×3+8+8×2+104×3=360个字节,即SPC3应为从站DP通信留下至少360个字节的空间大小。
2.3 通信缓冲区相关设置
在计算完实际占用内部空间长度,并判断未超出SPC3内部RAM后,将DP通信相关的缓冲区长度和指针信息存入相应的寄存器中。根据用户规定从站的输入输出数据,用户参数等各相关长度的不同,相应的指向各个缓冲区首地址的段地址指针也会随之改变。因此,在SPC3脱离offline状态进入passive-idle状态之前,应该对占用空间分配进行计算。
SPC3的用户数据区从40H开始,即真正用于数据交换的段地址从8开始。以40H为起始地址,之后依次为输入输出D、N、U各三个缓冲区,诊断D、U两个缓冲区,配置缓冲区,配置数据读取缓冲区,AUX1/2 缓冲区,以及SSA 缓冲区。根据缓冲区内所存数据的长度计算各个首地址指针:
spc3.r_dout_buf_ptr[1] (1BH)= 8;
spc3.r_dout_buf_ptr[2] (1CH)= 8+(((48+7)&0xf8)>>3)=14;
spc3.r_dout_buf_ptr[3] (1DH)= 14+(((48+7)&0xf8)>>3)=20;
依此递推,输入数据缓冲区的三个指针指向的段地址分别为26,32,38。同样,之后的各个缓冲区的指针也以此方法计算出来,并存入相应的寄存器中,在此不再赘述。

3 外部中断
在经过初始化之后,SPC3芯片中已经有了和主站进行正常通信的能力。作为从站智能芯片,在SPC3中集成了V0通信所有的状态机制,而实现这种机制的手段则是外部中断。与外部中断相关的中断控制器已经略有介绍,理论上SPC3芯片可以支持16种外部中断,选用何种中断由开发人员决定并通过中断屏蔽寄存器的设置实现。而外部中断的触发则由位于02,03H的中断寄存器IR决定。IR寄存器中各个位的含义与IMR的含义相同,逻辑1有效。
当中断处理程序由IR寄存器中读取到中断条件后,会完成单片机对芯片信号的响应,处理SPC3芯片发生的各种中断事件。其中包括了参数化事件,全局控制事件,进入或退出数据交换状态事件,配置事件,地址改变事件,监测波特率事件和看门狗溢出事件。在为实现通信状态机制而必需的中断程序中,用户可以完成在各种不同状态下所需的处理,以及一些从站所需的特殊功能。

4 数据交换DATA-EX
在与主站通信,经过参数化、组态配置以及诊断之后,从站会依据状态机制进入数据交换状态。使用了SPC3智能芯片的从站接口支持两种数据交换:查询方式及中断方式。不管使用哪种方式进行数据交换,从站的数据交换都是由输入输出数据在D,N,U三个缓冲区之间的转换实现的。在输入输出缓冲区中,D缓冲区都是用于存储主站报文中的输出数据以及从站报文中的输入数据,数据在D缓冲区与N缓冲区之间的转换由SPC3芯片自动完成,从站接口单片机需要处理的只是将数据存储至当前U缓冲区中。
在处理输出数据的接收时,SPC3芯片自动将数据写入了当前输出指针指向的D缓冲区中,并最终转移到N缓冲区。用户所要做的只是在中断产生时,通过交换N、U两个缓冲区中的数据,以得到实时输出数据。同样,在从站接口向主站发送输出数据时,用户只需要取得当前输入缓冲区的指针,并将要发送的数据存入。
为了完成以上工作,在每一个数据交换周期处理新的输入输出数据时,都应先根据SPC3内部工作单元中next_dout/din_buf_cmd提供的信息确定当前U缓冲区的首地址指针。开发人员只需在接口中将U指针指向的缓冲区中的输出数据取出,或者将输入数据转入此缓冲区即可,剩余的工作由SPC3芯片自动完成。

5 结论
SPC3智能协议芯片结构完善,功能强大,非常适用于PROFIBUS DP从站接口的开发并可以使开发工作简单化,节省了工作人员大量的时间。为了更方便用户对智能芯片进行设置,西门子公司提供了一套完整的开发包FW固件。但为了保证对于各种功能及报文格式都有很好的通用性, FW固件中的相关宏定义与通信相关计算较为繁琐,各种通信参数及缓冲器指针的计算占用了大部分的运算时间。
相对于依赖开发包进行从站接口的开发,由用户自主对SPC3芯片进行设置则稍为复杂,但同时也有明显的优势。本文介绍了在SPC3芯片中通信必需的寄存器的设置方法,用户可以根据从站功能以及传输数据的长度对SPC3直接设置。针对特定功能进行的芯片寄存器初始化可以屏蔽其它不相关的设置,减少了由过于繁杂的寄存器定义引起错误的机率。简洁的通信程序不仅再次降低了开发人员的工作量,更可以大大的优化通信中的时间参数,保证DP通信的高速与流畅。由于脱离了开发包的限制,在后期测试中对错误的检查以及程序的修改都更加轻松。
参考文献:
[1] 中国机电一体化技术应用协会.测量和控制数字数据通信工业控制系统用现场总线.JB/T 10308.3-2005.北京:中国机电一体化技术应用协会,2005、18-58
[2] 王平.PROFIBUS现场总线智能从站通信接口设计.工业仪表与自动化装置,2002 No.1
[3] Dennis van Booma, Paulo J.Mendes Silva. PROFIBUS Product Development. PROFIBUS Center Netherlands, 2006
[4] SPC3 Siemens PROFIBUS Controller Hardware Description. 2003
[5] SPC3 Siemens PROFIBUS Controller User Description. 2003
阅读(2974) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~