配置CU參數
- 打開
V-Assistant
,新建工程 - 選擇驅動
- 選擇電機型號
- 選擇控制模式
V90伺服定位控制方式分為兩種,一種是通過工藝對象,另外一種是通過EPOS標準塊:
a.如果選用工藝對象控制伺服電機,控制模式選用速度控制。報文選用標準報文3.
b.如果選用EPOS標準塊控制伺服電機,控制模式選用基本定位器控制(EPOS)。報文選用報文111.
- 設置PROFINET
注意:PN站名和IP地址要和博圖組態(tài)一致。在配置完設備名稱以及 IP 地址之后,必須保存參數并重啟驅動來激活配置。
- 設置參數
由于 S7-1200 軸工藝對象中已經組態(tài)了軸運行的加減速時間,所以在SINAMICS V-ASSISTANT 側激活斜坡功能模塊并將斜坡上升時間和斜坡下降時間設置為 0.0000 S
- 設置限值:扭矩和速度參數查閱電機銘牌或手冊填寫。
- 優(yōu)化電機(動態(tài)調式):
動態(tài)剛度等級:這是優(yōu)化V90伺服電機的動態(tài)性能參數,數值越高,電機的動態(tài)相應特性越好。但是,過高的動態(tài)響應特性會引起電機的諧振,導致整個控制系統(tǒng)不穩(wěn)定,根據擺動的需求選擇合適的范圍。
電機優(yōu)化的旋轉角度:絕對值型編碼器建議為180°,增量型編碼器建議為720°
電機優(yōu)化時正反轉運行的最長時間:通常按照默認的2000毫秒
填寫即可。
配置工藝對象
- 添加工藝對象,選擇TO_PosotioningAxis
- 常規(guī)設置,選擇PROFIDrive
- 驅動器設置,選擇標準報文3
- 設置編碼器,選擇PROFINET上的裝置
- 編碼器選擇”的步驟和驅動器設置步驟一樣。
- 填寫拓展參數,絲杠一轉的位移
- 位置限制設置
如果系統(tǒng)有限位開關要勾選
“啟用硬限位開關”
并且填入開關的符號地址。當限位開關感應到后,伺服電機立即停止。此時伺服讀取的當前位置會發(fā)生變化,和實際數值不符,需要讓電機反方向運轉,離開限位開關,并斷電重啟。
- 動態(tài)常規(guī)設置
加減速度的斜坡時間設置為0.1,可以時伺服電機快速啟動和停止。此處是設置伺服電機的啟動和停止時間。
- 主動回原點設置
系統(tǒng)如果有原點開關,需要勾選
“通過數字量輸入使用原點開關”
,并輸入開關地址。
只對主動回原點參數進行設置,被動回原點采用默認。
- 隨動誤差設置
當運行伺服電機提示超出范圍錯誤時,可以通過修改“最大隨動誤差”和“隨動誤差”參數來解決錯誤。
- 電機抱閘功能:
- 對于 400 V 系列伺服驅動,電機抱閘接口(X7)集成在前面板。將其與帶抱閘的伺服電機連接即可使用電機抱閘功能。
- 對于 200 V 系列伺服驅動,沒有集成單獨的抱閘接口。為使用抱閘功能,需要通過控制狀態(tài)接口(X8)將驅動連接至第三方設備。
- 電機抱閘用于在伺服系統(tǒng)未激活(如,伺服系統(tǒng)斷電)時,停止運動負載的非預期運動(如,在重力作用下的掉落)。伺服電機在斷電后可能因為其自身重量或者受到外力而發(fā)生意外移動。
- 帶抱閘版本的伺服電機中內置了抱閘:
以上是伺服控制器X8接口
抱閘僅用實現(xiàn)于“保持”功能,即僅用于保持負載的靜止狀態(tài)。不得用于對運動中的負載進行制動。只能對已停止的電機使用抱閘。
抱閘在電機斷電的同時即激活。
控制程序
REGION 動作路徑長度,最大設置不能超過18 IF #H_Collection.ButtonAndStatus.In_MoveNumber_Mannual > 18 THEN #H_Collection.ButtonAndStatus.In_MoveNumber_Mannual := 18; END_IF; END_REGIONREGION 邏輯處理 // 手動 #MannualStart := #In_Mode.ManualMode AND #In_MoveCondition AND #H_Collection.ButtonAndStatus.Button_Mannual; //自動 #AutoStart := #In_Mode.AutoMode AND #In_MoveCondition AND #In_MoveAutoCondition AND #InOut_MoveAuto; //Home #JogHome := #In_Mode.ManualMode AND #In_HomeCondition AND (#H_Collection.ButtonAndStatus.Button_Home OR #In_Mode.HomeMode);END_REGIONREGION JOG點動 //硬限位激活 IF #In_HwLimitActive THEN //上限 IF #H_Collection.ButtonAndStatus."Button_JOG+" AND #In_Mode.ManualMode THEN #Velocity := #H_Collection.ButtonAndStatus.In_Value_JogVel; IF #In_Axis.PositionLimits_HW.MaxSwitchLevel THEN #"JOG+" := #H_Collection.ButtonAndStatus."Button_JOG+"; ELSE #"JOG+" := FALSE; END_IF; ELSE #"JOG+" := FALSE; END_IF; //下限 IF #H_Collection.ButtonAndStatus."Button_JOG-" AND #In_Mode.ManualMode THEN #Velocity := #H_Collection.ButtonAndStatus.In_Value_JogVel; IF #In_Axis.PositionLimits_HW.MinSwitchLevel THEN #"JOG-" := #H_Collection.ButtonAndStatus."Button_JOG-"; ELSE #"JOG-" := FALSE; END_IF; ELSE #"JOG-" := FALSE; END_IF; //軟限位激活 ELSE //上限 IF #H_Collection.ButtonAndStatus."Button_JOG+" AND #In_Mode.ManualMode THEN #Velocity := #H_Collection.ButtonAndStatus.In_Value_JogVel; IF #In_Axis.ActualPosition < #In_Axis.PositionLimits_SW.MaxPosition THEN #"JOG+" := #H_Collection.ButtonAndStatus."Button_JOG+"; ELSE #"JOG+" := FALSE; END_IF; ELSE #"JOG+" := FALSE; END_IF; //下限 IF #H_Collection.ButtonAndStatus."Button_JOG-" AND #In_Mode.ManualMode THEN #Velocity := #H_Collection.ButtonAndStatus.In_Value_JogVel; IF #In_Axis.ActualPosition > #In_Axis.PositionLimits_SW.MinPosition THEN #"JOG-" := #H_Collection.ButtonAndStatus."Button_JOG-"; ELSE #"JOG-" := FALSE; END_IF; ELSE #"JOG-" := FALSE; END_IF; END_IF; //按鈕防錯 IF #H_Collection.ButtonAndStatus."Button_JOG+" AND #H_Collection.ButtonAndStatus."Button_JOG-" THEN #H_Collection.ButtonAndStatus."Button_JOG+" := FALSE; #H_Collection.ButtonAndStatus."Button_JOG-" := FALSE; END_IF;END_REGIONREGION 回原點 //1.模式0:絕對式直接回零,把當前位置直接設置為0.0,重啟后恢復當前位置值 //2.模式1:相對式直接回零:把當前位置值+Position值作為原點 //3.模式2:被動回原點:按照工藝組態(tài)回原點,回原點后把當前位置設置為Position值 //4.模式3:主動回原點:按照工藝組態(tài)回原點,回原點后把當前位置設置為Position值 //5.模式7:絕對編碼器值回原點:將當前位置設置為Position值,計算出絕對偏移值并保存:例:當伺服處于機械零點時,此時歸位,伺服會把當前值設置為Position值(校零) //6.選擇絕對值式伺服電機無原點開關時,回原點模式選擇7。 //7.選擇增量式伺服電機有原點開關時,回原點模式選擇3。END_REGIONREGION 手動移動到位 IF #MannualStart AND #Enable.Status AND NOT #Pluse[0] THEN IF #H_Collection.ButtonAndStatus.In_MoveNumber_Mannual < 0 THEN #H_Collection.ButtonAndStatus.In_MoveNumber_Mannual := 0; END_IF; IF #H_Collection.ButtonAndStatus.In_MoveNumber_Mannual > 18 THEN #H_Collection.ButtonAndStatus.In_MoveNumber_Mannual := 18; END_IF; #Absolute_Pos_OK := FALSE; #Velocity := #H_Collection.ButtonAndStatus.In_Value_AbsVel; #AbsPos := #H_Collection.ButtonAndStatus.In_Value_AbsPosition[#H_Collection.ButtonAndStatus.In_MoveNumber_Mannual]; #MC_MoveAbsolute_Excute := #MannualStart; END_IF; #Pluse[0] := #MannualStart; IF NOT #MannualStart AND #Pluse[1] THEN #MC_MoveAbsolute_Excute := FALSE; END_IF; #Pluse[1] := #MannualStart; END_REGIONREGION 自動移動到位 IF #AutoStart AND #Enable.Status AND NOT #Pluse[2] THEN IF #InOut_MoveNumber_Auto < 0 THEN #InOut_MoveNumber_Auto := 0; END_IF; IF #InOut_MoveNumber_Auto > 18 THEN #InOut_MoveNumber_Auto := 18; END_IF; #Absolute_Pos_OK := FALSE; #Velocity := #H_Collection.ButtonAndStatus.In_Value_AbsVel; #AbsPos := #H_Collection.ButtonAndStatus.In_Value_AbsPosition[#InOut_MoveNumber_Auto]; #MC_MoveAbsolute_Excute := #InOut_MoveAuto; END_IF; #Pluse[2] := #AutoStart; IF NOT #AutoStart AND #Pluse[3] THEN #MC_MoveAbsolute_Excute := FALSE; END_IF; #Pluse[3] := #MannualStart; END_REGIONREGION 運行中 #Running := #Absolute.Busy OR #Home.Busy OR #JOG.Busy; END_REGIONREGION 絕對定位到位 #Timer1(IN:= ABS_REAL(#In_Axis.ActualPosition-#AbsPos)<10 AND (NOT #Absolute_Pos_OK) AND (NOT #Absolute.Busy), PT:=T#500MS); IF #Timer1.Q THEN #Absolute_Pos_OK := TRUE; ELSIF #Running THEN #Absolute_Pos_OK := FALSE; END_IF; END_REGIONREGION 初始化 //初始化 IF #In_Mode.ManualMode AND NOT #Pluse[4] THEN #InOut_MoveAuto := FALSE; #Absolute_Pos_OK := FALSE; END_IF; #Pluse[4] := #In_Mode.ManualMode;END_REGIONREGION 示教模式 //處理示教點信號 IF #H_Collection.ButtonAndStatus.In_TeachNumber < 0 THEN #H_Collection.ButtonAndStatus.In_TeachNumber := 0; ELSIF #H_Collection.ButtonAndStatus.In_TeachNumber > 18 THEN #H_Collection.ButtonAndStatus.In_TeachNumber := 18; END_IF; //開始示教 IF #In_Mode.ManualMode AND NOT #Running AND #Enable.Status AND #H_Collection.ButtonAndStatus.Button_Teach AND (NOT #Pluse[5]) THEN #H_Collection.ButtonAndStatus.In_Value_AbsPosition[#H_Collection.ButtonAndStatus.In_TeachNumber] := #In_Axis.ActualPosition; END_IF; #Pluse[5] := #H_Collection.ButtonAndStatus.Button_Teach; END_REGIONREGION 軸控制 // Statement section REGION //**************************軸使能**************************** #MC_Power_Instance(Axis := #In_Axis, Enable := #In_Enable, StartMode := #In_MC_Power_StartMode, StopMode := #In_MC_Power_StopMode, Status => #Enable.Status, Busy => #Enable.Busy, Error => #Enable.Error, ErrorID => #Enable.ErrorID, ErrorInfo => #Enable.ErrorInfo); //***************************軸復位**************************** #MC_Reset_Instance(Axis := #In_Axis, Execute := #In_Mode.Reset, Restart := #In_MC_Reset_Restart, Done => #Reset.Done, Busy => #Reset.Busy, Error => #Reset.Error, ErrorID => #Reset.ErrorID, ErrorInfo => #Reset.ErrorInfo); //*****************************軸原點************************** #MC_Home_Instance(Axis := #In_Axis, Execute := #JogHome, Position := #In_MC_Home_Position, Mode := #In_MC_Home_Mode, Done => #Home.Done, Busy =>#Home.Busy, CommandAborted => #Home.CommandAborted, Error => #Home.Error, ErrorID => #Home.ErrorID, ErrorInfo => #Home.ErrorInfo, ReferenceMarkPosition => #Home.ReferenceMarkPosition); //*****************************軸JOG******************************* #MC_MoveJog_Instance(Axis := #In_Axis, JogForward := #"JOG+", JogBackward := #"JOG-", Velocity := #Velocity, PositionControlled := #In_MC_MoveJog_PositionControlled, InVelocity => #JOG.inVelocity, Busy => #JOG.Busy, CommandAborted => #JOG.CommandAborted, Error => #JOG.Error, ErrorID => #JOG.ErrorID, ErrorInfo => #JOG.ErrorInfo); //***************************軸絕對定位*************************** #MC_MoveAbsolute_Instance(Axis := #In_Axis, Execute := #MC_MoveAbsolute_Excute, Position :=#AbsPos, Velocity := #Velocity, Direction := #In_MC_MoveAbsolute_Direction, Done => #Absolute.Done, Busy =>#Absolute.Busy, CommandAborted => #Absolute.CommandAborted, Error => #Absolute.Error, ErrorID => #Absolute.ErrorID, ErrorInfo => #Absolute.ErrorInfo); //***************************暫停軸*********************************** #Auto_TRIAG(CLK:=#In_Mode.AutoMode); #Mannual_TRIG(CLK:=#In_Mode.ManualMode); #MC_Halt_Instance(Axis := #In_Axis, Execute := (#In_Enable OR #Auto_TRIAG.Q OR #Mannual_TRIG.Q), Done => #Halt.Done, Busy => #Halt.Busy, CommandAborted => #Halt.CommandAborted, Error => #Halt.Error, ErrorID => #Halt.ErrorID, ErrorInfo => #Halt.ErrorInfo); END_REGION//*****************************反饋輸出*******************************REGION 輸出 #Out_ActualVelocity := #In_Axis.ActualVelocity; #Out_ActualPosition := #In_Axis.ActualPosition; #Out_Running := #Running; #Out_Abs_PosOK := #Absolute_Pos_OK; #Out_Enabled := #Enable.Status; #Out_Home := #Home.Done;END_REGION//**********************************報警**************************#Alarm := #In_Alarm OR #Enable.Error OR #Reset.Error OR #JOG.Error OR #Absolute.Error OR #Halt.Error;IF #Alarm THEN #Out_Alarm := TRUE;ELSIF NOT #Alarm AND #In_Mode.Reset THEN #Out_Alarm := FALSE;END_IF; //**********************************HMI Collection************************** //輸出#H_Collection.Enable := #Enable;#H_Collection.Reset := #Reset;#H_Collection.Home := #Home;#H_Collection.JOG := #JOG;#H_Collection.Absolute := #Absolute;#H_Collection.Halt := #Halt;#H_Collection.ButtonAndStatus.Out_ActualVelocity := #In_Axis.ActualVelocity;#H_Collection.ButtonAndStatus.Out_ActualPosition := #In_Axis.ActualPosition;
- 對于MC_Home的Mode接口的解釋:
- 0:絕對式直接歸位:新的軸位置為參數“Position”位置的值。例:假如當前位置為20.00,此時回原點把當前的位置設置成原點,位置為0.00。但是此時斷電在重啟,當前位置又恢復為20.00.
- 1:相對式直接歸位:新的軸位置等于當前軸位置 + 參數“Position”位置的值。例:假如當前位置為20.00,此時回原點,為20.00+0.0(Position的參數)=20.00。
- 2:被動回原點:將根據軸組態(tài)進行回原點?;卦c后,將新的軸位置設置為參數“Position”的值.
- 3:主動回原點: 按照軸組態(tài)進行回原點操作。回原點后,將新的軸位置設置為參數“Position”的值。
- 7: 絕對編碼器調節(jié)(絕對): 將當前的軸位置設置為參數“Position”的值。計算出的絕對值偏移值保持性地保存在 CPU 內。 (<軸名稱>.StatusSensor.AbsEncoderOffset)例:當伺服處在機械零點位置時,此時歸位,伺服會把當前位置設置為0(Position的參數)。
- 注意:選擇絕對值式伺服電機無原點開關時,回原點模式選擇7;選擇增量式伺服電機有原點開關時,回原點模式選擇3。
關于工藝對象(TO)
- 當基本定位控制方案時由S7-1200/S7-1500 PLC通過PROFINET通信連接S120/V90 PN 驅動實現(xiàn)定位功能時,位置控制器可以在PLC中也可以在驅動器中,他們分別對應于PLC的工藝對象(TO)及驅動中的基本定位功能(EPOS)。
- PLC的工藝對象(TO):此種定位控制時將位置閉環(huán)放在PLC中執(zhí)行,此種方式回占用PLC資源,因此根據型號不同,PLC最大帶軸數量也有很大差別。如下圖:。不過使用S7-1500/1500T PLC通過工藝對象(TO)方式控制V90的優(yōu)點是除了可以實現(xiàn)單軸基本定位功能外,還可以實現(xiàn)齒輪同步,凸輪同步等高級位置控制功能。注意:由于S7-1500及V90 PN支持PROFINET IRT通信,使用工藝對象(TO)的方式可以實現(xiàn)高動態(tài),高精度的位置控制。
- 驅動中的基本定位功能(EPOS):V90 PN驅動器內部集成了基本定位控制器(EPOS),激活后可以通過EPOS功能是想單軸的點動、回零、程序步、相對定位及絕對定位等操作。此時,位置閉環(huán)由驅動器本身完成,PLC只需通過報文發(fā)送啟動命令、定位速度、目標位置等信息至驅動器即可。此種控制方式優(yōu)點在于,基本定位功能不會占用PLC資源,PLC控制的軸的最大數量主要受PLC本身所能連接的PROFINENT站點數量的限制,缺點在于只能實現(xiàn)單軸的定位。在博圖中推薦使用驅動庫中基于111報文的功能塊FB284控制V90 PN實現(xiàn)基本定位控制。
關于絕對值編碼器的校準
- 通過工藝對象的方式控制V90 PN,但是絕對值編碼器無法校準,V90 PN的ABS功能怎么找不到,還有調試軟件中的絕對值編碼器校準怎么也是灰的。這是因為通過工藝對象的方式所使用的V90控制模式是速度模式,是沒有激活位置控制器的,所以驅動端的絕對值編碼器校準是不起作用的。如果箱給絕對值編碼器進行校準,那么需要在PLC側去執(zhí)行,這里要用到的就是MC_HOME塊,在MODE管腳要選6或7(結合平時的項目調試,選7適用)。