• <tr id="yyy80"></tr>
  • <sup id="yyy80"></sup>
  • <tfoot id="yyy80"><noscript id="yyy80"></noscript></tfoot>
  • 99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

    PLC順序功能圖的梯形圖編程模塊化規(guī)范研究

    2021-09-23 06:08:00車健生吳雪霏
    電子技術(shù)與軟件工程 2021年12期
    關(guān)鍵詞:主程序梯形圖數(shù)組

    車健生 吳雪霏

    (沈陽現(xiàn)代制造服務(wù)學(xué)校 遼寧省沈陽市 110148)

    隨著順序功能圖在PLC梯形圖中的廣泛應(yīng)用,“以經(jīng)驗法為主的設(shè)計方法存在設(shè)計周期長,不易掌握,程序可讀性差”[1]等問題有了很大緩解。但對于一個中大型PLC編程設(shè)計,順序功能圖的梯形圖編程也暴露出一些問題。如與經(jīng)驗法比較上手容易,但程序代碼數(shù)量大多超過后者。轉(zhuǎn)換條件與輸出狀態(tài)混在一個SCR—SCRE嵌套中,條理不夠清楚;步的轉(zhuǎn)換條件、輸出狀態(tài)語句數(shù)量隨著步的復(fù)雜程度而變化,引起程序個別點處臃腫,整體不均勻。這些都會造成順序功能圖結(jié)構(gòu)不清晰,直觀性、可讀性受到嚴(yán)重影響。把一個程序分解為若干個子程序,是解決這個問題的一個重要途徑,“運用函數(shù)”或子程序“是程序的首要組織手段”,它給程序“帶來更好的可讀性、可維護(hù)性和可重用性”[2]。將一個大程序按照一定的規(guī)范分解為若干小程序模塊,稱之為模塊化設(shè)計,顯然,這個規(guī)范的合理性、可操作性是重中之重。

    1 順序功能圖的三種基本結(jié)構(gòu)

    在計算機科學(xué)發(fā)展史上,結(jié)構(gòu)化程序設(shè)計的出現(xiàn)是一個里程碑的事件,結(jié)構(gòu)化程序設(shè)計最基本原則是:任何程序都可以由三種基本流程結(jié)構(gòu)構(gòu)成,即順序結(jié)構(gòu)、分支結(jié)構(gòu)和循環(huán)結(jié)構(gòu)。在PLC編程發(fā)展史,順序功能圖(SFC)能夠脫穎而出、備受關(guān)注,也在于它關(guān)注程序的結(jié)構(gòu)。順序功能圖主要由步、有向連線、轉(zhuǎn)換、轉(zhuǎn)換條件和輸出狀態(tài)組成。將系統(tǒng)工作過程劃分成若干順序相連的、由被控對象工作狀態(tài)變化所決定的步;步的活動狀態(tài)的轉(zhuǎn)換由轉(zhuǎn)換條件來實現(xiàn)。這是順序功能圖的“形”,它的“神”是PLC程序設(shè)計由此實現(xiàn)了把所有程序看作是由單序列、選擇序列和并列序列三種基本結(jié)構(gòu)組成的,如圖1、圖2和圖3所示。一定程度上有效地避免經(jīng)驗設(shè)計法中的試探性和隨意性,提高程序的可讀性和可維護(hù)性。

    如果一個梯形圖編程模塊化規(guī)范能夠涵蓋這三種基本結(jié)構(gòu),那么這個規(guī)范就是完備的。以下模塊化規(guī)范的構(gòu)建均是在討論這三種基本結(jié)構(gòu)的基礎(chǔ)上,此外,規(guī)范仍然要保持梯形圖編程直觀性的特點。

    2 順序功能圖的梯形圖實現(xiàn)的主程序規(guī)范

    順序功能圖用梯形圖編程實現(xiàn)一般有三種方法,一是使用啟保停電路的順序控制設(shè)計方法;二是使用SCR指令的順序控制設(shè)計方法;三是使用計數(shù)變量的順序控制設(shè)計方法[3]。其中,方法一在一個網(wǎng)絡(luò)中描述一個步,當(dāng)某個轉(zhuǎn)換條件或狀態(tài)輸出繁多時,這個網(wǎng)絡(luò)就會臃腫復(fù)雜;方法二由于有些PLC沒有專用的SCR順序控制繼電器而有所受限,同時SCR、SCRE對于每一“步”都要占用兩個網(wǎng)絡(luò)的開銷;方法三對于表達(dá)并列順序功能圖,通過一個計數(shù)變量描述所有步,計數(shù)變量某一時刻的值對應(yīng)活動步編號,這對并列順序功能圖同時存在兩個以上活動步的編程是有欠缺的,如果強行合并并列步為一步,會破壞順序功能圖的條理性。

    在總結(jié)上述三種方法優(yōu)點基礎(chǔ)上,本規(guī)范主程序,用Mx.y位存儲器依次表示順序步,Mx.y位存儲器值為1時,對應(yīng)的步為活動步。每一步占用一個網(wǎng)絡(luò),均由調(diào)用轉(zhuǎn)換條件子程序SBR_i和調(diào)用輸出狀態(tài)子程序Output_State兩條指令組成(以上x,y分別為字節(jié)與位編號,i為子程序序號),圖2選擇序列順序功能圖的主程序如圖4。

    圖1:單序列

    圖2:選擇序列

    圖3:并列序列

    圖4:選擇序列主程序片段

    圖5:分支點步轉(zhuǎn)換條件子程序SBR_0

    圖6:并列步轉(zhuǎn)換條件子程序SBR_0

    圖7:接收狀態(tài)位組數(shù)據(jù)子程序片段

    圖8:數(shù)字字符串轉(zhuǎn)數(shù)組部分梯形圖

    調(diào)用轉(zhuǎn)換條件子程序指令有著相同的結(jié)構(gòu),以SBR_0為例,左邊輸入端Current聯(lián)結(jié)當(dāng)前步M0.0,右邊輸出端Forward聯(lián)結(jié)去向步M0.1 和步M0.4,指令盒清楚地表明順序功能圖中步轉(zhuǎn)換的來龍去脈。主程序注重的是程序主體流程脈絡(luò),不去關(guān)注子程序具體的實現(xiàn)過程。本規(guī)范對順序功能圖的梯形圖編程模塊化處理具有主次清楚、層次分明的特點。

    3 順序功能圖的梯形圖實現(xiàn)的條件轉(zhuǎn)換子程序規(guī)范

    規(guī)范中,每個條件轉(zhuǎn)換子程序都由條件邏輯觸發(fā)目標(biāo)步狀態(tài)寄存器,接著復(fù)位當(dāng)前活動步狀態(tài)寄存器兩部分指令構(gòu)成。轉(zhuǎn)換條件滿足時,對目標(biāo)步狀態(tài)位置1,并且對當(dāng)前步狀態(tài)位清0,從而完成當(dāng)前步到目標(biāo)步活動狀態(tài)的轉(zhuǎn)變。圖2選擇序列分支點與圖3并列序列并列節(jié)點對應(yīng)的轉(zhuǎn)換條件子程序SBR_0 分別如圖5和圖6所示。

    在條件轉(zhuǎn)換子程序中Current變量類型設(shè)置為IN_OUT,F(xiàn)orward變量類型設(shè)置為OUT,這樣子程序能接收主程序調(diào)用時傳遞的步狀態(tài)位值,也能在轉(zhuǎn)換條件結(jié)束時傳達(dá)出當(dāng)前活動狀態(tài)停止的信息。子程序與主程序只在這兩個通道上發(fā)生數(shù)據(jù)交換,實現(xiàn)了子程序與主程序的完全隔離。子程序可隨意使用局部變量,而不用顧及與主程序中變量重名、沖突等問題。如果條件相同,條件轉(zhuǎn)換子程序可以通用,被不同步所調(diào)用,例如圖1的順序功能圖的梯形圖中SBR_0與SBR_2是相同的,可只保留一個,從而提高了條件轉(zhuǎn)換子程序模塊的復(fù)用性。

    圖9

    4 順序功能圖的梯形圖實現(xiàn)的狀態(tài)輸出通用子程序

    順序功能圖每步輸出狀態(tài)雖然無外乎Q位寄存器串并聯(lián)的組合,每步均有,個別處數(shù)量龐大且無序,影響順序功能圖結(jié)構(gòu)性和可讀性。這個看似錯綜復(fù)雜的問題可以用一個描寫每步輸出狀態(tài)的數(shù)組,加上一個數(shù)組上運行的通用程序予以處理。

    順序功能圖畫出之前,一般先列出系統(tǒng)輸入輸出狀態(tài)表,狀態(tài)表用來確定順序功能圖的每一步,以及每一步的輸出狀態(tài)。狀態(tài)表中的輸出狀態(tài)可在程序初始化時存入一個二維數(shù)組,數(shù)組是以步編號為行號,將步狀態(tài)中位對應(yīng)數(shù)組元素,每步狀態(tài)全部位對應(yīng)數(shù)組的一行?;顒硬捷敵鰻顟B(tài)時,以當(dāng)前步編號為行號,在數(shù)組中提取一行數(shù)組數(shù)據(jù),輸出給Q字節(jié)、字或雙字寄存器。程序由下面幾個部分組成。

    4.1 步狀態(tài)數(shù)字字符串初始化

    本程序以每一步輸出狀態(tài)為步序號的ASCII二進(jìn)制數(shù)為例,如圖7所示。數(shù)組初始化程序以直觀、常規(guī)方法接收狀態(tài)數(shù)據(jù),先是利用STR_CPY指令接收第一串?dāng)?shù)字字符串,然后再通過STR_CAT附加第二行、第三行、……字符串。不失一般性地約定:數(shù)據(jù)之間用逗號加空格隔開,第二行開始,追加數(shù)據(jù)以逗號開頭。習(xí)慣上一行數(shù)據(jù)表示一個步狀態(tài),但也可由多個指令完成。程序假定占用VB2000開始的單元(建議使用高端不常用地址),用于以數(shù)字字符串形式保存這批狀態(tài)位數(shù)據(jù)。

    4.2 步狀態(tài)數(shù)字字符串轉(zhuǎn)存二維數(shù)組及數(shù)組基本管理

    數(shù)字字符串轉(zhuǎn)存數(shù)組,主要過程是在循環(huán)控制指令FOR,利用字符串轉(zhuǎn)換整數(shù)指令S_I,對數(shù)字字符串進(jìn)行整數(shù)轉(zhuǎn)換操作;通過字符搜索指令CHR_FIND,依次推進(jìn)搜索逗號,把逗號位置賦給AC0,從下一位置開始字符串轉(zhuǎn)換整數(shù)操作,結(jié)果保存在AC1中,然后存入指定的數(shù)組元素中。主要程序片段如圖8。

    對于無數(shù)組體系的PLC,如S7-200系列等可按下面方式進(jìn)行數(shù)組的訪問。本研究約定二維數(shù)組是以行優(yōu)先的一維數(shù)組方式進(jìn)行的存儲,二維下標(biāo)[i, j]對應(yīng)的一維下標(biāo)[ (i-1)*列總數(shù)+j ],對于元素以字節(jié)單元存儲,某個一維下標(biāo)也就是這個元素的相對地址(相對數(shù)組第1個元素前的位置),從而實現(xiàn)對二維數(shù)組元素的訪問。下文中涉及的二維數(shù)組元素讀取子程序ARRARY2D_B_out就可以按照這樣原理進(jìn)行設(shè)計。

    4.3 步狀態(tài)二維數(shù)組中活動步狀態(tài)輸出程序

    每個步諸多Q位存儲器的值占用1行數(shù)組元素,Q位的低位到高位排列對應(yīng)數(shù)組列號的低到高。步狀態(tài)二維數(shù)組中活動步狀態(tài)提取程序Output_State把每行數(shù)組元素組合一個字節(jié)、字或雙字,作為函數(shù)值返回。本文以輸出字節(jié)為例,對于指定步狀態(tài)編號State_num,程序中循環(huán)從起始列號到終止列號,也就是從左到右,依次讀取數(shù)組元素ARRAY[State_num, Column_int],對元素值與1進(jìn)行比較,等于1時,使用左移位SHL_B指令生成1個以元素列號對應(yīng)位為1,其它位為0的字節(jié)QB_bit;通過邏輯或WOR_B指令把上面的QB_bit累計到輸出狀態(tài)字節(jié)Output_B中。行號為State_num的一行元素依次處理完畢后,字節(jié)Output_B就已存放了這步的輸出狀態(tài),以其作為本子程序的返回值。程序核心部分清單如圖9。

    5 結(jié)束語

    程序基于早期S7-200系列PLC,全部通過上機驗證。上述順序功能圖的梯形圖實現(xiàn)模塊化規(guī)范,無論是整體,還是主程序和子程序都保持梯形圖的立身之本——直觀性,延續(xù)了順序功能圖成功之基——結(jié)構(gòu)化設(shè)計。一個大中型項目往往需要多人合作完成,規(guī)范化、模塊化的設(shè)計有助于分工協(xié)作開發(fā)程序。模塊化后,程序斷點容易確定,使得調(diào)試程序更為方便,提高了程序可靠性。模塊化的設(shè)計,對于相關(guān)相似的不同項目,使得開發(fā)者只需關(guān)注修改不同點的模塊,提高了程序開發(fā)的復(fù)用性。在PLC順序功能圖設(shè)計思想廣泛應(yīng)用的今天,實現(xiàn)順序功能圖設(shè)計的梯形圖編程模塊化規(guī)范,對順序功能設(shè)計的深入發(fā)展具有一定的積極作用。

    猜你喜歡
    主程序梯形圖數(shù)組
    JAVA稀疏矩陣算法
    電腦報(2022年13期)2022-04-12 00:32:38
    JAVA玩轉(zhuǎn)數(shù)學(xué)之二維數(shù)組排序
    電腦報(2020年24期)2020-07-15 06:12:41
    淺談數(shù)控銑削技術(shù)代碼程序的嵌套方式研究
    電控冰箱軟件模塊化設(shè)計
    日用電器(2019年12期)2019-02-26 01:53:06
    基于VC的梯形圖編程軟件開發(fā)技術(shù)
    時光倒流 換回PotPlayer老圖標(biāo)
    繼電器電路轉(zhuǎn)為梯形圖教學(xué)經(jīng)驗淺談
    電子制作(2016年15期)2017-01-15 13:39:28
    尋找勾股數(shù)組的歷程
    PLC梯形圖程序設(shè)計技巧及應(yīng)用
    VB數(shù)組在for循環(huán)中的應(yīng)用
    考試周刊(2012年88期)2012-04-29 04:36:47
    全南县| 合川市| 温州市| 玉溪市| 柯坪县| 南昌市| 长宁县| 庄河市| 迁安市| 延川县| 滦平县| 凯里市| 招远市| 隆回县| 罗源县| 新建县| 盈江县| 乌鲁木齐县| 临海市| 宜良县| 西城区| 东城区| 侯马市| 阳西县| 天台县| 治县。| 焉耆| 郸城县| 南丰县| 楚雄市| 惠州市| 永仁县| 阿巴嘎旗| 静乐县| 观塘区| 墨脱县| 辉县市| 河池市| 潮州市| 共和县| 临沧市|