Ankündigung

Einklappen
Keine Ankündigung bisher.

Kommando als Argument bei Makros

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    [EibParser] Kommando als Argument bei Makros

    Der Compiler hat da beim Kopieren wohl einen Bug:

    Code:
    CF_Join_Action_Condition(JoinID,[B][COLOR="Red"]CF_Arg==$1$[/COLOR][/B],write(GA,!GA),convert(GA,$$),EIN) ==>  CF_Join_Action_Condition(d7,CF_Arg==$1$,write("WZ Licht TV Konsole-1/0/122",!"WZ Licht TV Konsole-1/0/122"),convert("WZ Licht TV Konsole-1/0/122",$$),EIN) in der Datei "x/tmpApp.txt"
      Makro genieriert ungültigen Code >if CF_Command==$d7$ and change(CF_NextCommand) then { 	/*	// begin KNX action*/	if [B][COLOR="Red"]==CF_Arg$1$[/COLOR][/B] then write("WZ Licht TV Konsole-1/0/122",!"WZ Licht TV Konsole-1/0/122") endif;/*	// end KNX action*//*	// begin CF feedback*/  if EIN then CF_Send_String( $JoinID=$+convert("WZ Licht TV Konsole-1/0/122",$$) ) endif;/*	// end CF feedback*/	  if CF_Debug then CF_DebugOut_String(8u08,$Set:$+convert(CF_Command+$=$+CF_Arg,$$)) endif; 	/*	// command done -> trigger next command*/	CF_NextCommand_Trigger()} endif < in >Mak:cf_join_action_condition==>< 
     ID:6
     EibParser wurde mit Fehler beendet.
    Ist ein Fix möglich? Kann man das Problem umgehen?
    BR
    Marc

    #2
    Wo ist denn da der Fehler?

    Code:
    Syntaxfehler in Makro: "Join2Var" in Zeile [704] in x\CommandFusionSpeed.lib
    	CF_Join_Action(JoinID,[COLOR="Red"]Var=convert(CF_Arg,Var)[/COLOR],convert(StatusVar,$$),EIN) ==>  CF_Join_Action(d40,Scene_1_Button=convert(CF_Arg,Scene_1_Button),convert(Scene_1_Status,$$),EIN) in der Datei "x/tmpApp.txt" in der Datei "x/tmpApp.txt"
     Gültig bis Position: {14} STOP--> (d40,[COLOR="red"]Scene_1_Button=convert(CF_Arg,Scene_1_Button)[/COLOR],convert(Scene_1_Status,$$),EIN)
    Sicher ist aber, dass der Fehler in der Datei .../tmpApp.txt in der Datei .../tmpApp.txt ist
    BR
    Marc

    Kommentar


      #3
      nur eine Idee...

      Var=convert(CF_Arg,Var)
      entweder ist die Rekursion ein Problem (Var=convert(CF_Arg,Var))

      oder du willst einen Vergleich übergeben, dann wäre statt = ein == notwendig....
      EPIX
      ...und möge der Saft mit euch sein...
      Getippt von meinen Zeigefingern auf einer QWERTZ Tastatur

      Kommentar


        #4
        Zitat von saft6luck Beitrag anzeigen
        Der Compiler hat da beim Kopieren wohl einen Bug:
        Das Problem wird sein, dass das Argument ein "_" enthält, insbesondere wenn die Makros rekursiv andere aufrufen.
        offizielles Supportforum für den Enertex® EibPC: https://knx-user-forum.de/eibpc/
        Enertex Produkte kaufen

        Kommentar


          #5
          Zitat von EPIX Beitrag anzeigen
          entweder ist die Rekursion ein Problem (Var=convert(CF_Arg,Var))

          oder du willst einen Vergleich übergeben, dann wäre statt = ein == notwendig....
          Vergleich ist das 1. Problem, Rekursion ist kein Syntax Fehler und funktioniert sonst problemlos.

          Es scheint also noch weitere Möglichkeiten zu geben.
          BR
          Marc

          Kommentar


            #6
            Zitat von enertegus Beitrag anzeigen
            Das Problem wird sein, dass das Argument ein "_" enthält, insbesondere wenn die Makros rekursiv andere aufrufen.
            Wenn der "_" die Ursache ist, ist das dann kein Compiler-Fehler?

            EDIT: Geht auch ohne "_" nicht.
            Code:
            CF_Join_Action_Condition(JoinID,[COLOR="red"][B]CFArg==$1$[/B][/COLOR],write(GA,!StatusGA),convert(!StatusGA,$$),SendDirectFeedback) ==>  CF_Join_Action_Condition(d1,CFArg==$1$,write("WZ Licht Sitzecke-1/0/110",!"WZ Licht Sitzecke-2/0/110"),convert(!"WZ Licht Sitzecke-2/0/110",$$),EIN) in der Datei "x/tmpApp.txt"
              Makro genieriert ungültigen Code >if CF_Command==$d1$ and change(CF_NextCommand) then { 	/*	// begin KNX action*/	if [COLOR="Red"][B]==CFArg$1$[/B][/COLOR] then {		 write("WZ Licht Sitzecke-1/0/110",!"WZ Licht Sitzecke-2/0/110");/*	   // end KNX action*//*	   // begin CF feedback*/     if EIN then CF_Send_String( $d1=$+convert(!"WZ Licht Sitzecke-2/0/110",$$) ) endif;/*	   // end CF feedback*/	} endif;	  if CF_Debug then CF_DebugOut_String(8u08,$Set:$+convert(CF_Command+$=$+CFArg,$$)) endif; 	/*	// command done -> trigger next command*/	CF_NextCommand_Trigger()} endif < in >Mak:cf_join_action_condition==>< 
             ID:6
             EibParser wurde mit Fehler beendet.
            Was ist mit dem 2. Problem?
            BR
            Marc

            Kommentar


              #7
              Gibt es schon ein Feedback, ob die beiden Probleme behoben werden (können)?
              Auch if-then geht scheinbar nicht als Parameter ...

              Gibt es evtl. einen Workaround?
              BR
              Marc

              Kommentar


                #8
                Zitat von saft6luck Beitrag anzeigen
                Gibt es schon ein Feedback, ob die beiden Probleme behoben werden (können)?
                Auch if-then geht scheinbar nicht als Parameter ...
                Gibt es evtl. einen Workaround?
                Ich habe das hier mit Makros getestet, aber nicht recht nachvollziehen können. Letztlich muss man aufpassen, da Makros durch Textersetzung expandiert werden und sämtlichte Rechenzeichen etc. als Trennzeichen gelten können. Kannst Du mal bei Dir den CF==$1$ Aufrufe klammern? Auch bei der Makrodefinition die Argumente nicht mit "_" definieren.
                offizielles Supportforum für den Enertex® EibPC: https://knx-user-forum.de/eibpc/
                Enertex Produkte kaufen

                Kommentar


                  #9
                  Zitat von enertegus Beitrag anzeigen
                  Ich habe das hier mit Makros getestet, aber nicht recht nachvollziehen können. Letztlich muss man aufpassen, da Makros durch Textersetzung expandiert werden und sämtlichte Rechenzeichen etc. als Trennzeichen gelten können. Kannst Du mal bei Dir den CF==$1$ Aufrufe klammern? Auch bei der Makrodefinition die Argumente nicht mit "_" definieren.
                  Normale Klammern habe ich schon probiert und "_" ist ja auch nicht das Problem (siehe EDIT mit Compiler-Output im Posting zuvor).

                  Zumindest "=" scheint in beiden Fällen vorzukommen.

                  Wenn du es nicht nachvollziehen kannst, versuche ich mal ein Beispiel zu machen.
                  BR
                  Marc

                  Kommentar


                    #10
                    Noch so ein Fall:

                    Code:
                     Datei: "//Diskstation-01/knx/eibPC/EibStudio/EibStudio-win_active/EibstudioData/tmpMacroOut.txt" wurde geschriebenSyntaxfehler in Makro: "CommandFusionInit" in Zeile [193] in x\CommandFusionSpeed.lib
                    	if delay(change(CF_Send_Next),5u64) then {/*	// copy data from buffer to temp buffer*/	CF_SendBuffer_temp=CF_SendBuffer;/*	// clear buffer*/  CF_SendBuffer=$$;/*	// for robustnes we could check and*//*	// send only if some clients are configured*//*	// if (CF_No_Clients > 0u08) then {*/	  CF_Actual_Client=1u08/*	// } endif;*/} endif ==>  if delay(change(CF_Send_Next),5u64) then {/*	// copy data from buffer to temp buffer*/	CF_SendBuffer_temp=CF_SendBuffer;/*	// clear buffer*/  CF_SendBuffer=$$;/*	// for robustnes we could check and*//*	// send only if some clients are configured*//*	// if (CF_No_Clients > 0u08) then {*/	  CF_Actual_Client=1u08/*	// } [COLOR="Blue"][B]endif[/B][/COLOR];*/} endif in der Datei "x/tmpApp.txt"
                      Deklaration erwartet: x=y in >=<  in >CF_SendBuffer_temp=CF_SendBuffer[COLOR="Red"][B]--Set[/B][/COLOR];;CF_SendBuffer=$$[COLOR="red"][B]--Set[/B][/COLOR];;<  in >{<  in >if_then delay(change(CF_Send_Next),5u64)< 
                     ID:5
                     EibParser wurde mit Fehler beendet.
                    Wo hat der Compiler denn das her? Im Code gibt es da nichts zu ersetzen.
                    Das Problem ist des auskommentierte endif (in blau) und zwar dieser Kommentar in jeglicher Form.

                    Warum darf da kein Kommentar sein und warum kommt dann so etwas heraus?
                    BR
                    Marc

                    Kommentar


                      #11
                      Zitat von saft6luck Beitrag anzeigen
                      Noch so ein Fall:
                      Warum darf da kein Kommentar sein und warum kommt dann so etwas heraus?
                      Bitte ein Beispiel, damit ich mir das anschauen kann.
                      offizielles Supportforum für den Enertex® EibPC: https://knx-user-forum.de/eibpc/
                      Enertex Produkte kaufen

                      Kommentar


                        #12
                        Zitat von enertegus Beitrag anzeigen
                        Bitte ein Beispiel, damit ich mir das anschauen kann.
                        [highlight=epc]
                        if delay(change(CF_Send_Next),5u64) then {
                        // copy data from buffer to temp buffer
                        CF_SendBuffer_temp=CF_SendBuffer;
                        // clear buffer
                        CF_SendBuffer=$$;
                        // for robustnes we could check and
                        // send only if some clients are configured
                        // if (CF_No_Clients > 0u08) then {
                        CF_Actual_Client=1u08
                        // } endif;
                        } endif
                        [/highlight]

                        Auf die Schnelle habe ich die Meldung entzerrt. Es geht um das auskommentierte endif. Dieser Kommentar ist das Problem.
                        BR
                        Marc

                        Kommentar


                          #13
                          Zitat von saft6luck Beitrag anzeigen
                          Auf die Schnelle habe ich die Meldung entzerrt. Es geht um das auskommentierte endif. Dieser Kommentar ist das Problem.
                          ... gefixt im nächsten EibStudio.
                          offizielles Supportforum für den Enertex® EibPC: https://knx-user-forum.de/eibpc/
                          Enertex Produkte kaufen

                          Kommentar


                            #14
                            Zitat von enertegus Beitrag anzeigen
                            ... gefixt im nächsten EibStudio.
                            Vielen Dank!

                            Ich bräuchte dringend einen Fix für die Probleme mit dem Code als Parameter. Hast du das auch beheben können?
                            BR
                            Marc

                            Kommentar


                              #15
                              Zitat von saft6luck Beitrag anzeigen
                              Wenn du es nicht nachvollziehen kannst, versuche ich mal ein Beispiel zu machen.
                              Zitat von saft6luck Beitrag anzeigen
                              Ich bräuchte dringend einen Fix für die Probleme mit dem Code als Parameter. Hast du das auch beheben können?
                              Versprechen kann ich so erst mal nix... aber die Zeit ist günstig, da ich derzeit noch vor dem Urlaub am eibparser arbeite. Allerdings gib mir doch mal ein Stück Code.
                              offizielles Supportforum für den Enertex® EibPC: https://knx-user-forum.de/eibpc/
                              Enertex Produkte kaufen

                              Kommentar

                              Lädt...
                              X