Hallo
die Referenz von Achsen lässt sich über ADS Befehle löschen.
Hallo. Benutze folgenden Baustein.
Wie kann ich die Referenz zurücksetzen/killen?
So das ich isRef = False bekomme.
Code:FUNCTION_BLOCK McAxisKernel (* Servo Achse Der Funktionsbaustein erlaubt die Ansteuerung einer NC-Achse als - Einzelachse *) VAR_INPUT startMode :E_STARTMODE; (*Beschreibung: Siehe 'Datentypen'*) (*Refer to: 'Data types'*) zero :BOOL; (*Vor dem nächsten Positionierstart die relative Istposition = 0 setzen*) refCam :BOOL; (*Referenznocke*) start :BOOL; (*Start Positionierung / Abbruch wenn Signal zurückgesetzt wird Fahrprofil mit Geschwindigkeit, Beschleunigung und Ruck*) stop :BOOL; (*Unterbrechung / Fortsetzung Positionierung*) jogPos :BOOL; (*Tippen endlos plus mit Tippgeschwindigkeit*) jogNeg :BOOL; (*Tippen endlos minus mit Tippgeschwindigkeit*) jogPosInc :BOOL; (*Tippen inkrementell plus mit Tippgeschwindigkeit*) jogNegInc :BOOL; (*Tippen inkrementell minus mit Tippgeschwindigkeit*) couple :BOOL; (*Kopplung ein / aus*) extSetpoint :BOOL; (*Externe Sollwertvorgabe ein / aus*) initPos :BOOL; (*Istposition setzen, Referenznocke*) setTarg :BOOL; (*Neue Zielposition während der Bewegung vorgeben*) fastStop :BOOL; (*Stop einer Bewegung mit max. Rampe (Achs-Parameter)*) reset :BOOL; (*Fehler quittieren*) parInit :BOOL; (*Achs-Parameter auslesen*) (*Vorbedingungen zum Verfahren der Achse*) enAxis :BOOL; (*Achse Freigabe*) enPlus :BOOL; (*Achse Fahrfreigabe plus Richtung*) enMinus :BOOL; (*Achse Fahrfreigabe minus Richtung*) (*Fahrdaten der Achse*) targPos :LREAL; (*Achse Zielposition [EINH]*) velo :REAL; (*Achse Geschwindigkeit [EINH/s]*) acc :REAL; (*Achse Beschleunigungsrampe [EINH/s²] / Default (-1)*) dec :REAL; (*Achse Bremsrampe [EINH/s²] / Default (-1)*) jerk :REAL; (*Achse Ruckbegrenzung [EINH/s³] / Default (-1)*) jogIncTargPos :LREAL; (*Tippen inkrementell Schrittweite [EINH]*) jogVelo :REAL; (*Tippen Geschwindigkeit [EINH/s]*) over :REAL:=100; (*Achse Geschwindigkeitsoverride [%]*) ratioNum :INT:=1; (*Achse Getriebekopplung Faktor Zähler*) ratioDenum :INT:=1; (*Achse Getriebekopplung Faktor Nenner*) END_VAR VAR_IN_OUT axisRefIn :NCTOPLC_AXLESTRUCT; (*Achse NC->PLC zyklische Kopplung*) axisRefOut :PLCTONC_AXLESTRUCT; (*Achse PLC->NC zyklische Kopplung*) masterAxisRefIn :NCTOPLC_AXLESTRUCT; (*Leitachse NC->PLC zyklische Kopplung*) END_VAR VAR_OUTPUT stopped :BOOL; (*Achse Stillstand*) isZero :BOOL; (*Achse in Nullposiiton (= ZeroPos)*) isRef :BOOL; (*Achse ist referenziert*) isCoupled :BOOL; (*Achse ist gekoppelt*) isSync :BOOL; (*Achse ist tabellengekoppelt*) isExtSetpoint :BOOL; (*Externe Sollwertvorgabe aktiv*) ncEnabled :BOOL; (*Achse betriebsbereit und freigegeben*) relPos :LREAL; (*Istposition relativ [EINH]*) actPos :LREAL; (*Istposition absolut [EINH]*) busy :BOOL; (*Achsbaustein aktiv*) done :BOOL; (*Im Ziel, Bewegung beendet, rechnerisch*) inPos :BOOL; (*Im Zielfenster, physikalisch*) constVelo :BOOL; (*Fahren mit konstanter Geschwindigkeit*) movePos :BOOL; (*Fahren in Richtung plus*) moveNeg :BOOL; (*Fahren in Richtung minus*) ncError :BOOL; (*Achse Fehler*) ncErrId :UDINT; (*Achse Fehler-Nummer: Die Beschreibung zur Fehlernummer kann dem TwinCat Information System entnommen werden. Suchen -> <errorId>*) parValid :BOOL; (*Achs-Parameter sind gültig ausgelesen*) maxNcVelo :LREAL; (*Parametrierte Maximalgeschwind. [EINH/s]*) maxNcAcc :LREAL; (*Parametrierte Beschleunigung [EINH/s²]*) maxNcDec :LREAL; (*Parametrierte Verzoegerung [EINH/s²]*) maxNcJerk :LREAL; (*Parametrierter Ruck [EINH/s³]*) limitNeg :LREAL; (*SW Limit negativ [EINH]*) limitPos :LREAL; (*SW Limit positiv [EINH]*) END_VAR VAR state :STRUCT_MC_STATE; (*Zustand: Achsbaustein*) logState :ARRAY[-4..0] OF STRUCT_MC_STATE; (*Zustand: Achsbaustein*) stateMotion :INT; (*Zustand Motion*) stateMcFb :INT; (*Zustand MC FB*) stateInitParams :INT; (*Zustand: ActInitParams*) xReadParVelo :MC_ReadParameter; (*Achs-Parameter Geschwindigkeit lesen *) xReadParAcc :MC_ReadParameter; (*Achs-Parameter Beschleunigung lesen *) xReadParDec :MC_ReadParameter; (*Achs-Parameter Verzögerung lesen *) xReadParJerk :MC_ReadParameter; (*Achs-Parameter Ruck lesen *) xReadParLimPos :MC_ReadParameter; (*Achs-Parameter Limit positiv lesen *) xReadParLimNeg :MC_ReadParameter; (*Achs-Parameter Limit negativ lesen *) xPower :MC_Power; (*MC Achse einschalten*) xReadStatus :MC_ReadStatus; (*MC Bewegungszustand lesen*) xReset :MC_Reset; (*MC Achse Reset*) xReadAxisError :MC_ReadAxisError; (*MC Achsfehler lesen*) xReadActualPosition :MC_ReadActualPosition; (*MC Istposition lesen*) xMoveAbsolute :MC_MoveAbsolute; (*MC Positionieren absolut*) xMoveAbsoluteOrRestart :MC_MoveAbsoluteOrRestart; (*Positionieren absolut mit neuer Zielposition*) xMoveRelative :MC_MoveRelative; (*MC Positionieren relativ*) xMoveVelocity :MC_MoveVelocity; (*MC Fahren mit konstanter Geschwindigkeit*) xNewPosAndVelo :MC_NewPosAndVelo; (*MC Geschwindigkeit und Position bei Dauerlauf ändern*) xHome :MC_Home; (*MC Referenzfahrt*) xSetActualPosition :MC_SetActualPosition; (*MC Isposition setzen*) xChangeDynParam :MC_ChangeDynParam; (*MC Beschleunigungsparameter ändern*) xStop :MC_Stop; (*MC Stop*) xGearIn :MC_GearIn; (*MC Getriebekopplung statisch einschalten*) (* xGearInPos :MC_GearInPos; *) (*MC Getriebekopplung dynamisch einschalten*) (* xGearOut :MC_GearOut;*) (*MC Getriebekopplung ausschalten*) xGearOutExt :MC_GearOutExt; (*MC Getriebekopplung ausschalten, neue Zielgeschwindigkeit*) (* xCamIn :MC_CamIn; *) (*MC Tabellenkopplung einschalten*) (* xCamOut :MC_CamOut; *) (*MC Tabellenkopplung ausschalten*) xExtSetPointGenEnable :MC_ExtSetPointGenEnable; (*MC Externe Sollwertvorgabe einschalten*) xExtSetPointGenDisable :MC_ExtSetPointGenDisable; (*MC Externe Sollwertvorgabe ausschalten*) startPos :LREAL; (*Absolutposition gespeichert beim Start [EINH]*) parInitTrig :R_TRIG; (*Impuls Parameter initialisieren*) veloAtStart :REAL; (*Geschwindigkeit bei Bewegungsstart [EINH/s]*) accAtStart :REAL; (*Beschleunigung bei Bewegungsstart [EINH]/s*) decAtStart :REAL; (*Verzoegerung bei Bewegungsstart [EINH/s²]*) jerkAtStart :REAL; (*Ruckwert bei Bewegungsstart [EINH/s³]*) tNcEnableOn :TP; (*Achse zuschalten Togglesignal ON*) tNcEnableOff :TP; (*Achse zuschalten Togglesignal OFF*) tNcEnableOnTime :TIME := T#2s; (*Zeit Achse zuschalten ON*) tNcEnableOffTime:TIME := T#1s; (*Zeit Achse zuschalten OFF*) veloChange :BOOL; (*Fahrgeschwindigkeit wurde geändert*) dynamicChange :BOOL; (*Dynamik (acc,dec,jerk) wurde geändert*) END_VAR VAR CONSTANT ZERO_POS :LREAL:=0; (*Achse Nullposition [EINH]*) MODULO_RANGE :LREAL:=360; (*Modulobereich [EINH]*) END_VAR (* Die Achskommandos sind als Zustandsautomat der Motion Control Bausteine programmiert. Bibliotheken: TwinCat TcMc.lib TcMath.lib Bausteine: AxisModuloTargPos Achsparameter, die beim Start der Steuerung ausgelesen werden maxNcVelo Einlesen beim ersten Aufruf: Parametrierte Maximalgeschwind. [EINH/s] maxNcAcc Einlesen beim ersten Aufruf: Parametrierte Beschleunigung [EINH/S²] maxNcDec Einlesen beim ersten Aufruf: Parametrierte Verzoegerung [EINH/S²] maxNcJerk Einlesen beim ersten Aufruf: Parametrierter Ruck [EINH/S³] limitNeg SW Limit negativ [EINH] limitPos SW LIMIT positiv [EINH]
Hallo
die Referenz von Achsen lässt sich über ADS Befehle löschen.
Was wird denn bei Sizeof und ADR angegeben?
So wie es aussieht den Wert den du schreiben möchtest. Wenns um einen Reset geht, dann würde ich mal behaupten, dass es funktioniert, wenn du eine Variable "Wert" anlegst und diese mit "0" initialisierst. Diese Variable würde ich dann wie im Bild oben verwenden.
A programmer is just a tool which converts caffeine into code.
Hallo
war nicht schnell genung aber der Kolllege Cerberus hat damit vollkommen Recht.
Freut mich, dass ich trotz keiner Ahnung von NC-Achsen weiterhelfen konnte!![]()
A programmer is just a tool which converts caffeine into code.
Könnt ihr mir hierzu mal bitte ein Beispiel in ST geben?
Als erstes bindest du die Lib "TcBase.lib" ein. Dann kannst du folgenden Code verwenden:
PS:Code:VAR FB_ADSWrite: FW_ADSWRITE; AchseID: UDINT; Wert: INT := 0; END_VAR FB_ADSWrite(sNetId:= '', nPort:= 500, nIdxGrp:= AchseID + 16#4200, nIdxOffs:= 16#1B, cbWriteLen:= SIZEOF(Wert), pWriteBuff:= ADR(Wert), bExecute:= TRUE, tTimeout:= t#2s, bBusy=> , bError=> , nErrId=> ); IF NOT FB_ADSWrite.bBusy THEN FB_ADSWrite(bExecute:= FALSE); END_IF
Ich habe einfach das Bitmap von Zickenbändiger in ST umgesetzt.
A programmer is just a tool which converts caffeine into code.
Okay. Hab ich auch so umgesetzt.
Aber es funktioniert nicht. Erhalte den Fehlerint 6
Muss eine sNetId vergeben werden?
Könnte auch am Port liegen.
Mal ne Frage: Hast du unter deinen E/A-Geräten irgendwo ein Reiter "ADS" und wenn ja, was steht da für ein Port und eine NetId drin? Mit denen würde ich es jetzt so aus dem Stehgreif auch mal probieren.
A programmer is just a tool which converts caffeine into code.
Bookmarks