Ankündigung

Einklappen
Keine Ankündigung bisher.

Variable in Makro expandieren

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

    Variable in Makro expandieren

    KLingt ein bisserl komisch - kurz mein Problem:

    ich rufe ein Makro auf zb

    zb mit dem Wert HA7LoopCounter=1u08

    Code:
    HA7NetAuswert(HA7LoopCounter))
    die funktion sieht so aus
    Code:
    //------------------------------------------------------------------------------------
    :begin HA7NetAuswert(SensorCounter)
    
    if change(SensorCounter) and size(HA7NetSensorID_SensorCounter)>0u16 then {
    Die benötigten Variablen sind
    HA7NetSensorID_1
    HA7NetSensorID_2
    HA7NetSensorID_....

    leider expandiert sich der AUfruf aber nicht zu HA7NetSensorID_1 sondern zu HA7NetSensorID_HA7LoopCounter

    gibt es da einen Trick um den WERT der Variablen zu übergeben und NICHT den Namen?
    EPIX
    ...und möge der Saft mit euch sein...
    Getippt von meinen Zeigefingern auf einer QWERTZ Tastatur

    #2
    wird wohl eher in Richtung der Krücke über das String-"Array" gehen...
    EPIX
    ...und möge der Saft mit euch sein...
    Getippt von meinen Zeigefingern auf einer QWERTZ Tastatur

    Kommentar


      #3
      Hi Erich,

      sorry aber das ist zu wenig Background Info. Was genau willst Du damit machen? Wie sehen Deine Aufrufe aus?

      Gruß,
      Bernd

      Kommentar


        #4
        ich möchte Variable dynamisch anlegen (weil sich die Anzahl ändern kann) - eben mit den angeführten Schema:
        HA7NetSensorID_1
        HA7NetSensorID_2
        HA7NetSensorID_....
        das Problem ist, weil ich beim AUfruf nicht den Index als zB 1 übergeben will sondern eine Variable, die den Index als Zahl enthält...
        HA7LoopCounter zählt von 1 bis xxx

        HA7NetAuswert(HA7LoopCounter)
        und das Makro expaniert dann den Namen der Variablen anstelle der Zahl..

        nicht wie gewünscht zu HA7NetSensorID_1 sondern zu HA7NetSensorID_HA7LoopCounter

        das ganze wäre sozusagen ein eindimensionales Array....
        .................
        in der Zwischenzeit versuch' ich das Ganze über ein Stringarray zu lösen scheitere aber (wie immer) an den Webabfragen....

        Die spannende aktuelle Frage ist warum durch die Stringaddition (alle Strings als $$c3000 definiert)
        -> Befehlszeile
        HA7NetStringGet=HA7NetStringGetPre+HA7SensorArray+ HA7NetStringGetPost;
        aus

        Code:
         Wert von Objekt 5022 (HA7NetStringGetPost) abfragen:
        % Typ: erweiterter Text
        % Wert:  HTTP/1.1
        
        Host: 192.168.1.229
        
        Connection: keep-alive
        
        User-Agent: Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.116 Safari/537.36
        
        Accept:text/css,*/*;q=0.1
        
        Accept-Encoding:gzip, deflate
        
        Accept-Language:de-AT,de;q=0.8,en-US;q=0.6,en;q=0.4
        - wunderbar formatiert mit CRLF (auch am Ende)

        wird dann:
        %
        % Wert von Objekt 5024 (HA7NetStringGet) abfragen:
        % Typ: erweiterter Text
        % Wert: GET /1Wire/ReadTemperature.html?Address_Array=18000802B323401 0,4E000802B326C210, HTTP/1.1 Host: 192.168.1.229 Connection: keep-alive User-Agent: Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.116 Safari/537.36 Accept:text/css,*/*;q=0.1 Accept-Encoding:gzip, deflate Accept-Language:de-AT,de;q=0.8,en-US;q=0.6,en;q=0.4
        d.h. alle CRLF werden entfernt (besonders die am Ende) und damit *grrrrrrrrrrrrrrrrrr*

        irgendwie bin ich nicht eibpc kompatibel
        EPIX
        ...und möge der Saft mit euch sein...
        Getippt von meinen Zeigefingern auf einer QWERTZ Tastatur

        Kommentar


          #5
          Zitat von EPIX Beitrag anzeigen
          das Problem ist, weil ich beim AUfruf nicht den Index als zB 1 übergeben will sondern eine Variable, die den Index als Zahl enthält...
          in der Zwischenzeit versuch' ich das Ganze über ein Stringarray zu lösen scheitere aber (wie immer) an den Webabfragen....
          Interessanrter Ansatz. Eine Indirekte Adressierung per Makro ist jedenfalls nicht möglich. Dein Restproblem wäre mit
          Code:
           HA7NetStringGet=HA7NetStringGetPre+CRLF+HA7SensorArray+CRLF+ HA7NetStringGetPost;
          zu lösen.
          CRLF = tostring(0xD,0xA)
          Warum die vorhandenen CRLF rausgeschmissen werden kann ich nicht von hier aus sagen. Ich vermute, das liegt am strcat (C-Funktion) und deren Implentierung.
          offizielles Supportforum für den Enertex® EibPC: https://knx-user-forum.de/eibpc/
          Enertex Produkte kaufen

          Kommentar


            #6
            naja soooo "interessant" ist der ANsatz auch nicht, das ging schon vor -zig Jahren mit den mehrdimensionalen arrays

            vermute, das liegt am strcat (C-Funktion) und deren Implentierung.
            ich nicht
            ein paar Codezeilen früher ging es noch so:

            Code:
            Name_StringGetTMP = $GET /1Wire/ReadTemperature.html?Address_Array=$+convert(Senso rIDs,$$c1400)+$ HTTP/1.1$ + CRLF + \\
            $Host: 192.168.1.229$ + CRLF + \\
            $Connection: keep-alive$ + CRLF + \\
            $User-Agent: Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.116 Safari/537.36$ + CRLF + \\
            $Accept:text/css,*/*;q=0.1$ + CRLF + \\
            $Accept-Encoding:gzip, deflate$ + CRLF + \\
            $Accept-Language:de-AT,de;q=0.8,en-US;q=0.6,en;q=0.4$ + CRLF
            
            Name_StringGet=Name_StringGetTMP+CRLF+CRLF
            und die Abfrage im eibpc sagt:
            Wert von Objekt 5212 (WZEG_Fubo_VL_StringGet) abfragen:
            % Typ: erweiterter Text
            % Wert: GET /1Wire/ReadTemperature.html?Address_Array=18000802B323401 0 HTTP/1.1

            Host: 192.168.1.229

            Connection: keep-alive

            User-Agent: Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.116 Safari/537.36

            Accept:text/css,*/*;q=0.1

            Accept-Encoding:gzip, deflate

            Accept-Language:de-AT,de;q=0.8,en-US;q=0.6,en;q=0.4






            %
            wird also korrekt zusammengefügt...
            Zuletzt geändert von EPIX; 27.02.2016, 16:21.
            EPIX
            ...und möge der Saft mit euch sein...
            Getippt von meinen Zeigefingern auf einer QWERTZ Tastatur

            Kommentar


              #7
              der Code (wo dann die CRLF entfernt werden) schaut für mich ident aus:
              Code:
              HA7NetStringGetPre=        $GET /1Wire/ReadTemperature.html?Address_Array=$c1400
              HA7NetStringGetPost=    $ HTTP/1.1$ + CRLF + \\
                               $Host: 192.168.1.229$ + CRLF + \\
                               $Connection: keep-alive$ + CRLF + \\
                               $User-Agent: Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.116 Safari/537.36$ + CRLF + \\
                               $Accept:text/css,*/*;q=0.1$ + CRLF + \\
                               $Accept-Encoding:gzip, deflate$ + CRLF + \\
                               $Accept-Language:de-AT,de;q=0.8,en-US;q=0.6,en;q=0.4$ + CRLF + CRLF + CRLF 
              HA7NetStringGet=$$c1400
              HA7Net_StringSensorArray=$$c1400
              ich habe ihn ja auch mit copy&paste übertragen...
              Zuletzt geändert von EPIX; 27.02.2016, 16:49.
              EPIX
              ...und möge der Saft mit euch sein...
              Getippt von meinen Zeigefingern auf einer QWERTZ Tastatur

              Kommentar


                #8
                auch da geht's net....

                (HA7NetStringGet) abfragen:
                % Typ: erweiterter Text
                % Wert: GET /1Wire/ReadTemperature.html?Address_Array=18000802B323401 0,4E000802B326C210, HTTP/1.1 Host: 192.168.1.229 Connection: keep-alive User-Agent: Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.116 Safari/537.36 Accept:text/css,*/*;q=0.1 Accept-Encoding:gzip, deflate Accept-Language:de-AT,de;q=0.8,en-US;q=0.6,en;q=0.4
                Code:
                Code:
                HA7NetStringGet=$GET /1Wire/ReadTemperature.html?Address_Array=$+convert(HA7SensorArray,$$c1400)+$ HTTP/1.1$ + CRLF + \\
                                 $Host: 192.168.1.229$ + CRLF + \\
                                 $Connection: keep-alive$ + CRLF + \\
                                 $User-Agent: Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.116 Safari/537.36$ + CRLF + \\
                                 $Accept:text/css,*/*;q=0.1$ + CRLF + \\
                                 $Accept-Encoding:gzip, deflate$ + CRLF + \\
                                 $Accept-Language:de-AT,de;q=0.8,en-US;q=0.6,en;q=0.4$ + CRLF;
                    HA7NetStringGet=HA7NetStringGet+CRLF+CRLF
                langsam werd' ich krawutisch
                EPIX
                ...und möge der Saft mit euch sein...
                Getippt von meinen Zeigefingern auf einer QWERTZ Tastatur

                Kommentar


                  #9
                  Zitat von EPIX Beitrag anzeigen
                  der Code (wo dann die CRLF entfernt werden) schaut für mich ident aus:
                  ich habe ihn ja auch mit copy&paste übertragen...
                  oh, dann habe ich Dich falsch verstanden. Ich hab das auch eben ausgestet, die CRLF werden mit kopiert, hast also Recht, strcat funktioniert doch .
                  Wenn Du IP Telegramme verarbeiten willst, kommst Du am managed switch und wireshark nicht vorbei, sonst ist das eher stochern im Dunkeln...
                  offizielles Supportforum für den Enertex® EibPC: https://knx-user-forum.de/eibpc/
                  Enertex Produkte kaufen

                  Kommentar


                    #10
                    strcat funktioniert doch .
                    jo eh....

                    Immer ziehe ich ein Analticket - wie man bei uns so vornehm sagt...
                    EPIX
                    ...und möge der Saft mit euch sein...
                    Getippt von meinen Zeigefingern auf einer QWERTZ Tastatur

                    Kommentar

                    Lädt...
                    X