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

Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 12

Thema: vbs: variabel auf ein mehrdimensionales zugreifen

  1. #1
    Registriert seit
    14.01.2013
    Beiträge
    45
    Danke
    8
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo Forum
    verwendete Komponenten:
    CPU1512P F-1 PN
    Comfort Panel 1500
    in der Steuerung habe ich ein mehrdimensionales Feld angelegt und auch beschrieben.
    Messwerte Array[1..40, 1..30] of DInt [1..40 Messpunkte , 1..30 Messungen]


    nun muss ich die Werte per VB Script in eine csv Datei schreiben. Funzt grundsätzlich aber der Teil mit den Messwerten halt noch nicht so wie gewünscht:

    Code:
    For ii = 1 To SmartTags("DB_general_MIF_counter") 
        fo.LinePrint("Messung" & ii & delimiter _
                & SmartTags("DB_Mess_MIF_Messwerte{2,"&ii&"}") & delimiter _
                & SmartTags("DB_Mess_MIF_Messwerte{3,"&ii&"}") & delimiter _
                & SmartTags("DB_Mess_MIF_Messwerte{4,"&ii&"}") & delimiter _
                & SmartTags("DB_Mess_MIF_Messwerte{5,"&ii&"}") & delimiter _
                & SmartTags("DB_Mess_MIF_Messwerte{9,"&ii&"}") & delimiter _
                & SmartTags("DB_Mess_MIF_Messwerte{10,"&ii&"}") & delimiter _
                & SmartTags("DB_Mess_MIF_Messwerte{21,"&ii&"}") & delimiter _
                & SmartTags("DB_Mess_MIF_Messwerte{22,"&ii&"}") & delimiter _
                & SmartTags("DB_Mess_MIF_Messwerte{23,"&ii&"}") & delimiter _
                & SmartTags("DB_Mess_MIF_Messwerte{24,"&ii&"}") & delimiter _
                & SmartTags("DB_Mess_MIF_Messwerte{27,"&ii&"}") & delimiter _
                & SmartTags("DB_Mess_MIF_Messwerte{28,"&ii&"}") & delimiter _
                & SmartTags("DB_Mess_MIF_Messwerte{32,"&ii&"}") & delimiter _
                & SmartTags("DB_Mess_MIF_Messwerte{33,"&ii&"}") & delimiter _
                & SmartTags("DB_Mess_MIF_Messwerte{35,"&ii&"}") & delimiter _
                & SmartTags("DB_Mess_MIF_Messwerte{36,"&ii&"}") & delimiter _
                & SmartTags("DB_Mess_MIF_Messwerte{37,"&ii&"}") & delimiter)
    Next
    es stehen leider überall nur "0" drin
    vom Grundsatz funzt folgende Adressierung, ist aber nicht variabel:


    Code:
    & SmartTags("DB_Mess_MIF_Messwerte{1,1}") & delimiter _
    hat jemand eine Idee für die Syntax ?



    mfg themenstarter
    Zitieren Zitieren vbs: variabel auf ein mehrdimensionales zugreifen  

  2. #2
    Registriert seit
    25.09.2013
    Beiträge
    260
    Danke
    10
    Erhielt 35 Danke für 34 Beiträge

    Standard

    Hallo,

    & SmartTags("DB_Mess_MIF_Messwerte{2,"&ii&"}") & delimiter _

    wenn du das so schreibst fügst du an die stelle einen Text.

    & SmartTags("DB_Mess_MIF_Messwerte{2,ii}") & delimiter _

    ii ist ja eine variable die du direkt einträgst dann sollte es gehen.


    Gruß

    Jens

  3. #3
    Registriert seit
    14.01.2013
    Beiträge
    45
    Danke
    8
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Hört sich für mich logisch an, allerdings ist die Syntaxprüfung anderer Meinung:

    ,Es wurde kein Objekt HMI_Variable mit dem Namen 'DB_Mess_MIF_Messwerte{23,ii}' gefunden in Zeile 190, Spalte 16,,,12:34:07
    das für jede verwendete Variable


    Ich habe bei HMI Variablen das ganze Feld per drag and drop eingefügt. Es sind alle Variablen einzelnd hinzu gefügt worden.
    Also : {1,1} {1,2} usw da sollte es auch keine Probleme geben.

    Ratlosigkeit macht sich breit.

  4. #4
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.317
    Danke
    932
    Erhielt 3.331 Danke für 2.689 Beiträge

    Standard

    Zitat Zitat von themenstarter234 Beitrag anzeigen
    Ich habe bei HMI Variablen das ganze Feld per drag and drop eingefügt. Es sind alle Variablen einzelnd hinzu gefügt worden.
    Also : {1,1} {1,2} usw da sollte es auch keine Probleme geben.
    Da wird es ganz sicher Probleme geben...

    Das Feld was in der PLC als Array mit 1200 DINT deklariert wurde hast Du nun als 1200 einzelne Variablen im HMI. In Deinem Skript versuchst Du die Namen der Variablen zusammenzubasteln, deshalb weiß die WinCC-Runtime höchstwahrscheinlich nichts von der Verwendung der Variablen und liest die erst NACH dem Zugriff im Skript aus der CPU. Im Skript werden alte Werte bzw. nie gelesene Werte verwendet.

    Falls Du tatsächlich lieber mit einem Array arbeiten willst, dann wirf mal einen Blick in das TIA WINCC V13 Handbuch "Prozesse visualisieren / Arbeiten mit Arrays"
    Da wird dokumentiert:
    • Arrays welche in WinCC benutzt werden, dürfen nur 1 Dimension haben
    • der untere Index muß mit 0 beginnen
    • auf Array-Elemente greift man in VBS mit der Syntax " SmartTags("Arrayname")(index) " zu, z.B. SmartTags("DB_Mess_MIF_Messwerte")(2)
    • Bei einem Zugriff auf ein Array-Element wird immer das komplette Array gelesen oder geschrieben. Kommunikationsüberlastung droht. Abhilfe: das komplette Array am Anfang des Skriptes in ein Skript-lokales Array einlesen.


    Schau dir mal folgende Themen an:
    WinCC flexible Skript Daten archivieren: Aktualisierungszeit der Variablen
    Prozessdaten einer CPU 317 auf Speicherkarte eines TP277 6'' speichern
    Benutze mal die Forums-Hilfe mit den Stichworten "vbs csv" und "vbs array"

    Mache Dir mal eine Meldeanzeige für Systemmeldungen in ein Bild, damit Du die Runtime-Errors des Skriptes siehst.

    Harald
    Es ist immer wieder überraschend, wie etwas plötzlich funktioniert, sobald man alles richtig macht.

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

  5. #5
    Registriert seit
    07.05.2015
    Beiträge
    8
    Danke
    2
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Hallo

    Ich habe letztens auch mal versucht eine Struktur, die ich aus der PLC übernommen habe (1512SP), auf diese Art zu adressieren, mir hat TIA gesagt das ich keine Strukturen mit Variablen Index adressieren kann. Vielleicht ist das eher das Problem.

    Versuch doch eher deine 30 Messwerte als Array anzulegen und den Startpunkt deines Arrays im Script zu verschieben und anschließend die Werte in eine CSV zu schreiben, wenn mich nicht alles täuscht werden die Werte nach der Ausführung aktualisiert. Dazu müsstest du aber deinen Array Aufbau ändern. der letzte Array Bereich liegt immer hinter einander, also müsstest du den Array [1..30, 1..40] haben. Ich weiß nur nicht ob das bei dir Realisierbar ist.

    Mir fällt gerade auf das in deinem Script die Arrays anders angesprochen werden als es bei mir bisher Funktioniert hat, bei nimmt TIA nur "SmartTags("PLC_Mux_Real")(0)" als Array Index an.

    Gruß Neon

  6. #6
    Registriert seit
    14.01.2013
    Beiträge
    45
    Danke
    8
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Na super

    dann kann ich mal alles ändern, ich werde dann nach jeder Messung die aktuellen Werte in die csv schreiben (eindimensionales Feld) diese müssen dann zyklisch gelesen werden.
    Das array werde ich dann trotzdem in eine interne variable am Anfang schreiben.

    Ich werde berichten wenn es fertig ist.

    Danke schonmal

  7. #7
    Registriert seit
    25.09.2013
    Beiträge
    260
    Danke
    10
    Erhielt 35 Danke für 34 Beiträge

    Standard

    nicht nötig kannst doch die 40 Messerte 30 mal hintereinander in einen DB packen als 1200 Werte im DB.
    Du weißt die Schrittweite pro Messwert und die pro Messung damit lässt sich immer die absolute Adresse im DB berechnen.

    Gruß

    Jens

  8. #8
    Registriert seit
    14.01.2013
    Beiträge
    45
    Danke
    8
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Ja aber ich muss auch 1200 Varablen im HMI aktualisieren lassen. Die kann ich ja schlecht auch zyklisch stellen.

    Ich werde das Feld in dem DB so lassen, ist alles fertig.Auch die abschließende Auswertung.
    Aber das schreiben in die csv für die aktuellen Werte mache ich dann halt nach jeder Messung mit einem eindimensionalen array.
    Das geht auch ist aber mehr Arbeit, ich hatte das ganze schon offline ohne Fehler in der Syntaxüberprüfung fertig und habe heute morgen an der Anlage gemerkt das es so nicht geht. Das ist nur ärgerlich.

    ....

  9. #9
    Registriert seit
    25.09.2013
    Beiträge
    260
    Danke
    10
    Erhielt 35 Danke für 34 Beiträge

    Standard

    Nein im HMI brauchst du nur eine.

    Schau mal hier leg die erste Variable aus dem DB an und änder den wert Adresse in dynamisch dann kannst du durch deinen ganzen DB springen.

    Adresse.png


    Gruß

    Jens

  10. #10
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.794
    Danke
    398
    Erhielt 2.417 Danke für 2.013 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Du kannst trotz Allem mit deinem 2D-Array weiter arbeiten. Du mußt halt nur den Index dann selber berechnen. Dein 2D-Array wird ja von der Visu "geschluckt" - es kann allerdings nur 1D verarbeitet werden. Schau dir dazu einfach mal die Datensicht des DB's in der SPS an - ich kann es gerade schlecht beschreiben.
    Du bekommst dann die Elemente des Array's 30,40 so gelesen :
    meinArray[1,1] entspricht FlexArray[0]
    meinArray[1,40] entspricht FlexArray[39]
    meinArray[2,1] entspricht FlexArray[40]
    meinArray[2,40] entspricht FlexArray[79]
    usw.

    Gruß
    Larry

Ähnliche Themen

  1. Auf ein bestimmtes Element in einem Array zugreifen
    Von Erema im Forum Sonstige Steuerungen
    Antworten: 0
    Letzter Beitrag: 05.05.2015, 09:04
  2. S7-313C mit CP 342-5 auf ein Murrinsel zugreifen
    Von AlexanderEms im Forum Simatic
    Antworten: 8
    Letzter Beitrag: 17.05.2012, 10:29
  3. Antworten: 2
    Letzter Beitrag: 13.10.2010, 11:11
  4. Ein/Aus-gangsparameter eines FB variabel gestalten
    Von MatthiasH24 im Forum Simatic
    Antworten: 11
    Letzter Beitrag: 20.01.2009, 15:11
  5. Wie kann man auf ein MP zugreifen.....
    Von Frustrated im Forum HMI
    Antworten: 2
    Letzter Beitrag: 19.12.2006, 14:24

Lesezeichen

Berechtigungen

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