Showing results 1 to 8 of 8

Thread: Assembly "Scada.AddIn.Contracts"

  1. #1
    Join Date
    26.08.2017
    Posts
    7

    Default Assembly "Scada.AddIn.Contracts"

    Hallo,

    im Dokument Programmierschnittstellen.pdf steht: Sämtliche für die Entwicklung von Add-Ins benötigten Schnittstellen sind im Assembly
    Scada.AddIn.Contracts definiert.

    Aktuell ist Zenon 7.5 Pharma Edition sowie VisualStudio 2015 installiert. Das Assembly "Scada.AddIn.Contracts" habe ich nicht gefunden. Habe ich da etwas übersehen.

    Viele Grüße

  2. #2
    Join Date
    28.02.2013
    Posts
    164

    Default Re: Assembly "Scada.AddIn.Contracts"

    Guten Morgen,

    ja, das Assembly muss für's Visual Studio erst über den Market Place runtergeladen werden.

    Hier der Link: https://marketplace.visualstudio.com...perToolsforVS#

    Allerdings wurde das Add-In Framework erst mit zenon 7.60 neu eingeführt...

    Schöne Grüße,
    Felix
    Last edited by felixst : 28th August 2017 at 08:17

  3. #3
    Join Date
    26.08.2017
    Posts
    7

    Default Re: Assembly "Scada.AddIn.Contracts"

    Quote Originally Posted by felixst View Post
    Guten Morgen,





    ja, das Assembly muss für's Visual Studio erst über den Market Place runtergeladen werden.





    Hier der Link: https://marketplace.visualstudio.com/items?itemName=vs-publisher-1463468.COPA-DATASCADAAdd-InDeveloperToolsforVS#





    Allerdings wurde das Add-In Framework erst mit zenon 7.60 neu eingeführt...





    Schöne Grüße,


    Felix


    Hallo,

    Entschuldigung, ich vergass zu erwähnen, dass ich das von Ihnen erwähnte AddIn in VS2015 installiert hatte. Von der Hotline hatte ich letzte Woche die Aussage erhalten, dass zwischen 7.5 und 7.6 kein erwähnenswerter Unterschied besteht. Kann es trotzdem damit zusammen hängen, dass wir die Version 7.5 und nicht Version 7.6 benutzen?

    Viele Grüße

  4. #4
    Join Date
    28.02.2013
    Posts
    164

    Default Re: Assembly "Scada.AddIn.Contracts"

    Hallo,

    "erwähnenswert" ist da wohl Ansichtssache.
    Jede neue zenon Version bringt etliche sichtbare und auch viele "unsichtbare" Verbesserungen unter der Haube mit.

    Beim Add-In Framework handelt es sich aber definitiv um eine Sichtbare! Und diese wurde erst mit Version 7.60 eingeführt und geht daher mit zenon 7.50 leider nicht.

    Sollte es hier eine mißverständliche Aussage von unserem Support gegeben haben, entschuldige ich mich dafür!

    Schöne Grüße,
    Felix

  5. #5
    Join Date
    26.08.2017
    Posts
    7

    Default Re: Assembly "Scada.AddIn.Contracts"

    Quote Originally Posted by felixst View Post
    Hallo,





    "erwähnenswert" ist da wohl Ansichtssache.


    Jede neue zenon Version bringt etliche sichtbare und auch viele "unsichtbare" Verbesserungen unter der Haube mit.





    Beim Add-In Framework handelt es sich aber definitiv um eine Sichtbare! Und diese wurde erst mit Version 7.60 eingeführt und geht daher mit zenon 7.50 leider nicht.





    Sollte es hier eine mißverständliche Aussage von unserem Support gegeben haben, entschuldige ich mich dafür!





    Schöne Grüße,


    Felix



    Hallo,

    gibt es mit der Version 7.5 auch eine Möglichkeit, von "aussen" auf die Variablen zuzugreifen? Die IDE ist VS2015, als Programmiersprache wird C# verwendet. 

    Falls dies nicht möglich ist, dann würde ich auch VSTA (leider ohne TPL) verwenden. Im Dokument Programmierschnittstellen (aktuell auch V7.6) werden die Möglichkeiten beschrieben. Leider passt die Beschreibung (V7.6) auch nicht zur Version 7.5. Gibt es hier eventuell eine Beschreibung der VSTA für die Version 7.5?



    Mit vielen Grüßen

  6. #6
    Join Date
    28.02.2013
    Posts
    164

    Default Re: Assembly "Scada.AddIn.Contracts"

    Guten Morgen,

    ja, man kann auch von aussen via COM auf die zenon API zugreifen.

    Dafür muss man die zenrt32.tlb (aus dem zenon Programmverzeichnis) als Referenz in den Code einbinden.
    Dann kann man sich z.b. via


    //get zenon reference and exit if not sucessful
    try
    {
    zApplication = Marshal.GetActiveObject("zenOn.Application") as zenOn.Application;
    }
    catch (Exception ex)
    {
    writeConsoleStatusMessage("Error: cannot find zenon runtime! Start zenon runtime before using this application.");
    Environment.Exit(0);
    }
    if (zApplication == null)
    {
    writeConsoleStatusMessage("Error: cannot find zenon runtime! Start zenon runtime before using this application.");
    Environment.Exit(0);
    }

    eine Referenz auf die zenon Runtime holen und dann entsprechend zugreifen.

    Was ist der geplante Anwendungsfall dafür?

    Hier ist noch ein link zu einem Blogpost zu dem Thema generell: http://blog.copadata.at/wp/in-or-out...n-application/

    Schöne Grüße,
    Felix
    Last edited by felixst : 30th August 2017 at 07:23

  7. #7
    Join Date
    26.08.2017
    Posts
    7

    Default Re: Assembly "Scada.AddIn.Contracts"

    Quote Originally Posted by felixst View Post
    Guten Morgen,





    ja, man kann auch von aussen via COM auf die zenon API zugreifen.





    Dafür muss man die zenrt32.tlb (aus dem zenon Programmverzeichnis) als Referenz in den Code einbinden.


    Dann kann man sich z.b. via








    //get zenon reference and exit if not sucessful


    try


    {


    zApplication = Marshal.GetActiveObject("zenOn.Application") as zenOn.Application;


    }


    catch (Exception ex)


    {


    writeConsoleStatusMessage("Error: cannot find zenon runtime! Start zenon runtime before using this application.");


    Environment.Exit(0);


    }


    if (zApplication == null)


    {


    writeConsoleStatusMessage("Error: cannot find zenon runtime! Start zenon runtime before using this application.");


    Environment.Exit(0);


    }





    eine Referenz auf die zenon Runtime holen und dann entsprechend zugreifen.





    Was ist der geplante Anwendungsfall dafür?





    Hier ist noch ein link zu einem Blogpost zu dem Thema generell: http://blog.copadata.at/wp/in-or-out...n-application/





    Schöne Grüße,


    Felix
    Hallo Felix,

    besten Dank für Deine schnelle Hilfe. Genau so etwas habe ich gesucht (Vielleicht bekomme ich die Gelegenheit, Dir auch mal einen Stein in den Garten zu werfen :-) ).

    Ich habe den Zugriff mit einem Export von (gefilterten) Variablen ausprobiert (nachfolgend das Code-Schnippsel, falls noch jemand interessiert ist. Ich habe es nicht geschafft, die originale Formattierung zu erhalten, ob mit Tabs oder Blanks):

    ///
    /// export filtered zenon variables
    ///

    ///

    ///

    ///
    public static int exportZenOnVariables(string[] filters_, string filename_)
    {
    int count = 0;
    zenOn.Application zapp = null;

    // get zenOn.Application-Object out of the "Running Object Table" (ROT)
    // ==> the zenOn-Application must be running
    try
    {
    zapp = (zenOn.Application)Marshal.GetActiveObject("zenOn.Application");
    }
    catch (COMException ex_)
    { throw new Exception( "GetActiveObject("zenOn.Application"): " + ex_.ToString() + " (Hint: has zenOn runtime started?)" ); }

    if ( zapp == null )
    { throw new Exception("No Access to zenOn Runtime (Hint: has zenOn runtime started?)"); }

    // do ordinary work
    try
    {
    // assume that Item(0) represents the current active project
    zenOn.Project project = zapp.Projects().Item(0);

    zenOn.Variables vars = project.Variables();

    using ( System.IO.StreamWriter file = new System.IO.StreamWriter(@filename_) )
    {
    file.WriteLine("Name\tTagname\tDataType");

    for (int i = 0; i < vars.Count; i++)
    {
    zenOn.Variable var = vars.Item(i);

    if( filters_.Any(filter => var.Name.StartsWith(filter)) )
    {
    count++;
    file.WriteLine(var.Name + "\t" + var.Tagname + "\t" + var.DataType.ToString() );
    }//eoIf: meets filter

    }//eoFor: all variables

    }//eoUsing: streamwriter
    }
    catch (Exception ex_)
    { throw new Exception("ExportZenOnVariables: " + ex_.ToString() ); }

    return count;
    }//eoFn: exportZenOnVariables




    Zu Deiner Frage bzgl des geplanten Anwedungsfalls:

    1) Unterstützung bei der Projektierung (wird voraussichtlich mit der VSTA erledigt, falls das in 7.5 funktioniert).

    2) Datengateway zu externen Quellen/Senken. Dieser Teil wird als separate App (mit intensiver Nutzung der TPL) entwickelt.

    Nochmals vielen Dank und viele Grüße,

    Ruben
    Last edited by Ruebezaehler : 30th August 2017 at 14:19 Reason: formatting disappeared

  8. #8
    Join Date
    28.02.2013
    Posts
    164

    Default Re: Assembly "Scada.AddIn.Contracts"

    Hallo Ruben,

    gerne. Danke für das Feedback!

    Zu deinen Anwendungsfällen noch ein paar Gedanken:

    1) Ja, das geht.

    2) Abfragen via COM sind naturgemäß langsam und laufen auf den zenon Hauptthread zusammen. Daher lohnt es sich aktuell nicht, die zenon seitigen Abfragen zu parallelisieren.
    Was sich jedoch deutlich bemerkbar macht bzw. für performanten Code zwingend nötig ist, die Variablenwertänderungen ereignisgesteuert und nicht zyklisch abzufragen.
    Dafür gibt es "OnlineContainer" für die dann Events bei Wertänderung einer oder aller (BulkMode) enthalten Variablen gefeuert werden. In den Eventhandlern können dann wiederum Tasks gestartet werden, die parallel die weitern Schritte erledigen.

    Die von dir geschriebene Methode ist gut, wenn sie nur "alle heiligen Zeiten" mal ausgeführt wird und deine externe Applikation dann wieder beendet wird.
    Wenn die Abfragen öfter gemacht werden, empfiehlt es sich die Referenzen auf die zenon Objekte global zu behalten und nicht bei jedem Funktionsaufruf erneut einzulesen.
    Das, und die Verwendung von OnlineContainern, reduziert den Overhead an "sinnlosen" API Zugriffen deutlich und reduziert die Gefahr, dass deine Anwendung zenon ausbremst.

    Schöne Grüße,
    Felix


Similar Threads

  1. Replies: 3
    Last Post: 28th July 2017, 01:08
  2. Replies: 1
    Last Post: 13th March 2017, 13:51
  3. RGM - VBA - ".Save" / ".Read" - change recipe status
    By markclemens in forum zenon Supervisor
    Replies: 12
    Last Post: 29th September 2014, 12:25
  4. Alarmmeldeliste Filter "nicht quittiert" ODER "anstehend"
    By scheweeric in forum zenon Supervisor
    Replies: 3
    Last Post: 31st July 2012, 15:20
  5. Replies: 0
    Last Post: 23rd March 2010, 04:16

Posting Rules

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •