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

Ergebnis 1 bis 6 von 6

Thema: AGLink und die Verwaltung von Aufträgen

  1. #1
    Registriert seit
    28.05.2008
    Beiträge
    9
    Danke
    1
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo Leute!

    Habe hier nen Versuchaufbau mit ner 315-2 PN/DP-CPU und programmiere mit C# die AGLink-Funktionen. So als kleinen Miniteil meiner Diplomarbeit, soll ich alle möglichen Funktionen von AGLink in C# verfügbar machen.

    Leider hänge ich an der AGL_SetJobNotification fest, weil diese mir statt einer Benachrichtigungsinfo nur eine "System.AccessViolationException". Das kann wohl daran liegen, dass diese Methode nicht Asynchron aufgerufen wird.
    Die Struktur für NOTIFICATION existierte in der AGL4DotNET.cs noch nicht, also habe ich sie von Hand definiert:

    Code:
    [StructLayout(LayoutKind.Sequential)]
    public structNOTIFICATION
    { 
    /// Siehe Handbuch Seite 135 
    /// Fensterhandle für Benachrichtigung über Message
    public HWND hwnd;
    /// Nummer der Nachricht
    public uint WndMessage;
    /// Falls Nachricht direkt an einen Thread geschickt werden soll
    public UInt32 dwThreadID;
    /// Gewünschte Nachricht für Thread
    public uint ThreadMessage;
    /// Benachrichtung über Event
    public HANDLE hEvent;
    /// Callback-Implementierung
    public IntPtr cb; // oder public delegate void CB_Func();  :confused: 
    } 

    Code:
    [DllImport("AGLink40.dll")]
    private static extern unsafe Int32 AGL_SetJobNotification(Int32 JobNr, NOTIFICATION* pN);
    public static unsafe Int32 SetJobNotification(Int32 JobNr, out NOTIFICATION pN )
    { 
    int RetVal = AGL40_SUCCESS;;
    fixed (NOTIFICATION* notific = &pN)
    {
    RetVal = AGL_SetJobNotification(JobNr, notific);
    }
    return (RetVal); 
    }
    Und die Fkt. in der Form1.cs
    Code:
    privatevoid DoSetJobNotification()
    {
    int iRet;
    AGL4.NOTIFICATION pN = newAGL4.NOTIFICATION();
    AddMessageLine("Nummer des Auftrages: " + iJobNo.ToString());
    AddMessageLine("ThreadID: " + pN.dwThreadID.ToString());
    AddMessageLine("Event-Handle: " + pN.hEvent.ToString());
    AddMessageLine("Window-Handle" + pN.hwnd.ToString());
    AddMessageLine("ThreadMessage: " + pN.ThreadMessage.ToString());
    AddMessageLine("WindowMessage: " + pN.WndMessage.ToString());
     
    if ((iRet = AGL4.SetJobNotification(iJobNo, out pN)) == AGL4.AGL40_SUCCESS)
    {
    }
    }
    Die Fkt. SetDevNotification und SetConnNotification sind entsprechend ähnlich aufgebaut. Diese liefern jedoch eh nur nullen, weil sicher der asynchrone Callback fehlt oder falsch programmiert ist. Da ich heute den ganzen Tag schon mit asynchronen Aufrufen und Delegaten herumgespielt habe und mir nicht im geringsten ein Lösungsansatz einfällt, bin ich schon langsam am verzweifeln.
    Googlen brachte mir in diesem Fall nicht den gewünschten Erfolg.
    Vielleicht hat jemand sowas ja mal für LibNoDave programmiert und kann mir dahingehend tips geben. Bin für jeden Hinweis/ Ratschlag etc. dankbar!

    Grüße, Casi
    Geändert von raCotS (18.06.2008 um 15:48 Uhr)
    Zitieren Zitieren AGLink und die Verwaltung von Aufträgen  

  2. #2
    Registriert seit
    27.10.2005
    Ort
    Schwäbisch Gmünd
    Beiträge
    5.235
    Danke
    640
    Erhielt 955 Danke für 769 Beiträge

    Standard

    Ich gehe davon aus, dass es sich um AGLink 4.x handelt. Der .net-Wrapper ist nur synchron implementiert, da sonst der gc ein furchtbares Durcheinander anrichtet. Einfach mehrere Threads starten die für sich kommunizieren, oder einen Thread der kommuniziert und die Wünsche der anderen bearbeitet.
    Rainer Hönle
    DELTA LOGIC GmbH

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

  3. #3
    raCotS ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    28.05.2008
    Beiträge
    9
    Danke
    1
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Hallo Rainer!

    Danke erstmal für die superschnelle Antwort!

    Wie ist das gemeint?
    Einfach mehrere Threads starten die für sich kommunizieren, oder einen Thread der kommuniziert und die Wünsche der anderen bearbeitet.
    Ist die Struktur okay so wie sie programmiert wurde und der DllImport auch?
    Dann brauche ich im Form.cs also nur mehrere Threads zu starten bzw. ne Weile zu blockieren oder Thread.Sleeps() einzufügen, damit ne gewisse Zeit vergeht bis das Ergebnis Ausgabefertig ist? Nutze momentan noch Euer Standardform, um die Funktionen zum laufen zu bringen.

    Gruß, Casi

  4. #4
    Registriert seit
    27.10.2005
    Ort
    Schwäbisch Gmünd
    Beiträge
    5.235
    Danke
    640
    Erhielt 955 Danke für 769 Beiträge

    Standard

    Jeder Auftrag an den .net-Wrapper wird synchron bearbeitet. Er kehrt also erst zurück, wenn dass Ergebnis vorliegt. Aus diesem Grund einfach in .net einige Threads anlegen die die notwendigen Werte lesen und schreiben. Wenn keine Parallelilät (= mehrere SPSen gleichzeitig) erforderlich ist, dann genügt auch ein Thread, der kommuniziert und von dem Hauptfenster die Aufträge bekommt und bearbeitet und das Ergebnis zurückgibt. Wenn es keine Rolle spielt, ob das Programm (wegen laufender Kommunikation) leicht verzögert reagiert, dann kann alles aus einem Thread (z.B. dem Hauptfenster aus) betrieben werden.
    Was ist die genaue Anforderung und Aufgabenstellung? Warum soll asynchron kommuniziert werden?
    Rainer Hönle
    DELTA LOGIC GmbH

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

  5. #5
    raCotS ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    28.05.2008
    Beiträge
    9
    Danke
    1
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Hallo!
    Also grundsätzlich soll ich alle verfügbaren Funktionen in AGL4DotNET bereitstellen, seien es Konvertierungen oder Diagnosen.
    Habe auch nur den einen Miniversuchsaufbau (mit o.g. SPS) zur Verfügung, wo nur OBs etc. vorhanden sind, ohne jegliche Komponenten. Also null Sensoren und Aktoren.

    Auf die asynchrone Kommunikation bin ich nur gekommen, weil es so im Handbuch steht. Nicht nur weil "asynchron" drin steht, sondern weil mir die Prozessverarbeitung so logisch erscheint. Kann gut sein, dass ich falsch liege. Des Weiteren könnte es auch sein, dass die Methode SetJobNotification korrekt programmiert ist, nur null nutzen hat.

  6. #6
    Registriert seit
    27.10.2005
    Ort
    Schwäbisch Gmünd
    Beiträge
    5.235
    Danke
    640
    Erhielt 955 Danke für 769 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Wenn Sie einen eigenen .net-Wrapper entwickeln und schreiben möchten, können Sie selbstverständlich alle Funktionen von AGLink, auch die asynchronen, implementieren. In dem in AGLink enthaltenen .net-Wrapper sind sämtliche Funktionen synchron implementiert. Die für die Asynchronität notwendigen Rückgabewerte werden Sie somit nie erhalten. Da bleibt dann nur selber implementieren. Die asynchronen Aufrufe wurden auf Grund der Komplikationen mit dem gc und dessen Eigenheiten beim Freigeben von Speicher wenn ER der Meinung ist, dass ein Speicher nicht mehr verwendet wird, nicht implementiert. Somit sind alle möglichen und verfügbaren AGLink-Funktionen in den Standard-.net-Wrapper enthalten. Was ist dann Ihre genaue Aufgabenstellung?
    Sollten Sie den Schritt zur Implementierung der asynchronen Funktionalität in einem eigenen .net-Wrapper gehen, erhalten Sie natürlich jede Unterstützung.
    Rainer Hönle
    DELTA LOGIC GmbH

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

Ähnliche Themen

  1. S7-300/400 OB,DB,FB,FC Verwaltung
    Von com im Forum Simatic
    Antworten: 15
    Letzter Beitrag: 01.04.2011, 12:43
  2. Verwaltung Softwarestände
    Von Black_Eagle im Forum Simatic
    Antworten: 15
    Letzter Beitrag: 23.03.2011, 07:01
  3. Daten verwaltung
    Von zloyduh im Forum Simatic
    Antworten: 10
    Letzter Beitrag: 29.04.2010, 22:45
  4. Rezept Verwaltung mit Excel
    Von HasAvs im Forum HMI
    Antworten: 0
    Letzter Beitrag: 31.03.2008, 21:06
  5. Verwaltung von Software
    Von Waelder im Forum Stammtisch
    Antworten: 10
    Letzter Beitrag: 15.06.2007, 15:11

Lesezeichen

Berechtigungen

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