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

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

Thema: OPC - Client programmieren mit Microsoft Visual Studio 2008

  1. #11
    Registriert seit
    16.06.2010
    Beiträge
    7
    Danke
    2
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo, ich befasse mich gerade auch mit der Kommunikation mit einem WebIO der Firma Wiesemann und Theis.
    Der Verbindungsaufbau funktioniert soweit einwandfrei.
    Sobald ich aber die Methode .OPCGroups der Klasse OPCAutomation.OPCServer aufrufe kommt folgender Fehler.
    "Das Objekt des Typs OPCAutomation.OPCServerClass kann nicht in Typ OPCAutomation.IOPCGroups umgewandelt werden."
    Wollte ma Fragen ob einer von euch weiß woran das liegen könnte.

    Und beim Versuch diese RCW von der OPC Foundation ist ja eine .msm datei. Wie kann ich diese in mein Programm einbinden, als Verweis oder so hab ichs ned hinbekommen...

    Vielen Dank schon mal im Vorraus!!

  2. #12
    Registriert seit
    27.10.2009
    Beiträge
    317
    Danke
    0
    Erhielt 64 Danke für 54 Beiträge

    Standard

    Das msm Paket ist ein Mergemodul, das in msi Installer eingebunden wird, wenn du also ein msi Setup mit dem VS-Studio erstellst, einfach "hinzufügen>Mergemodul" und fertig. Auch andere Setup z.B. NSIS können solche Mergemodule einbinden und aufrufen. Es ist also quasi ein Sub-Setup das von einem anderen Setup aufgerufen wird. Es gibt auch noch ein msi Paket von der OPC Foundation z.B. CoreComponents.msi das auch als eigenstängiges Setup (stand alone) aufgerufen werden kann.

    Das OPCGroups Objekt ist eine Collection (ein Collection Objekt). Diese Collection enthält dan ein oder mehrere OPCGroup (ohne s) Objekte, die mit new angelegt werden müssen. An diesm OPCGroup Objekt werden wiederum Methoden aufgerufen. Das OPCServer Objekt ist ein eigenständiges Objekt mit eigenen Methoden. Ein impliziter Cast ist nicht möglich, das scheint der Fehler zu sein den du bekommst.

  3. Folgender Benutzer sagt Danke zu Dr. OPC für den nützlichen Beitrag:

    imod (17.06.2010)

  4. #13
    Registriert seit
    16.06.2010
    Beiträge
    7
    Danke
    2
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Okay, das mit den msm Dateien ist dann soweit klar. Vielen dank schon mal hierzu.

    Nun zur Programmierung:
    Geht man beim Aufbau einer OPC Verbindung nicht folgendermaßen vor?

    1. OPCMyServer = New OPCAutomation.OPCServer
    2. OPCMyServer.Connect(txtSvrName.Text,
    "")
    3. OPCMyGroups = OPCMyServer.OPCGroups
    4. OPCMyGroup = OPCMyGroups.Add(
    "Group1")

    das bedeutet Zeile 3 ist nicht Zulässig weil ein impliziter Cast nicht möglich ist. Aber wie sage ich meinem Groups Objekt dann, dass es die Items vom OPCServer verwenden soll?

  5. #14
    Registriert seit
    27.10.2009
    Beiträge
    317
    Danke
    0
    Erhielt 64 Danke für 54 Beiträge

    Standard

    1 und 2 ist ok.

    3 kannste weglassen

    stattdessen die Updaterate aller Gruppen erstmal auf 1 sec setzen
    3) OPCMyServer.OPCGroups.DefaultGroupUpdateRate = 1000

    bei 4 gleich das Objekt erzeugen und zuweisen
    4) Set OPCMyGroup1 = OPCMyServer.OPCGroups.Add("Group1")
    der Server besitzt nun eine Collection mit einer Gruppe, du verwendest das Gruppenobjekt für weitere Aufrufe. Die Collection benötigst du nicht.

    5) dann erstmal die Callbacks abschalten
    OPCMyGroup1.IsActive = False
    OPCMyGroup1.IsSubscribed = False

    6) nun die Items hinzufügen (alle auf einen Streich)
    'bla,bla, parameter befüllen und dann
    Call OPCMyGroup1.OPCItems.AddItems(bla,bla, parameter)

    7) nun die Gruppe "scharf" schalten (sie liefert dann callbacks)
    OPCMyGroup1.IsActive = True
    OPCMyGroup1.IsSubscribed = True

    8 ) im Eventhandler die Daten abholen, oder Read(fromCache, x, x) aufrufen oder Write()
    Geändert von Dr. OPC (17.06.2010 um 09:43 Uhr)

  6. #15
    Registriert seit
    16.06.2010
    Beiträge
    7
    Danke
    2
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Hi Dr. OPC

    ich habe es grade so ausprobiert wie du es mir empfohlen hast.
    jetzt kommt eine Fehlermeldung bei
    OPCMyServer.OPCGroups.DefaultGroupUpdateRate = 1000
    und zwar wieder
    "Das Objekt des Typs OPCAutomation.OPCServerClass kann nicht in Typ OPCAutomation.IOPCGroups umgewandelt werden."
    kann es sein dass irgendwas an meiner OPCAutomation.OPCServer nicht stimmt?

    Danke

  7. #16
    Registriert seit
    27.10.2009
    Beiträge
    317
    Danke
    0
    Erhielt 64 Danke für 54 Beiträge

    Standard

    Private WithEvents OPCMyServer As OPCAutomation.OPCServer
    Private WithEvents OPCMyGroup1 As OPCAutomation.OPCGroup

    OPCMyServer = New OPCAutomation.OPCServer
    Call OPCMyServer.Connect("ProgID1", "Node1")
    OPCMyServer.OPCGroups.DefaultGroupUpdateRate = 1000
    Set OPCMyGroup1 = OPCMyServer.OPCGroups.Add("Group1")

    funktioniert bei mir ohne Probleme, die Collection gibt es sobald es das Serverobjekt gibt.

    Das setzen der DefaultUpdaterate verhindert dass "0" genommen wird (Parameter nicht gesetzt, bedeutet 0). Die UpdateRate=0 hat bei OPC eine "Sonderbedeutung" und bedeutet "so schnell wie der Server kann". Das ist in den meisten Fällen schlecht, denn es wird unnötig Last auf der SPS erzeugt und die Werte mit 50-100 ms gepollt.
    Geändert von Dr. OPC (17.06.2010 um 10:58 Uhr)

  8. #17
    Registriert seit
    16.06.2010
    Beiträge
    7
    Danke
    2
    Erhielt 0 Danke für 0 Beiträge

    Standard

    des ist ja merkwürdig, ich habe genau den gleichen Quelltext und bei mir bekomm ich ne InvalidCastExeption.

    Das Objekt des Typs "OPCAutomation.OPCServerClass" kann nicht in Typ "OPCAutomation.IOPCGroups" umgewandelt werden.

    Mhh... woran könnte das liegen
    Ich programmiere mit Visual Basic 2008 Express Editon...

  9. #18
    Registriert seit
    16.06.2010
    Beiträge
    7
    Danke
    2
    Erhielt 0 Danke für 0 Beiträge

    Standard

    mir ist grad aufgefallen, dass ich noch den OpcDAuto.dll Version 2.0.1.0 verwende. Können die Fehler daher kommen?
    Habe jetzt schon ein paar mal gelesen, dass Version 2.0.2.0 verwendet wird.

  10. #19
    Registriert seit
    27.10.2009
    Beiträge
    317
    Danke
    0
    Erhielt 64 Danke für 54 Beiträge

    Standard

    Habe gerade mal geschaut. Die Dateiversion meiner Automation DLL ist 2.02.5.30
    Es würde mich wundern wenn das eine Rolle spielt, denn das Teil ist auch schon sehr alt und an der Stelle hat sich bestimmt nichts geändert. Ich vermute eher das es an .NET liegt denn da müssen Objekte erst erzeugt und initialisiert werden bevor man etwas zuweisen kann.

    Mein Code ist mit Visual Basic 6 geschrieben, ohne .NET und RCW, und funktioniert auch in Excel VBA.

    Kommst du denn weiter wenn du die DefaultUpdaterate nicht setzt sondern direkt die Gruppe anlegst? Die "Add" Methode an der "Groups"-Collection des Server Objekts gibt ein Objekt vom Typ OPCGroup zurück und dieses kann damit direkt meinem OPCMyGroup Objekt zugewiesen werden.

    Das OPCGroup Objekt hat dann wiederum eine OPCItems-Collection, der man mit der Methode "AddItems" dann die gewünschen Items hinzufügt.
    Geändert von Dr. OPC (24.06.2010 um 21:47 Uhr)

  11. #20
    Registriert seit
    16.06.2010
    Beiträge
    7
    Danke
    2
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Nein, dann kommt der Fehler in der Zeile, in der ich MyServer.OPCGroups.Add("Group) verwende.
    Hier mein Quelltext:

    MyServer = New OPCAutomation.OPCServer
    MyServer.Connect(
    "Wiesemann-Theis.DigitalEA.1", "")
    MyGroup = MyServer.OPCGroups.Add(
    "Group") 'Hier kommt der Fehler:
    'Das Objekt des Typs "OPCAutomation.OPCServerClass" kann nicht in Typ "OPCAutomation.IOPCGroups" umgewandelt werden.
    MyGroup.IsActive = False
    MyGroup.IsSubscribed = False
    MyItem = MyGroup.OPCItems.AddItem("box_1.A.", 1234)
    MyGroup.IsActive =
    True
    MyGroup.IsSubscribed = True
    MyItem.Write(1)
    MyServer.Disconnect()
    MyServer =
    Nothing

    Aber dass man mit VB6 programmieren muss kann ja fast ned sein, denke dann liegt es eher an meinem veralteten dll, nur ist es ja unglaublich schwer an die dlls zu kommen wenn man kein Mitglied in der OPC Foundation ist...

Ähnliche Themen

  1. Antworten: 9
    Letzter Beitrag: 08.09.2011, 13:24
  2. Antworten: 18
    Letzter Beitrag: 05.12.2010, 16:27
  3. Microsoft Visual C# 2008 => Active X-Steuerelement
    Von Neger für alles... im Forum Hochsprachen - OPC
    Antworten: 6
    Letzter Beitrag: 30.06.2010, 12:41
  4. Libnodave and Visual Studio 2008
    Von Rick im Forum Hochsprachen - OPC
    Antworten: 5
    Letzter Beitrag: 12.10.2009, 22:47
  5. OPC Client in Visual Studio 2005 Express Anwendung
    Von mike_roh_soft im Forum Hochsprachen - OPC
    Antworten: 2
    Letzter Beitrag: 06.06.2008, 14:48

Lesezeichen

Berechtigungen

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