李洲山
(西安建筑科技大学 信息与控制工程学院,陕西 西安 710055)
随着信息技术和自动化技术的高速发展,各种现场总线应用广泛而且各有优缺点[1],从而出现了多总线共存的现象。然而,不同现场总线之间的不兼容性给用户带来极大的不便。因此,不同总线标准之间的协议集成逐渐成为一个研究热点,文章正是基于这样的状况,选择了国内应用广泛的Modbus总线和Profibus-DP总线作为研究对象,主要从总线时序方面研究了两种协议之间的双向转换过程。在Profibus-DP总线侧,协议转换模块作为从站与PLC主站进行通信,在Modbus总线一侧,协议转换模块作为主站向Modbus从站设备写入命令并读取从站数据。通过本文开发的协议转换模块用户能够将Modbus从站设备快速组态到Profibus-DP总线网络,有助于增强Modbus的组网能力,在工程应用中可以缩短工程周期,降低自动控制系统设计和维护的费用,使系统设计更为灵活。
对整个协议转换模块而言,Profibus-DP侧的主站和从站的数据交换是同步运行的,主站在请求数据后只有从站应答后才会继续执行程序。Modbus总线上站与从站之间的数据交换则是根据轮询的数据查询方式完成的。但是,Profibus-DP的数据处理和Modbus侧的通信过程则是独立运行的。两种协议之间的数据转换是在VPC3+C芯片中通过映射关系完成的。在模块上电后,主站完成初始化,检测从站是否准备好数据通信,如果从站准备好数据交换,DP主站将对从站进行相关参数设置,并检查从站接口的配置状态。如果DP从站已经准备好数据交换,则Profibus-DP侧主站与从站进行数据交换。同理,Profibus-DP侧从站进行与主站相对应的操作。
协议转换设计的重点是对串口收发程序的实现。目前,基于微处理器串口的数据处理方式有3种:(1)轮询方式。这种方式是通过程序持续性的查询接口设备的数据信息,相对程序开销比较大,不能保证数据处理的快速性要求。(2)中断方式。这种通信方式大幅度提升了数据处理速度,但是同样也要占用一部分系统资源,如果不停出现中断,系统程序开销也会大幅度增加[2]。(3)DMA通信方式。这种通信方式能够将软件程序处理的功能移交给硬件处理,无论在数据处理速度还是数据交换的可靠性等方面,相比于软件处理数据,都占有明显的优势。
在Profibus-DP主站与Modbus从站进行通信时,通信请求由DP主站发出,当协议转换模块接收到请求报文后,通过协议芯片VPC3+C对报文进行解析[3],然后处理报文,提取数据域信息,通过协议数据映射关系,Profibus-DP中的数据从新封装成为Modbus格式发送给从站设备。当从站设备返回应答信息时,同样经过这个过程将数据传输到Profibus-DP主站一侧。
根据上述报文处理结构设计相关主程序来控制协议转换模块的数据处理过程,该过程大体分为3部分:(1)对STM32微控制器的初始化,包括配置系统时钟、配置嵌套中断向量表、配置看门狗时钟、初始化数据缓存区、初始化协议芯片等工作。(2)循环地不断从协议芯片VPC3+C读取数据和写数据。(3)如果有外部诊断,系统会进入中断程序[4]。协议转换的函数主题如下所示,主要包含程序初始化、数据循环读写、中断处理程序。
Int main(void)
{
u8 i;
RCC_Configuration();
NVIC_Configuration();
VC3_GPIO_Configuration();
SysTick_GPIO_Configuration();
SysTick_Configuration();
DisableInterrupts();
VC3_RST=0;
init_data_buffer();
vpc3_buf_check();
user_dps_reset();
EnableInterrupts();
USART_AS_Init();
InitTimer2();
IWDG_Configuration();
while (1)
{
LEDexOut=LEDexIn;
DP_status=Read_byte_vpc3(spc3_is_reg_status0_add);
if(DP_status)
{
IWDG_ReloadCounter();
}
read_data_from_spc3();
write_data_to_spc3();
diag_check();
CHKSFRData();
if(CommportCount>200)
{
USART_AS_Init();
InitTimer2();
CommportCount=0;
}
}
}
/* 函数原型 -----------------------------------------------*/
void RCC_Configuration(void); / /Configure different system clock
void NVIC_Configuration(void); //配 置嵌套中断向量表
void IWDG_Configuration(void); //配 置看门狗
void init_data_buffer(void); //初 始化数据缓存区
void user_dps_reset(void); //初 始化VPC3
void dps2_reset_user_wd(void); //reset the WDT of vpc3
void read_data_from_VPC3+C(void); //rea d data from the RAM of vpc3
void write_data_to_VPC3+C(void); //write data to the RAM of vpc3
void diag_check(void);//check the buffers and state
void vpc3_buf_check(void); //检 查写入与读出vpc3的数据是否相同
文章主要设计了协议转换的主程序以及串口收发程序,设计了模块在Profibus-DP总线侧的从站功能程序以及模块在Modbus总线侧的主站功能程序,设计内容主要包括程序的初始化和数据处理中断方式。最后,本文根据整体设计介绍了协议转换模块对两种总线协议数据转换的实现方式,包括数据如何映射、中断过程怎样进入、主循环程序怎样进行等。通过报文转换、数据收发等程序,最终成功实现了Modbus协议和Profibus协议的转换,在工业应用中具有一定的实际意义。