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

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

Thema: VB-Skript/CSV/SQL

  1. #1
    Registriert seit
    06.10.2009
    Ort
    Hessen
    Beiträge
    560
    Danke
    24
    Erhielt 43 Danke für 40 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo liebe Community,

    ich muss ein Progamm basteln das es mir ermöglicht:

    Wert aus einer CSV (Ich hab zum üben mal eine Exceltabelle genommen) zu lesen.

    Dann möchte ich ihn in die SPS bzw in die internen Variablen der HMI verarbeiten und dann später in eine SQL Datenbank übergeben.

    Ich hab leider nur ganz groben einblich in VB und bin da total auf eure Zusammenarbeit angewiesen. (Ihr sollt es mir nicht schreiben aber mir sagen wann mein Fuß aufm Schlauch steht.) =)

    Ich hab mich in Forum mal erkundigt und in einem Beitrag schon gelesen wie man eine Excel ausliest.

    Ich hab sie erstellt mit einem Wert 10 in der Zeile A1

    jetzt wollte ich diesen Wert mit einem Bit in die internen HMI Variablen laden.

    Allerdings erstmal erfolglos. Gebt mir mal BITTE einen Anstoß wie ich das hinkriege

    Code:
    On Error Resume Next
     
    Dim appExcel , fs , wbExcel , wsExcel
    Dim Verzeichnis , Datei
    Dim Zeile
    
    '------------------------------------------------------------------------------
    ' Pointer auf Tabelle laden
    Set appExcel = CreateObject ("EXCEL.Application")
    Set fs = CreateObject ("Scripting.FileSystemObject")
    
    ' Objekte erzeugen
    ' prüfe ob datei existiert. wenn nicht erzeugen.
    If Not fs.FileExists (Verzeichnis + Datei) Then
        appExcel.Workbooks.Add
        appExcel.ActiveWorkbook.SaveAs(Verzeichnis + Datei)
    End If
     
    Set wbExcel = appExcel.Workbooks.Open (Verzeichnis + Datei)
    Set wsExcel = wbExcel.Worksheets("Tabelle1")
    
    
    ' Variablen-Zuweisungen ...
    Verzeichnis = "C:\PROJ\Wehn\Spielwiese\Excel"
    Datei = "10.xls"
    
    ' Zelle lesen und um 1 erhöhen
    Zeile = wsExcel.Range("A1")
    
    If SmartTags("Auslesen") = True Then
    SmartTags("Excel_A1") = Zeile
    End If
    
     
    
    '------------------------------------------------------------------------------
    ' verwendeten Speicher wieder freigeben
    Set wsExcel = Nothing
    Set wbExcel = Nothing
    Set fs = Nothing
    Set appExcel = Nothing
    Set Verzeichnis = Nothing
    Set Datei = Nothing
    Liebe Grüße
    Das, was man weiß, hat doppelten Wert, wenn man zugleich das, was man nicht weiß, nicht zu wissen eingesteht.
    Zitieren Zitieren VB-Skript/CSV/SQL  

  2. #2
    Registriert seit
    06.10.2004
    Ort
    Kopenhagen.
    Beiträge
    4.622
    Danke
    377
    Erhielt 799 Danke für 642 Beiträge

    Standard

    Hallo c.wehn.

    Volker har beschrieben wie man von Excel liest, wie man von ein Text-Datei liest (z.B CSV), und wie man in SQL schreibt.
    http://www.sps-forum.de/showthread.php?t=15348

    Ich finde aber das es is etwas risikant diese Aufgabe mit VBS zu lösen.
    Wenn Du von ein Text-Datei liest und nicht von Excel wäre es einfacher (=stabiler), und wenn der SQL Datenbank auf den Rechner befindet, und nicht auf ein Netzwerk-Server, dann gibt es auch weniger Probleme. Dann konnte es vielleicht doch gehen.

    Aber warum VBS verwenden ? (wegen Flexible ?).
    Es gibt Datenbank lösungen die direkt mit Exel oder Textdateien Daten austauchen können. Es kostet etwas, aber ist dafür auch stabiler.

    Andersum: Was ist Dein eigentliche Aufgabe das Du lösen muss ?
    Jesper M. Pedersen

  3. #3
    Avatar von c.wehn
    c.wehn ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    06.10.2009
    Ort
    Hessen
    Beiträge
    560
    Danke
    24
    Erhielt 43 Danke für 40 Beiträge

    Standard

    Zitat Zitat von JesperMP Beitrag anzeigen
    Hallo c.wehn.

    Andersum: Was ist Dein eigentliche Aufgabe das Du lösen muss ?
    Hallo JesperMP,

    ich hab das gelesen was Volker geschrieben hat, man sollte das ja auch an dem Code erkennen können

    Mein Problem ist das ich es in keine interne Variable bekomme.

    Meine Aufgabe wie beschrieben.

    Seriennummer aus CSV entnehmen,
    Prüfprogramm ablaufen lassen,
    Prüfergebniss mit Seriennummer in SQL schreiben.


    Die CSV befindet sich auf dem Rechner, die SQL Datenbank ist extern.
    Das, was man weiß, hat doppelten Wert, wenn man zugleich das, was man nicht weiß, nicht zu wissen eingesteht.

  4. #4
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.716
    Danke
    398
    Erhielt 2.399 Danke für 1.999 Beiträge

    Standard

    Hallo,
    es wäre wichtig, dass du in dem Script die Deklaration der Variablen und die Verwendung in der richtigen Reihenfolge machst :
    Code:
    ' Variablen-Zuweisungen ...
    Verzeichnis = "C:\PROJ\Wehn\Spielwiese\Excel\"
    Datei = "10.xls"
    
    ' Objekte erzeugen
    ' prüfe ob datei existiert. wenn nicht erzeugen.
    If Not fs.FileExists (Verzeichnis + Datei) Then
        appExcel.Workbooks.Add
        appExcel.ActiveWorkbook.SaveAs(Verzeichnis + Datei)
    End If
     
    Set wbExcel = appExcel.Workbooks.Open (Verzeichnis + Datei)
    Set wsExcel = wbExcel.Worksheets("Tabelle1")
    
    
    ' Zelle lesen und um 1 erhöhen
    Zeile = wsExcel.Range("A1")
    
    If SmartTags("Auslesen") = True Then
    SmartTags("Excel_A1") = Zeile
    End If
    
    ...
    Gruß
    LL

  5. #5
    Avatar von c.wehn
    c.wehn ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    06.10.2009
    Ort
    Hessen
    Beiträge
    560
    Danke
    24
    Erhielt 43 Danke für 40 Beiträge

    Standard

    Hallo Larry, das ist mir auch aufgefallen allerdings will es trotzdem nicht.

    Irgendwas stimmt mit der Adressierung des Verzeichnis nicht....

    ist das richtig so mit dem Verzeichnis + Datei?
    Das, was man weiß, hat doppelten Wert, wenn man zugleich das, was man nicht weiß, nicht zu wissen eingesteht.

  6. #6
    Avatar von c.wehn
    c.wehn ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    06.10.2009
    Ort
    Hessen
    Beiträge
    560
    Danke
    24
    Erhielt 43 Danke für 40 Beiträge

    Standard

    Okay... das mit dem Erstellen klappt jetzt....
    was unglaublich wichtig ist für eine ordentliche Verzeichnis Adressierung ist:

    Code:
    Verzeichnis = "C:\PROJ\Wehn\Spielwiese\Excel\"
    Das, was man weiß, hat doppelten Wert, wenn man zugleich das, was man nicht weiß, nicht zu wissen eingesteht.

  7. #7
    Avatar von c.wehn
    c.wehn ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    06.10.2009
    Ort
    Hessen
    Beiträge
    560
    Danke
    24
    Erhielt 43 Danke für 40 Beiträge

    Standard

    Also folgendes:

    Ich kann jetzt die Datei erstellen wenn nicht vorhanden,
    ich kann in die Datei schreiben aber ich kann nichts aus ihr raus lesen?


    Die Variable "Excel_A1" ist eine interne Variable und als Integer.
    Die Variable "Auslesen" ist ein Bit das ich verwende um zu sehen ob das Skript abläuft (der bit geht auch auf 1)
    In D1 steht eine 6
    die Variable Excel_A1 habe ich auf ein Ausgabefeld in Dezimalform gelegt

    wo ist nun mein fehler?

    Code:
    On Error Resume Next
     
    Dim appExcel , fs , wbExcel , wsExcel
    Dim Verzeichnis , Datei
    
    '------------------------------------------------------------------------------
    ' Pointer auf Tabelle laden
    Set appExcel = CreateObject ("EXCEL.Application")
    Set fs = CreateObject ("Scripting.FileSystemObject")
    
    Verzeichnis = "C:\PROJ\Wehn\Spielwiese\Excel\"
    Datei = "erstellen.xls"
    
     
    Set wbExcel = appExcel.Workbooks.Open (Datei + Verzeichnis)
    Set wsExcel = wbExcel.Worksheets("Tabelle1")
    
    
    SmartTags("Excel_A1") = wsExcel.Range("D1")
    SmartTags("Auslesen") = True
    
    ' Tabelle abspeichern
    wbExcel.Close True 'false
    appExcel.Quit ()
     
    
    '------------------------------------------------------------------------------
    ' verwendeten Speicher wieder freigeben
    Set wsExcel = Nothing
    Set wbExcel = Nothing
    Set fs = Nothing
    Set appExcel = Nothing
    Set Verzeichnis = Nothing
    Set Datei = Nothing


    lg
    Das, was man weiß, hat doppelten Wert, wenn man zugleich das, was man nicht weiß, nicht zu wissen eingesteht.

  8. #8
    Registriert seit
    06.10.2004
    Ort
    Kopenhagen.
    Beiträge
    4.622
    Danke
    377
    Erhielt 799 Danke für 642 Beiträge

    Standard

    Ich hatte für eine Jahr her etwas ähnliches vor.
    SPS <--> WinCC Flex VBS und ADO und ODBC <--> Oracle SQL.
    Es funktionierte einwandfrei. Ganze 99.99% von der Zeit.
    Nach mehrere Tagen stürtzte das alles ab, und musste manuell wieder gestartet werden. So ging das jeder paar Tagen.
    Das Problem lag irgendwo mit Netzwerkprobleme zwischen den Rechner und den Datenbank Server.
    Das eigentliche Problem was das VBS nicht von sich selbst das Verbindung wieder aufbauen konnte. Ich habee wirklich alles probiert.
    Zum schluss hatte ich ein fertiges Produkt eingesetzt (FactorySQL), und seit dann habe ich von keine Problem gehört.

    Nur zum nachdenken.
    Jesper M. Pedersen

  9. #9
    Registriert seit
    26.01.2010
    Beiträge
    51
    Danke
    1
    Erhielt 13 Danke für 12 Beiträge

    Standard

    Wir setzen für die Verbindung zwischen SPS und SQL Datenbanken den SQL4Automation Connector ein. Der Vorteil ist, dass ich vollen Zugriff auf die SQL Datenbank habe und keine langsame OPC Verbindung benötige. Eine Abfrage dauert 20 bis 150 ms. Ausserdem werden neben CoDeSys SPSen auch Kuka, Stäubli und Bosch Rexroth Roboter unterstützt. Siemens wird bis Anfangs März verfügbar sein. B&R wird demnächst unterstützt. www.sql4automation.com

  10. #10
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.716
    Danke
    398
    Erhielt 2.399 Danke für 1.999 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Zitat Zitat von c.wehn Beitrag anzeigen
    Die Variable "Excel_A1" ist eine interne Variable und als Integer.
    Die Variable "Auslesen" ist ein Bit das ich verwende um zu sehen ob das Skript abläuft (der bit geht auch auf 1)
    In D1 steht eine 6
    die Variable Excel_A1 habe ich auf ein Ausgabefeld in Dezimalform gelegt

    wo ist nun mein fehler?
    Hallo,
    so pauschal fällt mir da nun nichts mehr auf ...
    Du hast weiter oben schon mal von CSV-Datei gesprochen. Hast du nun so eine oder eine "echte" XLS-Tabelle ?
    Dann außerdem - hast du in der XLS-Tabelle das Tabellenblatt "Tabelle1" oder heißt das ggf. anders bei dir ?
    Kannst du in die Tabelle hineinschreiben ?

    Gruß
    LL

Ähnliche Themen

  1. Skript WinCCflex
    Von fraser island im Forum HMI
    Antworten: 2
    Letzter Beitrag: 15.10.2009, 23:45
  2. Skript um das OS zu ermitteln
    Von Black_Eagle im Forum Hochsprachen - OPC
    Antworten: 1
    Letzter Beitrag: 22.10.2008, 15:30
  3. VBS-Skript
    Von johnij im Forum HMI
    Antworten: 7
    Letzter Beitrag: 06.06.2008, 14:16
  4. VB - Skript
    Von tarzipan7 im Forum HMI
    Antworten: 2
    Letzter Beitrag: 17.11.2007, 07:41
  5. Vb Skript
    Von Reblaus im Forum HMI
    Antworten: 6
    Letzter Beitrag: 23.10.2005, 11:26

Lesezeichen

Berechtigungen

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