配置CU參數(shù)
- 打開
V-Assistant
,新建工程 - 選擇驅(qū)動(dòng)
- 選擇電機(jī)型號(hào)
- 選擇控制模式
V90伺服定位控制方式分為兩種,一種是通過工藝對(duì)象,另外一種是通過EPOS標(biāo)準(zhǔn)塊:
a.如果選用工藝對(duì)象控制伺服電機(jī),控制模式選用速度控制。報(bào)文選用標(biāo)準(zhǔn)報(bào)文3.
b.如果選用EPOS標(biāo)準(zhǔn)塊控制伺服電機(jī),控制模式選用基本定位器控制(EPOS)。報(bào)文選用報(bào)文111.
- 設(shè)置PROFINET
注意:PN站名和IP地址要和博圖組態(tài)一致。在配置完設(shè)備名稱以及 IP 地址之后,必須保存參數(shù)并重啟驅(qū)動(dòng)來激活配置。
- 設(shè)置參數(shù)
由于 S7-1200 軸工藝對(duì)象中已經(jīng)組態(tài)了軸運(yùn)行的加減速時(shí)間,所以在SINAMICS V-ASSISTANT 側(cè)激活斜坡功能模塊并將斜坡上升時(shí)間和斜坡下降時(shí)間設(shè)置為 0.0000 S
- 設(shè)置限值:扭矩和速度參數(shù)查閱電機(jī)銘牌或手冊(cè)填寫。
- 優(yōu)化電機(jī)(動(dòng)態(tài)調(diào)式):
動(dòng)態(tài)剛度等級(jí):這是優(yōu)化V90伺服電機(jī)的動(dòng)態(tài)性能參數(shù),數(shù)值越高,電機(jī)的動(dòng)態(tài)相應(yīng)特性越好。但是,過高的動(dòng)態(tài)響應(yīng)特性會(huì)引起電機(jī)的諧振,導(dǎo)致整個(gè)控制系統(tǒng)不穩(wěn)定,根據(jù)擺動(dòng)的需求選擇合適的范圍。
電機(jī)優(yōu)化的旋轉(zhuǎn)角度:絕對(duì)值型編碼器建議為180°,增量型編碼器建議為720°
電機(jī)優(yōu)化時(shí)正反轉(zhuǎn)運(yùn)行的最長(zhǎng)時(shí)間:通常按照默認(rèn)的2000毫秒
填寫即可。
配置工藝對(duì)象
- 添加工藝對(duì)象,選擇TO_PosotioningAxis
- 常規(guī)設(shè)置,選擇PROFIDrive
- 驅(qū)動(dòng)器設(shè)置,選擇標(biāo)準(zhǔn)報(bào)文3
- 設(shè)置編碼器,選擇PROFINET上的裝置
- 編碼器選擇”的步驟和驅(qū)動(dòng)器設(shè)置步驟一樣。
- 填寫拓展參數(shù),絲杠一轉(zhuǎn)的位移
- 位置限制設(shè)置
如果系統(tǒng)有限位開關(guān)要勾選
“啟用硬限位開關(guān)”
并且填入開關(guān)的符號(hào)地址。當(dāng)限位開關(guān)感應(yīng)到后,伺服電機(jī)立即停止。此時(shí)伺服讀取的當(dāng)前位置會(huì)發(fā)生變化,和實(shí)際數(shù)值不符,需要讓電機(jī)反方向運(yùn)轉(zhuǎn),離開限位開關(guān),并斷電重啟。
- 動(dòng)態(tài)常規(guī)設(shè)置
加減速度的斜坡時(shí)間設(shè)置為0.1,可以時(shí)伺服電機(jī)快速啟動(dòng)和停止。此處是設(shè)置伺服電機(jī)的啟動(dòng)和停止時(shí)間。
- 主動(dòng)回原點(diǎn)設(shè)置
系統(tǒng)如果有原點(diǎn)開關(guān),需要勾選
“通過數(shù)字量輸入使用原點(diǎn)開關(guān)”
,并輸入開關(guān)地址。
只對(duì)主動(dòng)回原點(diǎn)參數(shù)進(jìn)行設(shè)置,被動(dòng)回原點(diǎn)采用默認(rèn)。
- 隨動(dòng)誤差設(shè)置
當(dāng)運(yùn)行伺服電機(jī)提示超出范圍錯(cuò)誤時(shí),可以通過修改“最大隨動(dòng)誤差”和“隨動(dòng)誤差”參數(shù)來解決錯(cuò)誤。
- 電機(jī)抱閘功能:
- 對(duì)于 400 V 系列伺服驅(qū)動(dòng),電機(jī)抱閘接口(X7)集成在前面板。將其與帶抱閘的伺服電機(jī)連接即可使用電機(jī)抱閘功能。
- 對(duì)于 200 V 系列伺服驅(qū)動(dòng),沒有集成單獨(dú)的抱閘接口。為使用抱閘功能,需要通過控制狀態(tài)接口(X8)將驅(qū)動(dòng)連接至第三方設(shè)備。
- 電機(jī)抱閘用于在伺服系統(tǒng)未激活(如,伺服系統(tǒng)斷電)時(shí),停止運(yùn)動(dòng)負(fù)載的非預(yù)期運(yùn)動(dòng)(如,在重力作用下的掉落)。伺服電機(jī)在斷電后可能因?yàn)槠渥陨碇亓炕蛘呤艿酵饬Χl(fā)生意外移動(dòng)。
- 帶抱閘版本的伺服電機(jī)中內(nèi)置了抱閘:
以上是伺服控制器X8接口
抱閘僅用實(shí)現(xiàn)于“保持”功能,即僅用于保持負(fù)載的靜止?fàn)顟B(tài)。不得用于對(duì)運(yùn)動(dòng)中的負(fù)載進(jìn)行制動(dòng)。只能對(duì)已停止的電機(jī)使用抱閘。
抱閘在電機(jī)斷電的同時(shí)即激活。
控制程序
REGION 動(dòng)作路徑長(zhǎng)度,最大設(shè)置不能超過18 IF #H_Collection.ButtonAndStatus.In_MoveNumber_Mannual > 18 THEN #H_Collection.ButtonAndStatus.In_MoveNumber_Mannual := 18; END_IF; END_REGIONREGION 邏輯處理 // 手動(dòng) #MannualStart := #In_Mode.ManualMode AND #In_MoveCondition AND #H_Collection.ButtonAndStatus.Button_Mannual; //自動(dòng) #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點(diǎn)動(dòng) //硬限位激活 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; //按鈕防錯(cuò) 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 回原點(diǎn) //1.模式0:絕對(duì)式直接回零,把當(dāng)前位置直接設(shè)置為0.0,重啟后恢復(fù)當(dāng)前位置值 //2.模式1:相對(duì)式直接回零:把當(dāng)前位置值+Position值作為原點(diǎn) //3.模式2:被動(dòng)回原點(diǎn):按照工藝組態(tài)回原點(diǎn),回原點(diǎn)后把當(dāng)前位置設(shè)置為Position值 //4.模式3:主動(dòng)回原點(diǎn):按照工藝組態(tài)回原點(diǎn),回原點(diǎn)后把當(dāng)前位置設(shè)置為Position值 //5.模式7:絕對(duì)編碼器值回原點(diǎn):將當(dāng)前位置設(shè)置為Position值,計(jì)算出絕對(duì)偏移值并保存:例:當(dāng)伺服處于機(jī)械零點(diǎn)時(shí),此時(shí)歸位,伺服會(huì)把當(dāng)前值設(shè)置為Position值(校零) //6.選擇絕對(duì)值式伺服電機(jī)無原點(diǎn)開關(guān)時(shí),回原點(diǎn)模式選擇7。 //7.選擇增量式伺服電機(jī)有原點(diǎn)開關(guān)時(shí),回原點(diǎn)模式選擇3。END_REGIONREGION 手動(dòng)移動(dòng)到位 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 自動(dòng)移動(dòng)到位 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 運(yùn)行中 #Running := #Absolute.Busy OR #Home.Busy OR #JOG.Busy; END_REGIONREGION 絕對(duì)定位到位 #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 示教模式 //處理示教點(diǎn)信號(hào) 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); //***************************軸復(fù)位**************************** #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); //*****************************軸原點(diǎn)************************** #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); //***************************軸絕對(duì)定位*************************** #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//**********************************報(bào)警**************************#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;
- 對(duì)于MC_Home的Mode接口的解釋:
- 0:絕對(duì)式直接歸位:新的軸位置為參數(shù)“Position”位置的值。例:假如當(dāng)前位置為20.00,此時(shí)回原點(diǎn)把當(dāng)前的位置設(shè)置成原點(diǎn),位置為0.00。但是此時(shí)斷電在重啟,當(dāng)前位置又恢復(fù)為20.00.
- 1:相對(duì)式直接歸位:新的軸位置等于當(dāng)前軸位置 + 參數(shù)“Position”位置的值。例:假如當(dāng)前位置為20.00,此時(shí)回原點(diǎn),為20.00+0.0(Position的參數(shù))=20.00。
- 2:被動(dòng)回原點(diǎn):將根據(jù)軸組態(tài)進(jìn)行回原點(diǎn)。回原點(diǎn)后,將新的軸位置設(shè)置為參數(shù)“Position”的值.
- 3:主動(dòng)回原點(diǎn): 按照軸組態(tài)進(jìn)行回原點(diǎn)操作?;卦c(diǎn)后,將新的軸位置設(shè)置為參數(shù)“Position”的值。
- 7: 絕對(duì)編碼器調(diào)節(jié)(絕對(duì)): 將當(dāng)前的軸位置設(shè)置為參數(shù)“Position”的值。計(jì)算出的絕對(duì)值偏移值保持性地保存在 CPU 內(nèi)。 (<軸名稱>.StatusSensor.AbsEncoderOffset)例:當(dāng)伺服處在機(jī)械零點(diǎn)位置時(shí),此時(shí)歸位,伺服會(huì)把當(dāng)前位置設(shè)置為0(Position的參數(shù))。
- 注意:選擇絕對(duì)值式伺服電機(jī)無原點(diǎn)開關(guān)時(shí),回原點(diǎn)模式選擇7;選擇增量式伺服電機(jī)有原點(diǎn)開關(guān)時(shí),回原點(diǎn)模式選擇3。
關(guān)于工藝對(duì)象(TO)
- 當(dāng)基本定位控制方案時(shí)由S7-1200/S7-1500 PLC通過PROFINET通信連接S120/V90 PN 驅(qū)動(dòng)實(shí)現(xiàn)定位功能時(shí),位置控制器可以在PLC中也可以在驅(qū)動(dòng)器中,他們分別對(duì)應(yīng)于PLC的工藝對(duì)象(TO)及驅(qū)動(dòng)中的基本定位功能(EPOS)。
- PLC的工藝對(duì)象(TO):此種定位控制時(shí)將位置閉環(huán)放在PLC中執(zhí)行,此種方式回占用PLC資源,因此根據(jù)型號(hào)不同,PLC最大帶軸數(shù)量也有很大差別。如下圖:。不過使用S7-1500/1500T PLC通過工藝對(duì)象(TO)方式控制V90的優(yōu)點(diǎn)是除了可以實(shí)現(xiàn)單軸基本定位功能外,還可以實(shí)現(xiàn)齒輪同步,凸輪同步等高級(jí)位置控制功能。注意:由于S7-1500及V90 PN支持PROFINET IRT通信,使用工藝對(duì)象(TO)的方式可以實(shí)現(xiàn)高動(dòng)態(tài),高精度的位置控制。
- 驅(qū)動(dòng)中的基本定位功能(EPOS):V90 PN驅(qū)動(dòng)器內(nèi)部集成了基本定位控制器(EPOS),激活后可以通過EPOS功能是想單軸的點(diǎn)動(dòng)、回零、程序步、相對(duì)定位及絕對(duì)定位等操作。此時(shí),位置閉環(huán)由驅(qū)動(dòng)器本身完成,PLC只需通過報(bào)文發(fā)送啟動(dòng)命令、定位速度、目標(biāo)位置等信息至驅(qū)動(dòng)器即可。此種控制方式優(yōu)點(diǎn)在于,基本定位功能不會(huì)占用PLC資源,PLC控制的軸的最大數(shù)量主要受PLC本身所能連接的PROFINENT站點(diǎn)數(shù)量的限制,缺點(diǎn)在于只能實(shí)現(xiàn)單軸的定位。在博圖中推薦使用驅(qū)動(dòng)庫中基于111報(bào)文的功能塊FB284控制V90 PN實(shí)現(xiàn)基本定位控制。
關(guān)于絕對(duì)值編碼器的校準(zhǔn)
- 通過工藝對(duì)象的方式控制V90 PN,但是絕對(duì)值編碼器無法校準(zhǔn),V90 PN的ABS功能怎么找不到,還有調(diào)試軟件中的絕對(duì)值編碼器校準(zhǔn)怎么也是灰的。這是因?yàn)橥ㄟ^工藝對(duì)象的方式所使用的V90控制模式是速度模式,是沒有激活位置控制器的,所以驅(qū)動(dòng)端的絕對(duì)值編碼器校準(zhǔn)是不起作用的。如果箱給絕對(duì)值編碼器進(jìn)行校準(zhǔn),那么需要在PLC側(cè)去執(zhí)行,這里要用到的就是MC_HOME塊,在MODE管腳要選6或7(結(jié)合平時(shí)的項(xiàng)目調(diào)試,選7適用)。