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

Ergebnis 1 bis 8 von 8

Thema: Datenbaustein auslesen und in csv schreiben

  1. #1
    Registriert seit
    04.04.2008
    Beiträge
    389
    Danke
    85
    Erhielt 39 Danke für 24 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo,
    ich versuche gerade einen Datenbaustein auszulesen. Das Ganze läuft unter der Testumgebung PLCSim und Runtime für PC(12.
    Im DB1 sind 1000 Integerwerte. Flex scheint das schon erkannt zu haben. In Variablen ist bei Adresse DB1DBW0 und bei Array-Elemente 1000 eingetragen.
    Dann habe ich ein Variablenarchiv angelegt und bei Anzahl der Datensätze pro Archiv den Wert 1000 eingetragen.
    Dann habe ich mir noch eine Schaltfläche ins Bild1 gelegt, mit der ich den Archivierungsvorgang starten will. Dem Ereignis "Klicken" will ich das Lesen des DB1 zuordnen. Das geht aber nicht!?

    Gruß
    Earny
    Zitieren Zitieren Datenbaustein auslesen und in csv schreiben  

  2. #2
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.715
    Danke
    398
    Erhielt 2.398 Danke für 1.998 Beiträge

    Standard

    Das läuft über ein Script. Hier mal ein Beispiel, wie das unter ProTool aussehen würde. Unter Flex sollten die Unterschiede nicht so gravierend sein ...
    Code:
    Dim fs , CSV_Dat , i , Ziel , Datei , Verzeichnis
    Dim Werte_String_1 , Werte_String_2
    Const ForReading = 1, ForWriting = 2, ForAppending = 8
    Verzeichnis = "c:\Mess-Daten\" 
    Datei = "Messung.csv"
    Ziel = Verzeichnis + Datei
     
    Set fs = CreateObject ("Scripting.FileSystemObject")
    ' Ziel-Verzeichnis schon vorhanden ?
    ' ... wenn nein, dann erst erzeugen ...
    If Not fs.FolderExists (Verzeichnis) Then
      fs.CreateFolder (Verzeichnis)
    End If
    ' Ziel-Datei schon vorhanden ?
    ' ... wenn nein, dann erst erzeugen ...
    If Not fs.FileExists (Ziel) Then
      Set CSV_Dat = fs.OpenTextFile(Ziel , ForWriting, true)
      CSV_Dat.WriteLine "Messdaten Anlage xyz"
    Else
      Set CSV_Dat = fs.OpenTextFile(Ziel , ForAppending)
    End If
    ' Werte-Tabelle übernehmen
    Werte_String_1 = "" : Werte_String_2 = "" 
    For i = 1 To 128
      Werte_String_1 = Werte_String_1 + CStr(Kurve_Messwerte_Federkraft (i)) +";"
      Werte_String_2 = Werte_String_2 + CStr(Kurve_Messwerte_Weg (i)) +";"
    Next
    CSV_Dat.WriteLine Werte_String_1 & "0"
    CSV_Dat.WriteLine Werte_String_2 & "0"
    CSV_Dat.Close 
    Vielleicht kannst du damit ja etwas anfangen ...

    Gruß
    LL

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

    Earny (28.07.2008)

  4. #3
    Earny ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    04.04.2008
    Beiträge
    389
    Danke
    85
    Erhielt 39 Danke für 24 Beiträge

    Standard

    Hallo Larry L.,
    vielen Dank für den Skript. Ich denke, ich habe den größten Teil verstanden. Trotzdem bin ich nicht in der Lage, den DB1 auszulesen. Schon im VB-Skript werden die entscheidenden Stellen mit roter Wellenlinie unterstrichen.
    Ich vermute, dass die Werte in der FOR-Schleife eingelesen werden.
    Ich ersetze das "Kurve_Messwerte_Federkraft (i)" durch "Messwerte.Wert (i)". So ist der Name meiner "Variable". Genaugenommen steht "Messwerte" für den DB1 und "Wert" für das DBW0. Mein Datenbaustein hat 1000 Integerwerte also müsste ich die FOR-Schleife von 1 bis 1000 laufen lassen.
    Wie geseagt, es kommt nicht so weit, weil "Messwerte.Wert (i)" bereits eine rote Wellenlinie hat.

    Gruß
    Earny

  5. #4
    Registriert seit
    20.06.2003
    Ort
    Sauerland.NRW.Deutschland
    Beiträge
    4.850
    Danke
    78
    Erhielt 800 Danke für 543 Beiträge

    Standard

    punkte im variablennamen scheint flex irgendwie nicht zu mögen, wenn es ein array ist. hatte letzte woche so ein problem wo das script partou die var nicht lesen wollte.

    versuchen kannst du mal folgendes smarttags("Messwerte.Wert" (i))

    ansonsten nenn die variable um in z.b. Messwerte_Wert (i)
    .
    mfg Volker .......... .. alles wird gut ..

    =>Meine Homepage .. direkt zum Download

    Meine Definition von TIA: Total Inakzeptable Applikation

  6. Folgender Benutzer sagt Danke zu volker für den nützlichen Beitrag:

    Earny (28.07.2008)

  7. #5
    Earny ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    04.04.2008
    Beiträge
    389
    Danke
    85
    Erhielt 39 Danke für 24 Beiträge

    Standard

    Hallo volker,
    hallo Larry L.,
    ich habe den VB-Skript von Larry am Ende etwas abgeändert. Er sieht jetzt so aus:

    Code:
    Dim fs , CSV_Dat , i , Ziel , Datei , Verzeichnis
    Dim Werte_String_1 , Werte_String_2
    Const ForReading = 1, ForWriting = 2, ForAppending = 8
    Verzeichnis = "f:\Mess-Daten\" 
    Datei = "Messung.csv"
    Ziel = Verzeichnis + Datei
     
    Set fs = CreateObject ("Scripting.FileSystemObject")
    ' Ziel-Verzeichnis schon vorhanden ?
    ' ... wenn nein, dann erst erzeugen ...
    If Not fs.FolderExists (Verzeichnis) Then
      fs.CreateFolder (Verzeichnis)
    End If
    ' Ziel-Datei schon vorhanden ?
    ' ... wenn nein, dann erst erzeugen ...
    If Not fs.FileExists (Ziel) Then
      Set CSV_Dat = fs.OpenTextFile(Ziel , ForWriting, True)
      CSV_Dat.WriteLine "Messdaten Anlage xyz"
    Else
      Set CSV_Dat = fs.OpenTextFile(Ziel , ForAppending)
    End If
    For i = 0 To 999
    Werte_String_1 = Messwerte(i)
    CSV_Dat.WriteLine Werte_String_1
    Next
    CSV_Dat.Close
    Es ist sonderbar, gelegentlich werden die 1000 Werte aus dem Datenbaustein übernommen und dann werden wieder nur 1000 Nullen in die csv-Datei geschrieben.
    Nach der Empfehlung von Volker habe ich den Namen der "Variablen" von "Messwert.Wert" geändert in "Messwerte". Damit kommt VBS zurecht. Weshalb aber das Einlesen der 1000 Integerwerte aus dem DB1 nicht zuverlässig funktioniert, ist mir unklar. Es gibt keine Fehlermeldungen, auch nicht zur Laufzeit.
    Vielleicht wird an der falschen Stelle gelesen oder die Verbindung zu PLCSim ist nicht i.O oder der Erfassungszyklus ist zu kurz, oder, oder, oder...

    Gruß
    Earny

  8. #6
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.715
    Danke
    398
    Erhielt 2.398 Danke für 1.998 Beiträge

    Standard

    Hallo Earny,
    ich könnte mir vorstellen, dass deine "1000 Integerwerte" durch die Visu überhaupt nicht "gepollt" werden. Das würdest du auf jeden Fall dadurch erreichen, dass du das ARRAY auf "zyklisch lesen" setzt (Variablen-Parameter). Das hätte allerdings zur Folge, dass dein Datenaustausch mit der Visu ständig durch die 1000 INT-Werte belastet wird. In meinen Programmen sind es i.d.R. Kurvenwerte, die ich auf diese Weise speichere. Kurven-Aktualisierungen kannst du durch die entsprechenden Kurvenbits erzwingen (geht bei Flex genau wie bei ProTool). Bei Kurven ist allerdings die Grenze des ARRAY's auf 900 Werte begrenzt. Ich würde aber grundsätzlich auch versuchen, in den Bereich von weit kleineren Zahlen zu kommen (100 bis 300 z.B.).
    Vielleicht habe ich dir eine weitere Anregung geliefert ...

    Gruß
    LL

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

    Earny (30.07.2008)

  10. #7
    Earny ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    04.04.2008
    Beiträge
    389
    Danke
    85
    Erhielt 39 Danke für 24 Beiträge

    Standard

    Hallo Larry L.,
    ich komme leider nicht mehr dazu, Deinen Vorschlag auszutesten.
    Irgendwie hat sich da was ausgerenkt.
    Es ist nicht möglich, die Variable "Messwerte", die aus einem Array mit 1000 Integerwerten besteht, in Flex einem Variablenarchiv zuzuordnen.
    Wenn ich nur einen einzelnen Wert aus dem DB1, also z.B. den DB1.DBW0 als Variable festlege, dann kann ein vorhandenes Variablenarchiv für die Variable ausgewählt werden. Wenn ich aber Flex soweit bringe, dass es das ganze Array im DB1 erkennt, dann kann ich kein Variablenarchiv mehr auswählen. Beim Punkt "Variablenarchiv" steht dann nur noch <undefiniert> ausgegegraut.

    Gruß
    Earny

  11. #8
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.715
    Danke
    398
    Erhielt 2.398 Danke für 1.998 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    ... wenn ich das von einem vergangenen Thread richtig in Erinnerung habe, dann musst du als Variable das erste Element des Array's nehmen und dann bei "Anzahl Elemente" dann die 1000 eingeben (wobei ich der nach wie vor der Meinung bin, dass du mit 1000 Werten Stress bekommst). Das kannst du dann auch im Script indexieren.
    Leider () bin ich nicht der Flex-Man, aber so wie beschrieben deckt es sich auch am Ehesten mit ProTool (das ich eigentlich gut kenne).

    Gruß
    LL

Ähnliche Themen

  1. Bitnummer aus Datenbaustein schreiben
    Von amigo del sol im Forum HMI
    Antworten: 5
    Letzter Beitrag: 16.08.2011, 09:25
  2. Wert in Datenbaustein schreiben
    Von Papa_Bene im Forum Simatic
    Antworten: 3
    Letzter Beitrag: 22.02.2011, 12:08
  3. Indirekt in Datenbaustein schreiben
    Von Gina_Jin im Forum Simatic
    Antworten: 41
    Letzter Beitrag: 10.02.2011, 17:48
  4. CSV-Daten in Datenbaustein schreiben?
    Von Poldi007 im Forum Simatic
    Antworten: 9
    Letzter Beitrag: 29.03.2010, 02:31
  5. String in Datenbaustein schreiben (S7)
    Von erwin36 im Forum Simatic
    Antworten: 4
    Letzter Beitrag: 30.11.2009, 16:53

Lesezeichen

Berechtigungen

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