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