Zuviel Werbung? - > Hier kostenlos beim SPS-Forum registrieren

Seite 2 von 3 ErsteErste 123 LetzteLetzte
Ergebnis 11 bis 20 von 25

Thema: VB mehfach Split

  1. #11
    Registriert seit
    23.07.2009
    Ort
    Österreich
    Beiträge
    2.272
    Danke
    439
    Erhielt 661 Danke für 498 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Zitat Zitat von PN/DP Beitrag anzeigen
    kennt das tatsächlich Function-Deklaration, End Function und ByRef???
    Da musste ich jetzt auch nachschauen.
    Die Function-Deklaration selbst passiert gleich wie bei WinCCFlex über den Eigenschaftsdialog.
    WinCCFlex hat die Deklaration (FunctionName(Parameter1,Parameter2) dann in die Kopf- und Fußzeile des Texteditors geschrieben.
    TIA schreibt die Deklaration direkt in den Text-Editor-Bereich. Ist aber auch nicht textlich editierbar.

    Die Unterscheidung ByRef/ByVal bei der Parameter-Deklaration ist definitiv neu bei TIA.
    Vielleicht kann man jetzt auch endlich Objekte zwischen Skriptfunktionen austauschen, bei Flex ging das ja nicht.

    Zum Thema:
    Das Skript vom TE kann ich in TIA (bis auf den fehlenden Rückgabewert) problemlos übersetzen.
    Die Frage nach der Parameter-Rückgabe hat Faust ja schon erklärt.
    Wenn man mehr als einen Wert von der Funktion bearbeitet haben will übergibt man diese üblicherweise ByRef, die ReturnValue kann man dann z.B. als Fehler/Status nehmen.
    Insofern hat dass der TE mit "ByRef bri, ByRef hue, ByRef sat" schon richtig gemacht.

    Wie genau die ByRef-Übergaben in TIA funktionieren und ob es irgendwo TIA-spezifische Begrenzungen gibt weiß ich allerdings nicht.

    Zitat Zitat von faust Beitrag anzeigen
    wobei lt. Siemens bei Scriptaufrufen aus einem anderen Script heraus INTERN ByRef verwendet wird, auch wenn ByVal angegeben ist!!??
    Da hätten wir ja schon das erste Beispiel...
    Geändert von RONIN (06.01.2015 um 13:07 Uhr)
    If at first you don't succeed, you're not Van Damme!
    ... or maybe using TIA!

  2. #12
    Registriert seit
    10.08.2010
    Beiträge
    769
    Danke
    1
    Erhielt 14 Danke für 13 Beiträge

    Standard

    Wie müsste die Rückgabe im Script aussehen ? Mir ist unklar wie der Array in der Variablendeklaration angelegt wird ?

    Code:
    Function HUE_Farbe_lesen(ByRef light, ByRef werte)
    
    
    ......Script
    
    
     werte(1)= HiField(1, 1)
     werte(2)= HiField(2, 1)
     werte(3)= HiField(3, 1)
    
    
    
    End Function
    Geändert von emilio20 (06.01.2015 um 14:08 Uhr)

  3. #13
    Registriert seit
    25.02.2010
    Beiträge
    604
    Danke
    34
    Erhielt 119 Danke für 108 Beiträge

    Standard

    Hallo emilio
    Der prinzipielle Aufbau bei mehreren Werten ist folgender, wenn du kein Array verwenden möchtest:
    Code:
    Function Hue_Farbe_read(ByVal lightt (as Integer), ByRef bri (as Integer), ByRef hue (as Integer), ByRef sat (as Integer)) (as Boolean)
    Ich kann eben nicht prüfen ob TIA die Übergabe von Deklarationen unterstütz. Darum die Klammen.
    Dein Wert den du übergeben möchtest übergibtst du mit ByVal. Die Werte die du zurückerhalten möchtest übergibst du eine Referenz.
    Den Rückgabewert der Funktion als Bool kannst du zur Überprüfung nutzen, ob alles ok ist.

    Code:
    Function Hue_Farbe_read(ByVal lightt (as Integer), ByRef bri (as Integer), ByRef hue (as Integer), ByRef sat (as Integer)) as Boolean
    Hue_Farbe_read=false
    .
    .
    Script
    .
    'alles ok
    Hue_Farbe_read=true
    (Return Hue_Farbe_read)
    (Return wieder ungeprüfte Syntax)
    Holger

  4. #14
    Registriert seit
    10.08.2010
    Beiträge
    769
    Danke
    1
    Erhielt 14 Danke für 13 Beiträge

    Standard

    Hallo
    ich habe das Script abgeändert. Der Fehler ist weg aber ich erhalte keine Rückgabewerte. Return gibt es nicht in TIA

    Code:
    Function HUE_Farbe_lesen(ByVal lights, ByRef bri, ByRef sat, ByRef hue)
    
    HUE_Farbe_lesen=False
    
    Dim IP, Username
    Dim result
    Dim field_K, field_D
    Dim i, j
    Dim x
    Dim Cnt1, Cnt2
    Dim fso, f, ts, Path
    Dim ausgabe
    Dim ausgabedatei
    Dim MyURL , postData 
    Dim winHttpReq 
    Dim HiField()
    Set winHttpReq = CreateObject("WinHttp.WinHttpRequest.5.1")
    
    i=0
    j=0
    
    
    IP=SmartTags("DB59 PHILIPS HUE_IP")
    Username=SmartTags("DB59 PHILIPS HUE_username")
    
    MyURL = "http://"&IP&"/api/"&Username&"/lights/"&lights&""
    
    
    winHttpReq.Open "GET", MyURL, False
    winHttpReq.Send 
    
    result = winHttpReq.ResponseText
    
    
    field_K = Split(result,",")            'Split nach ","
    
    Cnt1 = 0                    'Finde Größenparameter für das Array
    For i = 0 To UBound(field_K)            'Finde größte Anzahl an Substrings für ":"
        
        x = field_K(i)
        Cnt2 = Len(x) - Len(Replace(x, ":", ""))  + 1     'Anzahl der Zeichen ":" + 1
        If Cnt2 > Cnt1 Then                'Gerade "uniqueid" besteht aus vielen Teilen
            Cnt1 = Cnt2
        End If
    Next
    
    ReDim HiField(UBound(field_K),Cnt1)        'HiField neu dimensioneren
    
    For i=0 To UBound(field_K)
        
        x = field_K(i)
        x = Replace(x, "{", "")            'Entfernen nicht gewünschter Zeichen
            x = Replace(x, "}", "")
            x = Replace(x, " ", "")
    
        field_D = Split(x,":")            'Split nach ":"
    
        For j=0    To UBound(field_D)        'Teile des Split ":" in das Array kopieren
            
            HiField(i,j) = field_D(j)
            
        Next
    
    Next
    
     bri= HiField(1, 1)
     hue= HiField(2, 1)
     sat= HiField(3, 1)
    
    
     
    
    HUE_Farbe_lesen=True
    
    End Function

  5. #15
    Registriert seit
    17.10.2007
    Beiträge
    263
    Danke
    5
    Erhielt 52 Danke für 48 Beiträge

    Standard

    Hallo emilio,

    mehrere Fragen:
    1. Wie sieht der Funktionsaufruf aus bzw. welchen Typ haben die Funktions-Parameter 'bri', 'sat' und 'hue?
    2. Bist du sicher, dass dein internes Feld 'HiField' mit (korrekten) Werten besetzt ist?

    Übrigens: meines Wissens nach kann man mit ReDim nur EINE Dimension eines Feldes verändern, nicht beide/mehrere gleichzeitig.

    Gruß, Fred

    PS: Schon mal versucht, die Runtime mit den Skript-Debugger zu starten? Zur Fehlersuche wirklich hilfreich.

    PPS: Ich muss übrigens meine Aussage bezügl. der Siemens-spezifischen Einschränkungen etwas abmildern:
    ByRef und ByVal funktionieren bei mir beim Skriptaufruf aus einem anderen Skript doch. Die Hilfe sagt aber nach wie vor etwas anderes...
    Geändert von faust (06.01.2015 um 19:47 Uhr)

  6. #16
    Registriert seit
    10.08.2010
    Beiträge
    769
    Danke
    1
    Erhielt 14 Danke für 13 Beiträge

    Standard

    Hallo
    1. bri = Int , sat= Int, Hue = DInt.
    2. Das Script funktioniert wenn ich eine Feste Variable verwende

    Code:
    SmartTags("Lampe 1 bri")= HiField(1, 1)
    SmartTags("Lampe 1 hue")= HiField(2, 1)
    SmartTags("Lampe 1 sat")= HiField(3, 1)
    wie geht das mit dem Runtime Skript-Debugger ?
    Geändert von emilio20 (06.01.2015 um 20:22 Uhr)

  7. #17
    Registriert seit
    17.10.2007
    Beiträge
    263
    Danke
    5
    Erhielt 52 Danke für 48 Beiträge

    Standard

    Hallo emilio,

    dir ist hoffentlich klar, dass du Variablentypen in einem Array/Feld nicht mischen kannst, obwohl das hier vielleicht zufälligerweise funktioniert.

    Zum Problem:
    Kannst du trotzdem mal den genauen Funktionsaufruf posten?

    Gruß, Fred

    PS: Zum Skript-Debugger siehe dje Hilfe im TIA-Portal.

  8. #18
    Registriert seit
    10.08.2010
    Beiträge
    769
    Danke
    1
    Erhielt 14 Danke für 13 Beiträge

    Standard

    Ich weiß nicht genau was du möchtest. Ich starte über einen Button das Script. Möchtest du ein Bild von der Belegung des Buttons ?
    Angehängte Grafiken Angehängte Grafiken
    Geändert von emilio20 (06.01.2015 um 20:19 Uhr)

  9. #19
    Registriert seit
    17.10.2007
    Beiträge
    263
    Danke
    5
    Erhielt 52 Danke für 48 Beiträge

    Standard

    Zum Beispiel. Interessant wäre auch, ob es beispielsweise mit internen Variablen ohne Steuerungsanbindung funktionieren würde.

    Gruß, Fred

  10. #20
    Registriert seit
    10.08.2010
    Beiträge
    769
    Danke
    1
    Erhielt 14 Danke für 13 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Ja mit internen Variablen geht es auch.Ich habe es in Post #16 geändert.

Ähnliche Themen

  1. Temperaturregelung eines Exruders (Split-Range)
    Von JensO im Forum Sonstige Steuerungen
    Antworten: 3
    Letzter Beitrag: 27.08.2011, 09:36
  2. split range regler und step 7
    Von WIX im Forum Simatic
    Antworten: 5
    Letzter Beitrag: 15.04.2011, 22:27

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •