李洲山
(西安建筑科技大學(xué) 信息與控制工程學(xué)院,陜西 西安 710055)
隨著信息技術(shù)和自動(dòng)化技術(shù)的高速發(fā)展,各種現(xiàn)場(chǎng)總線(xiàn)應(yīng)用廣泛而且各有優(yōu)缺點(diǎn)[1],從而出現(xiàn)了多總線(xiàn)共存的現(xiàn)象。然而,不同現(xiàn)場(chǎng)總線(xiàn)之間的不兼容性給用戶(hù)帶來(lái)極大的不便。因此,不同總線(xiàn)標(biāo)準(zhǔn)之間的協(xié)議集成逐漸成為一個(gè)研究熱點(diǎn),文章正是基于這樣的狀況,選擇了國(guó)內(nèi)應(yīng)用廣泛的Modbus總線(xiàn)和Profibus-DP總線(xiàn)作為研究對(duì)象,主要從總線(xiàn)時(shí)序方面研究了兩種協(xié)議之間的雙向轉(zhuǎn)換過(guò)程。在Profibus-DP總線(xiàn)側(cè),協(xié)議轉(zhuǎn)換模塊作為從站與PLC主站進(jìn)行通信,在Modbus總線(xiàn)一側(cè),協(xié)議轉(zhuǎn)換模塊作為主站向Modbus從站設(shè)備寫(xiě)入命令并讀取從站數(shù)據(jù)。通過(guò)本文開(kāi)發(fā)的協(xié)議轉(zhuǎn)換模塊用戶(hù)能夠?qū)odbus從站設(shè)備快速組態(tài)到Profibus-DP總線(xiàn)網(wǎng)絡(luò),有助于增強(qiáng)Modbus的組網(wǎng)能力,在工程應(yīng)用中可以縮短工程周期,降低自動(dòng)控制系統(tǒng)設(shè)計(jì)和維護(hù)的費(fèi)用,使系統(tǒng)設(shè)計(jì)更為靈活。
對(duì)整個(gè)協(xié)議轉(zhuǎn)換模塊而言,Profibus-DP側(cè)的主站和從站的數(shù)據(jù)交換是同步運(yùn)行的,主站在請(qǐng)求數(shù)據(jù)后只有從站應(yīng)答后才會(huì)繼續(xù)執(zhí)行程序。Modbus總線(xiàn)上站與從站之間的數(shù)據(jù)交換則是根據(jù)輪詢(xún)的數(shù)據(jù)查詢(xún)方式完成的。但是,Profibus-DP的數(shù)據(jù)處理和Modbus側(cè)的通信過(guò)程則是獨(dú)立運(yùn)行的。兩種協(xié)議之間的數(shù)據(jù)轉(zhuǎn)換是在VPC3+C芯片中通過(guò)映射關(guān)系完成的。在模塊上電后,主站完成初始化,檢測(cè)從站是否準(zhǔn)備好數(shù)據(jù)通信,如果從站準(zhǔn)備好數(shù)據(jù)交換,DP主站將對(duì)從站進(jìn)行相關(guān)參數(shù)設(shè)置,并檢查從站接口的配置狀態(tài)。如果DP從站已經(jīng)準(zhǔn)備好數(shù)據(jù)交換,則Profibus-DP側(cè)主站與從站進(jìn)行數(shù)據(jù)交換。同理,Profibus-DP側(cè)從站進(jìn)行與主站相對(duì)應(yīng)的操作。
協(xié)議轉(zhuǎn)換設(shè)計(jì)的重點(diǎn)是對(duì)串口收發(fā)程序的實(shí)現(xiàn)。目前,基于微處理器串口的數(shù)據(jù)處理方式有3種:(1)輪詢(xún)方式。這種方式是通過(guò)程序持續(xù)性的查詢(xún)接口設(shè)備的數(shù)據(jù)信息,相對(duì)程序開(kāi)銷(xiāo)比較大,不能保證數(shù)據(jù)處理的快速性要求。(2)中斷方式。這種通信方式大幅度提升了數(shù)據(jù)處理速度,但是同樣也要占用一部分系統(tǒng)資源,如果不停出現(xiàn)中斷,系統(tǒng)程序開(kāi)銷(xiāo)也會(huì)大幅度增加[2]。(3)DMA通信方式。這種通信方式能夠?qū)④浖绦蛱幚淼墓δ芤平唤o硬件處理,無(wú)論在數(shù)據(jù)處理速度還是數(shù)據(jù)交換的可靠性等方面,相比于軟件處理數(shù)據(jù),都占有明顯的優(yōu)勢(shì)。
在Profibus-DP主站與Modbus從站進(jìn)行通信時(shí),通信請(qǐng)求由DP主站發(fā)出,當(dāng)協(xié)議轉(zhuǎn)換模塊接收到請(qǐng)求報(bào)文后,通過(guò)協(xié)議芯片VPC3+C對(duì)報(bào)文進(jìn)行解析[3],然后處理報(bào)文,提取數(shù)據(jù)域信息,通過(guò)協(xié)議數(shù)據(jù)映射關(guān)系,Profibus-DP中的數(shù)據(jù)從新封裝成為Modbus格式發(fā)送給從站設(shè)備。當(dāng)從站設(shè)備返回應(yīng)答信息時(shí),同樣經(jīng)過(guò)這個(gè)過(guò)程將數(shù)據(jù)傳輸?shù)絇rofibus-DP主站一側(cè)。
根據(jù)上述報(bào)文處理結(jié)構(gòu)設(shè)計(jì)相關(guān)主程序來(lái)控制協(xié)議轉(zhuǎn)換模塊的數(shù)據(jù)處理過(guò)程,該過(guò)程大體分為3部分:(1)對(duì)STM32微控制器的初始化,包括配置系統(tǒng)時(shí)鐘、配置嵌套中斷向量表、配置看門(mén)狗時(shí)鐘、初始化數(shù)據(jù)緩存區(qū)、初始化協(xié)議芯片等工作。(2)循環(huán)地不斷從協(xié)議芯片VPC3+C讀取數(shù)據(jù)和寫(xiě)數(shù)據(jù)。(3)如果有外部診斷,系統(tǒng)會(huì)進(jìn)入中斷程序[4]。協(xié)議轉(zhuǎn)換的函數(shù)主題如下所示,主要包含程序初始化、數(shù)據(jù)循環(huán)讀寫(xiě)、中斷處理程序。
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;
}
}
}
/* 函數(shù)原型 -----------------------------------------------*/
void RCC_Configuration(void); / /Configure different system clock
void NVIC_Configuration(void); //配 置嵌套中斷向量表
void IWDG_Configuration(void); //配 置看門(mén)狗
void init_data_buffer(void); //初 始化數(shù)據(jù)緩存區(qū)
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); //檢 查寫(xiě)入與讀出vpc3的數(shù)據(jù)是否相同
文章主要設(shè)計(jì)了協(xié)議轉(zhuǎn)換的主程序以及串口收發(fā)程序,設(shè)計(jì)了模塊在Profibus-DP總線(xiàn)側(cè)的從站功能程序以及模塊在Modbus總線(xiàn)側(cè)的主站功能程序,設(shè)計(jì)內(nèi)容主要包括程序的初始化和數(shù)據(jù)處理中斷方式。最后,本文根據(jù)整體設(shè)計(jì)介紹了協(xié)議轉(zhuǎn)換模塊對(duì)兩種總線(xiàn)協(xié)議數(shù)據(jù)轉(zhuǎn)換的實(shí)現(xiàn)方式,包括數(shù)據(jù)如何映射、中斷過(guò)程怎樣進(jìn)入、主循環(huán)程序怎樣進(jìn)行等。通過(guò)報(bào)文轉(zhuǎn)換、數(shù)據(jù)收發(fā)等程序,最終成功實(shí)現(xiàn)了Modbus協(xié)議和Profibus協(xié)議的轉(zhuǎn)換,在工業(yè)應(yīng)用中具有一定的實(shí)際意義。