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

Seite 1 von 3 123 LetzteLetzte
Ergebnis 1 bis 10 von 28

Thema: Mit Excel/VBA und OPC an S7300

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

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo,

    ich nuss eine Anbindung von Excel an die S7 programmieren.

    Dafür benutze ich den Siemens OPC Server. Nun habe ich eine Menge Daten, die ich nach Möglichkeut auf einmal lesen möchte.
    Dafür möchte ich die Methode "DatCon1.ReadMultiVariable" benutzen. Das gelingt aber leider nicht.

    Hat vielleicht jemand eine Programmausdruck in der er diese Methode gebraucht, inklusive der Variablendimensionierung.

    Lese ich die Variablen einzeln mit "DatCon1.ReadVariable", so funktioniert es, der OPC Server arbeitet also.

    Besten Dank im voraus für die schnelle Hilfe.

    Gruss

    Oliver
    Zitieren Zitieren Mit Excel/VBA und OPC an S7300  

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

    Beitrag

    Hallo,

    ReadMultiVariable
    The ReadMultiVariable method reads the values from several process
    variables specified by the ItemID.
    The Syntax of the method is:
    result = DatCon1.ReadMultiVariable (ItemIDs as String,
    Values as Variant,
    Errors as Variant
    Qualities as Long,
    Timestamps as Date)
    The parameters have the following meaning:
    Table 4-5
    Parameter Meaning
    ItemIDs String array with the ItemIDs of the variables to be
    read
    Values Variant array for the values
    Errors Variant array for the error status
    Quality Long array with the read qualities
    TimeStamp Date array with the read qualities
    Arrays werden hier benötigt.

    Gruss: V.
    ______________________________________
    relax, take it easy
    Zitieren Zitieren -  

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

    Standard

    Hallo,

    danke erstmal für die Hilfe. Allerdings hatte ich diese schon gefunden. Trotzdem funktioniert es nicht. Deshalb wäre ich sehr dankbar, wenn ich ein funktionierendes Beispiel hätte.

    Gruss


    Oliver
    Zitieren Zitieren Danke  

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

    Standard

    Mal kurz aus dem Kopf runtergeschrieben!
    Ich hoffe es hilft!
    Bin morgen in der Arbeit, dann kann ich dir ein geprüftes Beispiel geben.

    Code:
    'diese variablen brauchen wir
    DIM ReturnValue as Long
    DIM Value(3) as Variant
    DIM Error(3) as Variant
    DIM Quality(3) as Variant
    DIM MyTime(3) as Date
    DIM Tag(3) as String 
    'hier mal 3 beispieladressen
    Tag(0)="S7:[MeineVerbindung]M0.0"
    Tag(1)="S7:[MeineVerbindung]MB10"
    Tag(2)="S7:[MeineVerbindung]MD12"
    'jetzt lesen wir die 3 tags
    ReturnValue = Data1.ReadMultiVariables(Tag, Value,Error,Quality,MyTime) 
    'und das ganze mal anzeigen lassen 
    debug.print cstr(Value(0))
    debug.print cstr(Error(0))
    debug.print cstr(Quality(0))
    debug.print cstr(MyTime(0))
    Viel Erfolg!
    Geändert von BPlagens (31.03.2010 um 20:39 Uhr)

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

    Standard

    Halloechen,

    danke für das Beispiel. Habe ich auch direkt ausprobiert. Leider kommt sofort die Fehlermeldung "Laufzeitfehler 13, Typen unverträglich".

    Wäre schön wenn Du es mal ausprobieren könntest und hoffentlich den Bug findest.

    Vorerst vielen Dank.
    Gruss
    Oliver

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

    Beitrag

    Hi,

    bei dem Code vom Kollege, da is:

    DIM Value(3) as Variant
    DIM Error(3) as Variant
    DIM Quality(3) as Variant
    DIM MyTime(3) as Date
    DIM Tag(3) as String

    aber Quality soll LONG sein.

    V.
    ______________________________________
    relax, take it easy
    Zitieren Zitieren -  

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

    Standard

    Hallo,

    im Handbuch "Industrielle Kommunikation mi PG/PC Band 2 " steht "Qualities" as Variant und in OPC mit Excel steht "Quality" as Long.
    Also beide male Siemens und doch unterschiedlich. Ist mir aber auch egal, ich brauche schnell eine funktionierende Lösung.

    Falls jemand Zeit und Lust hat das mal mit Excel VBA auszuprobieren und es klappt, wäre ich ihm sehr verbunden, wenn er mir den Programmcode inklusive der DIM Anweisungen posten könnte.

    Vielen Dank für die Hilfe.

    Gruss

    Oliver

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

    Standard

    Gerade getestet und geht!
    Code:
    Private Sub cmdReadMultiVariable_Click()
        Dim myValue As Variant 'hier schreibt DatCon1 den Wert der Variable rein
        Dim myQuality As Variant 'hier schreibt DatCon1 einen Wert für die Qualität des Tags rein (muss 192 sein)
        Dim myTimeStamp As Variant 'hier schreibt DatCon1 den TimeStamp des Tags rein
        Dim myErrors As Variant
        Dim ErrorNr As Long 'Rückgabewert des Aufrufes (muss 0) sein
        Dim ItemID(2) As String 'hier übergeben wir die Tag-Adresse !!Array geht von 0-2!
     
        On Error GoTo ErrorHandler
     
        'So heißt unser Tag - hier am Beispiel von INAT
        'Bei Siemens heißt es in etwa "S7:[Test]M1.7"
        ItemID(0) = "Test.M1.1"
        ItemID(1) = "Test.M1.2"
        ItemID(2) = "Test.M1.3"
     
        'Und aufrufen
        ErrorNr = DatCon1.ReadMultiVariables(ItemID, myValue, myErrors, myQuality, myTimeStamp)
     
        'Debug.Print myValue(1) & " "; CStr(myQuality(1))
        'hier muss geprüft werden ob ErrorNr(1)=0 und myQuality(1)=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
    Private Sub cmdReadVariable_Click()
        Dim myValue(1) As Variant 'hier schreibt DatCon1 den Wert der Variable rein
        Dim myQuality(1) As Long 'hier schreibt DatCon1 einen Wert für die Qualität des Tags rein (muss 192 sein)
        Dim myTimeStamp(1) As Date 'hier schreibt DatCon1 den TimeStamp des Tags rein
        Dim ErrorNr(1) As Long 'Rückgabewert des Aufrufes (muss 0) sein
        Dim ItemID(1) As String 'hier übergeben wir die Tag-Adresse
     
        On Error GoTo ErrorHandler
     
        'So heißt unser Tag - hier am Beispiel von INAT
        'Bei Siemens heißt es in etwa "S7:[Test]M1.7"
        ItemID(1) = "Test.M1.7"
     
        'Und aufrufen
        ErrorNr(1) = DatCon1.ReadVariable(ItemID(1), myValue(1), myQuality(1), myTimeStamp(1))
        Debug.Print myValue(1) & " "; CStr(myQuality(1))
        'hier muss geprüft werden ob ErrorNr(1)=0 und myQuality(1)=192 !!!
        'wenn nicht, hat das lesen nicht geklappt!
        txtWert1 = CStr(myValue(1))
        txtWert2 = "---"
        txtWert3 = "---"
        Exit Sub
     
    ErrorHandler:
        MsgBox Err.Description
    End Sub

    Der Trick ist Array geht bei 0 los! Nicht bei 1!
    Lade gleich mal ein VBA Beispiel hoch!

    Viel Erfolg!

    Edit: hier ein Link zu einer Excel-Mappe mit Macro (über Macro-Visual Basic...) Folgendes ist eingebunden:
    - WriteVariable
    - WriteMultiVariable
    - ReadVariable
    - ReadMultiVariable
    - AddNotification
    - ValueChanged

    http://rapidshare.com/files/370656372/Mappe1.xls.html
    Geändert von BPlagens (01.04.2010 um 10:55 Uhr)

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

    Standard

    Hallo und Danke BPlagens,

    der Aufruf der Routine ReadMultiVariable scheint jetzt zu funktionieren. Wenn ich mir allerdings den Inhalt der Variablen ansehen möcht, kommt die Fehlermeldung" Variable verwendet einen in VB nicht unterstützten Typ der Automatisierung".
    Wäre nett, wenn Du mir dabei auch noch behilflich sein könntest.

    Gruu

    Oliver

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

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo,

    hier mal mein Programmcode:

    Public Sub Read_S7_3_Head_For_Event()
    Dim ItemId As String
    Dim Value As Variant
    Dim Quality As Long
    Dim Timestamp As Date
    Dim ReturnValue As Long
    Dim i As Integer
    Dim Valuelong As Long
    'ItemId = "S7:[3_head]DB1,W0" // auskommentiert , funktioniert
    ItemId = "S7:[3_head]DB1,W0,2" // hier möchte ich einfach mal 2 Variablen gleichzeitig lesen
    ReturnValue = UserForm1.DatCon1.ReadVariable(ItemId, Value, Quality, Timestamp)
    Valuelong = CLng(Value(1)) // hier möcht ich den Inhalt einer Variablen lesen, dabei kommt es zur Fehlermeldung "VB unterstützt diesen Typ nicht
    'If Valuelong <> Old_Event_3_Head Then Read_S7_3_Head_cycles
    'Old_Event_3_Head = Valuelong
    End Sub


    Gruss

    Oliver

Ä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
  •