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

Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 16

Thema: Twincat 3.1 ADS mit C# Problem

  1. #1
    Registriert seit
    11.03.2014
    Beiträge
    7
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo,

    hat jemand schon mal intensiv mit Twincat 3.1 ADS und c# gearbeitet und kennt vielleicht folgendes Problem: Windows 7 32bit geht komplett fest wenn man zyklisch Variablen pollen moechte um diese in einer .net applikation zu verarbeiten. In meinem Fall frage ich etwa 400 variablen unterschiedlichen Datentyps mit einem Sum-Command (Befehl ReadWrite(0xF080,....) ab. Es macht scheinbar keinen Unterschied ob man dies alle 10ms oder alle 100ms tut. Die Gesamtgroesse des zurueckgelieferten byte-Streams (etwa 1kB) bleibt weit unter der eingestellten Groesse der des ADS Router Memory (2000kB). Es herscht kein Stress auf dem Twincat IPC (keine Wertaenderungen) und die Real-Time-Auslastung liegt bei etwa 4 %, 10ms Takt). Es kann Zufall sein oder auch nicht, es macht ein wenig den Eindruck als ob die Anzahl der gepollten Variablen einen Einfluss hat. Also mit 2 Pollingthreads zu 250 und 150 Variablen scheint das Festgehen von Windows 7 langsamer zu gehen.
    Auf dem Visu-PC mit der .net Applikation laeuft Twincat ADS 3.1 64bit auf Windows 7 64bit.

    Leider gibt es keinerlei Hinweise auf dem Twincat3.1 PC warum Windows 7 fest geht. Hat jemand einen Idee oder Hinweise wie das Problem weiter einzugrenzen waere?

    Vielen Dank!
    Zitieren Zitieren Twincat 3.1 ADS mit C# Problem  

  2. #2
    Registriert seit
    03.03.2011
    Ort
    Tettnang
    Beiträge
    123
    Danke
    24
    Erhielt 1 Danke für 1 Beitrag

    Standard

    Hallo Odafuer,

    ich habe leider keine konkrete Lösung für Dich.
    Ich selbst polle grundsätzlich keine Variablen sondern verwende Events.

    Grüße, Michael

  3. #3
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.794
    Danke
    398
    Erhielt 2.417 Danke für 2.013 Beiträge

    Standard

    Hallo,
    nur mal so am Rande (ich würde das auch über Events machen) :
    Wie ist dein VS-Programm denn aufgebaut ? Machst du das Pollen deiner Variablen in einem Thread neben deinem "normalen" Programm her ? Oder hast du dir so eine Art Endlos-Schleife gebaut ?
    Wenn du einen Thread verwendest ... gibt es dann auch irgendwo ein Thread.Sleep ?

    Am Besten, du schreibst mal ein bißchen mehr dazu ...

    Gruß
    Larry

  4. #4
    Registriert seit
    24.02.2009
    Beiträge
    1.244
    Danke
    23
    Erhielt 276 Danke für 235 Beiträge

    Standard

    Ich arbeite fast ausschließlich mit dem Summenkommando beim Lesen von vielen Variablen (wir verwenden eine eigene Kommunikationsklasse, quasi als Wrapper für ads.net). Getestet haben wir das mit über 1000 Variablen und einem Lesezyklus von 200ms. Selbst auf kleinen CXen läuft das ohne Probleme. Allerdings unter TwinCAT 2. TC3 haben wir noch nicht verwendet. Ich tippe aber drauf, das bei dir im Code ein Fehler ist.
    ADS Notifications würde ich bei größeren Variablenzahlen nicht verwenden. Die sind echte Recourcenschweine und rumsen einen den Messagerouter in Nullkommanichts voll. Wenn man das Summenkommando nutzt, hindert einem ja niemand dran selber die Variablen auf Änderung zu überwachen und dann einen Event zu feuern.

  5. #5
    Registriert seit
    15.08.2011
    Beiträge
    383
    Danke
    2
    Erhielt 73 Danke für 71 Beiträge

    Standard

    Hallo zusammen!

    Vielleicht nur nebenbei: TwinCAT 3 macht in Sachen ADS nichts anderes, als TwinCAT 2 auch. Eine App die mit Tc2 kommuniziert hat, spricht auch genauso mit einer Tc3 Steuerung. Einen effektiven Unterschied gibt es nur beim Speicher-Alignement innerhalb von Strukturen, die ausgetauscht werden sollen. Hier gibt es nicht mehr das klassische, voon Tc2 bekannte, 1-Byte-Alignement, sondern immer passend zur Variable (1-2-4-8 Byte).

    mac203

  6. #6
    Odafuer ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    11.03.2014
    Beiträge
    7
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Hallo Larry,

    also mit Events habe ich es urspruenglich auch versucht. Allerdings ist fuer mein Projekt abzusehen, dass wir mit mehr als 3000 Variablen arbeiten muessen. Aufgrund bestimmter Anforderungen koennen wir auch nicht sehr oft zu Arrays zusammenfassen, was wo es geht, natuerlich trotzdem gemacht wird.
    Wie MasterOhh auch riet, scheinen Notifications auch nicht sehr stabil zu funktionieren. Dort konnte ich bei Tests wiederholbar feststellen, dass man bei mehr als 300 Variablen schnell Probleme bekommt: hohe Last auf PLC und auf der Visu.

    Zum Thread: ja es wird Zyklisch jeweils das ReadWrite gerufen (welches ein Synchroner Aufruf ist), die gelesenen Werte kopiert und dann mit Thread.Sleep gewartet bis es Zeit fuer den naechsten Ruf an ADS ist. Klingt eigentlich einfach, aber eventuell kann man ja auch dabei etwas falsch machen. Die Resourcen fuer den Command-Stream und der Buffer fuer das Lesen der Werte lege ich nicht neu mit jedem Zyklus an. Also das sollte so auch passen.

    Gruss, Odafuer

  7. #7
    Odafuer ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    11.03.2014
    Beiträge
    7
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Hallo MasterOhh,

    wahrscheinlich mache ich schon irgendwas falsch, denn 400 Variablen sind ja nun wirklich nicht sehr viel. Beckhoff selbst schreibt ja das man mit bis zu 500 Variablen pro Sum-Command arbeiten soll und dann eben n-Rufe machen soll bis man seine Variablen zusammen hat. Aber was koennte der Fehler sein? Es muss ja ein Problem sein, was ADS irgendwie belastet, denn es geht ja Windows7 der PLC fest und nicht der der Visu. Ich fasse aber nicht zyklisch neue Variablenhandles aus oder oeffne und schliese die Verbindung oder aehnliches. Es wird auch immer aus dem gleichen Thread der ReadWrite Ruf an ADS gemacht. Nur die Handles auf die Variables werden ganz am Anfang in einem anderen Thread vom ADS geholt. Das waere vielleicht noch ein Versuch wert dies zu aendern, aber ich kann nicht so recht glauben dass dies das Problem ist.
    Lest ihr denn bei euch die 1000 Variablen mit einem Sum-Command aus oder auch mehrere hintereinander? Wenn in Bloecken, wie viele lest ihr dann in einem Ruf aus?

    Viele Gruesse,
    Odafuer

  8. #8
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.794
    Danke
    398
    Erhielt 2.417 Danke für 2.013 Beiträge

    Standard

    Hallo,
    das hört sich für mich erstmal nicht sooo falsch an ... von der Sache mit dem Summen-Kommando mal abgesehen.
    Was macht den dein Main-Thread noch so ?

    Etwas erstaunt mich allerdings :
    Du schreibst, dass deine Visu weiter bedienbar bleibt (das habe ich jedenfalls aus der Antwort an MasterOhh so herausgelesen) - dann sollte Windows selbst auch noch laufen. Oder woran erkennst du, dass deine Visu noch responsiv ist ?

    Gruß
    Larry

  9. #9
    Odafuer ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    11.03.2014
    Beiträge
    7
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Hallo,

    das war vielleicht nicht eindeutig genug: Windows 7 auf dem IPC mit Twincat geht fest (nicht mal maus laesst sich mehr bewegen, komplett eingefroren). Windows 7 auf der Visu mit meiner c# Applikation laeuft. Meine Vius verliert natuerlich die Verbindnung (ADS Fehlercode 0x745, was ja auch alles normal ist wenn die Verbindung weg ist).

    Was meinst DU mit "nicht sooo falsch"? Was ist denn falsch? Was ist am Summen-Kommando falsch?

    Gruss,
    Odafuer

  10. #10
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.794
    Danke
    398
    Erhielt 2.417 Danke für 2.013 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    An dem Summen-Kommando ist wahrscheinlich nichts falsch - es steht hier nur m.E. nicht als Problem im Fokus sondern eher etwas, das in deinem Main-Thread oder einem anderen noch laufenden Thread passiert.
    Wenn du deinen ADS-Unter-Thread mit wenigstens einem Thread.Sleep(0) gewürzt hast dann sollte für den Rest von da her erstmal alles OK sein.
    Kommt es allerdings zu keinem Application.DoEvents mehr dann kann ich mir schon vorstellen, dass dir dein Windows einfriert ...

    Gruß
    Larry

Ähnliche Themen

  1. TwinCat ADS
    Von Bigchaqy im Forum CODESYS und IEC61131
    Antworten: 9
    Letzter Beitrag: 08.10.2011, 23:46
  2. Beckhoff TwinCat mit C# Visualisierung über ADS
    Von Gerri im Forum CODESYS und IEC61131
    Antworten: 5
    Letzter Beitrag: 04.03.2011, 19:26
  3. Antworten: 1
    Letzter Beitrag: 25.01.2010, 15:57
  4. Twincat ads
    Von Simo im Forum CODESYS und IEC61131
    Antworten: 6
    Letzter Beitrag: 23.03.2009, 17:49
  5. Beckhoff - Problem mit ADS-DLL (Visual c++)
    Von Beta6 im Forum CODESYS und IEC61131
    Antworten: 15
    Letzter Beitrag: 16.10.2008, 17:24

Stichworte

Lesezeichen

Berechtigungen

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