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

Seite 2 von 3 ErsteErste 123 LetzteLetzte
Ergebnis 11 bis 20 von 28

Thema: Mit Excel/VBA und OPC an S7300

  1. #11
    Registriert seit
    01.08.2005
    Beiträge
    149
    Danke
    0
    Erhielt 20 Danke für 19 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    hallo!

    sollte "Valuelong = CLng(Value(1)) " nicht besser "Valuelong=CLng(Value)" lauten?

    Value ist ja in diesem Fall kein Array - oder übersehe ich was? Wieso eigentlich Long wenn du nur ein WORD ließt?



  2. #12
    Registriert seit
    03.12.2009
    Beiträge
    64
    Danke
    1
    Erhielt 2 Danke für 2 Beiträge

    Standard

    Hallo BPlagens,

    ich lese ja mit der Zeile

    ItemId = "S7:[3_head]DB1,W0,2
    ReturnValue = UserForm1.DatCon1.ReadVariable(ItemId, Value, Quality, Timestamp)


    2 Worte im DB1 ab Adresse 0.

    Deshalb stehen die Werte nach dem Aufruf in Value(0) und 1.
    So glaube ich jedenfalls. Leider kann ich die Werte nicht lesen, da die Fehlermeldung"VBA unterstützt dies Art der Variablen aus der Automatisierungstechnik nicht" kommt.

    Da ich auf grosse Datenmengen zugreifen muss, kann ich leider nicht immer einzelne Werte lesen, sondern muss einen ganzen Bereich auf einmal lesen.

    Ich habe auch schon in der Symboltabelle der S7 alle möglichen Datentypen ausprobiert, leider ohne Erfolg.

    Noch ne Frage:
    Hat vielleicht jemand ein Timer active X, ähnlich dem von Visual Basic, wo man Ticks und enable einstellt und dann Ereignisse ausgelöst werden, das ich in VBA eibetten kann?

    Application.ontime ist leider sehr mangelhaft.

    Gruss

    Oliver

  3. #13
    Registriert seit
    01.08.2005
    Beiträge
    149
    Danke
    0
    Erhielt 20 Danke für 19 Beiträge

    Standard

    Oh, das habe ich übersehen!

    Aber ich glaube das ist so keine gute Idee!

    Ohne es genau zu wissen würde ich sagen, dass in "Value" jetzt 4 Byte liegen und du die erst mal in 2 Worte aufteilen musst!

    Wie sieht denn Value aus wenn du einen Breakpoint setzt und dir die Variable ansiehst?

    Ich würde für jede Variable auch einen eigenen Item anlegen. ReadMulti geht jetzt ja!

    Dann bekommst du auf jeden fall ja auch im Value(x) einen Wert den man vernünftig weiter bearbeiten kann.

    Wenn es so viele Variablen sind kannst ja das ganze in einer Schleife lösen!

    Code:
    n=0
    FOR i=1 to 10 STEP 2
        ItemId(n)="S7:[3_head]DB1,W" & cstr(i)
        n=n+1
    NEXT i
    Auserdem dürfte dies keine unterschied bei der Performance machen - kannst du ja mal testen.

    Was machst du eigentlich? Bist du sicher das VBA + Excel das richtige sind?

    Ach ja folgendes zu deinem Timer Problem: http://www.cpearson.com/excel/OnTime.aspx

    Nim doch VB 2008 Express und greif von da auf Excel zu - kostet auch nix und ist sicher deutlich komfortabler als das ganze mit VBA zu lösen! Oder du scheinst ja VB6 zu haben - warum nicht das?

    cu
    bernd
    Geändert von BPlagens (02.04.2010 um 20:38 Uhr) Grund: Link hinzugefügt (Google ist dein Freund!)

  4. #14
    Registriert seit
    03.12.2009
    Beiträge
    64
    Danke
    1
    Erhielt 2 Danke für 2 Beiträge

    Standard

    Hallo BPlagens,

    ich muss in 3 Wochen eine BDE in Australien installieren. Sie greift auf 6 CPU's zu und wird ca. 100000 Einträge pro Tag erfassen. Da alle Daten in einem gemeinsamen Excel Dokument liegen werden, schien es mir am einfachsten alles mit Excel zu erschlagen.
    Mein Problem ist, dass ich überhaupt keine Zeit habe und auch noch eine andere IB nächste Woche habe.

    Deshalb: so schnell und einfach wie möglich.

    Der Aufruf ReadMultiVariable funktioniert, aber wie beschrieben erhalte ich auch dort den Fehler "VB unterstützt diesen Typ der Automatisierung nicht". Richtig funktionieren tut nur der einfache Lesezugriff.

    Von der Perfomance ist das Multi deutlich schneller.


    Besten Dank, irgendwie schmuggele ich mich durch, sonst such ich mir einen neuen Job.

    Gruss


    Oliver

  5. #15
    Registriert seit
    01.08.2005
    Beiträge
    149
    Danke
    0
    Erhielt 20 Danke für 19 Beiträge

    Standard

    Stell doch mal deinen code rein mit realen Variablen, dann werf ich mal einen Blick drauf!
    Lt deinem letzten Beitrag kommt die Fehlermeldung doch bei ReadVariable..?

    Aber mal aus meiner Erfahrung: Nimm nicht Excel dafür!!! Ich habe das auch mal auf Kundenwunsch gemacht (zu einer Zeit als Excel nur 32000 Zeilen konnte). Da gibt es nur Probleme! Glaube mir!!!! Schreib das ganze lieber in eine Datenbank (es geht auch Access mit VBA) und hole mit Excel die Daten aus der DB.

    Du wirst mit Excel nicht glücklich! Excel ist wirklich gut, aber eben keine Datenbank es ist eine Tabellenkalkulation!

    Ich löse das meistens so:
    Ein OPC-Client (meist mit VB geschrieben) holt die Daten aus den SPSen und legt die Werte in der DB ab. Ein zweites Programm ist dann für die Auswertung zuständig - das greift dann nur auf die DB zu.

    Wie willst du mit Excel denn von zwei Rechnern auf die Daten zugreifen (nur lesen geht ja - aber schreiben)?

    Schon mal an etwas wie OPC-Router gedacht? Zum Beispiel http://www.inray.de/produkte/opcrouter.html . Klar kostet Geld, aber dafür musst du dich nicht mit der Control von Siemens beschäftigen.

    Nochmal zu Excel 100.000 Werte per Tag? Das macht ja zwischen 90MB- 200MB am Tag! Schon mal mit einer Excel Tabelle gearbeitet die so groß ist? Wenn alles nur Byte sind dann hat du nach einem Monat ja 100.000*30=3.000.000 das sind 2.8GB/Monat = 33.6GB nach einem Jahr!
    Da kannst du mit Excel nicht händeln! Selbst Access kann glaube ich nur 2GB verwalten!

    Sollte ich einen Denkfehler haben - bitte berichtigen!
    Übrigens solltest du mal einen Blick auf http://www.xlam.ch/xlimits/excel-new.htm werfen! Du musst den richten Datentyp wählen, wenn du solch hohe Zeilen bzw. Spalten mit VBA ansprechen willst!

    Ich hoffe du hast dir da nicht zu viel vorgenommen!

    Viel Erfolg!
    Geändert von BPlagens (05.04.2010 um 10:53 Uhr)

  6. #16
    Registriert seit
    22.09.2006
    Ort
    Bodenseeraum
    Beiträge
    1.022
    Danke
    61
    Erhielt 136 Danke für 122 Beiträge

    Beitrag

    Hi,

    BPLagens schildert es sehr schön. Ich hatte Varianten mittels PostgreSQL und MySQL, die Datenbanken sind relativ schnell und nehmen nicht so viel Platz.

    Wenn die Daten in der Datenbank vorliegen, kann man nacher nach Lust und Laune mittels Excel Auswertungen bzw. Protokolle erstellen..
    DB kann mittels Backup gesichert werden, und an anderen PCs für lokale Bearbeitung angebunden werden, und so weiter..


    V.
    ______________________________________
    relax, take it easy
    Zitieren Zitieren -  

  7. #17
    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

    Wie groß ist das genaue Mengengerüst? 100000 Variablen pro Tag insgesamt oder 100000 Zeilen pro Tag und SPS? Müssen die Daten aller SPSen in eine Tabelle? Sind die Datensätze der SPSen alle gleich aufgebaut?
    Bei großen Datenmengen ist Excel tatsächlich nicht das Produkt der Wahl.

    <Werbung>
    Wenn es etwas Fertiges sein darf, dann ist eventuell ACCON-S7-EasyLog eine Alternative. Hier einfach die gewünschten Daten parametrieren und bei Bedarf die Dateien in für Excel verträgliche Häppchen aufsplitten lassen. Als Ausgabedatei wird eine CVS-Datei erstellt. Es können bis zu 16 Konfigurationen (= 16 SPSen) parallel gestartet werden. Normalerweise loggt jede SPS in eine eigene Datei, bei identischem Satz-Aufbau ist aber sicher auch eine einzige Datei denkbar. Zusätzlich sollte dann allerdings eine "Konstante" mitprotokolliert werden, die die SPS identifiziert.
    </Werbung>
    Rainer Hönle
    DELTA LOGIC GmbH

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

  8. #18
    Registriert seit
    03.12.2009
    Beiträge
    64
    Danke
    1
    Erhielt 2 Danke für 2 Beiträge

    Standard

    Hallo,

    danke für die Tips.

    Ich werde nur einen Rechner haben, der auf die SPS'sen zugreift.
    100000 Einträge am Tag, aber jeder nur ein paar Byte lang. Das habe ich natürlich schon mit Excel ausprobiert. Die Datei ist ca. 2MB lang, also nicht so wild. Die Daten werden täglich an diverse Leute per E-mail verschickt. Dann wird eine neue Datei erstellt. Nach 2 Monaten fallen die Daten hinten raus. Ist also alles nicht wirklich tragisch und sollte mit Excel problemlos machbar sein, habe ich jedenfalls gedacht.

    Kann ACCON S7 E-mails verschicken ?

    Wenn die Sache funktioniert hat, melde ich wieder.

    Gruss

    Oliver

  9. #19
    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

    ACCON-S7-EasyLog verschickt keine E-Mails sondern schreibt nur die Daten in eine CSV-Datei.
    Je nach Excel-Version gibt es allerdings Beschränkungen (z.B. 255 Spalten, 65535 Zeilen), mehr geht (zumindest in den älteren Versionen nicht).

    Sind die 100000 Einträge immer eine Variable oder werden mehrere Variablen in eine Zeile geschrieben? Haben alle SPSen dieselben Variablen oder warum sollen die Daten alle in eine Excel-Tabelle? Oder kommen diese in eigene Spalten je nach SPS?
    Rainer Hönle
    DELTA LOGIC GmbH

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

  10. #20
    Registriert seit
    01.08.2005
    Beiträge
    149
    Danke
    0
    Erhielt 20 Danke für 19 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Also bei mir geht
    ItemId = "S7:[3_head]DB1,W0,2
    Wenn ich
    Code:
    S7:[3_head]DB1,INT0,2
    benutze ohne Probleme!

    Du solltest dir mal das Aussehen der Tagsyntax mit dem OPC Scout von Siemens ansehen!

    Ach ja noch ein gut gemeinter Rat stelle in der Konfig vom OPC Server unbedingt "Verbindung permanent aufrecht halten" ein!
    Und vergiss nicht die ErrorID und Quality auszuwerten!

    Werf mal ein Blick auf die Siemens Beispiele (ich glaube unter C:\siemens\simatic.net\opc\example) da ist auch eine Beispiel mit einer Klartextmeldung der Quality dabei.

    Hier mal der Code der das Liefert was du willst:

    Code:
    Private Sub cmdReadVar_Click()
        Dim myValue As Variant 'hier schreibt DatCon1 den Wert der Variable rein
        Dim myQuality As Long 'hier schreibt DatCon1 einen Wert für die Qualität des Tags rein (muss 192 sein)
        Dim myTimeStamp As Date 'hier schreibt DatCon1 den TimeStamp des Tags rein
        Dim ErrorNr As Long 'Rückgabewert des Aufrufes (muss 0) sein
        Dim ItemID As String 'hier übergeben wir die Tag-Adresse
     
        On Error GoTo ErrorHandler
     
       'bitte mit OPC Scout von Siemens die Richtige Bezeichnung ablesen!
        ItemID = "Test.DB21,INT0,3"
     
        'Und aufrufen
        ErrorNr = DatCon1.ReadVariable(ItemID, myValue, myQuality, myTimeStamp)
     
        'hier muss geprüft werden ob ErrorNr=0 und myQuality(x)=192 !!!
        'wenn nicht, hat das lesen nicht geklappt!
        txtWert1 = CStr(myValue(0))
        txtWert2 = CStr(myValue(1))
        txtWert3 = CStr(myValue(2))
        Exit Sub
     
    ErrorHandler:
        MsgBox Err.Description
    End Sub

Ähnliche Themen

  1. S7300 Verbindung mit BC9000
    Von repök im Forum CODESYS und IEC61131
    Antworten: 14
    Letzter Beitrag: 22.10.2011, 19:10
  2. S7300 Modbus/TCP Kommunikation
    Von selly im Forum Simatic
    Antworten: 1
    Letzter Beitrag: 16.06.2010, 12:45
  3. Modbus an S7300
    Von Andi_W im Forum Simatic
    Antworten: 1
    Letzter Beitrag: 21.03.2009, 21:17
  4. Verbindung S7200 <--> s7300
    Von mst im Forum Simatic
    Antworten: 8
    Letzter Beitrag: 20.04.2007, 08:49
  5. Inkrementalzähler FM350-1 S7300
    Von Kleissler im Forum Simatic
    Antworten: 1
    Letzter Beitrag: 08.05.2006, 23:17

Stichworte

Lesezeichen

Berechtigungen

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