KRC4 KFD-Programmierung - Value FREE Parameterübergabe

  • Hallo zusammen,
    ich bräuchte mal ein paar Tipps mit KFD. Leider spuckt die KRC4 auch keine vernünftigen Fehlermeldungen aus, wenn sie mit der Syntax nicht einverstanden ist... vielleicht kann mir ja hier einer auf die Sprünge helfen.


    Was ich machen will:
    ich habe eine globale Funktion, die ich zum Absetzen meiner Meldungen verwende (SetMessageRobot (...)). Für den Kunden möchte ich nun dieses Unterprogramm über ein ILF befüllbar machen.


    Das sind meine Eingangsparameter der Fct. Die Funktion funktioniert einwandfrei, nur mit KFD eben nicht.
    SetMessageRobot (i_chModul[]:IN, i_iNr:IN, i_chMsg_text:IN, i_enMsg_type:IN)



    So sieht mein KFD aus:


    DEFTP MiscMsg = {SOT FALSE, SOC TRUE}
    DECL PARAM p_MsgNr ={SHORTNAME[] "MsgNr: ",VALUE {NUMBER: DEFAULT 1000, MIN 1000, MAX 1999, STEP 1},UNIT[] " ", SHORTCUT[] "MSG"}
    DECL PARAM p_MsgTxt ={SHORTNAME[] "MsgTxt: ",VALUE {FREE: DEFAULT[] " Enter your message text here. "}}
    DECL FOLD CustomMsg[1]
    CustomMsg[1]="SetMessageRobot ( "Custom", %p_MsgNr , %p_MsgTxt , #notify )"
    DECL INLINEFORM CustomMessage={FOLD[1] CustomMsg, PARAM[1] p_MsgNr, PARAM[2] p_MsgTxt, ILF_TYPE ALL}
    ENDTP



    chModul und enMsg_type sollen standardmäßig gesetzt sein und vom Kunde nicht änderbar, deshalb sind "Custom" und "#notify" hart drin.


    Mein Problem:
    Ich kann das ILF einfügen, aber wenn ich den FOLD öffne, sehe ich, dass die Codezeile mit meinem UP-Aufruf auskommentiert ist. Selbstverständlich ohne irgend eine Meldung von der KRC4 dass ihr etwas nicht passt...
    Meine CodeZeile des ILFs, wenn ich den FOLD öffne:
    ;SetMessageRobot("Custom",%p_MsgNr ,%p_MsgTxt, #notify)


    Ich hab schon einiges ausprobiert, / an bestimmte Stellen gesetzt o.ä. ... aber das ist ja das reinste Ratespiel, und dazu kommt, dass je nach dem dann irgendwann mal das ILF gar nicht mehr akzeptiert wird - auch ohne Fehlermeldung....
    Der Parameter %p_MsgNr sollte so passen, den kann ich ausschließen, da ich es in einem anderen ILF genauso mache. Dort wird allerdings in dem FOLD des ILFs gleich der Wert der MsgNr reingeschrieben, hier nicht...


    Hat jemand ne Idee? Oder gibt es irgendwo eine Doku, welche Bugs KFD hat? Ich mein, wo ich überall ein Blank, ein / oder sonst was reinhauen muss, damit das funktioniert?


    Liegt es an dem Parameter VALUE FREE???


    Danke für euer Mitdenken!


    PS: die UserTech-Doku hab ich selbstverständlich.

  • Schritt für Schritt zum Roboterprofi!
  • Hi Joserl,


    ändere die "Fold" Definition wie folgt:

    Code
    CustomMsg[1]="SetMessageRobot(/"Custom/",%p_MsgNr ,/"%p_MsgTxt/",#notify)"


    Erklärung:
    Bei Sonderzeichen wie z.B. " (Anführungszeichen) musst du ein Escape Zeichen / (Slash) voranstellen.


    Viel Spaß nun mit deinem Inlineformular!!!


    Gruß Daniel

  • Hi Daniel!
    Vielen Dank für deine Antwort!
    Leider funktioniert das bei mir auch nicht :-(.
    Vielleicht sollte ich noch dazu sagen, dass ich die KSS8.3.5 verwende. Wobei das "rein theoretisch" ja egal sein sollte.


    Ich hatte jetzt schon unterschiedliche Verhalten:
    1. Wenn ich deine Code-Zeile verwende und das ILF einfüge, wird mir dieses auch angezeigt. Sobald ich aber "Befehl OK" drücke, flimmert das SmartPAD 3 mal und dann ist wieder alles wie vorher. Kein ILF, nix.
    2. Ich verwende zuerst meine Code-Zeile (ohne Escape-Zeichen), füge dann ein ILF ein bei dem mein UP-Aufruf dann auskommentiert ist. Dann erweitere ich das KFD wieder mit den Escape-Zeichen und wähle mein Roboterprogramm wieder an. Dort kann ich wie bei 1. kein weiteres ILF einfügen. Wenn ich auf das bereits vorhandene ILF gehen und es "ändere", wird mit "Befehl OK", die Code-Zeile wieder einkommentiert, und meine Parameter auch richtig übergeben. Allerdings bringt die KRC mir gleichzeitig die Hinweismelung "UP nicht vereinbart". Selbstverständlich ist mein UP aber vorhanden und wird auch bereits oft verwendet. Auch das händische Einfügen von einem Blank vor der UP - Klammer hat nichts verändert.... :ntc:
    __________________________________________


    UPDATE:::
    So, nun da ich ja doch noch ne Fehlermeldung herausbekommen habe, habe ich weiter geforscht und hab meinen Bug gefunden!
    Ich hab erst vor kurzem mein UP "SetMessageRobot" in eine Funktion mit Rückgabewert umgewandelt. Selbstverständlich braucht diese Funktion dann auch eine Variable in die sie schreiben darf, welche auch im KFD angegeben werden muss! Auch hier: :ntc: :)


    Vielen Dank!!!


    Joserl

  • Ok, dann funktioniert es jetzt?


    Der Vollständigkeit halber, hier der komplette KFD Inhalt mit welchem ich dein Problem nachgestellt und behoben habe.


    Code
    DEFTP MiscMsg = {SOT FALSE, SOC TRUE}
    DECL PARAM p_MsgNr ={SHORTNAME[] "MsgNr: ",VALUE {NUMBER: DEFAULT 1000, MIN 1000, MAX 1999, STEP 1},UNIT[] " ", SHORTCUT[] "MSG"}
    DECL PARAM p_MsgTxt ={SHORTNAME[] "MsgTxt: ",VALUE {FREE: DEFAULT[] " Enter your message text here. "}}
    DECL FOLD CustomMsg[1]
    CustomMsg[1]="SetMessageRobot(/"Custom/",%p_MsgNr ,/"%p_MsgTxt/",#notify)"
    DECL INLINEFORM CustomMessage={FOLD[1] CustomMsg, PARAM[1] p_MsgNr, PARAM[2] p_MsgTxt}   
    ENDTP


    Getestet auf KSS8.2.22

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