Good day!
I'm trying to deal with ENUM. Made a practical example, but the robot finds a lot of mistakes. I can't figure out what the code errors are. Please help to understand.
Code
decl e6pos start_point
decl int count_step
REAL Pol_rasst
BOOL rez
Enum storona verh, niz, levo, pravo, pered, zad
Enum Sost Zam, Razm, Neisp
decl storona Napr
decl sost Uslov
INTERRUPT DECL 100 WHEN $IN[3] == TRUE DO Stop_dviz()
INTERRUPT DECL 102 WHEN $IN[3] == TRUE DO Stop_dviz()
INTERRUPT DECL 101 WHEN $IN[3]== FALSE DO Stop_dviz()
INI
$out[16]=TRUE
rez = false
PTP P1 Vel=100 % PDAT1 Tool[1]:svarka Base[0]
dvizen (10, #levo, #Neisp, rez)
dvizen (20, #niz, #Zam, rez)
Tochka0 = $POS_ACT
wait sec 0
dvizen (20, #verh, #razm, rez)
rasst = pos_dist(Tochka0,$POS_ACT)
count_step = 0
LOOP
count_step = count_step + 1
Razmer_step=2
IF $IN[3] == TRUE then
dvizen (Razmer_step, #verh , #razm, rez)
lin Nashel
dvizen (Razmer_step, #pravo, #zam , rez)
IF rez==false THEN
lin Nashel
ENDIF
ELSE
dvizen (Razmer_step, #niz , #zam , rez)
IF rez==true THEN
dvizen (Razmer_step, #levo, #zam , rez)
ELSE
lin Nashel
ENDIF
ENDIF
ENDLOOP
END
---------------------------------------------------------------------
DEF dvizen (L:IN, Napr:IN, Uslov:IN, rezult:OUT)
Enum storona verh, niz, levo, pravo, pered, zad
Enum Sost Zam, Razm, Neisp
decl storona Napr
decl sost Uslov
DECL REAL L, L1
decl bool rezult
rezult = FALSE
;prerivanie po kasaniyu ili propadaniyu kontakta
SWITCH Uslov
CASE #Zam
INTERRUPT ON 100
CASE #Razm
INTERRUPT ON 101
case #Neisp
INTERRUPT OFF 100
INTERRUPT OFF 101
DEFAULT
ENDSWITCH
SWITCH Napr
CASE #verh
L = L * -1
T_sdviga = sdvig(L, 0, 0)
CASE #vniz
L = L
T_sdviga = sdvig(L, 0, 0)
CASE #levo
L = L * -1
T_sdviga = sdvig(0, 0, L)
CASE #pravo
L = L
T_sdviga = sdvig(0, 0, L)
CASE #pered
CASE #zad
DEFAULT
ENDSWITCH
LIN_rel T_sdviga #tool
wait sec 0
INTERRUPT OFF 100
INTERRUPT OFF 101
rezult = TRUE
END
---------------------------------------------------------------------
deffct E6POS sdvig (X1:IN, Y1:IN, Z1:IN)
decl real x1, y1, z1
decl e6pos rezultat
rezultat.x=x1
rezultat.y=y1
rezultat.z=z1
rezultat.a=0
rezultat.b=0
rezultat.c=0
return rezultat
ENDFCT
def Stop_dviz()
INTERRUPT OFF 100
INTERRUPT OFF 101
INTERRUPT OFF 102
Nashel = $POS_ACT
brake
wait sec 0
RESUME
END
---------------------------------------------------------------------
deffct real pos_dist(p1: IN,p2:IN)
pos p1,p2
return(sqrt(sqr(p1.x-p2.x)+sqr(p1.y-p2.y)+sqr(p1.z-p2.z)))
endfct
---------------------------------------------------------------------
deffct real sqr(x:IN)
real x
return(x*x)
endfct
---------------------------------------------------------------------
Display More