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

Seite 4 von 6 ErsteErste ... 23456 LetzteLetzte
Ergebnis 31 bis 40 von 51

Thema: WinCC flexible: Indirekte Adressierung innerhlab eines Skriptes / Schleife

  1. #31
    Registriert seit
    27.10.2005
    Ort
    Schwäbisch Gmünd
    Beiträge
    5.224
    Danke
    630
    Erhielt 955 Danke für 769 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Das hätte ich nicht gedacht. Ist eigentlich traurig .
    Rainer Hönle
    DELTA LOGIC GmbH

    Ein Computer kann das menschliche Gehirn nicht ersetzen. Engstirnigkeit kann unmöglich simuliert werden. (Gerd W. Heyse)

  2. #32
    Avatar von Markus
    Markus ist offline Administrator
    Themenstarter
    Registriert seit
    16.06.2003
    Ort
    88356 Ostrach
    Beiträge
    4.811
    Danke
    1.231
    Erhielt 1.101 Danke für 527 Beiträge

    Standard

    wie groß ist so ein block denn bei wincc flexible 2008 auf nem mp377 und ner 319er drunter über profnet bzw. tcp/ip?
    "Es ist weit besser, große Dinge zu wagen, ruhmreiche Triumphe zu erringen, auch wenn es manchmal bedeutet, Niederlagen einzustecken, als sich zu den Krämerseelen zu gesellen, die weder große Freude noch großen Schmerz empfinden, weil sie im grauen Zwielicht leben, das weder Sieg noch Niederlage kennt." Theodore Roosevelt - President of the United States (1901-1909)

  3. #33
    Registriert seit
    27.10.2005
    Ort
    Schwäbisch Gmünd
    Beiträge
    5.224
    Danke
    630
    Erhielt 955 Danke für 769 Beiträge

    Standard

    Zitat Zitat von Markus Beitrag anzeigen
    wie groß ist so ein block denn bei wincc flexible 2008 auf nem mp377 und ner 319er drunter über profnet bzw. tcp/ip?
    Die 319er hat eine Blockgröße von 240 Bytes. Der Maximalblock liegt somit bei 222 Bytes.
    Rainer Hönle
    DELTA LOGIC GmbH

    Ein Computer kann das menschliche Gehirn nicht ersetzen. Engstirnigkeit kann unmöglich simuliert werden. (Gerd W. Heyse)

  4. #34
    Registriert seit
    13.07.2011
    Beiträge
    10
    Danke
    6
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Hallo zusammen!

    Ich schlage mich schon eine ganze Weile mit dem nachstehenden Code herum. Da ich eher VB-Neuling habe ich als Vorlage ein Skript zur Erstellung von Archivdateien von Siemens genommen. Ziel ist es eine grosse Anzahl Variablen (Druckwerte, Messpunkte) zu speichern. Da die Anzahl einfach änderbar sein soll wollte ich das ganze mit einer For Schleife organisieren.
    Nun wollte ich die Variable aus dem Namen der Variable (Drucksammlung1.Druck) und dem Index zusammen zusammensetzen um daraus nachher die entsprechende Ausgabe generieren zu können. Die Variable wird korrekt zusammengesetzt (wird mit CStr(Druckzwischenspeicher1) ausgegeben), nur mit welchem Befehl, kann ich mit der in Druckzwischenspeicher1 gespeichten Variablen den Wert ausgeben? Eigentlich müsste es ja der SmartTags Befehl sein, aber wie krieg ich da die Skriptvariable rein das die nachher die Variable von WinCC ausgibt?


    Code:
    Dim fso, f, ts, DataSet, Header, FName, Druckzwischenspeicher1, Druckzischenspeicher2, i
    
    ' Archivierungspfad (Eingangsparameter) und Dateiname zusammensetzen 
    ' Combine archivepath (input parameter) an filename
    FName = StoragePath & "\" & CStr(SmartTags("Auftragsnummer")) & "_" & CStr(DatePart("d",Date)) & CStr(DatePart("m",Date)) & "_" & CStr(DatePart("yyyy",Date)) & ".csv"
    
    ' Tabellenkopf zusammenstellen (Spalten Tag_10; Tag_11 usw.)
    ' Create table header (Column for Tag_10; Tag_11 and so on)
     Header = "Storage Time;Anlagenbediener;Auftragnummer;Artikelnummer;Artikelbezeichnung;Losgrösse;Druck0;Druck1" & Chr(10)'Char (10) entspricht Zeilenvorschub
    
    ' FileSystemObject erstellen
    ' Create FileSystemObject
    Set fso = CreateObject("Scripting.FileSystemObject")
    
    
    ' Wenn Datei noch nicht vorhanden ist, dann wird eine Datei erzeugt
    ' if the file does not exist, then create a file
    If Not fso.FileExists(FName) Then   
    
       fso.CreateTextFile FName              
       Set f = fso.GetFile(FName)         
    ' Datei dem Skript als Objekt zur Verfügung stellen
    ' File as Object available for script
    
       Set ts = f.OpenAsTextStream(8, -2)
    ' Datei öffnen
    ' open file
    
       ts.WriteLine(FName)                 
       ts.WriteLine(Header)                 
       ts.Close
    ' Pfad- & Dateiname und Tabellenkopf in die Datei schreiben
    ' write path- & filename and table header into file
    ' Datei schließen
    ' close file
    
    End If 
    
     Set f = fso.GetFile(FName)            
    ' Die Archivdatei dem Skript als Objekt zur verfügung stellen 
    ' Archive file as object available for script
    
     Set ts = f.OpenAsTextStream(8, -2) 
    ' Die Datei öffnen 
    ' Open file
    
    ' Werte der Variablen in die Archivdatei schreiben
    ' Write values of variables in archive file
     
    ts.Write(CStr(Now) & ";" & CStr(SmartTags("Anlagenbediener_Name")) & ";" & CStr(SmartTags("Auftragsnummer"))& ";" & CStr(SmartTags("Artikelnummer")) & ";" & CStr(SmartTags("Artikelbezeichnung"))& ";" & CStr(SmartTags("Losgroesse"))& ";" & CStr(SmartTags("Drucksammlung1.Druck0")))
    
    
    For i=0 To 20 Step +1
         Druckzwischenspeicher1="Drucksammlung1.Druck"&CStr(i)
         ts.Write(";" & CStr(Druckzwischenspeicher1))
         
    
        
    Next
    ts.WriteLine()
    
    ' Datei wieder schließen
    ' Close file
     ts.Close
    
    ' Verwendeten Speicher wieder freigeben
    ' Used storage will be freed
    Set ts  = Nothing
    Set f   = Nothing
    Set fso = Nothing
    Zitieren Zitieren Schleife für das erstellen von Variablen  

  5. #35
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.726
    Danke
    398
    Erhielt 2.401 Danke für 2.001 Beiträge

    Standard

    Hallo,
    ich bin mir jetzt nicht 100% sicher, ob ich die Frage korrekt verstanden habe ... mein Vorschlag wäre aber :
    Code:
    ts.Write(";" & SmartTags(Druckzwischenspeicher1))
    Gruß
    Larry

  6. #36
    Registriert seit
    13.07.2011
    Beiträge
    10
    Danke
    6
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Danke für Deine Antwort.
    In die Richtung hätte ich auch tendiert, wenn ich es mit dem Befehl mache gibt er mir einfach 20 mal 0 zurück, was nicht den Variablen entspricht. Irgendwie habe ich die Vermutung das es an den Anführungszeichen liegt.
    Normalerweise sieht ja der Aufruf einer WinCC Variable so aus (SmartTags("Drucksammlung1.Druck0") [die Zahl null wollte ich eigentlich mit der Schleife hochzählen und so die Variablen ausgeben], wenn ich nun aber meine Variable zusammensetze mit Druckzwischenspeicher1="Drucksammlung1.Druck"&CStr(i) dann habe ich ja beim einfügen mit (SmartTags(Druckzwischenspeicher1)) die Anführungszeichen nicht mehr drinn. Wenn ich den obigen Aufruf mit einer direkten (nicht zusammengesetzten) Variable ohne Anführungszeichen realisiere[(SmartTags(Drucksammlung1.Druck0)], dann gibt mir der Compiler einen Fehler aus...
    Ich hoffe ich habs einigermassen verständlich erkärt
    Zitieren Zitieren Schleife für das erstellen von Variablen  

  7. #37
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.726
    Danke
    398
    Erhielt 2.401 Danke für 2.001 Beiträge

    Standard

    Hallo,
    du mußt bei dem CStr(i) beachten, dass der als String sehr wahrscheinlich ein " 1" und nicht "1" wenn i=1 zurückgibt. Es wird vor der eigentlichen zahl möglicherweise ein Leerzeichen mit eingefügt. Hast du das mal kontrolliert ?

    Es gibt aber außerdem noch etwas hier zu beachten :
    Innerhalb des Flex-Projektes muss noch unter "Geräte-Einstellungen\Geräte-Einstellungen" und dort in der Rubrik "Einstellungen für Runtime" die Funktion "Namensinformation freigeben" aktiviert sein. das könntest du noch checken ...

    Gruß
    Larry

  8. Folgender Benutzer sagt Danke zu Larry Laffer für den nützlichen Beitrag:

    Redi (18.07.2011)

  9. #38
    Registriert seit
    13.07.2011
    Beiträge
    10
    Danke
    6
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Hallo Larry
    die Einstellung habe ich kontrolliert. Auch habe ich schon verschiedene Sachen ausprobiert.
    u.a.:
    Code:
    ts.WriteLine(CStr(Now) & ";" & CStr(SmartTags("Anlagenbediener_Name")) & ";" & CStr(SmartTags("Auftragsnummer"))& ";" & CStr(SmartTags("Artikelnummer")) & ";" & CStr(SmartTags("Artikelbezeichnung"))& ";" & CStr(SmartTags("Losgroesse"))& ";" & CStr(SmartTags("Drucksammlung1.Druck0")& ";" & CStr(SmartTags("Drucksammlung1.Druck1"))))
    
    
    
    For i=0 To 20 Step +1
         Druckzwischenspeicher1="Drucksammlung1.Druck"&CStr(i)
         ts.WriteLine(SmartTags(("Drucksammlung1.Druck5")))
         ts.WriteLine(SmartTags(Druckzwischenspeicher1))
         ts.WriteLine(CStr(Druckzwischenspeicher1))
    Zum einen habe ich beim ersten Teil (ohne Schleife) zwei Variablen fest reingeschrieben. In die Schleife habe ich eine Feste Variable, danach den Ausdruck der das machen sollte was ich eigentlich will und danach der mir den Zwischenspeicher einfach als String ausgibt. Wenn ich das Textfile anschaue (siehe Anhang), dann führt er die Zeile vor der Schleife Problemlos aus. Die Fixe Variable in der Schleife und die Ausgabe des Zwischenspeichers funktioniert auch Problemlos. Bei den änderdenden Variablen gibt er die ersten zwei (Druck0 und Druck1) die auch schon oben definiert sind den Wert richtig aus, bei den restlichen aber 0. Kannst Du Dir darauf einen Reim machen?

    Gruss
    Dani
    Angehängte Dateien Angehängte Dateien
    Zitieren Zitieren Schleife für das erstellen von Variablen  

  10. #39
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.190
    Danke
    923
    Erhielt 3.292 Danke für 2.661 Beiträge

    Standard

    Hallo Dani,

    an der Ausgabedatei kann man sehen, daß Dein Script richtig funktioniert. Es wird lediglich bei allen Variablen außer Druck0, Druck1 und Druck5 0 als Wert ausgegeben.

    Stehen alle Deine Druckx-Variablen auf zyklisch lesen?
    Sind die Druckx-Variablen eventuell Variablen aus einer Rezeptur?
    Ich würde folgendes probieren: für alle Druckx-Variablen ein Ausgabefeld in ein Bild machen und das Script aus diesem Bild aufrufen.

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

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

  11. Folgender Benutzer sagt Danke zu PN/DP für den nützlichen Beitrag:

    Redi (18.07.2011)

  12. #40
    Registriert seit
    13.07.2011
    Beiträge
    10
    Danke
    6
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo Harald

    Heureka
    zyklisch lesen war das Stichwort. Ich hatte den Erfassungszyklus in der Tabelle auf 100ms eingestellt und ging davon aus das dies Ausreichend ist, vorallem da ja die Variablen die ich fest im Skript eingetragen habe, auch geloggt wurden. Aber wieder was gelernt... wollte schon fast aufgeben und das ganze von Hand eintragen.

    Vielen Dank an Euch beide.

    Gruss
    Daniel

Ähnliche Themen

  1. WinCC - indirekte Adressierung
    Von georg_demmler im Forum HMI
    Antworten: 3
    Letzter Beitrag: 17.04.2011, 10:11
  2. Indirekte Adressierung
    Von Rainer im Forum Simatic
    Antworten: 12
    Letzter Beitrag: 21.05.2008, 15:07
  3. Antworten: 29
    Letzter Beitrag: 11.06.2007, 22:21
  4. Indirekte Adressierung eines Pointers
    Von merlin im Forum Simatic
    Antworten: 2
    Letzter Beitrag: 12.04.2007, 13:30
  5. indirekte Adressierung eines Datenbausteins
    Von linax im Forum Simatic
    Antworten: 1
    Letzter Beitrag: 20.11.2003, 17:12

Lesezeichen

Berechtigungen

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