Hallo,
wie kann ich in einem aufgerufenen Unterprogramm set_Var am einfachsten überprüfen ob ein Parameter übergeben wurde oder nicht?
set_Var(Par1,Par2)
oder ob
set_Var() so aufgerufen wurde?
Rainer
Hallo,
wie kann ich in einem aufgerufenen Unterprogramm set_Var am einfachsten überprüfen ob ein Parameter übergeben wurde oder nicht?
set_Var(Par1,Par2)
oder ob
set_Var() so aufgerufen wurde?
Rainer
Hi
musst wohl mit VarState arbeiten ab 5.7 gibts wenn ich mich net irre noch nen weg muss ich aber selber noch testen.
If NOT (VarState("Par2") == #INITIALIZED) Then
Par2 = irgendwas
Endif
Gruß Loipe
DEF SET_VAR(Par1,Par2)
If (VARSTATE(Par1)==#INITIALIZED) AND (VARSTATE(Par2)==#INITIALIZED) Then
mach dies
Else
mach das
Endif
END
zu spät....
Hallo,
mein Programm sieht etwa so aus:
USER_PARAM(PAR1 :IN,PAR2 :IN,PAR3 :IN,PAR4 :IN,PAR5 :IN,PAR6 :IN,PAR7 :IN,PAR8 :IN,PAR9 :IN,PAR10 :IN)
aber jetzt 10xVarState abzufragen oder wie ich's jetzt gemacht habe:
ON_ERROR_PROCEED
intb1 = PAR1
IF $ERR.NUMBER == 0 THEN
ON_ERROR_PROCEED
intb2 = PAR2
IF $ERR.NUMBER == 0 THEN
ON_ERROR_PROCEED
intb3 = PAR3
usw.
ist natürlich ein riesen Ding!!!! könnt ihr mir bitte helfen meinen Code stark zu dezimieren!!
Rainer
DEF USER_PARAM(PAR1 :IN,PAR2 :IN,PAR3 :IN,PAR4 :IN,PAR5 :IN,PAR6 :IN,PAR7 :IN,PAR8 :IN,PAR9 :IN,PAR10 :IN)
BOOL bOk
bOk = (VARSTATE(Par1) == #INITIALIZED)
bOk = bOk AND (VARSTATE(Par2) == #INITIALIZED)
bOk = bOk AND (VARSTATE(Par3) == #INITIALIZED)
bOk = bOk AND (VARSTATE(Par4) == #INITIALIZED)
bOk = bOk AND (VARSTATE(Par5) == #INITIALIZED)
bOk = bOk AND (VARSTATE(Par6) == #INITIALIZED)
bOk = bOk AND (VARSTATE(Par7) == #INITIALIZED)
bOk = bOk AND (VARSTATE(Par8) == #INITIALIZED)
bOk = bOk AND (VARSTATE(Par9) == #INITIALIZED)
bOk = bOk AND (VARSTATE(Par10) == #INITIALIZED)
If bOk Then
Tu dies...
Else
Tu das... zB. EXIT
Endif
.
. Dein Code
.
END
Vielleicht auch so....
USER_PARAM(bPar1,bPar2,bPar3,rPar4,rPar5,rPar6,nPar7,nPar8,nPar9,rPar10)
BOOL bPar1,bPar2,bPar3,bOk
INT nTmp,nPar7, nPar8, nPar9
REAL rPar4,rPar5,rPar10
bOk = bPar1 OR bPar2 OR bPar3
If $ERR.NUM.... Then
ON_ERR_PROCEED
Endif
nTmp = nPar7+nPar8+nPar9+rPar4+rPar5+rPar10
If $ERR.NUM.... Then
ON_ERR_PROCEED
Endif
Geht nicht auch:
For Par[i]= 1 to 10
If $ERR.NUM.... Then
ON_ERR_PROCEED
Endif
Endfor
???
Hallo zusammen
Stethi
ginge schon wenn die Parameter im Array wären.
ein Array für Bool
eins für Int
eins für Real
wenns ne Zählschleife sein soll ginge es wohl nur so wobei das net unbedingt laufzeit optimiert wäre
USER_PARAM(bPar1,bPar2,bPar3,rPar4,rPar5,rPar6,nPar7,nPar8,nPar9,rPar10)
BOOL bPar1,bPar2,bPar3,bOk,bT
INT nTmp,nPar7, nPar8, nPar9 ,i
REAL rPar4,rPar5,rPar10
Char cTyp[10] cVar[24]
DECL State_t State
cTyp[]="bbbrrrnnnr"
bOk = True
For i=1 To 10
bT=StrClear(cVar[])
Offset = 0
SWRITE(cVar[],STATE,OFFSET,"%SPar%1.F",cTyp[ i ],i)
bOk = bOk AND (VARSTATE(cVar[]) == #INITIALIZED)
Endfor
If Not bOk Then
Exit
Endif
Hallo,
geht dann sowas auch? $IN[cVar[]]??
Rainer
ne leider net
das mit Beispiel oben funktioniert nur weil Varstate sowieso mit nem String arbeitet.
da ist der Kuka bissel unflexible.
theoretisch könnte man es vielleicht mit Remoteread basteln da dort auch nur ein String benutzt wird und warum sollte man damit nur auf nem anderem Roboter Variablen auslesen können.
die funktion ist bei kooperierende Roboter mit drin und leider hab ich das paket net um das mal zu testen.
dann könnten wir alle variablen mit strings ansprechen