zu OPC Server verbinden

  • Hallo zusammen

    Ich bin ziemlich neu in Autoit, und war nach kurzer Zeit sofort ein FAN davon geworden :P

    Nun habe ich mir überlegt ob es mit AutoIt möglich ist zu einem OPC Server zu verbinden und die Tags zu lesen und zu schreiben.
    Habe bereits etwas rumgegoogelt aber so gut wie gar nichts gefunden.

    Weis jemand ob das möglich ist und hat vieleicht sogar ein beispielscript?
    Bis jetzt habe ich sehr wenig rausgefunden.
    Wenn ich nicht falsch liege muss ich irgendwie mit so einer dll zusammenarbeiten:
    http://gray-box.net/daawrapper.php

    Ich weis nichtmal wie ich anfangen soll... ;(

  • Sorry für diese Frage aber mir würde es weiterhelfen, wenn ich wüsste was ein OPC-Server ist und was er macht.
    Ansonsten geht es bestimmt, wenn er eine Schnittstelle hat über die man Ihn ansprechen kann.

    MfG
    Der_Doc

    • Offizieller Beitrag

    Also ich hab mir mal die Dokumentation (http://gray-box.net/download_daawrapper.php?lang=en) angeschaut, sollte kein Problem darstellen:

    [autoit]

    ; - copy gbda_aut.dll to Windows\System32 folder;
    ; - register this module - enter regsvr32 gbda_aut.dll in the command line.
    $oOPCServer = ObjCreate("Graybox.OPC.DAWrapper")
    $ARealOPCServer = "VendorX.DataAccessCustomServer"
    $ARealOPCNodeName = "SomeComputerNodeName"
    $oOPCServer.Connect ($ARealOPCServer, $ARealOPCNodeName)

    [/autoit]
  • Info zu OPC (auszug aus Wikipedia):

    OLE for Process Control (OPC) war der ursprüngliche Name für standardisierte Software-Schnittstellen, die den Datenaustausch zwischen Anwendungen unterschiedlichster Hersteller in der Automatisierungstechnik ermöglichen. Durch die fortschreitende Weiterentwicklung dieser Schnittstellen und der damit einhergehenden Abnahme der Relevanz des OLE-Objektsystems wird heute lediglich die Bezeichnung OPC, ohne auf eine Abkürzung hinzuweisen, genutzt.

    http://www.opcfoundation.org

    BugFix vielen Dank schon mal, aber ich habe kein plan wie ich weiter machen soll. ;(
    Ich werde ein paar sachen probieren und melde mich wieder, hoffentlich könnt Ihr mir dann weiter helfen.

    • Offizieller Beitrag

    Also ich muß sagen, außer bei AutoIt :D habe ich bisher keine solch hervorragende Dokumentation gesehen. Auf 100 Seiten alle Methoden fein säuberlich mit Syntaxbeispielen dargestellt. Respekt :thumbup:
    Wirf mal einen Blick in unsere Datenbank-Hilfe, die Vorgehensweise ist analog.

  • Dank dir bin ich schon einen grossen Stück weiter. :thumbup:
    Bei den aber viel wichtigeren scheitere ich.
    Bei 'OPCGroups' bekomme ich keine Ausgabe.
    Und wenn ich 'PublicGroupNames' versuche, verweigert Autoit die Ausführung:

    Zitat

    D:\AutoIt\OPC\OPC-test.au3 (16) : ==> The requested action with this object has failed.:
    $PublicGroupNames = $oOpc.PublicGroupNames
    $PublicGroupNames = $oOpc.PublicGroupNames^ ERROR

    Hast du einen Tipp an was es liegen könnte?
    Beim 'PublicGroupNames' steht in der Doku: Syntax= PublicGroupNames As Variant
    Hab keine Ahnung was das heissen soll und ob es daran liegt... :S


    So sieht es momentan aus (bitte nicht hauen wenn es komisch aussieht, bin noch Anfänger).

    [autoit]

    $oOpc = ObjCreate("Graybox.OPC.DAWrapper")
    $connect = $oOpc.Connect("Matrikon.OPC.Simulation.1","localhost")
    $Time = $oOpc.StartTime
    $StartTime = time()
    $Time = $oOpc.CurrentTime
    $CurrentTime = time()
    $Time = $oOpc.LastUpdateTime
    $LastUpdateTime = time()
    $MajorVersion = $oOpc.MajorVersion
    $MinorVersion = $oOpc.MinorVersion
    $BuildNumber = $oOpc.BuildNumber
    $VendorInfo = $oOpc.VendorInfo
    $ServerState = $oOpc.ServerState
    $LocaleID = $oOpc.LocaleID
    $OPCGroups = $oOpc.OPCGroups
    $PublicGroupNames = $oOpc.PublicGroupNames

    [/autoit][autoit][/autoit][autoit][/autoit][autoit]

    MsgBox(0,$oOpc,'StartTime: ' & $StartTime & @LF & _
    'CurrentTime: ' & $CurrentTime & @LF & _
    'LastUpdateTime: ' & $LastUpdateTime & @LF & _
    'Version: ' & $MajorVersion & '.' & $MinorVersion & ' Build: ' & $BuildNumber & @LF & _
    'VendorInfo: ' & $VendorInfo & @LF & _
    'ServerState: ' & $ServerState & @LF & _
    'LocaleID: ' & $LocaleID & @LF & _
    'OPCGroups: ' & $OPCGroups & @LF & _
    'PublicGroupNames: ' & $PublicGroupNames)

    [/autoit][autoit][/autoit][autoit]

    Func time()
    Return (StringMid($Time, 9, 2) & ':' & _
    StringMid($Time, 11, 2) & ':' & _
    StringMid($Time, 13, 2) & ' ' & _
    StringMid($Time, 7, 2) & '.' & _
    StringMid($Time, 5, 2) & '.' & _
    StringMid($Time, 1, 4))
    EndFunc

    [/autoit]

    PS: Wo finde ich die Datenbak Hilfe :?:

    2 Mal editiert, zuletzt von Sayen (28. Februar 2009 um 14:40)

  • Achso, ich dachte es sei in einer separaten hilfe wie die AutoIt-Hilfe :wacko:

    Aber ich komme trotzdem kein bischen weiter.
    Ich weis nicht genau nach was ich suchen soll :S

    Wenn mir jemand den richtigen weg zeigen würde, währe ich extrem Dankbar :whistling:

    • Offizieller Beitrag

    Probier mal so:

    [autoit]

    $oOpc = ObjCreate("Graybox.OPC.DAWrapper") ; Referenz auf das Objekt
    $connect = $oOpc.Connect("Matrikon.OPC.Simulation.1","localhost") ; Referenz auf Connect - mit dieser weiterarbeiten
    $colOPCGroups = $connect.OPCGroups ; Liefert die Collection OPCGroups
    For $group In $colOPCGroups
    ConsoleWrite($group.Name & @CRLF) ; probier mal, was hier ausgegeben werden kann: .Item oder nur $group
    Next

    [/autoit][autoit][/autoit][autoit]

    $PublicGroupNames = $connect.PublicGroupNames ; <=== liefert ein Array!!
    ; so auslesen:
    For $group In $PublicGroupNames
    ConsoleWrite($group & @CRLF)
    Next

    [/autoit]
  • Scheint nicht zu klappen.
    bekomme immer folgende Meldung:

    Zitat

    D:\AutoIt\OPC\OPC-test2.au3 (3) : ==> Variable must be of type "Object".:
    $colOPCGroups = $connect.OPCGroups
    $colOPCGroups = $connect^ ERROR

    Habe verschiedene sachen ausprobiert, aber es will einfach nicht.
    Hab z.B. sowas probiert:

    [autoit]

    $connect = ObjCreate($oOpc.Connect("Matrikon.OPC.Simulation.1","localhost"))
    $colOPCGroups = $connect.OPCGroups

    [/autoit]


    Vermutlich lachst du dich grade schlap, und ich schreibe lieber nicht was ich sonnst noch versucht habe :whistling:
    Komme aber +/- immer zum gleichen Ergebniss

  • soweit ich es verstanden habe muss der OPC Client (AutoIt) die Gruppe selber anlegen und dann die Items die auf dem OPC Server sind dieser Gruppe hinzu zu fügen.
    Aber ich finde über AutoIt nicht heraus wie die Items heissen.
    Ist aber eigentlich nicht so wichtig weil ich sie mit einem normalen OPC Client (z.B. von Softing) zuerst anschauen kann um sie dann in AutoIt manuel einzupflegen.
    Dann kommt aber das grosse Problem, ich kann die Werte der Items in AutoIt nicht auslesen. Wenn das klappen würde, währe die halbe Mite schon gewonnen.
    Ein paar sachen konnte ich mit dem Englischen Forum rausfinden, dort gibt es einen Thread dazu, aber irgenwie wurde die Lösung nicht richtig mitgeteilt...

    [autoit]

    $oOpc = ObjCreate("Graybox.OPC.DAWrapper")
    $connect = $oOpc.Connect("Matrikon.OPC.Simulation.1","localhost")
    $OPCGroups = $oOpc.OPCGroups
    $OPCGroup=$OPCGroups.Add("group"); hier habe ich mal die Gruppe selber erstellt

    [/autoit][autoit][/autoit][autoit]

    For $group In $OPCGroups
    ConsoleWrite($group.Name & @CRLF) ;als Ausgabe kommt "group", ist die selber generierte Gruppe
    Next

    [/autoit][autoit][/autoit][autoit]

    $OPCGroupClientHandle=$OPCGroup.ClientHandle
    $OPCItems=$OPCGroup.OPCItems
    $OPCItem1=$OPCItems.AddItem("Random.Int1",$OPCGroupClientHandle); Random ist eine Gruppe auf dem OPC Server. Int1 ist ein im Sekundentakt wechselnder Wert
    $OPCItem2=$OPCItems.AddItem("Random.String",$OPCGroupClientHandle); Hier das selbe in grün. hier sind willkürliche Wörter im Sekundentakt zu sehen
    ConsoleWrite($OPCItem1.Value & '..' & $OPCItem2.Value & @CRLF); hier wird nichts ausgegeben

    [/autoit]

    BugFix
    Wenn du möchtest kann ich dir kurz sagen wie du den Simulationsserver installiert.
    Währe dir sehr dankbar wenn du mir weiter helfen würdest... :whistling:

  • also wenn noch jemand intresse an einem OPC-Client in AutoIt hat, ich hab mal angefangen einen funktionierenden Client aus VB in AutoIt umzuschreiben. Hakt leider noch teilweise an einigen Stellen, aber ich denke das sollte alles machbar sein.