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模块通信状态的误判,进而影响系统的稳定性。
4 网关测试结果
在规定的条件下,对通信次数进行计数,程序的每个扫描周期进行一次MODBUS数据输入/输出的更新;PROFIBUS-DP输入/输出数据的更新,则是在VPC3+C收到PROFIBUS-DP的输出数据标志位置位后进行。对这两种数据更新的次数进行计数,分别为Cmidbus和Cdp在PROFIBUS-DP通信速率(λdp)变化的情况下,实际测试数据如表1所列。
从表中可以看出,λdp=187.5 kbps时,Cdp=Cmodbus,实际上,此时已经出现了PROFIBUS-DP丢包现象。这也解释了上边所提到的如果λdp超过一定值,若采用中断方式处理PROFIBUS-DP的输出数据,势必影响正在进行的MODBUS的通信。
5 结 论
将中国四联集团采用MODBUS协议的输入/输出从站设备无缝接入PROFIBUS-DP网络的智能通信网关的实现方案,有效地拓宽了其应用范围。在硬件设计上,采用电源管理模块实现网关的热插拔功能;采用专用芯片解析PROFIBUS-DP协议;采用磁耦隔离代替传统的光耦隔离,提高了系统的性能和可靠性。软件方面,采用单缓冲区设计、一次性内存拷贝技术、实时模块状态查询方式以及合理的中断应用来保证系统的实时性和可靠性,还对网关的性能进行了测试和简单计算,给出了保证不丢包所需要满足的公式。为其他工业通信网关的设计提供了参考。