本次將重點(diǎn)介紹用戶程序的編寫方法,并通過大家的動(dòng)手實(shí)踐掌握好該項(xiàng)技能。
為了對SLPC可編程調(diào)節(jié)器有一正確而較全面的理解,從而科學(xué)地掌握其操作及程序的編制,我們首先介紹其工作節(jié)拍與程序運(yùn)行原理。
1、SLPC*E的工作節(jié)拍
SLPC*E是按100 ms或200ms的定周期節(jié)拍工作的,圖1是其常用的200ms工作時(shí)序圖。從圖1可以看出,在控制周期內(nèi),控制器依靠內(nèi)部的定時(shí)器,每隔10ms向CPU發(fā)出一次中斷申請,啟動(dòng)相應(yīng)程序順序執(zhí)行。CPU累計(jì)定時(shí)器中斷申請次數(shù),每20次,即200ms完成一個(gè)控制循環(huán)。
在每個(gè)控制周期的開始,首先判斷是否編程工作狀態(tài)。若是,則轉(zhuǎn)入編程處理程序;若不是,則進(jìn)入自檢狀態(tài)——檢查RAM、ROM、D/A、A/D工作是否正常。如果這些檢查都正常,則讀入狀態(tài)寄存器的數(shù)據(jù),以判明控制器處于自動(dòng)、手動(dòng)還是串級工作狀態(tài)。并對輸出回路的連接狀態(tài)及RAM備用電源的電壓進(jìn)行檢查。
在定周期節(jié)拍的最初10ms內(nèi)完成上述自檢工作后,在第二、第三兩個(gè)10ms定時(shí)中斷的作用下,由輸入程序自動(dòng)對各路模擬量輸入進(jìn)行兩次A/D轉(zhuǎn)換,取其平均值存入RAM的輸入寄存器Xn中。
在A/D轉(zhuǎn)換結(jié)束后,CPU就從用戶ROM中取出用戶程序,按編制好的程序順序執(zhí)行,直到最后一句END為止。
在執(zhí)行完用戶程序的各項(xiàng)操作之后,調(diào)用輸出處理程序進(jìn)行輸出處理,依次用10ms的時(shí)間對PV、SV、Y1、Y2、Y3進(jìn)行D/A轉(zhuǎn)換,向外輸出模擬信號(hào)。
在完成上述程序后,系統(tǒng)轉(zhuǎn)入等待狀態(tài),直到200ms的固定控制周期結(jié)束,再進(jìn)入下一個(gè)新的控制周期。SLPC*E單回路控制器就是按照這樣的工作節(jié)拍反復(fù)循環(huán)著。
從圖1中還可看到一項(xiàng)D/A刷新操作,這是為了保持輸出值穩(wěn)定而采取的軟件措施。從前面的系統(tǒng)原理圖可以得知,控制器的模擬量輸出采用輸出電容進(jìn)行保持,為了盡量減小電容的放電電流,CPU每隔20ms對輸出電容進(jìn)行0.1ms的短暫充電,以補(bǔ)充放電損失的電荷量,對輸出保持的質(zhì)量大大提高。
為了保障定周期工作節(jié)拍的正常進(jìn)行,系統(tǒng)中還設(shè)有專門的監(jiān)視器WTD(軟件狗),實(shí)時(shí)地監(jiān)視控制周期的時(shí)間進(jìn)程。如果CPU因故障等原因經(jīng)過200ms不能完成工作循環(huán),就發(fā)出報(bào)警信號(hào),并采取以下應(yīng)急處理措施:保持輸出狀態(tài)不變,控制方式自動(dòng)切換到手動(dòng)方式,指示表及操作電流輸出切換到后備電路,以避免事故的發(fā)生或進(jìn)一步擴(kuò)大。
2、用戶程序運(yùn)算原理
SLPC*E的用戶程序采用面向?qū)ο蟮某绦蛟O(shè)計(jì)語言編制,結(jié)構(gòu)類似于一般的計(jì)算機(jī)高級語言。只要根據(jù)控制流程圖的各項(xiàng)功能,選用相應(yīng)的功能模塊指令進(jìn)行順序排列,即可組成一個(gè)用戶程序。這種利用功能模塊組成控制系統(tǒng)的方法,在數(shù)字控制儀表中稱為“組態(tài)”。
下面以一個(gè)2輸入變量相加的運(yùn)算為例,說明用戶程序的運(yùn)算原理。假設(shè)運(yùn)算前各運(yùn)算寄存器內(nèi)的數(shù)據(jù)分別為A、B、C、D、E。
表1? 輸入加法運(yùn)算
第一步:LD? X1????? 輸入寄存器X1內(nèi)的數(shù)據(jù)
在用戶程序執(zhí)行前,SLPC的輸入處理程序已將各路模擬量輸入信號(hào),經(jīng)A/D轉(zhuǎn)換后存入寄存器X1~X5中。執(zhí)行程序LD? X1后,X1中的數(shù)據(jù)就進(jìn)入運(yùn)算寄存器S1中,根據(jù)堆棧原理,其它各運(yùn)算寄存器內(nèi)的數(shù)據(jù)順序下移,原S5中的數(shù)據(jù)被丟失。
第二步:LD? X2????? 輸入寄存器X2內(nèi)的數(shù)據(jù)
執(zhí)行LD? X2后,X2中的數(shù)據(jù)進(jìn)入運(yùn)算寄存器S1,其余各寄存器內(nèi)的數(shù)據(jù)再次下移,原S5中的數(shù)據(jù)D被丟失。
第三步:+???? 加法運(yùn)算,對X1、X2求和。
將S2中的數(shù)據(jù)加上S1中的數(shù)據(jù),和數(shù)(X2 +X1)存入S1中。其它各寄存器中的數(shù)據(jù)上移一格,但S5中的數(shù)據(jù)不變。
第四步:ST? Y1????? 將S1中的數(shù)據(jù)送到輸出寄存器Y1中,運(yùn)算寄存器中的數(shù)據(jù)不變。送入Y1中的數(shù)據(jù)由輸出處理程序轉(zhuǎn)換成模擬電信號(hào)。
第五步:END??? 程序結(jié)束。
至此,一個(gè)控制周期的運(yùn)算結(jié)束,等到下一個(gè)控制周期再重新開始執(zhí)行用戶程序。
從這個(gè)實(shí)例可以看出:
(1)運(yùn)算過程的三個(gè)基本動(dòng)作
① 取數(shù)存入運(yùn)算寄存器??? LD指令
② 數(shù)據(jù)運(yùn)算????????????? 運(yùn)算指令
③ 輸出結(jié)果????????????? ST指令
(2)S寄存器的作用
用戶程序的執(zhí)行都是通過運(yùn)算寄存器進(jìn)行的,輸入輸出指令只對S1操作,其它指令則圍攏著S1~S5進(jìn)行。因此,在設(shè)計(jì)用戶程序時(shí)必須熟悉指令執(zhí)行時(shí)各種數(shù)據(jù)在運(yùn)算寄存器中的正確位置。
評論
查看更多