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

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

Thema: Beckhoff - Problem mit ADS-DLL (Visual c++)

  1. #1
    Registriert seit
    18.07.2008
    Beiträge
    24
    Danke
    16
    Erhielt 1 Danke für 1 Beitrag

    Ausrufezeichen


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo,
    ich versuche zur Zeit per ADS-DLL einen Wert von meiner EL3702 (AD-Wandler) einzulesen und ihn auf der EL4732 (DA-Wandler) auszugeben. Dieser Vorgang soll alle 50µs ausgeführt werden (So ist auch die Zykluszeit im System Manager von Beckhoff eingestellt).

    Nun habe ich folgendes Problem:
    ich habe mit einer Notification-Funktion (AdsSyncAddDeviceNotificationReq) ein Callback-Programm aufgerufen, dass zuerst den Wert vom AD-Wandler auslesen und danach auf der EL4732 ausgeben soll.
    Der Wert wird ohne Probleme ausgelesen, doch beim Ausgeben kommt es zu einer sehr starken Verzögerung (circa 1s) und ein ADS-Fehlercode erscheint der besagt "timeout elapsed". Dann wird der Wert jedoch trotzdem ausgegeben.

    Folgendes habe ich ausprobiert:
    - Wenn ich die Ausgabe-Funktion einzeln ausführe funktioniert sie
    einwandfrei und schnell.
    - Wenn ich das komplette Programm ohne die Ausgabe-Funktion starte
    funktioniert auch alles

    Deshalb verstehe ich nicht, warum ich einen Timeout bekomme wenn ich die Ausgabe-Funktion mit in das Callback-Programm kopiere.

    Kann es sein, dass das Callback-Programm an die eine Variable (in meinem Fall die des AD-Wandlers) gebunden ist und deshalb es problematisch ist in ihm die Variable des DA-Wandlers anzusprechen? Wenn dem so sein sollte wie erreiche ich dann diesen Zylkus von 50µs vom möglichst schnellen einlesen und ausgeben?
    Naja war nur eine Vermutung, vielleicht habt ihr ja eine Idee, woran es liegen könnte. Für den Fall, dass es ein programmier-technisches Problem ist, habe ich den Quellcode in den Anhang als .doc-Datei kopiert.







    *@font-face {font-family:Calibri; mso-font-alt:"Century Gothic"; mso-font-charset:0; mso-generic-font-family:swiss; mso-font-pitch:variable; mso-font-signature:-1610611985 1073750139 0 0 159 0;} /* Style Definitions */ p.MsoNormal, li.MsoNormal, div.MsoNormal {mso-style-parent:""; margin-top:0cm; margin-right:0cm; margin-bottom:10.0pt; margin-left:0cm; line-height:115%; mso-pagination:widow-orphan; font-size:11.0pt; font-family:Calibri; mso-fareast-font-family:Calibri; mso-bidi-font-family:"Times New Roman"; mso-fareast-language:EN-US;} @page Section1 {size:612.0pt 792.0pt; margin:70.85pt 70.85pt 2.0cm 70.85pt; mso-header-margin:36.0pt; mso-footer-margin:36.0pt; mso-paper-source:0;} div.Section
    Angehängte Dateien Angehängte Dateien
    Zitieren Zitieren Beckhoff - Problem mit ADS-DLL (Visual c++)  

  2. Folgender Benutzer sagt Danke zu Beta6 für den nützlichen Beitrag:


  3. #2
    Registriert seit
    24.04.2008
    Ort
    Lübeck
    Beiträge
    324
    Danke
    8
    Erhielt 63 Danke für 62 Beiträge

    Standard

    Warum schreibst du extra ein externes NICHT ECHTZEITFÄHIGES Programm?
    Das Programm ist abhängig von deinem Betriebssystem, wenn Windows gerade irgendwelche sinnfreien Dienste startet, kannst du extreme Verzögerungen haben und wirst in den seltensten Fällen Zykluszeiten von 50us erhalten.

    Schreib doch einfach ein Steuerungsprogramm in dem deine Abläufte bearbeitet werden oder implementiere C-Code der von TwinCAT abgearbeitet wird.

  4. Folgender Benutzer sagt Danke zu Neals für den nützlichen Beitrag:

    Beta6 (24.09.2008)

  5. #3
    Registriert seit
    19.11.2006
    Beiträge
    1.346
    Danke
    6
    Erhielt 254 Danke für 231 Beiträge

    Standard

    Nutzt du Windows XP oder CE? Bei CE gibt's den sog. "TC Timer" schau mal im Information System nach.
    Der erlaub mit CE unter Nutzung des TwinCAT-Timers echtzeitfähige Programme.

    Andernfalls bewegst du dich außerhalb der TwinCAT-Echtzeit.

  6. Folgender Benutzer sagt Danke zu trinitaucher für den nützlichen Beitrag:

    Beta6 (24.09.2008)

  7. #4
    Beta6 ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    18.07.2008
    Beiträge
    24
    Danke
    16
    Erhielt 1 Danke für 1 Beitrag

    Standard

    Ich benutze Windows XP ...
    Die Klemmen sollen auf jeden fall per ADS angesprochen werden, weil ich gerne schauen wollte ob es einen Unterschied zwischen PLC und ADS von der Latenz her gibt. Und ich habe nicht wirklich andere Funktionen gefunden, mit denen ich Funktionen in einem bestimmten Zeitraum starten kann

  8. #5
    Registriert seit
    19.11.2006
    Beiträge
    1.346
    Danke
    6
    Erhielt 254 Danke für 231 Beiträge

    Standard

    Zitat Zitat von Beta6 Beitrag anzeigen
    Ich benutze Windows XP ...
    Die Klemmen sollen auf jeden fall per ADS angesprochen werden, weil ich gerne schauen wollte ob es einen Unterschied zwischen PLC und ADS von der Latenz her gibt. Und ich habe nicht wirklich andere Funktionen gefunden, mit denen ich Funktionen in einem bestimmten Zeitraum starten kann
    Da haste die Antwort
    Win XP => "keine" Echtzeit
    Win CE => Echtzeit mittels TcTimer

    Alles außerhalb der TwinCAT PLC ist auf Windows angewiesen. CE ist per se echtzeitfähig, XP nicht. Bei CE kann unter CE die TwinCAT Zeitbasis genutzt werden (TcTimer).
    Wenn's hart echtzeitfähig sein soll, dann am besten über PLC

  9. Folgender Benutzer sagt Danke zu trinitaucher für den nützlichen Beitrag:

    Beta6 (24.09.2008)

  10. #6
    Beta6 ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    18.07.2008
    Beiträge
    24
    Danke
    16
    Erhielt 1 Danke für 1 Beitrag

    Standard

    Okay Danke! Trotzdem verstehe ich nicht warum mein Programm nicht funktioniert. Ich habe zwischenzeitlich den Zyklus hochgesetzt (bis auf 1s) und es gab das gleiche Problem, dass beim ausgeben die fehlermeldung mit dem timeout kommt und sich die ausgabe weiter verzögert. Also schätze ich dass es zusätzlich zum handicap mit XP noch ein fehler mit der Logik des Programms oder dem Programm selber geben müsste.

  11. #7
    Registriert seit
    19.11.2006
    Beiträge
    1.346
    Danke
    6
    Erhielt 254 Danke für 231 Beiträge

    Standard

    Was du für ne TwinCAT Zykluszeit einstellst ist für Windows-Programme völlig unerheblich! TwinCAT arbeitet unabhängig von Windows !!! Zykluszeit bezieht sich ausschließlich auf die PLC, es sei denn, du nutz den TcTimer mit einer Zeit von z.B. 100µs. Aber auch dann hat die SPS-Zyklszeit damit nichts zu tun, es ist dann einfach eine Art "zweite Task".

    Das Problem wird Windows XP sein. Oder eine Eigenart deines Programms...
    Ohne CE wird das mit deinem Test nichts... oder du hast schon das Ergebnis präsentiert bekommen

  12. Folgender Benutzer sagt Danke zu trinitaucher für den nützlichen Beitrag:

    Beta6 (24.09.2008)

  13. #8
    Registriert seit
    24.04.2008
    Ort
    Lübeck
    Beiträge
    324
    Danke
    8
    Erhielt 63 Danke für 62 Beiträge

    Standard

    Du könntest ja ne Notification auf ne boolsche Variable in der PLC legen und diese dann toogeln. Dann müsstest du ja jeden Zyklus ne Meldung bekommen, mit der du dann deine Abläufe starten kannst.

    War nur ne kurze Idea

  14. Folgender Benutzer sagt Danke zu Neals für den nützlichen Beitrag:

    Beta6 (26.09.2008)

  15. #9
    Beta6 ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    18.07.2008
    Beiträge
    24
    Danke
    16
    Erhielt 1 Danke für 1 Beitrag

    Standard

    die Idee war mir auch gerade gekommen. Ich probiere das jetzt einfach nochmal aus, vielelicht klappt es dann zumindest ohne Fehlermeldung

  16. #10
    Beta6 ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    18.07.2008
    Beiträge
    24
    Danke
    16
    Erhielt 1 Danke für 1 Beitrag

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Sooo,

    also ich kann nun sagen dass man es wirklich vergessen kann mit ADS einen lese/schreib-zylkus im mikrosekundenbereich zu erreichen! Ich habe selber mit einer Funktion die Zeit ausgelesen und damit ein Programm geschrieben das funktioniert hatte, nur war es von den gewollten 50µs um Welten entfernt!
    Der Schreib Prozess konnte ungefähr nur alle 1-2ms ablaufen, was in meinem Fall leider viiiieeeel zu viel ist ... trotzdem danke für die mithilfe und ich probiere es nun mit R3IO ^^

Ähnliche Themen

  1. Antworten: 5
    Letzter Beitrag: 24.12.2008, 11:22
  2. Linker Problem mit Visual Studio 6.0
    Von Tapio Bearking im Forum PC- und Netzwerktechnik
    Antworten: 6
    Letzter Beitrag: 03.07.2008, 08:03
  3. Beckhoff KL5111 Problem
    Von Bührer im Forum Sonstige Steuerungen
    Antworten: 1
    Letzter Beitrag: 29.04.2008, 12:58
  4. Antworten: 10
    Letzter Beitrag: 04.08.2007, 21:37
  5. Beckhoff TwinCAT PLC (AdsOcx) und Visual Basic 6
    Von borsti87 im Forum Sonstige Steuerungen
    Antworten: 3
    Letzter Beitrag: 29.07.2007, 17:46

Stichworte

Lesezeichen

Berechtigungen

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