微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 电源设计 > PROFI BUS-DP/MODBUS的网关结构设计

PROFI BUS-DP/MODBUS的网关结构设计

时间:12-16 来源:互联网 点击:

FIBUS-DP通信层
负责对VPC3+C通信状态的监控管理,按照一定的规则将PROFIBUS-DP总线通信收到的数据映射到CPU内部的存储器,供I/O通信层调用,完成输出数据的更新;把I/O通信层的输入数据按照一定的规则映射到CPU内部的寄存器,在适当的时候写入VPC3+C的输入数据缓冲区,以完成输入数据的更新。
(2)协议数据映射层
负责将I/O模块映射为标准PROFIBUS-DP I/O模块的工作,包括对下挂的I/O模块类型和通信接口控制字的检查;各输入模块通道输入数据在PROFIBUS-DP输入数据中起始位置及所占长度的管理;PROFIBUS-DP输出数据向各输出模块通道输出数据上的映射关系管理。
(3)MODBUS通信层
负责完成和下挂MODBUS从站I/O模块的所有通信,包括读取I/O模块类型、读取通道输出值、设定通道输出值和参数设置等工作;根据映射层提供的输出数据映射关系,将PROFIBUS-DP的输出数据在CPU存储器里的映射数据更新到输出模块的相应通道上;读取各输入模块的通道输入值,给映射层提供输入数据资源。
3.3 PROFIBUS-DP总线驱动
此网关PROFIBUS-DP部分采用协议芯片VPC3+C,其内部含有4KB RAM,用户可根据需要对其进行设置;有两种微处理器接口,数据/地址总线复用或单独操作。因为ARM核对外部RAM操作的速度较快,时序不能满足VPC3+C的操作时序,因此这里不采用数据/地址总线复用的方式,而是用ARM的GPIO口来模拟VPC3+C的操作时序。在这里模拟的是其在Intel模式下内部寄存器的读写时序。此驱动主要提供了以下功能:nxp_vpc3_read、nxp_vpc3_write、nxp_vpc3_init、nxp_vpc3_reset、nxp_vpc3_isr。这些函数分别向上层应用提供了读写VPC3+C寄存器、对其初始化、复位操作及中断的处理功能。其中对寄存器的读写操作是关键部分,函数原型如下:
unsigned char nxp_vpc3_read(unsigned int addr);
void nxp_vpc3_write(unsigned int addr,unsigned char data);
其中,addr为要读写的寄存器地址,data为要写入的数据。
3.4 MODBUS协议的实现
为增加信号传输的距离并提高抗干扰能力,MODB-US物理层采用标准的RS485通信。MODBUS协议实现软件的流程如图5所示。

为了提高协议处理报文的效率,并提供良好的扩展性能,定义了函数指针数组,用于MODBUS应用层的数据处理。函数指针数组指针按照模块类型进行信息处理的导向。
3.5 协议数据的映射处理
此网关的主要任务是完成PROFIBUS-DP的数据和MODB-实现的流程US数据的相互转换,为了保证数据的实时性采用单缓冲区技术来实现信息的及时更新。所谓“单缓冲区”,即不管是PROFIBUS-DP还是MODBUS中待转换的数据,只保留当前最新的一帧。考虑到现场通信的数据主要是数据的采集或模拟量的输出,采用单个缓冲区不仅仅大大降低了对内存的需求,而且可以保证通信的实时性。因为PROFIBUS-DP的正常通信需要组态的软件和下挂模块的硬件一致,才能保证系统的可靠运行。因此如何将MODBUS从站模块合理地映射成PROFIBUS-DP的标准模块很关键。这里根据模块特点(类型、数字量/模拟量、通道数量等)定义了不同的通信接口控制字(CFG_DAT)。系统上电后,网关通过MODBUS功能码0x11对下挂从站模块进行类型及状态查询,并根据类型得到对应不同模块的CFG_DAT。在PROFIBUS-DP进行通信接口配置(CFG_CHK)的过程中检查下挂模块的CFG_DAT和对主站硬件组态的模块对应的CFG_DAT,并根据此来填充诊断数据。如果检查通过,控制PROFIBUS-DP从站协议芯片进入数据交换状态;否则主站在进行诊断数据请求(DIAG-REQ)的时候,将诊断数据报告给主站。此网关判断的诊断信息包括:对应CFG_DAT错误的模块地址、模拟量输入MODBUS模块的通道断线标志。
3.6 关键技术研究
(1)缓冲区数据映射――保证实时性
网关在对两种协议的数据进行映射的过程中,采用了一次性内存拷贝技术和单缓冲区技术来尽快完成数据的处理且保证是最新数据,以此来保证数据传输在经过网关时的实时性。
一次性内存拷贝技术是指,网关从协议芯片内部读取到PROFIBUS-DP的输出数据后,直接将存到的数据填充到MODBUS输出帧内;从MODBUS输入模块得到的数据直接填入到PROFIBUS-DP协议芯片的输入缓冲区。这样的方式可减少内存拷贝过程中所耗费的时间。如上所述,网关单缓冲区技术也是为了保证数据是最新采用的。此网关连接的两种设备的正常数据通信都是周期性的,且周期一般是固定不变的。如果MODBUS数据交换的周期小于PROFIBUS-DP的数据交换周期,则网关的缓存中只有1帧有效数据;如果MODBUS数据交换周期大于PROFIBUS-DP的数据交换周期,若采用链表保存PRO-FIBUS-DP的帧数据,则不管缓冲区的大小有多少,肯定导致缓冲区溢出,从而使PROFIBUS-DP的输出数据不能即时更新到MODBUS从站的通道上进而影响系统的实时性。
(2)实时模块通信检查――保证可靠性
系统除了在上电之后对下挂的MODBUS模块进行类型查询并和PROFIBUS-DP主站组态模块类型进行比较外,在进入正常数据交换之后,也会对模块的状态进行查询,判断模块是否发生错误。错误标志是在网关和MODB-US从站进行通信过程中根据从站的回应帧来判断的。在逐个检查模块错误标志后,如果没有错误标识被置位,继续正常通信过程;如果发现有错误标识被置位,则控制PRO-FIBUS-DP协议芯片离开数据交换状态,并且填充诊断信息。在此之后,不断查询MODBUS模块类型,直至模块类型和对PROFIBUS-DP主站组态数据一致为止,再控制PROFIBUS-DP协议芯片进入数据交换状态。这样采用实时查询模块是否出错状态的方式来保证软件组态数据和硬件类型相一致,防止出现输入/输出数据的错误。
此网关系统中MODBUS协议是由软件来实现的,考虑到需要定时器等保证通信的可靠性,为了防止两种协议通信的相互影响,对PROFIBUS-DP输出数据的读取采用查询的方式而非中断方式进行。这样在PROFIBUS-DP的数据到来后不会打断正在进行的MODBUS通信,尤其是在PROFIBUS-DP通信速率较高的情况下,这种设计的可靠性更加明显。如果采用中断的方式,在PRO-FIBUS-DP通信速率超过一定值,其势必影响网关和MODBUS从站之间的通信(详见下面性能分析部分),严重时会导致MODBUS帧传输的不完整性,从而导致网关对MODBUS模块通信状态的误判,进而影响系统的稳定性。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top