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

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

Thema: Problem: 25 mal IF THEN ELSE soll als Schleife ablaufen (Codesys)

  1. #1
    Registriert seit
    16.01.2012
    Beiträge
    8
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo zusammen,
    ich habe ein Problem und zwar möchte ich ein Hochregallager mit 25 Fächern bestücken. Nun habe ich es so gelöst in dem ich 25 mal IF THEN ELSE auf geschrieben habe…geht aber schlecht Programmiert. Nun würde ich gerne das in eine Schleife Packen, bin aber nur ein Anfänger in der Codesys Programmierung (Jeder fängt mal klein an )
    Programm ausschnitt:
    IF (Fach_25_Platz = FALSE) AND (Rot_Ein_Pflanke.Q )THEN
    Fach_25 := TRUE;
    Auto_Start := TRUE;
    Fach_25_Platz := TRUE;
    Fach_25_ROT := TRUE;
    ELSE
    IF (Fach_24_Platz = FALSE) AND (Rot_Ein_Pflanke.Q )THEN
    Fach_24 := TRUE;
    Auto_Start := TRUE;
    Fach_24_Platz := TRUE;
    Fach_24_ROT := TRUE;
    ELSE
    IF (Fach_23_Platz = FALSE) AND (Rot_Ein_Pflanke.Q ) THEN
    Fach_23 := TRUE;
    Auto_Start := TRUE;
    Fach_23_Platz := TRUE;
    Fach_23_ROT := TRUE;
    ELSE

    … das Ganze geht nun bis auf 0 runter!

    Über ein lösungsverschlag freue ich mich
    Zitieren Zitieren Problem: 25 mal IF THEN ELSE soll als Schleife ablaufen (Codesys)  

  2. #2
    Registriert seit
    22.05.2005
    Ort
    sonniges Maifeld
    Beiträge
    1.067
    Danke
    77
    Erhielt 205 Danke für 159 Beiträge

    Standard

    Switch Case ?
    "Man kann auf seinem Standpunkt stehen, aber man sollte nicht darauf sitzen" - Erich Kästner

  3. #3
    Registriert seit
    29.03.2004
    Beiträge
    5.735
    Danke
    143
    Erhielt 1.685 Danke für 1.225 Beiträge

    Standard

    Am besten wäre es natürlich wenn die Fächer-Daten vorher schon in einer Array-Struktur angelegt sind.
    Wenn das aus irgendeinem Grunde nicht mehr zu ändern ist, kann man sich behelfen indem man die unstrukturierten Daten für die Schleifenbearbeitung in die entsprechende Struktur bringt, dann bearbeitet und die Daten wieder zurückschreibt.

    In deinem Fall einen Datentyp (meinetwegen "t_Fach") anlegen der die Informationen (Fach, Platz, Rot) beinhaltet, und von diesem ein Array anlegen.

    Code:
    FACH : ARRAY[1..25] OF t_Fach;
    Dann die Array Daten beschreiben
    Code:
    FACH[25].Platz := Fach_25_Platz;
    FACH[24].Platz := Fach_24_Platz;
    .
    .
    Dann Schleifenbearbeitung.
    Code:
    FOR i := 25 to 1 by -1 do
      IF (FACH[i].Platz...
    Und dann wieder zurückschreiben
    Code:
    Fach_25_Platz := FACH[25].Platz;
    Fach_25_Rot := FACH[25].Rot;
    Fach_24_Platz := FACH[24].Platz;
    Fach_24_Rot := FACH[24].Rot;
    .
    .

  4. #4
    Rekling ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    16.01.2012
    Beiträge
    8
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Super, danke für die schnellen antworten!!!

    werde es sofort ausprobieren.

  5. #5
    Rekling ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    16.01.2012
    Beiträge
    8
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard

    hallo Thomas_V2.1

    ich hätte noch ne frage und zwar:

    Was für ein Datentyp muss ich für FACH und t_Fach wählen?

    "FACH : ARRAY[1..25] OF t_Fach;"

    ...i ist klar muss Int sein.
    Sind die andren beiden Boolisch??

    noch ne frage: kann ich das eintragen ins Array in einem eigenem PRG schrieben und anschließend mehrfach verwenden??






    Danke und Gruß Rekling

  6. #6
    Registriert seit
    29.03.2004
    Beiträge
    5.735
    Danke
    143
    Erhielt 1.685 Danke für 1.225 Beiträge

    Standard

    Zitat Zitat von Rekling Beitrag anzeigen
    Was für ein Datentyp muss ich für FACH und t_Fach wählen?
    "FACH" ist der Variablenname den ich einfach mal so frei vergeben habe. "t_FACH" ist der Datentyp der Variable, den Namen habe ich mir auch ausgedacht. Aufgrund deines Codeschnipsels bin ich einfach davon ausgegangen dass dein Fach mehrere boolsche Variablen beinhaltet. Solche Dinge fasst man beim Programmieren am besten in einen eigenen Datentyp zusammen.

    Um die Datentypen anzulegen gibt es in der Codesys Umgebung neben dem Reiter "Bausteine" einen eigenen Namens "Datentypen". Dort kannst du einen neuen Typ hinzufügen der dem Aufbau deines Fachs entspricht.
    Was man aus deinen Daten entnehmen kann z.B. so:
    Code:
    TYPE t_Fach :
    STRUCT
    	Platz : BOOL;
    	Rot : BOOL;
    END_STRUCT
    END_TYPE
    Ein Arrayeintrag FACH[n] beinhaltet dann diese beiden Variablen. Beim Eintippen der Variable z.B. FACH[1]. bietet dir der Editor in einer Liste auch die entsprechenden Strukturmitglieder zur Auswahl an. Wenn dein Fach-Eintrag mehr Variablen benötigt, erweiterst du den TYPE und alle Array-Einträge erhalten ebenfalls zusätzlich diese Variable.

    Zitat Zitat von Rekling Beitrag anzeigen
    Sind die andren beiden Boolisch??
    Das musst du am besten wissen, ich bin einfach davon ausgegangen da du true vergleichst und zuweist.
    Wahrscheinlich hab ich schon wieder viel zu viel Code gepostet...

    Zitat Zitat von Rekling Beitrag anzeigen
    noch ne frage: kann ich das eintragen ins Array in einem eigenem PRG schrieben und anschließend mehrfach verwenden??
    Das kannst du theoretisch machen. Am schönsten wäre es aber wenn du die Daten gleich irgendwo NUR als Array anlegst, und dann dieses Array an verschiedene Funktionen die damit arbeiten sollen als Parameter der Funktionen übergibst.
    Das erspart dir diese umkopiererei, und falls mal ein Fach dazukommen sollte brauchst du weniger Programm zu ändern.

  7. #7
    Rekling ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    16.01.2012
    Beiträge
    8
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard

    hy, danke... habe das ganze verstanden!
    also "t_FACH" ist ja der Datentyp für "FACH"

    "FACH : ARRAY[1..25] OF t_Fach;"

    ..."t_Fach" habe ich in Datentypen angelget, mit seinen drei bedingungen

    nun möchte ja Codesys eine Deklaration von mir haben. Also sage ich ihm Name: "FACH" = Typ: "t_Fach(STRUCT) ...."OK"

    anschließend möchte er auch eine Deklaration für "t_Fach" haben und das versteh ich nicht??

    Danke Gruß Rekling

  8. #8
    Registriert seit
    29.03.2004
    Beiträge
    5.735
    Danke
    143
    Erhielt 1.685 Danke für 1.225 Beiträge

    Standard

    Wenn du den Datentyp "t_Fach" angelegt hast sollte Codesys eigentlich nichts zu meckern haben.

    Die komplette Deklaration im VAR-Bereich sähe so aus, hast du das so in der Art?
    Code:
    VAR
    	FACH : ARRAY[1..25] OF t_Fach;
    END_VAR
    t_Fach ist einfach ein von dir definierter Variablentyp. Wie die Typen INT oder REAL, nur dass du den Aufbau von t_Fach selber definiert hast.

  9. #9
    Rekling ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    16.01.2012
    Beiträge
    8
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard

    ...war mein fehler, da ich aus der FB.net welt komme habe ich es über das Programm geschrieben und nicht in den:


    VAR

    END_VAR
    somit ist es ja klar das es nicht funktioniert!

    Danke noch mal und nen Schönen Tag
    Gruß Rekling

  10. #10
    Rekling ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    16.01.2012
    Beiträge
    8
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    hallo,
    habe jetzt ein neues Problem worauf ich nach viel versuchen verschiedener Arten nicht drauf komme!

    Code:
    FOR i := 25 TO 1 BY -1 DO
    IF (FACH[i].Platz = FALSE) AND (Rot_Ein_Pflanke.Q ) THEN

    FACH[i].Rot := TRUE;
    Auto_Start := TRUE;
    FACH[i].Platz := TRUE;
    FACH[i].Pos := TRUE;
    EXIT;
    END_IF;
    END_FOR;


    ... Im ersten durchlauf, setz er mir das "Fach[25].Platz" auf true und die restlichen auf false ...ist richtig so!
    nun sollte auch "Fach[25].Rot" auf true und die restlichen auf false gesetz werden.
    Aber der setz mit alle außer den 24 auf true????

    Idee??

    Danke um Antwort

Ähnliche Themen

  1. Problem bei einer Such-Schleife
    Von Imker im Forum Simatic
    Antworten: 37
    Letzter Beitrag: 26.01.2012, 19:40
  2. Brauche mal hilfe als Anfänger
    Von sonic_229 im Forum CODESYS und IEC61131
    Antworten: 2
    Letzter Beitrag: 16.11.2011, 11:01
  3. mal etwas anderes als nur Siemens!
    Von rostiger Nagel im Forum Stammtisch
    Antworten: 16
    Letzter Beitrag: 31.07.2011, 11:27
  4. Antworten: 2
    Letzter Beitrag: 13.01.2008, 16:34
  5. Zeit als schleife
    Von Anonymous im Forum Simatic
    Antworten: 1
    Letzter Beitrag: 12.02.2006, 07:57

Stichworte

Lesezeichen

Berechtigungen

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