李洲山
(西安建筑科技大學 信息與控制工程學院,陜西 西安 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協議的轉換,在工業應用中具有一定的實際意義。