Hello,
I try to integrate Keyence LJ-V7001p with LJ-V7300 head on Kuka KR210 R3100 Ultra (KRC4 with KSS V8.3.37). I already configured RSI, I can move robot from Kuka Server on my laptop without any problem. I have two analog signals from LJ-V7001p on EL3102, tested in full range -10V/+10V, LJ-V controller ANOUT1 to Beckhoff ANIN1 etc.
Options : RSI version is 3.3.5, EthernetKRL v2.2, SeamTech v2.2.12, ArcTechBasic v1.5.9
E1 : F.EE 16m linear track.
Welding Source : Fronius TPS4000 CMT with ProfiNET.
Everything outside KRC4 connected through ethernet switch to KLI.
Beckhoff coupler with 8 DI, 8DO, 2ANIN EL3102 -10/+10V 16bit (ver. 0000).
What I try to do is to use Distance Correction for welding very large elements. I have configured RSI files (diagram in attachment) to make correction on X and Z axis as test file, placed two aluminium profiles slightly rised below laser, configured everything on LJ-V and voltage is rising exactly as it should both with height and side shift. RSI monitor is showing that voltage is rising on ANIN1 and ANIN2 but there is no action on the robot side... So only problem is that I made some error in krc file or in rsi files. I did a small test removing "P" and "SUM" to shake things up... and it did... Kuka did shake like a cat and RSI monitor went crazy. So voltage was translated to movement without any filtering if I understand it right.
For movement I use LIN motion before ARC_ON/ARC_OFF so just like in SeamTech it already have proper direction before seam tracking begins, there is 4 sec delay in signal from analog inputs. I would like to see a proper code for more advanced use of RSI in welding but... I cannot find anything, so I have to figure out how to configure everything. Sad thing is that I have LJ-V only until tommorow, but I will test later just by applying voltage to analog input.
I do not understand fully if all my problems are because of wrong values in "P" and "SUM" or I did forget about something in krc file ? Or maybe everything is wrong...
&ACCESS RVP
&REL 15
&PARAM EDITMASK = *
&PARAM TEMPLATE = C:\KRC\Roboter\Template\vorgabe
DEF RSI_SpoinaBoden( )
; Wazne, te deklaracje musza znajdowac sie przed INI
DECL INT ret
DECL INT CONTID
;FOLD INI;%{PE}
;FOLD BASISTECH INI
GLOBAL INTERRUPT DECL 3 WHEN $STOPMESS==TRUE DO IR_STOPM ( )
INTERRUPT ON 3
BAS (#INITMOV,0 )
;ENDFOLD (BASISTECH INI)
;FOLD USER INI
;Make your modifications here
;ENDFOLD (USER INI)
;ENDFOLD (INI)
;FOLD PTP HOME Vel= 100 % DEFAULT;%{PE}%MKUKATPBASIS,%CMOVE,%VPTP,%P 1:PTP, 2:HOME, 3:, 5:100, 7:DEFAULT
$BWDSTART = FALSE
PDAT_ACT=PDEFAULT
FDAT_ACT=FHOME
BAS (#PTP_PARAMS,100 )
$H_POS=XHOME
PTP XHOME
;ENDFOLD
;FOLD LIN P4 Vel=2 m/s CPDAT4 Tool[2]:Robacta5000-73x22 Base[0] CD;%{PE}%R 8.3.48,%MKUKATPBASIS,%CMOVE,%VLIN,%P 1:LIN, 2:P4, 3:, 5:2, 7:CPDAT4
$BWDSTART=FALSE
LDAT_ACT=LCPDAT4
FDAT_ACT=FP4
BAS(#CP_PARAMS,2)
TQM_FIFO_READ(TM4)
TRIGGER WHEN DISTANCE=0 DELAY=0 DO iTQM_TRIGGERID=4
TRIGGER WHEN DISTANCE=0 DELAY=0 DO TQM_START_MON(TM4) PRIO = -1
TRIGGER WHEN DISTANCE=1 DELAY=0 DO TQM_SWAP_VALUES(TM4) PRIO = -1
LIN XP4
;ENDFOLD
; Tworzenie przetwarzania sygnalu
ret=RSI_CREATE("RSI_DistanceCtrl.rsi")
IF (ret <> RSIOK) THEN
HALT
ENDIF
; Poczatek przetwarzania sygnalu w trybie Relative correction
ret=RSI_ON(#ABSOLUTE)
IF (ret <> RSIOK) THEN
HALT
ENDIF
; Spawanie z korekcja
;FOLD ARCON WDAT1 {AS_WDAT1.Channel1*1#%g} {AS_WDAT1.StartTime*1#%g} s {AW_WDAT1.Channel1*1#%g} LIN P1 Vel=2 m/s CPDAT1 Tool[2]:Robacta5000-73x22 Base[0] CD ;%{PE}
;FOLD Parameters ;%{h}
;Params IlfProvider=kukaroboter.arctech.arconlin; Kuka.PointName=P1; Kuka.BlendingEnabled=False; Kuka.MoveDataName=CPDAT1; Kuka.VelocityPath=2; Kuka.MovementParameterFieldEnabled=True; Kuka.CollisionDataName=TM1; ArcTech.WdatVarName=WDAT1; ArcTech.SeamName=
;ENDFOLD
$BWDSTART = FALSE
LDAT_ACT = LCPDAT1
FDAT_ACT = FP1
BAS(#CP_PARAMS, 2.0)
TQM_FIFO_READ(TM1)
TRIGGER WHEN DISTANCE = 0 DELAY = 0 DO iTQM_TRIGGERID = 1
TRIGGER WHEN DISTANCE = 0 DELAY = 0 DO TQM_START_MON(TM1) PRIO = -1
TRIGGER WHEN DISTANCE = 1 DELAY = 0 DO TQM_SWAP_VALUES(TM1) PRIO = -1
TRIGGER WHEN DISTANCE = 1 DELAY = ATBg_PreDefinitionTime DO Arc_DefineStrikeParams(1, AS_WDAT1) PRIO = -1
Arc_DefineCpPattern(#OffInAdvance, WV_WDAT1, TRUE)
LIN XP1
Arc_On(1, AS_WDAT1, ATBg_StartErrSetField[1], AW_WDAT1, WV_WDAT1, ATBg_WeldErrSetField[1], #StdArcOn, " ")
Arc_DefineCpPattern(#OnInAdvance, WV_WDAT1, TRUE)
;ENDFOLD
;FOLD ARCOFF WDAT2 LIN P2 CPDAT2 Tool[2]:Robacta5000-73x22 Base[0] CD ;%{PE}
;FOLD Parameters ;%{h}
;Params IlfProvider=kukaroboter.arctech.arcofflin; Kuka.PointName=P2; Kuka.BlendingEnabled=False; Kuka.MoveDataName=CPDAT2; Kuka.MovementParameterFieldEnabled=True; Kuka.CollisionDataName=TM2; ArcTech.WdatVarName=WDAT2
;ENDFOLD
$BWDSTART = FALSE
LDAT_ACT = LCPDAT2
FDAT_ACT = FP2
BAS(#CP_PARAMS, ATBg_BAS_VELDefinition)
TQM_FIFO_READ(TM2)
TRIGGER WHEN DISTANCE = 0 DELAY = 0 DO iTQM_TRIGGERID = 2
TRIGGER WHEN DISTANCE = 0 DELAY = 0 DO TQM_START_MON(TM2) PRIO = -1
TRIGGER WHEN DISTANCE = 1 DELAY = 0 DO TQM_SWAP_VALUES(TM2) PRIO = -1
LIN XP2
Arc_Off(1, AC_WDAT2)
;ENDFOLD
; Wylaczenie RSI
ret=RSI_OFF()
IF (ret <> RSIOK) THEN
HALT
ENDIF
;FOLD LIN P3 Vel=2 m/s CPDAT3 Tool[2]:Robacta5000-73x22 Base[0] CD;%{PE}%R 8.3.48,%MKUKATPBASIS,%CMOVE,%VLIN,%P 1:LIN, 2:P3, 3:, 5:2, 7:CPDAT3
$BWDSTART=FALSE
LDAT_ACT=LCPDAT3
FDAT_ACT=FP3
BAS(#CP_PARAMS,2)
TQM_FIFO_READ(TM3)
TRIGGER WHEN DISTANCE=0 DELAY=0 DO iTQM_TRIGGERID=3
TRIGGER WHEN DISTANCE=0 DELAY=0 DO TQM_START_MON(TM3) PRIO = -1
TRIGGER WHEN DISTANCE=1 DELAY=0 DO TQM_SWAP_VALUES(TM3) PRIO = -1
LIN XP3
;ENDFOLD
;FOLD PTP HOME Vel= 100 % DEFAULT;%{PE}%MKUKATPBASIS,%CMOVE,%VPTP,%P 1:PTP, 2:HOME, 3:, 5:100, 7:DEFAULT
$BWDSTART = FALSE
PDAT_ACT=PDEFAULT
FDAT_ACT=FHOME
BAS (#PTP_PARAMS,100 )
$H_POS=XHOME
PTP XHOME
;ENDFOLD
END
Display More
PS: Im not interested in robot fully controlled from outside source, just distance correction in two axis at once. Also Im not interested in any hardware from manufacturers like MetaVision, ServoRobot or Scansonic as they have very limited capability to detect objects. I did choose Keyence because I want later on to use it with Matlab for scanning parts, to check proper geometry before welding, and with LJ-V7300 sensor I can scan a lot of surface in short time.