How can i simplify this wrong estructure for this "error handling" ? HELP

Hi, im new in programation in general, i wrote a code following my own logic, and it works but the code is toooo long  (900 lines) and i know that there have to be a way of writing this too much short and easy and efficient... the routine is the next one:

PROC rErros10()
   !!!!!! CASE 1
    IF Error1=0 AND Error2=0 AND Error3=0 AND Error4=1 THEN
      rEspaco;
      TPWrite "    Nao é possivel buscar a peca 4     ";
      WaitTime 3;
    ELSE
      IF Error1 = 0 AND Error2=0 AND Error3=1 AND Error4=0 THEN
        rEspaco;
        TPWrite "    Nao é possivel buscar a peca 3     ";
        WaitTime 3;
      ENDIF

      IF Error1 = 0 AND Error2=0 AND Error3=1 AND Error4=1 THEN
        rEspaco;
        TPWrite "    Nao é possivel buscar a peca 3     ";
        TPWrite "    Nao é possivel buscar a peca 4     ";
        WaitTime 5;
      ENDIF
      IF Error1 = 0 AND Error2=1 AND Error3=0 AND Error4=0 THEN
        rEspaco;
        TPWrite "    Nao é possivel buscar a peca 2     ";
        WaitTime 3;
      ENDIF

      IF Error1 = 0 AND Error2=1 AND Error3=0 AND Error4=1 THEN
        rEspaco;
        TPWrite "    Nao é possivel buscar a peca 2     ";
        TPWrite "    Nao é possivel buscar a peca 4     ";
        WaitTime 5;
      ENDIF
      IF Error1 = 0 AND Error2=1 AND Error3=1 AND Error4=0 THEN
        rEspaco;
        TPWrite "    Nao é possivel buscar a peca 2     ";
        TPWrite "    Nao é possivel buscar a peca 3     ";
        WaitTime 5;
      ENDIF

      IF Error1 = 0 AND Error2=1 AND Error3=1 AND Error4=1 THEN
        rEspaco4;
        TPWrite "    Nao é possivel buscar a peca 2     ";
        TPWrite "    Nao é possivel buscar a peca 3     ";
        TPWrite "    Nao é possivel buscar a peca 4     ";
        WaitTime 5;
      ENDIF

      IF Error1 = 1 AND Error2=0 AND Error3=0 AND Error4=0 THEN
        rEspaco;
        TPWrite "    Nao é possivel buscar a peca 1     ";
        WaitTime 3;
      ENDIF

      IF Error1 =1 AND Error2=0 AND Error3=0 AND Error4=1 THEN
        rEspaco;
        TPWrite "    Nao é possivel buscar a peca 1     ";
        TPWrite "    Nao é possivel buscar a peca 4     ";
        WaitTime 5;
      ENDIF

      IF Error1 =1 AND Error2=0 AND Error3=1 AND Error4=0 THEN
        rEspaco;
       TPWrite "    Nao é possivel buscar a peca 1     ";
       TPWrite "    Nao é possivel buscar a peca 3     ";
       WaitTime 5;
      ENDIF 

      IF Error1=1 AND Error2=0 AND Error3=1 AND Error4=1 THEN
        rEspaco4;
        TPWrite "    Nao é possivel buscar a peca 1     ";
        TPWrite "    Nao é possivel buscar a peca 3     ";
        TPWrite "    Nao é possivel buscar a peca 4     ";
        WaitTime 5;
      ENDIF 
      IF Error1=1 AND Error2=1 AND Error3=0 AND Error4=0 THEN
        rEspaco;
        TPWrite "    Nao é possivel buscar a peca 1     ";
        TPWrite "    Nao é possivel buscar a peca 2     ";
        WaitTime 5;
      ENDIF 

      IF Error1=1 AND Error2=1 AND Error3=0 AND Error4=1 THEN
        rEspaco4;
        TPWrite "    Nao é possivel buscar a peca 1     ";
        TPWrite "    Nao é possivel buscar a peca 2     ";
        TPWrite "    Nao é possivel buscar a peca 4     ";
        WaitTime 5;
      ENDIF 

      IF Error1=1 AND Error2=1 AND Error3=1 AND Error4=0 THEN
        rEspaco4;
        TPWrite "    Nao é possivel buscar a peca 1     ";
        TPWrite "    Nao é possivel buscar a peca 2     ";
        TPWrite "    Nao é possivel buscar a peca 3     ";
        WaitTime 5;
      ENDIF

      IF Error1=1 AND Error2=1 AND Error3=1 AND Error4=1 THEN
        rEspaco4;
        TPWrite "    Nao é possivel buscar a peca 1     ";
        TPWrite "    Nao é possivel buscar a peca 2     ";
        TPWrite "    Nao é possivel buscar a peca 3     ";
        TPWrite "    Nao é possivel buscar a peca 4     ";
        WaitTime 6;
      ENDIF  

    ENDIF
  ENDPROC


I know that this is so bad, is not scalable and is too long, I have in the program 5 of this type of routines, with the intention of showing on the flexpendant when an action cant be execute....

The thing is that it has to be 2 lines or  3 or 4 or 1, it cant be 1 line and change the value of the piece, im saying this cuz i tried with array, for, if , but i cant figure it out how to make the 2 or 3 or 4 lines showing at the same time... btw I dont really know if this is a real error handling, cuz im not using raise and the other stuff at this moment.

 I wait for any response, thank you.

Answers

  • Hi...

    I didn't quite understand your code, but see if this solves it.
    WHILE (Error1=1) OR (Error2=1) OR (Error3=1) OR (Error4=1) DO
                ! Define your rule here...
                IF Error1=1 OR (Error2=1) rEspaco;
                IF Error3=1 OR (Error4=1) rEspaco4;
    
                ! ERROR
                IF Error1=1 TPWrite "    Nao é possivel buscar a peca 1     ";
                IF Error1=1 TPWrite "    Nao é possivel buscar a peca 2     ";
                IF Error1=1 TPWrite "    Nao é possivel buscar a peca 3     ";
                IF Error1=1 TPWrite "    Nao é possivel buscar a peca 4     ";
    
                ! Define your rule here...
                IF Error1=1 OR (Error2=1) WaitTime 6;
                IF Error3=1 OR (Error4=1) WaitTime 4;
            ENDWHILE        
    But I think it's not the best way.

    Good Job
  • lemster68
    lemster68 ✭✭✭
    Hello, yes that is not real error handling for ABB Rapid.  A routine should look like this:

    PROC MyProc()
      Code here
    ERROR
      Error handling code here
    ENDPROC
    Read up on Error handing in the technical reference manuals, Rapid Overview, Rapid instructions, functions and datatypes and, finally, Rapid Kernel.
    Lee Justice