劉思遠


摘? ?要:三菱PLC中利用變址寄存器與其他的軟元件編號組合在一起可以方便地實現(xiàn)對多個數(shù)據(jù)的尋址操作,也稱間接尋址。在三菱PLC中結(jié)合間接尋址和其他指令可以實現(xiàn)類似C語言中的循環(huán)結(jié)構(gòu)和排序算法,這種編程方式更為簡便和靈活,通用性強,能幫助PLC編程人員掌握一些高級語言的基礎知識。文章基于三菱PLC間接尋址,對實現(xiàn)循環(huán)結(jié)構(gòu)與排序算法進行了分析。
關鍵詞:間接尋址;循環(huán)結(jié)構(gòu);排序算法
在實際的項目應用當中,在對多個數(shù)據(jù)進行操作時,經(jīng)常需要間接指定地址。所謂間接指定地址,就是區(qū)別于D0,D100等直接指定地址,而利用一個基準地址和間接指定數(shù)來指向一個新的地址的操作。間接指定地址相比直接指定地址來說,指定的地址是可以變的,所以間接指定地址的操作又稱作變址操作[1]。變址寄存器結(jié)合其他的軟元件可以很方便地對一串數(shù)據(jù)進行操作,類似于高級語言中的指針。
在高級語言中循環(huán)結(jié)構(gòu)是結(jié)構(gòu)化程序設計的基本結(jié)構(gòu)之一,主要用到GOTO,DO while,F(xiàn)OR 3種語句[2]。在工控行業(yè)的可編程邏輯控制器(Programmable Logic Controller,PLC)控制中,很多問題都要用到循環(huán)語句,比如物流系統(tǒng)在一套產(chǎn)品入庫時,需要產(chǎn)品按照指定要求實現(xiàn)自動、循環(huán)入庫。三菱PLC中有FOR NEXT指令,但是在一些執(zhí)行機構(gòu)動作的順序控制時,F(xiàn)OR NEXT指令不能很好地實現(xiàn),此條指令更適合做簡單的算法。利用判斷指令和變址寄存器可以很方便地嵌套到順序控制中去,實現(xiàn)對執(zhí)行機構(gòu)一些循環(huán)動作的控制,這種編程思路借鑒了高級語言中的FOR語句。
排序也是PLC控制中經(jīng)常遇到的難題,比如智能制造生產(chǎn)管理系統(tǒng)下單后,設備按照訂單的編號大小進行生產(chǎn),或者按照隨機的要求生產(chǎn),都要用到排序算法。三菱PLC中SORT指令是專門解決排序問題的,但是也有局限性,只能在程序中使用一次,不可重復使用。
本文以某智能制造生產(chǎn)系統(tǒng)中兩種典型的控制要求為模型,結(jié)合高級語言的知識,以MES下單、訂單生產(chǎn)為例子,利用三菱PLC中的變址寄存器和其他指令實現(xiàn)循環(huán)和排序算法。
1? ? MES系統(tǒng)介紹
圖1為某智能制造生產(chǎn)系統(tǒng)的結(jié)構(gòu)。MES系統(tǒng)分配了固定地址的數(shù)據(jù)寄存器給PLC,用以存放訂單和產(chǎn)品的相關信息。圖2中給出了用戶下載訂單后,3個訂單的信息存入到PLC中的數(shù)據(jù)寄存器,上層為訂單的基本信息,下層為該訂單的產(chǎn)品信息,每個訂單的產(chǎn)品信息存入的是不同的數(shù)據(jù)寄存器,例如訂單10000的產(chǎn)品1編號存入D406,訂單10001的產(chǎn)品1編號存入的是D436,以此類推,下層界面會隨訂單的變化而變化。
2? ? 循環(huán)結(jié)構(gòu)的實現(xiàn)
2.1? 循環(huán)語句
C語言中有4種循環(huán)語句:goto,while,do while,for語句。
For語句最簡單的理解形式如下:for(循環(huán)變量賦初值,循環(huán)條件,循環(huán)變量增值),例如:FOR(i=1, i<100, i++)[3]。
利用三菱PLC中的條件判斷指令和變址寄存器再結(jié)合順控指令的跳轉(zhuǎn)即可以實現(xiàn)類似C語言中的for循環(huán)。所用到的指令為[Ld< z0 k100], incp z0,類似于C語言中的循環(huán)條件和循環(huán)變量增值。
2.2? 按照訂單編號循環(huán)生產(chǎn)的實現(xiàn)
訂單由MES系統(tǒng)下單到用戶的客戶端,用戶下載訂單后根據(jù)訂單編號依次進行生產(chǎn),但由于產(chǎn)品種類及數(shù)量過多,在編寫系統(tǒng)的PLC程序時,編程人員要反復大量地使用不同數(shù)據(jù)寄存器,十分繁瑣而導致容易出錯。三菱PLC在處理此類問題時用順控指令結(jié)合變址寄存器能很快地實現(xiàn)條件的判斷和循環(huán)。
3? ? 排序的實現(xiàn)
3.1? 排序算法
C語言中排序算法大致分為比較算法和非比較算法。比較算法使用較多,基本上都是通過比較兩個數(shù)的大小來實現(xiàn),比如冒泡排序、快速排序和插入排序。冒泡排序是最經(jīng)典的排序算法,很適合初學者。
在MES下單系統(tǒng)中,訂單除了按照順序循環(huán)生產(chǎn)外,還存在優(yōu)先級的概念,即先生產(chǎn)哪一個訂單。在編寫此類問題的PLC程序時,就要對多個數(shù)據(jù)進行優(yōu)先級別的排序,可采用類似于高級語言的冒泡排序。用變址寄存器結(jié)合查詢指令SER排序可以很靈活地解決該問題。
3.2? 按照訂單優(yōu)先級進行排序的實現(xiàn)
將3個訂單的優(yōu)先級存入D200~D203中。利用SER指令查找出3個數(shù)據(jù)中最小值的位置,以Z1分辨3個訂單的狀態(tài)(在MES系統(tǒng)中,訂單狀態(tài)寄存器為1時代表訂單等待生產(chǎn),2為正在生產(chǎn),3為取消訂單,4為生產(chǎn)完成);以Z2分辨當前最小的是哪個數(shù)據(jù)并將其存入D211~D213中。
單個數(shù)據(jù)存入完畢后,將其值改變?yōu)镵101(MES系統(tǒng)中優(yōu)先級的最大值默認為K100)并利用MES留有空余的D404,D434,D464判別該數(shù)據(jù)是否已經(jīng)被排序,當所有數(shù)據(jù)被排序完成后停止程序的運作。
該程序只是范例,在完整的程序中,還有更多的條件需要考慮,僅提供了大概的框架。
4? ? 結(jié)語
本文詳細地介紹了利用三菱PLC的變址寄存器實現(xiàn)某智能制造生產(chǎn)系統(tǒng)中對多個訂單的處理方法,包括訂單的自動循環(huán)生產(chǎn)以及有訂單優(yōu)先級時該如何處理。
本文所提供的梯形圖參考程序借鑒了高級語言的循環(huán)結(jié)構(gòu)和排序算法,而目前工控行業(yè)對PLC編程人員掌握高級語言知識的能力要求越來越高,西門子TIA PROTAL中的SCL編程語言是根據(jù)C語言封裝的,在數(shù)據(jù)處理算法方面有很大優(yōu)勢。將三菱PLC間接尋址的編程思路靈活運用,可以優(yōu)化程序,解決數(shù)據(jù)處理邏輯和算法時的一些難點。
[參考文獻]
[1]霍海波,范江波.基于三菱FX2N系列PLC軟元件數(shù)據(jù)實時改變與顯示設計[J].煙臺師范學院學報(自然科學版),2006(1):31-36.
[2]馬學敏.計算機C語言循環(huán)語句的應用研究[J].中國新通信,2016(17):87-88.
[3]王韜睿.三種簡單排序算法及實現(xiàn)[J].通訊世界,2019(1):284-285.