386 lines
10 KiB
Plaintext
386 lines
10 KiB
Plaintext
&ACCESS R6
|
|
&COMMENT Collision monitoring library
|
|
DEF CollMonLib( )
|
|
|
|
END
|
|
|
|
; Schreibt die 6 Parameter (fuer jede Roboter-Achse einen) in den
|
|
; entsprechenden Eintrag des $COLLMON_TOL PRO[]-Felds.
|
|
; Falls ein Parameter nicht SAVE_CM_PRO_SETTING wird, behaelt der entsprechende
|
|
; $COLLMON_TOL_PRO[]-Eintrag seinen Wert.
|
|
GLOBAL DEF SET_CM_PRO_VALUES(CM_AX1:IN, CM_AX2:IN, CM_AX3:IN, CM_AX4:IN, CM_AX5:IN, CM_AX6:IN)
|
|
INT TEST, CM_AX1, CM_AX2, CM_AX3, CM_AX4, CM_AX5, CM_AX6
|
|
|
|
ON_ERROR_PROCEED
|
|
TEST=CM_AX1
|
|
IF $ERR.NUMBER == 0 THEN
|
|
$COLLMON_TOL_PRO[1]=CM_AX1
|
|
ENDIF
|
|
|
|
ON_ERROR_PROCEED
|
|
TEST=CM_AX2
|
|
IF $ERR.NUMBER == 0 THEN
|
|
$COLLMON_TOL_PRO[2]=CM_AX2
|
|
ENDIF
|
|
|
|
ON_ERROR_PROCEED
|
|
TEST=CM_AX3
|
|
IF $ERR.NUMBER == 0 THEN
|
|
$COLLMON_TOL_PRO[3]=CM_AX3
|
|
ENDIF
|
|
|
|
ON_ERROR_PROCEED
|
|
TEST=CM_AX4
|
|
IF $ERR.NUMBER == 0 THEN
|
|
$COLLMON_TOL_PRO[4]=CM_AX4
|
|
ENDIF
|
|
|
|
ON_ERROR_PROCEED
|
|
TEST=CM_AX5
|
|
IF $ERR.NUMBER == 0 THEN
|
|
$COLLMON_TOL_PRO[5]=CM_AX5
|
|
ENDIF
|
|
|
|
ON_ERROR_PROCEED
|
|
TEST=CM_AX6
|
|
IF $ERR.NUMBER == 0 THEN
|
|
$COLLMON_TOL_PRO[6]=CM_AX6
|
|
ENDIF
|
|
|
|
ERR_CLEAR($ERR)
|
|
$COLLMON_IDX = 0
|
|
END
|
|
|
|
; Setzt $COLLMON_TOL_PRO[] auf die Defaultwerte aus.
|
|
; der $CUSTOM.DAT
|
|
GLOBAL DEF SET_CM_PRO_DEFAULT()
|
|
INT I
|
|
|
|
FOR I=1 TO 12
|
|
$COLLMON_TOL_PRO[I]=$COLLMON_TOL_PRO_DEF[I]
|
|
ENDFOR
|
|
$COLLMON_IDX = 0
|
|
END
|
|
; Setzt die globalen Werte falls welche vorhanden oder
|
|
; deaktiviert die verbesserte Kollisionsueberwachung indem
|
|
; $COLLMON_TOL_PRO[] auf Null gesetzt wird.
|
|
GLOBAL DEF SET_CM_PRO_INACTIVE()
|
|
INT I
|
|
|
|
IF $IMPROVED_COLLMON== TRUE THEN
|
|
FOR I=1 TO 12
|
|
IF (COLLMON_TOL_PRO[I] < 0) THEN ;no global COLLMON_TOL_PRO[I] exists
|
|
$COLLMON_TOL_PRO[I]=0
|
|
$COLLMON_IDX = 0
|
|
ELSE
|
|
$COLLMON_TOL_PRO[I]=COLLMON_TOL_PRO[I] ;sets $COLLMON_TOL_PRO[I] from global
|
|
$COLLMON_IDX=COLLMON_IDX
|
|
ENDIF
|
|
ENDFOR
|
|
ELSE
|
|
FOR I=1 TO 12
|
|
$COLLMON_TOL_PRO[I]=0
|
|
ENDFOR
|
|
ENDIF
|
|
END
|
|
|
|
; Setzt $COLLMON_MAX auf 0 zurueck. Alle folgenden
|
|
; Bewegungen gehen in die Maximumsbildung ein.
|
|
GLOBAL DEF RESET_CM_MAX()
|
|
INT I
|
|
|
|
FOR I=1 TO 12
|
|
$COLLMON_MAX[I]=0
|
|
ENDFOR
|
|
END
|
|
|
|
; Sichert die aktuellen $COLLMON_TOL_PRO[]-Werte in ein
|
|
; Parameter-Feld.
|
|
; Parameter SETTING_IDX: Index des Collmon-Datensatz
|
|
GLOBAL DEF SAVE_CM_PRO_SETTING(SETTING_IDX:IN)
|
|
INT SETTING_IDX,I
|
|
|
|
FOR I=1 to 12
|
|
COLLMON_SETTING[SETTING_IDX,I]=$COLLMON_TOL_PRO[I]
|
|
ENDFOR
|
|
END
|
|
|
|
; Sichert die aktuellen $COLLMON_TOL_COM[]-Werte in ein
|
|
; Parameter-Feld.
|
|
; Parameter SETTING_IDX: Index des Collmon-Datensatz
|
|
GLOBAL DEF SAVE_CM_COM_SETTING(SETTING_IDX:IN)
|
|
INT SETTING_IDX,I
|
|
|
|
FOR I=1 to 12
|
|
COLLMON_SETTING[SETTING_IDX,I]=$COLLMON_TOL_COM[I]
|
|
ENDFOR
|
|
END
|
|
|
|
; Liest einen aktuell gespeicherten Collmon-Datensatz
|
|
; Parameter SETTING_IDX: Index des Collmon-Datensatzes
|
|
; Parameter VALUES: Array der Groesse 12 mit den Werten des Collmon-Datensatzes
|
|
GLOBAL DEF READ_CM_SETTING(SETTING_IDX:IN, VALUES[]:OUT)
|
|
INT SETTING_IDX
|
|
INT VALUES[]
|
|
INT I
|
|
|
|
IF ((SETTING_IDX < 1) OR (SETTING_IDX > NUM_COLLMON_SETTINGS)) THEN
|
|
RETURN
|
|
ENDIF
|
|
|
|
FOR I = 1 TO 12
|
|
VALUES[I] = COLLMON_SETTING[SETTING_IDX,I]
|
|
ENDFOR
|
|
END
|
|
|
|
; Beschreibt einen Collmon-Datensatz
|
|
; Parameter SETTING_IDX: Index des Collmon-Datensatzes
|
|
; Parameter VALUES: Array der Groesse 12 mit den neuen Werten des Collmon-Datensatzes
|
|
GLOBAL DEF WRITE_CM_SETTING(SETTING_IDX:IN, VALUES[]:OUT)
|
|
INT SETTING_IDX
|
|
INT VALUES[]
|
|
INT I
|
|
|
|
IF ((SETTING_IDX < 1) OR (SETTING_IDX > NUM_COLLMON_SETTINGS)) THEN
|
|
RETURN
|
|
ENDIF
|
|
|
|
FOR I = 1 TO 12
|
|
IF (VALUES[I] < 0) THEN
|
|
COLLMON_SETTING[SETTING_IDX,I] = 0
|
|
ELSE
|
|
IF VALUES[I] > 500 THEN
|
|
COLLMON_SETTING[SETTING_IDX,I] = 500
|
|
ELSE
|
|
COLLMON_SETTING[SETTING_IDX,I] = VALUES[I]
|
|
ENDIF
|
|
ENDIF
|
|
ENDFOR
|
|
END
|
|
|
|
; Sichert die aktuellen $COLLMON_MAX[]-Werte in ein
|
|
; Collmon-Datensatz-Feld. Optional kann ein Skalierungs-Prozentwert
|
|
; angegeben werden.
|
|
; Parameter SETTING_IDX: Index des Collmon-Datensatz
|
|
; Parameter OFFSET: optionaler Offset auf alle Komponenten von $COLLMON_MAX[]. Default-Wert=0.
|
|
; Expert call
|
|
GLOBAL DEF SAVE_CM_MAX_SETTING(SETTING_IDX:IN,OFFSET:IN)
|
|
INT SETTING_IDX,OFFSET,TEST,OFFSET_WERT,I
|
|
DECL INT SET_VALUES[12]
|
|
|
|
; Vorbelegung mit Default-Wert 0
|
|
OFFSET_WERT=0
|
|
|
|
ON_ERROR_PROCEED
|
|
TEST=OFFSET
|
|
|
|
IF $ERR.NUMBER == 0 THEN
|
|
OFFSET_WERT=OFFSET ; Parameter verwenden
|
|
ENDIF
|
|
|
|
GET_COLLMON_SET(SETTING_IDX, SET_VALUES[])
|
|
FOR I=1 to 12
|
|
; durch Lernfahrt will man auskeschaltete Achsen nicht einschalten
|
|
IF COLLMON_SETTING[SETTING_IDX,I] <> 0 THEN
|
|
COLLMON_SETTING[SETTING_IDX,I]=SET_VALUES[I] + OFFSET_WERT
|
|
ENDIF
|
|
ENDFOR
|
|
|
|
ERR_CLEAR($ERR)
|
|
END
|
|
|
|
; Schreibt einen gesicherten Collmon-Datensatz zurueck
|
|
; in das $COLLMON_TOL_PRO[]-Feld.
|
|
; Parameter SETTING_IDX: Index des Collmon-Datensatz
|
|
GLOBAL DEF USE_CM_PRO_SETTING(SETTING_IDX:IN)
|
|
INT SETTING_IDX,I
|
|
|
|
FOR I=1 to 12
|
|
$COLLMON_TOL_PRO[I]=COLLMON_SETTING[SETTING_IDX,I]
|
|
ENDFOR
|
|
$COLLMON_IDX = SETTING_IDX
|
|
END
|
|
; Initialisiert alle Collmon-Datensaetze auf 100.
|
|
GLOBAL DEF INIT_CM_SETTINGS()
|
|
INT I,J
|
|
|
|
FOR I=1 TO NUM_COLLMON_SETTINGS
|
|
FOR J=1 TO 12
|
|
COLLMON_SETTING[I,J]=100
|
|
ENDFOR
|
|
ENDFOR
|
|
END
|
|
|
|
;used in old motion command to set all 12 values
|
|
;Expert call
|
|
GLOBAL DEF SET_CD_PARAMS (Index :IN)
|
|
DECL INT Index
|
|
IF (Index > 0) AND (Index < 31) THEN
|
|
USE_CM_PRO_SETTING (Index)
|
|
ELSE
|
|
SET_CM_PRO_INACTIVE()
|
|
ENDIF
|
|
END
|
|
|
|
;Expert call
|
|
GLOBAL DEF USE_CD_PARAMS (Index :IN)
|
|
DECL INT Index, I
|
|
IF (Index > 0) AND (Index < 31) THEN
|
|
FOR I=1 to 12
|
|
COLLMON_TOL_PRO[I]=COLLMON_SETTING[Index,I] ; saves COLLMON_TOL_PRO for global using
|
|
ENDFOR
|
|
COLLMON_IDX=Index
|
|
USE_CM_PRO_SETTING (Index)
|
|
ELSE
|
|
FOR I=1 to 12
|
|
COLLMON_TOL_PRO[I]=-1 ; saves COLLMON_TOL_PRO for global using
|
|
ENDFOR
|
|
COLLMON_IDX=-1
|
|
SET_CM_PRO_INACTIVE()
|
|
ENDIF
|
|
END
|
|
|
|
;resets COLLMON_TOL_PRO on the begin of KRL module
|
|
;by call BAS(#INITMOV,0)
|
|
GLOBAL DEF RESET_CD_PARAMS ()
|
|
DECL INT I
|
|
FOR I=1 to 12
|
|
COLLMON_TOL_PRO[I]=-1 ; resets COLLMON_TOL_PRO for global using
|
|
ENDFOR
|
|
COLLMON_IDX=-1
|
|
END
|
|
|
|
;used in spline command to set all 12 values by just one call
|
|
;like ...WITH $COLLMON_TOL_PRO[1]=USE_CM_PRO_VALUES(SETTING_IDX)
|
|
GLOBAL DEFFCT INT USE_CM_PRO_VALUES(SETTING_IDX:IN)
|
|
INT SETTING_IDX
|
|
|
|
IF (SETTING_IDX == -1) THEN ;Force deactivation
|
|
$COLLMON_TOL_PRO[2]=0
|
|
$COLLMON_TOL_PRO[3]=0
|
|
$COLLMON_TOL_PRO[4]=0
|
|
$COLLMON_TOL_PRO[5]=0
|
|
$COLLMON_TOL_PRO[6]=0
|
|
$COLLMON_TOL_PRO[7]=0
|
|
$COLLMON_TOL_PRO[8]=0
|
|
$COLLMON_TOL_PRO[9]=0
|
|
$COLLMON_TOL_PRO[10]=0
|
|
$COLLMON_TOL_PRO[11]=0
|
|
$COLLMON_TOL_PRO[12]=0
|
|
$COLLMON_IDX = 0
|
|
RETURN 0
|
|
ENDIF
|
|
|
|
IF (SETTING_IDX > 0) AND (SETTING_IDX < 31) THEN
|
|
$COLLMON_TOL_PRO[2]=COLLMON_SETTING[SETTING_IDX,2]
|
|
$COLLMON_TOL_PRO[3]=COLLMON_SETTING[SETTING_IDX,3]
|
|
$COLLMON_TOL_PRO[4]=COLLMON_SETTING[SETTING_IDX,4]
|
|
$COLLMON_TOL_PRO[5]=COLLMON_SETTING[SETTING_IDX,5]
|
|
$COLLMON_TOL_PRO[6]=COLLMON_SETTING[SETTING_IDX,6]
|
|
$COLLMON_TOL_PRO[7]=COLLMON_SETTING[SETTING_IDX,7]
|
|
$COLLMON_TOL_PRO[8]=COLLMON_SETTING[SETTING_IDX,8]
|
|
$COLLMON_TOL_PRO[9]=COLLMON_SETTING[SETTING_IDX,9]
|
|
$COLLMON_TOL_PRO[10]=COLLMON_SETTING[SETTING_IDX,10]
|
|
$COLLMON_TOL_PRO[11]=COLLMON_SETTING[SETTING_IDX,11]
|
|
$COLLMON_TOL_PRO[12]=COLLMON_SETTING[SETTING_IDX,12]
|
|
$COLLMON_IDX = SETTING_IDX
|
|
RETURN COLLMON_SETTING[SETTING_IDX,1]
|
|
ELSE
|
|
IF (COLLMON_TOL_PRO[1] < 0) THEN ;no global COLLMON_TOL_PRO[I] exists
|
|
$COLLMON_TOL_PRO[2]=0
|
|
$COLLMON_TOL_PRO[3]=0
|
|
$COLLMON_TOL_PRO[4]=0
|
|
$COLLMON_TOL_PRO[5]=0
|
|
$COLLMON_TOL_PRO[6]=0
|
|
$COLLMON_TOL_PRO[7]=0
|
|
$COLLMON_TOL_PRO[8]=0
|
|
$COLLMON_TOL_PRO[9]=0
|
|
$COLLMON_TOL_PRO[10]=0
|
|
$COLLMON_TOL_PRO[11]=0
|
|
$COLLMON_TOL_PRO[12]=0
|
|
$COLLMON_IDX = 0
|
|
RETURN 0
|
|
ELSE
|
|
$COLLMON_TOL_PRO[2]=COLLMON_TOL_PRO[2] ;sets $COLLMON_TOL_PRO[I] from global
|
|
$COLLMON_TOL_PRO[3]=COLLMON_TOL_PRO[3] ;sets $COLLMON_TOL_PRO[I] from global
|
|
$COLLMON_TOL_PRO[4]=COLLMON_TOL_PRO[4] ;sets $COLLMON_TOL_PRO[I] from global
|
|
$COLLMON_TOL_PRO[5]=COLLMON_TOL_PRO[5] ;sets $COLLMON_TOL_PRO[I] from global
|
|
$COLLMON_TOL_PRO[6]=COLLMON_TOL_PRO[6] ;sets $COLLMON_TOL_PRO[I] from global
|
|
IF (COLLMON_TOL_PRO[7]>-1) THEN
|
|
$COLLMON_TOL_PRO[7]=COLLMON_TOL_PRO[7] ;sets $COLLMON_TOL_PRO[I] from global
|
|
ELSE
|
|
$COLLMON_TOL_PRO[7]=0
|
|
ENDIF
|
|
IF (COLLMON_TOL_PRO[8]>-1) THEN
|
|
$COLLMON_TOL_PRO[8]=COLLMON_TOL_PRO[8] ;sets $COLLMON_TOL_PRO[I] from global
|
|
ELSE
|
|
$COLLMON_TOL_PRO[8]=0
|
|
ENDIF
|
|
IF (COLLMON_TOL_PRO[9]>-1) THEN
|
|
$COLLMON_TOL_PRO[9]=COLLMON_TOL_PRO[9] ;sets $COLLMON_TOL_PRO[I] from global
|
|
ELSE
|
|
$COLLMON_TOL_PRO[9]=0
|
|
ENDIF
|
|
IF (COLLMON_TOL_PRO[10]>-1) THEN
|
|
$COLLMON_TOL_PRO[10]=COLLMON_TOL_PRO[10] ;sets $COLLMON_TOL_PRO[I] from global
|
|
ELSE
|
|
$COLLMON_TOL_PRO[10]=0
|
|
ENDIF
|
|
IF (COLLMON_TOL_PRO[11]>-1) THEN
|
|
$COLLMON_TOL_PRO[11]=COLLMON_TOL_PRO[11] ;sets $COLLMON_TOL_PRO[I] from global
|
|
ELSE
|
|
$COLLMON_TOL_PRO[11]=0
|
|
ENDIF
|
|
IF (COLLMON_TOL_PRO[12]>-1) THEN
|
|
$COLLMON_TOL_PRO[12]=COLLMON_TOL_PRO[12] ;sets $COLLMON_TOL_PRO[I] from global
|
|
ELSE
|
|
$COLLMON_TOL_PRO[12]=0
|
|
ENDIF
|
|
$COLLMON_IDX=COLLMON_IDX
|
|
RETURN COLLMON_TOL_PRO[1] ;returns $COLLMON_TOL_PRO[I] from global
|
|
ENDIF
|
|
ENDIF
|
|
ENDFCT
|
|
|
|
;Expert call
|
|
GLOBAL DEF SET_TQ_VALUES ( TQ_AX1:IN, TQ_AX2:IN, TQ_AX3:IN, TQ_AX4:IN, TQ_AX5:IN, TQ_AX6:IN)
|
|
INT I, TQ_AX1, TQ_AX2, TQ_AX3, TQ_AX4, TQ_AX5, TQ_AX6
|
|
|
|
IF $IMPROVED_COLLMON== TRUE THEN
|
|
ON_ERROR_PROCEED
|
|
$COLLMON_TOL_PRO[1]=TQ_AX1
|
|
IF $ERR.NUMBER == 0 THEN
|
|
$COLLMON_TOL_PRO[2]=TQ_AX2
|
|
$COLLMON_TOL_PRO[3]=TQ_AX3
|
|
$COLLMON_TOL_PRO[4]=TQ_AX4
|
|
$COLLMON_TOL_PRO[5]=TQ_AX5
|
|
$COLLMON_TOL_PRO[6]=TQ_AX6
|
|
ELSE
|
|
FOR I=1 TO 12
|
|
$COLLMON_TOL_PRO[I]=$COLLMON_TOL_PRO_DEF[I]
|
|
ENDFOR
|
|
ERR_CLEAR($ERR)
|
|
ENDIF
|
|
FOR I=1 TO 12
|
|
COLLMON_TOL_PRO[I]=$COLLMON_TOL_PRO[I]
|
|
ENDFOR
|
|
COLLMON_IDX=0
|
|
$COLLMON_IDX = 0
|
|
ELSE
|
|
ON_ERROR_PROCEED
|
|
$TORQMON[1]=TQ_AX1
|
|
IF $ERR.NUMBER == 0 THEN
|
|
$TORQMON[2]=TQ_AX2
|
|
$TORQMON[3]=TQ_AX3
|
|
$TORQMON[4]=TQ_AX4
|
|
$TORQMON[5]=TQ_AX5
|
|
$TORQMON[6]=TQ_AX6
|
|
ELSE
|
|
FOR I=1 TO 12
|
|
$TORQMON[I]=$TORQMON_DEF[I]
|
|
ENDFOR
|
|
ERR_CLEAR($ERR)
|
|
ENDIF
|
|
ENDIF
|
|
END
|