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

Seite 3 von 3 ErsteErste 123
Ergebnis 21 bis 27 von 27

Thema: Indirekte Adressierung bei Codesys/TwinCat

  1. #21
    Majestic_1987 ist offline Erfahrener Benutzer
    Themenstarter
    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
    Zitat Zitat von RobiHerb Beitrag anzeigen
    Ich sehe den Fehler nicht direkt und es ist auch unvollständig.
    Der Fehler lag nur darin, dass ich aussen nur "True" und "False" dran hatte und mir das meine Force-Befehle verhagelt hat. Nachdem ich Variablen an den Baustein parametriert hatte, und diese geforced habe, funktionierte es problemlos.

  2. #22
    Registriert seit
    07.03.2004
    Beiträge
    4.369
    Danke
    946
    Erhielt 1.158 Danke für 831 Beiträge

    Standard

    Zitat Zitat von Thomas_v2.1 Beitrag anzeigen
    Bei TwinCat gehen IN_OUT auch bei FCs, oder worauf bezieht sich diese Beschränkung?
    Ich habe es nun extra noch mal getestet. Du hast recht auch CoDeSys/TwinCAT unterstützen beim einem FC VAR_IN_OUT. Ich vermute mal das dies nicht schon immer so war wenn man bei einem FC nämlich einen Bereich VAR_OUTPUT hinzufügt kommt bei CoDeSys diese Meldung:

    Fehler 3820: TEST (4): 'VAR_OUTPUT' und 'VAR_IN_OUT' ist in Funktionen nicht erlaubt.
    Diese Fehlermeldung muss ich mir wohl verinnerlicht haben ;o)
    Angehängte Grafiken Angehängte Grafiken
    If you open your Mind too much, your Brain will fall out.

  3. #23
    Majestic_1987 ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    19.07.2008
    Ort
    Aachen
    Beiträge
    270
    Danke
    2
    Erhielt 21 Danke für 20 Beiträge

    Standard

    Neues Problem:

    Wenn ich folgendes ausführe bekomme ich einen "Page Fault" und das Programm steigt aus.

    WAS kann das sein?

    Funktion ist wie folgt:

    Ich habe einen Baustein, welcher, in diesem Fall, eine Lampe steuert.
    Darüber hinaus 2 eigentlich identische, welche in Abhängigkeit von externen Bedingungen die Bits in einem mit Scene_Nr bzw. Switch_Nr bezeichneten Element des Array In_Scenes bzw. In_Switches setzen oder Rücksetzen.

    Der folgende Code stammt aus dem Baustein, welcher die Lampe steuert. Ziel ist, dass der Baustein seine Daten aus eben jenem Array bezieht, dessen "Steuerungsbaustein" gerade über das Steuerbit 0 eingeschaltet ist.

    Ziel ist, für eine Lampe über die Visualisierung im laufenden Betrieb den ansteuernden Schalter sowie die Lichtszene, zu welcher die Lampe gehört, einstellen zu können. Die jeweils aktuelle Befehlsquelle, also z.b. In_Scene[5].Steuerbit[1] oder In_Switch[2].Steuerbit[1] soll dann die Steuerung übernehmen.

    Es wäre prinipiell zwar möglich, den kompletten Code im Baustein 2 mal zu schreiben mit unterschiedlichen Parametern, das wäre aber suboptimal.

    Der hier abgedruckte Code ist NUR ein Auszug, die ersten 21 Zeilen des Bausteins plus Variablendeklarationen.

    Code:
    VAR_INPUT
        Scene_Nr: INT := 0;
        In_Scenes: ARRAY[1..10] OF Scene_Data;
    
        Switch_Nr: INT := 0;
        In_Switches: ARRAY[1..10] OF Scene_Data;
    
    END_VAR
    
    VAR
        Active_Date: POINTER TO ARRAY[0..10] OF Scene_Data;
        Active_Nr: INT;
    END_VAR
    Code:
    IF In_Scenes[Scene_Nr].Statusbits[0] = FALSE AND In_Switches[Switch_Nr].Statusbits[0] = TRUE THEN
    
        Active_Date := ADR(In_Switches);
        Active_Nr := Switch_Nr;
    
    ELSIF In_Scenes[Scene_Nr].Statusbits[0] = TRUE AND In_Switches[Switch_Nr].Statusbits[0] = FALSE THEN
    
        Active_Date := ADR(In_Scenes);
        Active_Nr := Scene_Nr;
    
    ELSE
    
        Active_Date := ADR(In_Switches);
        Active_Nr := Switch_Nr;
    
    END_IF
    
    IF Active_Date^[Active_Nr].Statusbits[0] = FALSE THEN                            (*Zustand Szene deaktiviert*)
    
        (*Status := 1;*)
        RETURN;
    
    ...
    Geändert von Majestic_1987 (31.03.2009 um 18:48 Uhr)

  4. #24
    Registriert seit
    07.03.2004
    Beiträge
    4.369
    Danke
    946
    Erhielt 1.158 Danke für 831 Beiträge

    Standard

    Deine Arrays beginnen mal bei 1 und ein andermal bei 0.

    Im Code Greifst Du bei einem Array das bei 1 beginnt auf die Zelle 0 zu. Das nimmt Dir das Teil einfach übel.
    If you open your Mind too much, your Brain will fall out.

  5. #25
    Majestic_1987 ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    19.07.2008
    Ort
    Aachen
    Beiträge
    270
    Danke
    2
    Erhielt 21 Danke für 20 Beiträge

    Standard

    Das sind die Tippfehler, die einem nicht auffallen xD
    Ich versuchs mal xD

  6. #26
    Registriert seit
    07.03.2004
    Beiträge
    4.369
    Danke
    946
    Erhielt 1.158 Danke für 831 Beiträge

    Standard

    Da ich mal vermute das es nur ein Codefragment ist, kann meine Vermutung zutreffen.
    Diese Variablendeklaration:
    Code:
        Scene_Nr: INT := 0;
        In_Scenes: ARRAY[1..10] OF Scene_Data;
    Beißt sich mit dem Code:
    Code:
        IF In_Scenes[Scene_Nr].Statusbits[0] = FALSE THEN
    Wenn Du Scenes_Nr nicht größer 0 und kleiner-gleich 10 hast geht der Aufruf schief.
    If you open your Mind too much, your Brain will fall out.

  7. #27
    Majestic_1987 ist offline Erfahrener Benutzer
    Themenstarter
    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
    Nene, keine Sorge,

    den Fall In_Scenes = 0 decke ich in einem anderen Baustein ab und der resultiert in einem Return aus der zugehörigen schleife nachdem ein Statuswort gesetzt wurde, dass den Zustand bemeckert.

    Nach der Korrektur der Array-Definitionen läufts jetzt.

    ABER

    Wenn ich 1 mal zwischen Schalter und Szene gewechselt habe tut das Programm nix mehr...da muss ich wohl nochmal suchen...aber nicht mehr heute xD

Ähnliche Themen

  1. KOP/FUB indirekte Adressierung
    Von S7-kub im Forum Simatic
    Antworten: 3
    Letzter Beitrag: 14.03.2010, 19:13
  2. Indirekte Adressierung
    Von Bensen83 im Forum Simatic
    Antworten: 34
    Letzter Beitrag: 26.01.2010, 11:33
  3. Indirekte-Adressierung
    Von johnij im Forum Simatic
    Antworten: 2
    Letzter Beitrag: 14.02.2008, 14:32
  4. Indirekte Adressierung
    Von hbck im Forum Simatic
    Antworten: 1
    Letzter Beitrag: 29.06.2007, 17:11
  5. Indirekte Adressierung aus DB
    Von Abbath im Forum Simatic
    Antworten: 7
    Letzter Beitrag: 18.04.2005, 15:58

Lesezeichen

Berechtigungen

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