Hi guys,
iam trying to get some rsi configurations to work, but i have some problems. i think it has something todo with the digital outputs which i can switch from the external pc on my robot but i dont know exactly.
When i start the .src file it goes till ST_SKIPSENS() and then it throws that error:
i was not able to attach xml and src files so i added them at the bottom of this post
- KukaMatlabConnection.src: KRL program to start the communication
- KukaRobotInfo.xml: config file to define which data has to be send from robot to ext system and back
- commanddoc.xml: this is the file which is send from the external pc to the robot
please help i dont know where i have an error here...
kind regards
matthias
PS: KRC2ed05, KSS5.5.11, RSI 2.3
KukaMatlabConnector.src
Code
&ACCESS RVP
&REL 57
&PARAM TEMPLATE = C:\KRC\Roboter\Template\vorgabe
&PARAM EDITMASK = *
DEF KukaMatlabConnection( )
;FOLD INI
;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)
;---------------------------------------------------------
; initialize communication and set up all RSI objects
;---------------------------------------------------------
HALT ; Halt the robot at its position
PTP $POS_ACT ; use current position as SAK movement
;---------------------------------------------------------
; Create RSI Object ST_ETHERNET,
; read object config from .../INIT/KukaRobotInfo.xml
;---------------------------------------------------------
err = ST_ETHERNET(hEthernet,0,"KukaRobotInfo.xml")
IF (err <> #RSIOK) THEN
HALT
ENDIF
;---------------------------------------------------------
; Set some communication configuration parameters
;---------------------------------------------------------
; - After "value" to late packages the robot stopps
err = ST_SETPARAM(hEthernet,eERXmaxLatePackages,100)
; - RSIWARNING if the limit reached
err = ST_SETPARAM(hEthernet,eERXmaxLateInPercent,50)
; - reset every 'value' statistics.
;err = ST_SETPARAM(hEthernet,eERXmaxFieldOfView,1000)
; - eERXFastCycle = FALSE: Time to answer 11ms
; - eERXFastCycle = TRUE: Fast cycle: answer <2ms necessary!
err = ST_SETPARAM(hEthernet, eERXFastCycle, 0)
; - $FLAG[1] will be set in case off errors
;err = ST_SETPARAM(hEthernet, eERXerrorFlag, 1)
; - how many decimal places do we wanna have
err = ST_SETPARAM(hEthernet, eERXprecision, 4)
;---------------------------------------------------------
; initialize Path and axis correction
;---------------------------------------------------------
err=ST_PATHCORR(hPath,0)
err=ST_AXISCORR(hAxis,0)
; ----------------------------------------------------------
; maximum path correction for the cartesian RKorr
; ----------------------------------------------------------
err=ST_SETPARAM(hPath,1,-5) ; range X
err=ST_SETPARAM(hPath,7,380)
err=ST_SETPARAM(hPath,2,-540); range Y
err=ST_SETPARAM(hPath,8,540)
err=ST_SETPARAM(hPath,3,-100); range Z
err=ST_SETPARAM(hPath,9,230)
err=ST_SETPARAM(hPath,4,-90) ; range A
err=ST_SETPARAM(hPath,10,90)
err=ST_SETPARAM(hPath,5,-45) ; range B
err=ST_SETPARAM(hPath,11,45)
err=ST_SETPARAM(hPath,6,-90) ; range C
err=ST_SETPARAM(hPath,12,90)
; ----------------------------------------------------------
; maximum path correction for the axis correction AKorr
; ---------------------------------------------------------
err=ST_SETPARAM(hAxis,2,-10); range A1
err=ST_SETPARAM(hAxis,14,10)
err=ST_SETPARAM(hAxis,3,-10) ; range A2
err=ST_SETPARAM(hAxis,15,10)
err=ST_SETPARAM(hAxis,4,-10); range A3
err=ST_SETPARAM(hAxis,16,10)
err=ST_SETPARAM(hAxis,5,-10); range A4
err=ST_SETPARAM(hAxis,17,10)
err=ST_SETPARAM(hAxis,6,-10) ; range A5
err=ST_SETPARAM(hAxis,18,10)
err=ST_SETPARAM(hAxis,7,-10)
err=ST_SETPARAM(hAxis,19,10)
;---------------------------------------------------------
; link RKorr to correction on path
;---------------------------------------------------------
err = ST_NEWLINK(hEthernet,1,hPath,1)
IF (err <> #RSIOK) THEN
HALT
ENDIF
err = ST_NEWLINK(hEthernet,2,hPath,2)
IF (err <> #RSIOK) THEN
HALT
ENDIF
err = ST_NEWLINK(hEthernet,3,hPath,3)
IF (err <> #RSIOK) THEN
HALT
ENDIF
err = ST_NEWLINK(hEthernet,4,hPath,4)
IF (err <> #RSIOK) THEN
HALT
ENDIF
err = ST_NEWLINK(hEthernet,5,hPath,5)
IF (err <> #RSIOK) THEN
HALT
ENDIF
err = ST_NEWLINK(hEthernet,6,hPath,6)
IF (err <> #RSIOK) THEN
HALT
ENDIF
;---------------------------------------------------------
; link AKorr to correction on path
;---------------------------------------------------------
err = ST_NEWLINK(hEthernet,7,hAxis,1)
IF (err <> #RSIOK) THEN
HALT
ENDIF
err = ST_NEWLINK(hEthernet,8,hAxis,2)
IF (err <> #RSIOK) THEN
HALT
ENDIF
err = ST_NEWLINK(hEthernet,9,hAxis,3)
IF (err <> #RSIOK) THEN
HALT
ENDIF
err = ST_NEWLINK(hEthernet,10,hAxis,4)
IF (err <> #RSIOK) THEN
HALT
ENDIF
err = ST_NEWLINK(hEthernet,11,hAxis,5)
IF (err <> #RSIOK) THEN
HALT
ENDIF
err = ST_NEWLINK(hEthernet,12,hAxis,6)
IF (err <> #RSIOK) THEN
HALT
ENDIF
;-------------------------------------------------------
; connects the send outputs to the real outputs
; param1: objectid
; param2: rsi-object in container 0
; param3 id of the signal source
; param4: index of the signal source output
; param5: number of the digital output
; param6: if zero map2digout gives a bit
;-------------------------------------------------------
err = ST_MAP2DIGOUT(hMap2Digout1,0,hEthernet,13,1,0)
IF (err <> #RSIOK) THEN
HALT
ENDIF
err = ST_MAP2DIGOUT(hMap2Digout2,0,hEthernet,13,2,0)
IF (err <> #RSIOK) THEN
HALT
ENDIF
err = ST_MAP2DIGOUT(hMap2Digout3,0,hEthernet,13,3,0)
IF (err <> #RSIOK) THEN
HALT
ENDIF
;---------------------------------------------------------
; create analog input objects
;---------------------------------------------------------
err = ST_ANAIN(hAnaIn1,0,1,RSIUNIT_No)
IF (err <> #RSIOK) THEN
HALT
ENDIF
err = ST_ANAIN(hAnaIn2,0,2,RSIUNIT_No)
IF (err <> #RSIOK) THEN
HALT
ENDIF
err = ST_ANAIN(hAnaIn3,0,3,RSIUNIT_No)
IF (err <> #RSIOK) THEN
HALT
ENDIF
err = ST_ANAIN(hAnaIn4,0,4,RSIUNIT_No)
IF (err <> #RSIOK) THEN
HALT
ENDIF
err = ST_ANAIN(hAnaIn5,0,5,RSIUNIT_No)
IF (err <> #RSIOK) THEN
HALT
ENDIF
err = ST_ANAIN(hAnaIn6,0,6,RSIUNIT_No)
IF (err <> #RSIOK) THEN
HALT
ENDIF
;---------------------------------------------------------
; connect those analog input objects to ST_ETHERNET
;---------------------------------------------------------
err = ST_NEWLINK(hAnaIn1,1,hEthernet,6)
IF (err <> #RSIOK) THEN
HALT
ENDIF
err = ST_NEWLINK(hAnaIn2,1,hEthernet,7)
IF (err <> #RSIOK) THEN
HALT
ENDIF
err = ST_NEWLINK(hAnaIn3,1,hEthernet,8)
IF (err <> #RSIOK) THEN
HALT
ENDIF
err = ST_NEWLINK(hAnaIn4,1,hEthernet,9)
IF (err <> #RSIOK) THEN
HALT
ENDIF
err = ST_NEWLINK(hAnaIn5,1,hEthernet,10)
IF (err <> #RSIOK) THEN
HALT
ENDIF
err = ST_NEWLINK(hAnaIn6,1,hEthernet,11)
IF (err <> #RSIOK) THEN
HALT
ENDIF
;---------------------------------------------------------
; Start sensor based movement on BASE coordinate system
;---------------------------------------------------------
err = ST_ON1(#BASE,1) ; BASE coordinate system
;err = ST_ON1(#TCP,1) ; TCP coordinate system
;err = ST_ON1(#WORLD,1) ; WORLD coordinate system
IF (err <> #RSIOK) THEN
HALT
ENDIF
;---------------------------------------------------------
; Hold on - until RSI-Break reason occur
;---------------------------------------------------------
ST_SKIPSENS()
;---------------------------------------------------------
; set actual position as active position
;---------------------------------------------------------
PTP $POS_ACT
END
Display More
KukaMatlabConnector.dat
Code
&ACCESS RVP
&REL 57
&PARAM TEMPLATE = C:\KRC\Roboter\Template\vorgabe
&PARAM EDITMASK = *
DEFDAT KukaMatlabConnection
;FOLD EXTERNAL DECLARATIONS;%{PE}%MKUKATPBASIS,%CEXT,%VCOMMON,%P
;FOLD BASISTECH EXT;%{PE}%MKUKATPBASIS,%CEXT,%VEXT,%P
EXT BAS (BAS_COMMAND :IN,REAL :IN )
DECL INT SUCCESS
;ENDFOLD (BASISTECH EXT)
;FOLD USER EXT;%{E}%MKUKATPUSER,%CEXT,%VEXT,%P
;Make here your modifications
DECL RSIERR err
INT hEthernet
INT hMap2Digout1,hMap2Digout2,hMap2Digout3,hAxis,hPath
INT UNIT_RSI
INT hAnaIn1,hAnaIn2,hAnaIn3,hAnaIn4,hAnaIn5,hAnaIn6
;ENDFOLD (USER EXT)
;ENDFOLD (EXTERNAL DECLERATIONS)
ENDDAT
Display More
KukaRobotInfo.xml
Code
<ROOT>
<CONFIG>
<IP_NUMBER>192.0.1.2</IP_NUMBER> <!-- IP Number of the socket !-->
<PORT>6008</PORT> <!-- Port Number of the socket !-->
<PROTOCOL>TCP</PROTOCOL> <!-- TCP or UDP, Protocol of the socket !-->
<SENTYPE>KMC</SENTYPE>
<PROTCOLLENGTH>Off</PROTCOLLENGTH> <!-- On or Off, Send the length of data in bytes before XML data begins!-->
<ONLYSEND>FALSE</ONLYSEND> <!-- TRUE means the client don't expect a answer. Do not send anything to robot!-->
</CONFIG>
<!-- RSI Data: TYPE= "BOOL", "STRING", "LONG", "DOUBLE" !-->
<!-- INDX= "INTERNAL" switch on internal read values. Needed by DEF_...!-->
<!-- INDX= "nmb" Input/Output index of RSI-Object / Maximum of RSI Channels: 64 !-->
<!-- UNIT: The same like RSI Units, insert decimal or hex (0x......) values. !-->
<!-- HOLDON="1", set this output index of RSI Object to the last value !-->
<!-- DEF_Delay count the late packages and send it back to server !-->
<!-- DEF_Tech: .C = advance .T = main run / .C1 advance set function generator 1 !-->
<SEND>
<ELEMENTS>
<ELEMENT TAG="DEF_RIst" TYPE="DOUBLE" INDX="INTERNAL" UNIT="0" />
<ELEMENT TAG="DEF_RSol" TYPE="DOUBLE" INDX="INTERNAL" UNIT="0" />
<ELEMENT TAG="DEF_AIPos" TYPE="DOUBLE" INDX="INTERNAL" UNIT="0" />
<ELEMENT TAG="DEF_ASPos" TYPE="DOUBLE" INDX="INTERNAL" UNIT="0" />
<ELEMENT TAG="DEF_MACur" TYPE="DOUBLE" INDX="INTERNAL" UNIT="0" />
<ELEMENT TAG="DEF_Delay" TYPE="LONG" INDX="INTERNAL" UNIT="0" />
<ELEMENT TAG="FTC.Fx" TYPE="DOUBLE" INDX="1" UNIT="0" />
<ELEMENT TAG="FTC.Fy" TYPE="DOUBLE" INDX="2" UNIT="0" />
<ELEMENT TAG="FTC.Fz" TYPE="DOUBLE" INDX="3" UNIT="0" />
<ELEMENT TAG="FTC.Tx" TYPE="DOUBLE" INDX="4" UNIT="0" />
<ELEMENT TAG="FTC.Ty" TYPE="DOUBLE" INDX="5" UNIT="0" />
<ELEMENT TAG="FTC.Tz" TYPE="DOUBLE" INDX="6" UNIT="0" />
</ELEMENTS>
</SEND>
<RECEIVE>
<ELEMENTS>
<ELEMENT TAG="DEF_EStr" TYPE="STRING" INDX="INTERNAL" UNIT="0" />
<ELEMENT TAG="RKorr.X" TYPE="DOUBLE" INDX="1" UNIT="1" HOLDON="1" />
<ELEMENT TAG="RKorr.Y" TYPE="DOUBLE" INDX="2" UNIT="1" HOLDON="1" />
<ELEMENT TAG="RKorr.Z" TYPE="DOUBLE" INDX="3" UNIT="1" HOLDON="1" />
<ELEMENT TAG="RKorr.A" TYPE="DOUBLE" INDX="4" UNIT="0" HOLDON="1" />
<ELEMENT TAG="RKorr.B" TYPE="DOUBLE" INDX="5" UNIT="0" HOLDON="1" />
<ELEMENT TAG="RKorr.C" TYPE="DOUBLE" INDX="6" UNIT="0" HOLDON="1" />
<ELEMENT TAG="AKorr.A1" TYPE="DOUBLE" INDX="7" UNIT="0" HOLDON="0" />
<ELEMENT TAG="AKorr.A2" TYPE="DOUBLE" INDX="8" UNIT="0" HOLDON="0" />
<ELEMENT TAG="AKorr.A3" TYPE="DOUBLE" INDX="9" UNIT="0" HOLDON="0" />
<ELEMENT TAG="AKorr.A4" TYPE="DOUBLE" INDX="10" UNIT="0" HOLDON="0" />
<ELEMENT TAG="AKorr.A5" TYPE="DOUBLE" INDX="11" UNIT="0" HOLDON="0" />
<ELEMENT TAG="AKorr.A6" TYPE="DOUBLE" INDX="12" UNIT="0" HOLDON="0" />
<ELEMENT TAG="DiO" TYPE="LONG" INDX="13" UNIT="0" />
</ELEMENTS>
</RECEIVE>
</ROOT>
Display More
commanddoc.xml
Code
<Sen Type="KMC" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="commanddoc.xsd">
<Dat TaskType="b">
<EStr>Info: ERX Message!</EStr>
<RKorr X="0.0000" Y="0.0000" Z="0.0000" A="0.0000" B="0.0000" C="0.0000" />
<AKorr A1="0.0000" A2="0.0000" A3="0.0000" A4="0.0000" A5="0.0000" A6="0.0000" />
<DiO>0</DiO>
<IPOC>0000000000</IPOC>
</Dat>
</Sen>