任 強(沈陽延鋒江森座椅有限責任公司,沈陽 110000)
基于C#的VFD閉環(huán)位置控制
任強
(沈陽延鋒江森座椅有限責任公司,沈陽110000)
在位置控制閉環(huán)控制系統(tǒng)中如果采用PLC+VFD的方式,由PLC取得編碼器或光柵尺的位置信息并進行處理,處理速度相對較慢,穩(wěn)定性差。在一些大型的驅(qū)動產(chǎn)品設(shè)計當中普遍在變頻器內(nèi)部使用位置、速度閉環(huán)控制方式,這一方式很好的解決了定位精確與穩(wěn)定性的問題。本文通過介紹使用C#編寫閉環(huán)控制程序,使大家了解如何使用這種技術(shù)實現(xiàn)精確定位控制。
閉環(huán)控制;變頻器;精確定位;位置控制
在變頻驅(qū)動技術(shù)中,定位控制是一項比較復雜的技術(shù)。簡單定位如使用凸輪開關(guān)觸發(fā),定位精度較差。如果需要精確定位,比較可靠的辦法是采用電機旋轉(zhuǎn)編碼器、直線光柵尺編碼器讀取位置信息。編碼器通過RS485總線方式與變頻器的接口連接。變頻器內(nèi)部擁有中央處理單元(CPU)以及強大的內(nèi)部程序系統(tǒng),時刻高速處理接收到的數(shù)據(jù),實時進行速度與位置控制。
下面以SEW公司的MOVEDRIVE系列變頻器產(chǎn)品為例,介紹如何使用C#編程內(nèi)部程序以實現(xiàn)驅(qū)動器精確定位的。MOVEDRIVE產(chǎn)品支持匯編語言與C#編程,基本指令與語法傳統(tǒng)計算機語言基本一致。稍有不同的是,MOVEDRIVE中包含一些特殊指令、函數(shù)(如讀取編碼器指令,位置控制指令等),以及具有固定功能的變量。
在編寫閉環(huán)程序之前需要了解控制方式。使用外部IO點進行控制時,需要了解相應(yīng)IO的配置信息。變頻器內(nèi)部程序中某些IO點功能是固定的,比如DI00是設(shè)備緊停等。內(nèi)部變量是以Hxxx的形式定義的,變量范圍H000~H1024。每個變量由8個Bit位組成,某些變量的功能也是固定的比如H484.1設(shè)備使能。
變頻器內(nèi)部程序可以并行運行兩個任務(wù)(TASK1、TASK2)。兩個任務(wù)在編程的時候是寫在一個程序當中,需要了解的是這兩個任務(wù)同時運行,互不干涉。這樣可以使用一個任務(wù)進行位置控制,另一個任務(wù)進行位置監(jiān)控并控制IO點輸出。
本文介紹一臺具有正反兩個方向,兩個停止位設(shè)備的閉環(huán)程序開發(fā)過程。變頻器的運行使用IO點控制,包括設(shè)備緊停、設(shè)備使能、正轉(zhuǎn)、反轉(zhuǎn)、手自動、定位點等。為了便于編程引用,將各個IO點定義為變量名方式。代碼如下:
#defineE_ReglersperreDI00//定義變量指向DI00點,緊急停止
#defineE_FreigabeDI03//定義變量指向DI03點,設(shè)備使能
#defineE_Positions_BIT_0DI11//位置Bit0
#defineE_AutomatikDI15//手動、自動控制模式
#definePosition_1H1//定義變量Position1為H1,用于設(shè)定返回位置
#definePosition_2H2//定義變量Position2為H2,用于設(shè)定前進位置
程序中還可以對某些內(nèi)部標志位的操作定義為子過程,便于編程時隨時調(diào)用。例如:
#defineSet_Rechtslauf_BitSet(H484,2)//設(shè)置內(nèi)部變量H484的第2個Bit位為1。H484變量為電機順時針旋轉(zhuǎn)標志位,通過設(shè)置該位來使電機正轉(zhuǎn)。
#defineReset_linkslauf_BitClear(H484,2)//將內(nèi)部變量H484的第2個Bit位清0,使電機正轉(zhuǎn)停止。
對變量聲明、定義之后,即可開始主程序編程。主程序開始使用固定的過程名“main()”。
在主程序中首先啟動任務(wù)2(TASK2),TASK2是實時監(jiān)控編碼器數(shù)據(jù),發(fā)現(xiàn)當前位置達到設(shè)定值即輸出IO信號,使設(shè)備做出停止動作。TASK1是自動啟動的,所以此時兩個任務(wù)并行運行。接下來對定義的變量賦值。位置、速度設(shè)定:
Position_1=1299//對位置1(H1)賦值為位置值1299
Position_2=4322//對位置2(H2)賦值為位置值4322
下面開始編寫程序核心部分,位置定位。代碼如下:
Positionieren()//定義定位過程
If(PositionAngewaehlt&&E_Positionierfreigebe)//如果位置bit0 至bit中任一位不為0則繼續(xù)執(zhí)行。這三個bit位是PLC發(fā)過來的位置信息。
Merker_Istposition=Actpos_Abs//將設(shè)備當前位置存入變量
Merker_Sollposition=ZielpositionNeu//將目標位置存入變量
Fahrstrecke=(Merker_Sollposition_INKR-Merker_IstPosition)//計算當前位置與目標位置的差值
if(Fahrstrecke>1)//確定電機旋轉(zhuǎn)方向,如果位置差值大于1則賦值給變量正轉(zhuǎn),否則賦值反轉(zhuǎn)。
Drehrichtung=RECHTS//正轉(zhuǎn)
Else
Drehrichtung=LINKS//反轉(zhuǎn)
if(Drehrichtung==RECHTS)//如果正轉(zhuǎn)則向下執(zhí)行正轉(zhuǎn)程序。
Reset_Linkslauf//清除H484.3,禁止反轉(zhuǎn)操作
Set_Rechtslauf//設(shè)定H484.2,開動電機正轉(zhuǎn)
if(E_Automatik&&(Fahrstrecke>Umschaltpunkt_1))//自動且目標與實際位置差值大于700
_SetSys(SS_N11,Eilgang)//則設(shè)定轉(zhuǎn)速為1400轉(zhuǎn)每分鐘。
if((!E_Automatik&&(Fahrstrecke>Umschaltpunkt_2))||(E_ Automatik&&((Fahrstrecke<Umschaltpunkt_1)&&(Fahrstrecke>Umschaltpunkt_2))))//手動狀態(tài)且目標與實際位置大于65,或自動狀態(tài)目標與實際差值在65至70之間
_SetSys(SS_N11,Speed_Hand)//則轉(zhuǎn)速設(shè)定為200轉(zhuǎn)每分鐘。
if((Fahrstrecke>Umschaltpunkt_3)&&(Fahrstrecke<Umschaltpunkt_2))//目標與實際差值在1~65之間
SetSys(SS_N11,Schleichgang)//則設(shè)定轉(zhuǎn)速為50轉(zhuǎn)每分鐘。
上述代碼是控制電機正轉(zhuǎn)的過程,反轉(zhuǎn)過程與正轉(zhuǎn)類似。由于在主程序中啟動了TASK2,TASK2在實時的監(jiān)測著設(shè)備的位置信息,如果發(fā)現(xiàn)實際位置與目標位置在設(shè)定誤差范圍內(nèi),則輸出相應(yīng)的IO信息,停止電機運行。
目前在很多高端的變頻器產(chǎn)品當中,都具有內(nèi)部閉環(huán)控制功能。通過變頻器內(nèi)部編寫的閉環(huán)控制程序,很好的解決了PLC+VFD系統(tǒng)的閉環(huán)控制定位精度、穩(wěn)定性問題,同時使PLC控制程序編寫更加簡單,提高了編程效率。
任強,男,遼寧沈陽人,助理設(shè)備工程師,大專,研究方向:電氣設(shè)備管理方向。