Variabeln in Meldungen KRC4

  • Ich möchte in einer Fehlermeldung den Variabelnnamen z.B "diGreiferOffen" als CHAR Variable verwenden.
    Die Meldung sollte dann etwa so aussehen:
    Der Roboter wartet auf das Signal diGreiferOffen
    Manuell kann man das so schreiben:
    meldung={Modul[]"User",Nr 125,Msg_txt[]"Der Roboter wartet auf das Signal %1"}
    Par[1]={Par_type #Value,Par_txt[]"diGreiferOffen"}
    Beim Aufrufen der Feherroutine würde ich aber die CHAR Variable "stSignal" mit dem String des Signals beschreiben.
    Wie kriege ich nun die Variable anstelle des manuellen Textes in die Zeile PAR[1] ???


    Vielen Dank

  • Schritt für Schritt zum Roboterprofi!
  • Vielen Dank Fubini
    Das sagt mir leider nichts.
    Die Idee war eigentlich folgende:
    Aufruf:
    rWarteEingang("di_VakuumOK",TRUE,120,5.0,orange)


    Routine rWarteEingang:
    DEF rWarteEingang( EINGANG[]:IN, ZUSTAND:IN, nErrorNr2:IN, TIMEOUT:IN, Aktion:IN )
    ; rWarteEingang("di_VakuumOK",TRUE,120,5.0,orange)


    ;Uebergabedeklarationen______________________________________
    DECL CHAR EINGANG[] ; Eingang
    DECL BOOL ZUSTAND ; True oder False
    DECL INT nErrorNr2 ; Fehlernummer
    ;DECL CHAR MSGTXT[] ; Meldetext
    DECL REAL TIMEOUT ; TimeOut Zeit
    DECL INT Aktion ; 0=0,rot=1,orange=2,weiss=3
    DECL INT rot=2
    DECL INT orange=3
    DECL INT weiss=4


    ;Deklarationen_______________________________________________
    DECL SIGINF SIG_INF


    ;Initialisierung_____________________________________________
    SIG_INF = GET_SIG_INF( EINGANG[] )


    ; Sollte so angezeigt sein: "Signal di_VakuumOK hat nicht Zustand TRUE !"
    meldung={Modul[]"User",Nr 125,Msg_txt[]"Signal %1 hat nicht Zustand %2 !"}
    Par[1]={Par_type #Value,Par_txt[]"EINGANG"} ; hier müsste der Text aus der Variable EINGANG hinein
    Par[2]={Par_type #Value,Par_txt[]"ZUSTAND"} ; hier müsste der Text aus der Variable ZUSTAND hinein


    ;Voreinstellungen____________________________________________
    $TIMER_STOP[10] = TRUE
    $TIMER[10] = 0
    $TIMER_STOP[10] = FALSE


    TIMEOUT = TIMEOUT * 1000


    ;Programm Funktion___________________________________________
    WAIT FOR (($TIMER[10] > TIMEOUT) OR ($IN[SIG_INF.IDX] == ZUSTAND))


    $TIMER_STOP[10]=TRUE


    IF NOT $IN[SIG_INF.IDX] == ZUSTAND THEN
    rClear_allMsgs()
    SWITCH Aktion
    CASE 0 ;Fehlermeldung anzeigen
    rHinweismeldung()
    CASE 1 ;Fehlermeldung anzeigen, warten bis Eingang=Zustand
    rHinweismeldung()
    WAIT FOR $IN[SIG_INF.IDX] == ZUSTAND
    ENDSWITCH
    ENDIF


    END

  • Sorry aber ich sehe da nirgends %d.
    Ich möchte einfach anstelle des "blablabla" den Inhalt der Stringvariable "EINGANG". Beim Aufrufen der Routine schreie ich jeweils den Eingangsnamen und den Sollzustand als Übergabewerte in den Routinenaufruf.
    Par[1]={Par_type #Value,Par_txt[]"blablabla"}
    Par[1]={Par_type #Value,Par_txt[]"EINGANG"} ; hier müsste der Text aus der Variable EINGANG hinein
    Vielleicht ist es einfacher wenn du mit die ganze Zeile auscodierst.

  • Hallo Stefan,


    ganz einfach


    Anstatt:
    Par[1]={Par_type #Value,Par_txt[]"EINGANG"}
    einzeln zuweisen
    Par[1].Par_type = #Value
    Par[1].Par_txt[]= Eingang[]


    Bsp.
    DEF meldungx( )


    Decl KrlMsg_T Msg
    Decl KrlMsgPar_T Par[3]
    Decl KrlMsgOpt_T Opt
    INT nHandle
    Decl Char Eingangx[26]
    Decl Bool bZustand



    Eingangx[]="diGreiferOffen"
    bZustand=True


    Msg = { Modul[] "GripperTech", Nr 123, Msg_txt[] "Signal %1 hat Zustand %2"}
    Par[1].Par_type = #value
    par[1].Par_txt[] = Eingangx[]
    Par[2].Par_type = #value
    par[2].Par_bool = bZustand
    Opt = { VL_Stop True, Clear_P_Reset True, Log_To_DB False }
    nHandle = Set_KrlMsg (#Notify, Msg, Par[], Opt)
    End


    Gruss SJX

    Manche Maenner bemuehen sich lebenslang, das Wesen einer Frau zu verstehen. Andere befassen sich mit weniger schwierigen Dingen z.B. der Relativitaetstheorie.

Erstelle ein Benutzerkonto oder melde dich an um zu kommentieren

Du musst ein Benutzerkonto haben um einen Kommentar hinterlassen zu können

Benutzerkonto erstellen
Neues Benutzerkonto für unsere Community erstellen. Geht einfach!
Neues Benutzerkonto erstellen
Anmelden
Du hast bereits ein Benutzerkonto? Melde dich hier an.
Jetzt anmelden