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

Page 1 of 5 123 ... LastLast
Results 1 to 10 of 45

Thread: Excel Tabelle als CSV einlesen und verarbeiten

  1. #1
    Join Date
    29.11.2016
    Location
    Wolfsburg
    Posts
    190
    Danke
    15
    Erhielt 10 Danke für 8 Beiträge

    Default


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo Leute,

    ich sitze aktuell an einem etwas größeren Problem.

    Folgende Hardware/Software ist aktuell vorhanden:
    - CPU 1500 (noch nicht näher spezifiziert)
    - Panel (noch offen evtl. PC-System mit Runtime)

    - TIA Portal S7 Professional V14
    - WinCC Basic (vermute ohne Advanced wird es nix)

    Nun das Problem:

    Ich muss eine CSV Datei per VISU einlesen. Diese CSV Datei beinhaltet 13 Spalten mit unterschiedlichen Datentypen (Bool, Int, Real). Des weiteren besteht die Datei aus insgesamt bis zu 50000 (fünfzigtausend) Zeilen.
    Das alles soll mit WinCC eingelesen werden und muss dann in einem DB gespeichert werden.

    Ich bin aktuell zumindest schonmal soweit dass ich mir eine UDT mit der Struktur aufgebaut habe und einen DB mit Array [0..50000] of UDT aufgebaut habe. Das scheint soweit schonmal zu funktionieren (wenn die CPU potent genug ist)

    Jetzt steh ich allerdings vor der Frage, wie das Ganze einlesen? Ich habs mit der Rezepturverwaltung ausprobiert, mit der kann ich aber scheinbar keine Dateien öffnen. Scripte stehen in der WinCC Basic auch nicht zu Verfügung.

    Hat da jemand ne Idee oder funktioniert das nur per VBSkripts?

    MFG Azrael
    Reply With Quote Reply With Quote Excel Tabelle als CSV einlesen und verarbeiten  

  2. Folgende 2 Benutzer sagen Danke zu Azrael666 für den nützlichen Beitrag:

    Klein1958 (17.07.2017),Trainer06 (08.03.2017)

  3. #2
    Join Date
    22.06.2009
    Location
    Sassnitz
    Posts
    14,039
    Danke
    1,140
    Erhielt 4,141 Danke für 3,344 Beiträge

    Default

    Theoretisch kann die Aufgabe mit der Rezepturverwaltung gelöst werden, falls eine Rezeptur-Datei 50000 Datensätze enthalten kann und die csv-Datei exakt das von der Rezepturverwaltung erwartete Format hat. Ich weiß aber nicht, ob man das nacheinander einlesen von 50000 Datensätzen ohne VBS automatisieren kann. Ich glaub' da nicht dran.

    Vernünftig geht es wohl nur per VBSkript, wobei da noch sein kann, daß das Panel sehr lange für brauchen wird. Zweitens besteht da noch das Problem, die Datenwerte sicher in die CPU zu bekommen, was im Prinzip nur als Rezeptur geht (Systemfunktion SetDataRecordTagsToPLC) und Mithilfe des SPS-Programms erfordert (Handshake für Übertragung einzelner UDT und kopieren an den richtigen Platz im DB-Array), damit die Rezeptur nur die Größe des UDT haben muß.

    Alternative: die Daten von einem PC in die SPS schreiben geht schneller als per WinCC Runtime. Dazu braucht man eine S7-Kommunikationsbibliothek (Libnodave, Snap7, oder ACCON AG-Link oder ...) oder ein fertiges Tool. Eine direkte TCP-Verbindung zwischen der CPU 1500 und einem PC wäre auch noch möglich.

    Harald
    Tipp: Freitag 18.10.2019 ab 19:00 Uhr 12. SPS-Forum Regional-Stammtisch NRW im RunkelKrug in Bielefeld

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

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

  4. #3
    Join Date
    22.03.2007
    Location
    Detmold (im Lipperland)
    Posts
    12,262
    Danke
    411
    Erhielt 2,515 Danke für 2,093 Beiträge

    Default

    Quote Originally Posted by Azrael666 View Post
    - WinCC Basic (vermute ohne Advanced wird es nix)
    Damit könntest du auf alle Fälle schon mal anfangen.

    Hinsichtlich der Datenübergabe an die SPS teile ich die schon von Harald angeführten Bedenken im vollen Umfang.

    Ich muss aber trotzdem mal fragen :
    - wozu sollen die 50.000 Datensätze alle auf ein Mal in die SPS ?
    - was sagen diese Daten aus ?

    Gruß
    Larry

  5. #4
    Join Date
    22.06.2009
    Location
    Sassnitz
    Posts
    14,039
    Danke
    1,140
    Erhielt 4,141 Danke für 3,344 Beiträge

    Default

    Wie Larry frage ich mich auch: wozu sollen die 50.000 Datensätze auf einmal in die SPS? Und wie schnell/häufig soll die SPS in den Datensätzen etwas finden?

    zur Übertragung der Datensätze mit einer WinCC Runtime:
    optimistisch gesehen wird man nicht mehr als 5 Handshakes pro Sekunde zwischen SPS und WinCC Runtime hinbekommen (niedrigste Variablen-Aktualisierungsrate 100ms) ---> bei nur 1 Datensatz pro Handshake übertragen dauert das knapp 3 Stunden ---> bei 200 Datensätzen pro Handshake übertragen dauert das ca. 3,5 Minuten : ich würde es nur im äußersten Notfall mit einer WinCC Runtime machen, ich würde ein PC-Tool schreiben.

    Harald
    Tipp: Freitag 18.10.2019 ab 19:00 Uhr 12. SPS-Forum Regional-Stammtisch NRW im RunkelKrug in Bielefeld

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

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

  6. #5
    Azrael666 is offline Erfahrener Benutzer
    Themenstarter
    Join Date
    29.11.2016
    Location
    Wolfsburg
    Posts
    190
    Danke
    15
    Erhielt 10 Danke für 8 Beiträge

    Default

    In der CSV-Datei bzw in den einzelnen Zeilen stehen Variablenzustände. Im Grunde genommen stellt die CSV-Datei eine "Ablaufsteuerung" dar. Die Daten der Datei sollen später in der SPS Zeile für Zeile abgearbeitet werden, wobei jede Zeile den Zustand für bestimmte Ventile sowie die Zeit beinhaltet, die der Schritt dauern soll (die Schritte sind in der Regel < 0,5sec). Deswegen hätte ich auch gerne den kompletten Datensatz in der SPS.

    PS: Die Datei kann 50000 Zeilen enthalten, muss aber nicht. Die Anforderung an das Programm sind eben Bedienung über VISU und dass die Datei 0 - 50000 Zeilen enthalten soll. Die CSV-Datei wird vermutlich später auch zum Einlesen auf dem Panel/PC liegen.

  7. #6
    Join Date
    22.03.2007
    Location
    Detmold (im Lipperland)
    Posts
    12,262
    Danke
    411
    Erhielt 2,515 Danke für 2,093 Beiträge

    Default

    ... dann sehe ich eigentlich nur das als Ansatz :

    Quote Originally Posted by PN/DP View Post
    Alternative: die Daten von einem PC in die SPS schreiben geht schneller als per WinCC Runtime. Dazu braucht man eine S7-Kommunikationsbibliothek (Libnodave, Snap7, oder ACCON AG-Link oder ...) oder ein fertiges Tool. Eine direkte TCP-Verbindung zwischen der CPU 1500 und einem PC wäre auch noch möglich.
    Bei alles Anderem wirst du nicht die Konsistens (also die Zusammengehörigkeit) der Daten und sicher den Zeitpunkt, wann alles in der SPS ist, sicherstellen können ...

    Gruß
    Larry

  8. #7
    Azrael666 is offline Erfahrener Benutzer
    Themenstarter
    Join Date
    29.11.2016
    Location
    Wolfsburg
    Posts
    190
    Danke
    15
    Erhielt 10 Danke für 8 Beiträge

    Default

    Wenn ich es richtig verstehe, dann kann ich die Alternative per TCP-Verbindung bzw. S7-Kommunikationsbibliothek nicht von der Visu aus bedienen oder?

    Irgendwie fehlt mir aktuell so ein bisschen die Fantasie, wie ich das ganze angehen kann. Irgendwie brauch ich ja ne Eingabemaske mit der ich die Datei auswählen kann und dann müsste das ganze in einen DB rübergeschaufelt werden.
    Alles was sich so in den Weiten des WWW findet und auch nur ansatzweise damit zu tun hat, basiert immer auf einem VBScript.

    PS: aso ganz vergessen zu erwähnen, erlaubt sind mir nur Bausteine aus der Siemens Standard Bibliothek zu verwenden!
    Last edited by Azrael666; 06.03.2017 at 14:58.

  9. #8
    Join Date
    22.03.2007
    Location
    Detmold (im Lipperland)
    Posts
    12,262
    Danke
    411
    Erhielt 2,515 Danke für 2,093 Beiträge

    Default

    Tja ... dazu fällt mir nichts mehr ein ...
    Wenn dein Datenblock WESENTLICH kleine wäre dann würde man da mit Scripten etc. etwas machen können - so aber nicht.
    Du kannst das m.E. nur über eine selbstgeschriebene Applikation (also ein EXE-File) lösen, die die Daten dann, wie vorgewählt, in die SPS überträgt.

    Vielleicht solltest du dazu noch einmal mit deinem Kunden oder deinem Chef (oder beiden) sprechen ...

    Gruß
    Larry

  10. #9
    Join Date
    03.04.2008
    Posts
    6,230
    Danke
    238
    Erhielt 824 Danke für 697 Beiträge

    Default

    Also ich verstehe es nicht.
    Mußt du jetzt die erwähnten 50 000 Datensätze immer übertragen oder brauchst du nur die Voraussetzung soviele Daten zu handln?
    Wenn du die Daten immer komplett übertragen musst, dann würde ich die Daten in einen temporeren Datenbereich übertragen. In der *.csv eine Checksumme erzeugen und diese in der PLC abgleichen. Wenn die Summe stimmt, dann in den ArbeitsDB rumkopieren. Jeden Datensatz mit Handshake, so lange lebt keine CPU.

    Wie groß ist ein Datensatz? Macht es nicht ggF Sinn den Datensatz auf mehrere Datenbausteine zu verteilen, so dass du mit einem Pointer darauf zugreifen kannst?
    Auch musst du dir Gedanken machen, wie du diese Masse an Daten konsistent und aktuell hälst und sicherst.

    Zunächst brauchst du noch keinen Baustein der PLC, sondern ein Konzept wie du die Daten organisieren willst.


    bike
    "Any fool can write code that a computer can understand.
    Good programmers write code that humans can understand."
    --Martin Fowler

  11. #10
    Join Date
    22.06.2009
    Location
    Sassnitz
    Posts
    14,039
    Danke
    1,140
    Erhielt 4,141 Danke für 3,344 Beiträge

    Default


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Daß Du nur VBS-Skripte findest liegt daran, daß die WinCC Advanced Runtime nur VBS-Skripte kann. Bei Deiner exorbitanten Datenmenge ist das kopieren der Daten aus einer Datei in die SPS aber nicht mehr vernünftig mit der WinCC RT machbar.

    Diesen TCP-Fileserver und S7-Controller als Client könnte man als Vorlage nehmen und um die gewünschte Dateiauswahl-Funktionalität und das Schreiben in die SPS erweitern und dann von der SPS bzw. der HMI aus fernsteuern.

    Alternativ könnte man mit der HMI (WinCC RT) per VBS-Skript die vorhandenen Dateinamen eines freigegebenen Ordners im Netzwerk (oder eines Ordners des Host-PC) auslesen, den HMI-Bediener irgendwie aus der Dateiliste auswählen lassen und einem TCP-Server auf einem PC (oder dem Host-PC der WinCC RT) Kommandos mit dem Dateiname senden. Wenn die WinCC RT auf einem PC läuft könnte man dem TCP-Server ein GUI spendieren und ihn aus der WinCC RT aufrufen und der HMI-Bediener steuert direkt die Dateiauswahl und den Start der Übertragung.


    PS: Falls direkt von außen in den Ziel-DB in der S7-1500 geschrieben wird, dann sollte (oder muß sogar?) der Ziel-DB auf "Standard Zugriff" eingestellt werden. Falls da jemand "optimierten Zugriff" verlangt, dann wird es vermutlich richtig haarig ... (dürfen DB mit Standard-Zugriff überhaupt groß genug werden?)

    Harald
    Tipp: Freitag 18.10.2019 ab 19:00 Uhr 12. SPS-Forum Regional-Stammtisch NRW im RunkelKrug in Bielefeld

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

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

Similar Threads

  1. codesys v3 csv Datei einlesen und verarbeiten
    By cobra123 in forum CODESYS und IEC61131
    Replies: 7
    Last Post: 18.04.2016, 21:45
  2. Replies: 2
    Last Post: 18.03.2016, 08:21
  3. csv-datei und excel
    By repök in forum Programmierstrategien
    Replies: 10
    Last Post: 27.02.2014, 20:33
  4. Messwerte aus Excel Tabelle in S7-300 einlesen
    By yone in forum Hochsprachen - OPC
    Replies: 19
    Last Post: 18.12.2013, 07:47
  5. Replies: 6
    Last Post: 03.10.2008, 17:49

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •