西門子PLC卡件6ES7317-2EK14-0AB0
程序?qū)崿F(xiàn)
接下來我們就可以根據(jù)上述輪詢思想,通過編寫STEP7程序具體實(shí)現(xiàn)主站輪詢從站的功能。由于主站、從站任務(wù)的不同,所以在程序上的實(shí)現(xiàn)上也有所不同,下面針對(duì)主站和從站的程序?qū)崿F(xiàn)做個(gè)簡(jiǎn)要描述。具體的例程可以參考本文附帶的樣例程序。
3.1 主站程序
3.1.1 初始化
為了實(shí)現(xiàn)對(duì)多個(gè)從站的輪詢,程序構(gòu)造了一個(gè)輪詢計(jì)數(shù)器,通過修改輪詢計(jì)數(shù)器的值,來修改主站發(fā)送數(shù)據(jù)幀中的站地址標(biāo)識(shí)字符。
本例中定義MW2作為輪詢計(jì)數(shù)器,程序開始,先對(duì)輪詢計(jì)數(shù)器進(jìn)行操作,默認(rèn)先輪詢1#從站,將值1賦值給MW2。
圖10 初始化輪詢計(jì)數(shù)器程序段
在程序執(zhí)行過程中,會(huì)修改輪詢計(jì)數(shù)器的值,通過判斷輪詢計(jì)數(shù)器的值對(duì)發(fā)送數(shù)據(jù)塊的地址標(biāo)識(shí)符字作相應(yīng)的修改,以完成對(duì)響應(yīng)從站的輪詢。本例中具體的實(shí)現(xiàn)如下圖,其中DB13作為發(fā)送數(shù)據(jù)塊,DB13.DBW0為地址標(biāo)識(shí)符字。
圖11 生成地址標(biāo)識(shí)符程序段
3.1.2 啟動(dòng)發(fā)送
初始化完成后,可以啟動(dòng)發(fā)送功能。本例次發(fā)送采用手動(dòng)方式,通過觸發(fā)手動(dòng)啟動(dòng)標(biāo)志位M30.1,并調(diào)用FB8 P_SND_RK發(fā)送數(shù)據(jù)到從站。完成次發(fā)送后,可以通過程序自動(dòng)修改自動(dòng)輪詢標(biāo)志位M30.0來實(shí)現(xiàn)自動(dòng)發(fā)送數(shù)據(jù)到從站的功能,具體的FB8 P_SND_RK功能塊使用參考CP341手冊(cè)。
啟動(dòng)發(fā)送功能塊FB8后,通過FB8返回狀態(tài)信息,判斷是否發(fā)送完成,如果發(fā)送錯(cuò)誤,則重新啟動(dòng)發(fā)送功能。
? 發(fā)送完成:?jiǎn)?dòng)接收作業(yè),準(zhǔn)備接收從站返回?cái)?shù)據(jù)。同時(shí)啟動(dòng)一個(gè)超時(shí)定時(shí)器T11,如果超時(shí)定時(shí)時(shí)間到,還沒有接收到數(shù)據(jù),則放棄等待,開始輪詢下一個(gè)站。
圖12 發(fā)送功能塊程序段
3.1.3 接收從站返回?cái)?shù)據(jù)
發(fā)送完成后,啟動(dòng)接收作業(yè),準(zhǔn)備接收從站返回?cái)?shù)據(jù),并將接收到的數(shù)據(jù)先放到接收緩沖區(qū)中,本例DB14數(shù)據(jù)塊為接收緩沖區(qū)。
圖13 接收功能塊程序段
3.1.4 接收完成西門子PLC卡件6ES7317-2EK14-0AB0
接收完成后,做如下幾方面處理。如果接收錯(cuò)誤或超時(shí),則跳過此站的輪詢。
? 根據(jù)接收到數(shù)據(jù)的地址標(biāo)識(shí)符判斷是來自哪個(gè)從站的數(shù)據(jù),并將數(shù)據(jù)從接收緩沖區(qū)轉(zhuǎn)移到的從站數(shù)據(jù)存儲(chǔ)區(qū)中,同時(shí)清空接收緩沖區(qū);
? 復(fù)位接收標(biāo)志,同時(shí)修改輪詢計(jì)數(shù)器的值,準(zhǔn)備輪詢下一個(gè)從站;
? 復(fù)位超時(shí)定時(shí)器;
? 啟動(dòng)一個(gè)延時(shí)定時(shí)器,延時(shí)時(shí)間到后開始輪詢下一個(gè)從站。
圖14 接收完成處理程序段
圖15 準(zhǔn)備輪詢下一個(gè)站程序段
3.2 從站程序
相對(duì)于主站,從站的處理程序相對(duì)簡(jiǎn)單。下面以2#從站為例做個(gè)說明,1#從站除了調(diào)用FB不同外,都與2#從站相同。
3.2.1 接收數(shù)據(jù)
從站一直啟動(dòng)接收功能FB2 P_RCV,接收來自網(wǎng)絡(luò)上的數(shù)據(jù),如果接收到數(shù)據(jù)則根據(jù)地址標(biāo)識(shí)符判斷是否是本站的數(shù)據(jù):
? 是本站數(shù)據(jù),則將接收緩沖區(qū)(DB17)中的數(shù)據(jù)移到的地址區(qū)(DB18)中,并清空接收緩沖區(qū)。同時(shí),觸發(fā)發(fā)送標(biāo)志,發(fā)送返回?cái)?shù)據(jù)給主站;
? 不是本站數(shù)據(jù),直接清空接收緩沖區(qū)(DB17)。
圖16 從站接收程序段
圖17 從站接收完處理程序段
3.2.1 發(fā)送返回?cái)?shù)據(jù)
接收完成后,調(diào)用發(fā)送功能,將DB19的數(shù)據(jù)發(fā)送給主站。
圖18 從站發(fā)送響應(yīng)程序段
3.3 實(shí)驗(yàn)結(jié)果
搭建好網(wǎng)絡(luò),并將程序分別下載到各自的CPU中,啟動(dòng)CPU的運(yùn)行。通過置位手動(dòng)啟動(dòng)輪詢標(biāo)志位M30.0即可啟動(dòng)輪詢程序的運(yùn)行。通過變量表可以監(jiān)視到系統(tǒng)的運(yùn)行情況,可以看到,主站會(huì)循環(huán)地將數(shù)據(jù)發(fā)送到兩個(gè)從站,同時(shí)也循環(huán)地接收來自從站的返回?cái)?shù)據(jù),如下圖所示。
圖19 系統(tǒng)運(yùn)行監(jiān)控圖
4 應(yīng)用小結(jié)
通過本應(yīng)用實(shí)例,可以看到基于ASCII驅(qū)動(dòng)協(xié)議的多站點(diǎn)輪詢?cè)肀容^簡(jiǎn)單。同時(shí)因?yàn)槠漭^大的靈活性,所以可以與各種滿足ASCII協(xié)議的設(shè)備進(jìn)行通信。西門子串行通信模塊CP340、CP341、CP440-1、CP441-1/2、CPU313C/314C-2PtP以及ET200S的1SI 3964/ASCII等都集成有ASCII驅(qū)動(dòng)協(xié)議功能,可以根據(jù)需求靈活地選擇這些產(chǎn)品。
本文所述應(yīng)用和提供例程只作為相關(guān)應(yīng)用的參考,在實(shí)際的應(yīng)用中,應(yīng)該充分考慮通信伙伴的特點(diǎn)和實(shí)際需求,結(jié)合不同的輪詢方式、錯(cuò)誤處理機(jī)制、校驗(yàn)方法、數(shù)據(jù)處理方法等手段達(dá)到通信目的。
鄭重聲明:本文的虛擬工程與真實(shí)工程實(shí)例有重大差別,示例中并未遵循規(guī)范的工程設(shè)計(jì)流程進(jìn)行編程,請(qǐng)讀者切勿將其與工程實(shí)例相混淆;由于此例子是免費(fèi)的,任何用戶可以免費(fèi)復(fù)制或傳播此程序例子。程序的作者對(duì)此程序不承擔(dān)任何功能性或兼容性的責(zé)任,使用者風(fēng)險(xiǎn)自負(fù);西門子不提供此程序例子的錯(cuò)誤更改或者熱線支持;為了更好的使用這些模板,建議用戶仔細(xì)閱讀相關(guān)模板的使用手冊(cè)