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

Seite 2 von 2 ErsteErste 12
Ergebnis 11 bis 16 von 16

Thema: Achsen Parameter in TwinCat System Manager einbinden und überschreiben

  1. #11
    Registriert seit
    19.07.2008
    Ort
    Aachen
    Beiträge
    270
    Danke
    2
    Erhielt 21 Danke für 20 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Du sagst, du bekommst einen Fehler. Was für einen? Und poste doch mal den betreffenden Code inkl. Deklarationsteil.

  2. #12
    Benni ist offline Benutzer
    Themenstarter
    Registriert seit
    01.09.2011
    Beiträge
    73
    Danke
    6
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Hallo, hier ist mein Code:
    Ich habe dies in ein kleines Unterprogramm gepackt, in welchem der Baustein FB_SoERead enthalten ist (FFP):

    PROGRAM Parameter_lesen
    VAR
    FB_SoERead: FB_SoERead;
    END_VAR

    VAR_INPUT
    NetId : T_AmsNetId := '';
    Idn : WORD;
    pDstBuf : DWORD;
    BufLen : UDINT;
    Execute : BOOL;
    Element :BYTE;
    Timeout :TIME := DEFAULT_ADS_TIMEOUT;
    END_VAR

    VAR_IN_OUT
    Axis : AXIS_REF;
    END_VAR

    VAR_OUTPUT
    Busy : BOOL;
    Error : BOOL;
    AdsErrId : UINT;
    SercosErrId : UINT;
    Attribute : DWORD;
    END_VAR

    Hier wird im Fup der Baustein FB_SoERead der Bibliothek TcMcDrive2 ausgeführt.
    Dieser ist am Eingang mit den Variablen ( NetId, Idn, Element, BufLen, Execute, DEFAULT_ADS_TIMEOUT, Axis) belegt. Die Ausgänge sind die die in den Variablen VAR_OUTPUT deklariert sind.




    Aufgerufen wird das ganze dann aus dem Main:

    Hier sind die Variablen so deklariert:
    VAR
    para_lesen : BOOL;
    Axis : AXIS_REF;
    Idn : WORD;
    ReadValue : UDINT;
    END_VAR



    IF para_lesen=TRUE THEN
    Idn := S_0_IDN + 109;
    Parameter_lesen(
    Axis := Axis,
    Idn := Idn,
    Element := 16#40,
    pDstBuf := ADR(ReadValue),
    BufLen := SIZEOF(ReadValue),
    Execute := TRUE,
    Timeout := DEFAULT_ADS_TIMEOUT,
    );

    IF NOT Parameter_lesen.Busy THEN
    Parameter_lesen(Axis := Axis, Execute := FALSE);
    para_lesen := FALSE;
    END_IF
    END_IF




    Wenn ich das so mache, dann wirft mir der Baustein FB_SoERead den Fehler „1795“

  3. #13
    Registriert seit
    19.07.2008
    Ort
    Aachen
    Beiträge
    270
    Danke
    2
    Erhielt 21 Danke für 20 Beiträge

    Standard

    1795 ist Invalid Index Offset. Also liegt es wohl eher nicht an der Parametergröße. Ich kann dir aber sagen, woran das liegen wird: Du schreibst in deinem Programm auf eine VAR_INPUT.

    Deklarier den pDstBuf mal als VAR_IN_OUT, das könnte dein Problem beheben.

    Übrigens würde ich persönlich nicht beides (Länge und Adresse der Zielvariable) als Parameter an das Programm übergeben, frag mich nämlich, weswegen du dann ein Programm drumherum baust Übergib einfach deine Zielvariable als DWORD an das Programm, und dort machst du beim Aufruf des FB_SoERead dann ADR(Variable) und SIZEOF(Variable). Ist aber eher ne Schönheitskorrektur.

  4. #14
    Benni ist offline Benutzer
    Themenstarter
    Registriert seit
    01.09.2011
    Beiträge
    73
    Danke
    6
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Leider nicht, wenn ich die Variable als VAR_IN_OUT deklariere, dann bekomme ich ein Fehler-Pop-up angezeigt, welches den Inhalt 'PLCTask: Access violation (Page Fault)'...
    Aber was genau bedeutet denn der Fehler 1795 "Invalid Index Offset"? Ich kann mit dem Fehler schon nichts anfangen.

  5. #15
    Registriert seit
    19.07.2008
    Ort
    Aachen
    Beiträge
    270
    Danke
    2
    Erhielt 21 Danke für 20 Beiträge

    Standard

    Index Group und Index Offset sind die beiden Größen, die bei der ADS-Kommunikation für Lese- und Schreibzugriffe notwendig sind. Wenn ein Zugriff auf einen ungültigen oder nicht mehr aktuellen Index Offset erfolgt, bekommst du diese Fehlermeldung. Du könntest, just for fun, mal einach das Projekt bereinigen und neu übersetzen. Fakt ist aber dennoch, dass du nicht einfach auf ne VAR_INPUT schreibend zugreifen kannst. Selbst wenn der Compiler das nicht anmeckert ist es zumindest sehr unsauberer Programmierstil.

    Warum du bei Verwendung von VAR_IN_OUT eine Access-Violation bekommst, ist mir noch etwas unklar. Greifst du aus einer Task auf eine andere Task zu, ohne über globale Variablen zu gehen oder sowas? Deklarier die Zielvariable mal lokal in deinem Parameter-Lese-Programm und schau, ob du dann noch immer ne Zugriffsverletzung erhälst....

    Beim FUP-Aufruf des FB_SoERead: Hast du da nochmal ADR und/oder SIZEOF verwendet?

  6. #16
    Benni ist offline Benutzer
    Themenstarter
    Registriert seit
    01.09.2011
    Beiträge
    73
    Danke
    6
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Also ich habe die Variable schon in das Leseprogramm gezogen, da du es oben bereits vorgeschlagen hast. Und im Main habe ich dann natürlich die Aufrufe ADR und SIZEOF gestrichen, leider ging das nicht, dies war bereits der Stand den ich bei meinem letzten Post gehabt habe.

Ähnliche Themen

  1. Wie cx 9010-0000 in System Manager einbinden ?
    Von der dude im Forum CODESYS und IEC61131
    Antworten: 2
    Letzter Beitrag: 22.03.2012, 17:03
  2. TwinCAT System Manager
    Von -ASDF- im Forum CODESYS und IEC61131
    Antworten: 31
    Letzter Beitrag: 07.11.2011, 13:27
  3. twincat system manager
    Von slaud im Forum CODESYS und IEC61131
    Antworten: 7
    Letzter Beitrag: 25.10.2011, 16:15
  4. TwinCat System Manager Fehlermeldung
    Von jojo-schneider im Forum CODESYS und IEC61131
    Antworten: 5
    Letzter Beitrag: 19.10.2009, 12:52
  5. Beckhoff Twincat System Manager und L-Force 9400
    Von stefmaster im Forum Sonstige Steuerungen
    Antworten: 0
    Letzter Beitrag: 19.07.2007, 00:25

Stichworte

Lesezeichen

Berechtigungen

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