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

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

Thema: Mehrfache AND Verknüpfung

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

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo zusammen,
    ich bin neu in der Programmierung und habe eine Frage bezüglich der Gestaltung von vielfachen and Verknüpfungen.

    Folgendes Beispiel:

    x = (a and b and c and d and e and f and g and h);
    x darf wirklich nur true werden, wenn alle Bedingungen erfüllt sind.

    Kann man so eine Syntax auch besser gestalten?

    Danke für eure Hilfe
    Zitieren Zitieren Mehrfache AND Verknüpfung  

  2. #2
    Registriert seit
    27.06.2009
    Ort
    am Nordharz
    Beiträge
    3.717
    Danke
    443
    Erhielt 919 Danke für 740 Beiträge

    Standard

    Nicht wirklich.

    Wenn a bis h alle in einem Byte liegen, kann man hier in diesem Fall das Byte auf := 255 abfragen.
    Wenn die Bits aber wild verstreut sind, hat man diese Möglichkeit nicht.
    Man kann dann zwar diese einzelnen Bits wiederum irgendwo zusammenfassen, aber ob das so viel übersichtlicher ist, muss jeder für sich selbst entscheiden.

  3. Folgender Benutzer sagt Danke zu hucki für den nützlichen Beitrag:

    KingHelmer (18.09.2014)

  4. #3
    Registriert seit
    06.01.2011
    Beiträge
    66
    Danke
    1
    Erhielt 11 Danke für 10 Beiträge

    Standard

    Ich mache es bei langen und Verknüpfungen so

    bOK : bool

    bOK := FALSE;

    bOK := diEingang1
    bOK := bOK AND FrgMaschine1
    bOK := bOK AND Merker

    IF bOK THEN

    Anweisung();

    END_IF;

    Beim debuggen kann man so zur not jede Abfrage durchtippen. Klappt aber bei einer SPS nur bedingt, weil die Anlage dann steht.
    Aber bei Roboterprogrammen oder c# Anwendungen hilft mir das schon eher, weil da ein durch Tippen nicht wehtut.

    Aber man kann den Code so auch besser lesen finde ich.

  5. #4
    Registriert seit
    27.07.2012
    Ort
    AUT
    Beiträge
    480
    Danke
    84
    Erhielt 159 Danke für 90 Beiträge

    Standard

    Zitat Zitat von Dos6.22 Beitrag anzeigen
    Ich mache es bei langen und Verknüpfungen so

    bOK : bool

    bOK := FALSE;

    bOK := diEingang1
    bOK := bOK AND FrgMaschine1
    bOK := bOK AND Merker

    IF bOK THEN

    Anweisung();

    END_IF;

    Beim debuggen kann man so zur not jede Abfrage durchtippen. Klappt aber bei einer SPS nur bedingt, weil die Anlage dann steht.
    Aber bei Roboterprogrammen oder c# Anwendungen hilft mir das schon eher, weil da ein durch Tippen nicht wehtut.

    Aber man kann den Code so auch besser lesen finde ich.
    Ich will dir nicht zu nahe treten und es muß eh jeder so programmieren wie er meint aber für mich gehört dein UND-Zusammengeschustere zur Kategorie "Irrer Ivan". Was soll denn daran besser sein als ein UND wie man es kennt?
    Regards NRNT

  6. #5
    Registriert seit
    24.02.2009
    Beiträge
    1.242
    Danke
    23
    Erhielt 276 Danke für 235 Beiträge

    Standard

    Viele Zustandskombinationen lassen sich mit Hilfe der Booleschen Algebra und/oder einem Karnaugh-Veitch-Diagramm vereinfachen/verkürzen. Aber elementare Sachen wie reine UND-Verknüpfungen gehen nicht einfacher.
    Sänd from mei Kombjudder mitse Dastadurr.

  7. Folgender Benutzer sagt Danke zu MasterOhh für den nützlichen Beitrag:

    norustnotrust (19.09.2014)

  8. #6
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.184
    Danke
    923
    Erhielt 3.290 Danke für 2.659 Beiträge

    Standard

    Zitat Zitat von MrChipsy Beitrag anzeigen
    x = (a and b and c and d and e and f and g and h);

    Kann man so eine Syntax auch besser gestalten?
    Ja - die Klammer weglassen
    Im Ernst: Deine Formulierung ist bereits maximal einfach.


    Eigentlich wollte ich gestern schon impulsiv schreiben:
    Der typische Home-ST-Programmierer würde etwa so schreiben:
    Code:
    x := 0;
    IF a = 1 THEN
      IF b = 1 THEN
        IF c = 1 THEN
          IF d = 1 THEN
            IF e = 1 THEN
              IF f = 1 THEN
                IF g = 1 THEN
                  IF h = 1 THEN
                    x := 1;
                  END_IF;
                END_IF;
              END_IF;
            END_IF;
          END_IF;
        END_IF;
      END_IF;
    END_IF;
    Da scheint wohl tatsächlich was Wahres dran zu sein...

    Diese Art der Programmierung hat den "Vorteil", daß es im günstigen Fall schnell ist, ansonsten aber unkalkulierbar schwankende Zykluszeiten verursacht, und eventuell kaum lokalisierbare Probleme, wenn mal zuviele Bits TRUE sind...

    Harald
    Es ist immer wieder überraschend, wie etwas plötzlich funktioniert, sobald man alles richtig macht.

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

  9. #7
    Registriert seit
    12.08.2014
    Ort
    Basel
    Beiträge
    208
    Danke
    23
    Erhielt 20 Danke für 19 Beiträge

    Standard

    Naja, wenn man das ganze auch noch modular machen möchte könnte man es auch über eine Rechenoperation machen. Dann könntest du auch noch auslesen wie viele und welche denn gerade aktiv sind. Hab ich schon mal gebraucht und mir nen Baustein davon gmacht. Dann einfach den Ausgang über Vergleicher laufen lassen und du kannst herausfiltern welche Eingänge aktiv sind. Da sieht dann so aus:

    Code:
    FUNCTION_BLOCK Testing
    VAR_INPUT
        I1:        BOOL;
        I2:        BOOL;
        I3:        BOOL;
        I4:        BOOL;
        I5:        BOOL;
        I6:        BOOL;
        I7:        BOOL;
        I8:        BOOL;
    END_VAR
    VAR_OUTPUT
        Q1:        INT;
    END_VAR
    VAR
        a:        INT;
        b:        INT;
        c:        INT;
        d:        INT;
        e:        INT;
        f:        INT;
        g:        INT;
        h:        INT;
    END_VAR
    
    
    IF (I1 = TRUE) THEN
        a := 1;
    ELSE
        a := 0;
    END_IF;
    
    IF (I2 = TRUE) THEN
        b := 2;
    ELSE
        b := 0;
    END_IF;
    
    
    IF (I3 = TRUE) THEN
        c := 4;
    ELSE
        c := 0;
    END_IF;
    
    
    IF (I4 = TRUE) THEN
        d := 8;
    ELSE
        d := 0;
    END_IF;
    
    
    IF (I5 = TRUE) THEN
        e := 16;
    ELSE
        e := 0;
    END_IF;
    
    
    IF (I6 = TRUE) THEN
        f := 32;
    ELSE
        f := 0;
    END_IF;
    
    
    IF (I7 = TRUE) THEN
        g := 64;
    ELSE
        g := 0;
    END_IF;
    
    
    IF (I8 = TRUE) THEN
        h := 128;
    ELSE
        h := 0;
    END_IF;
    
    
    Q1 := a + b + c + d + e + f + g + h;
    Nur so als kleinen (Offtopic- )Einwurf. Wäre auch möglich und...hat auch schon Anwendung gefunden.
    Geändert von JanB1 (19.09.2014 um 14:47 Uhr)

  10. #8
    Registriert seit
    27.07.2012
    Ort
    AUT
    Beiträge
    480
    Danke
    84
    Erhielt 159 Danke für 90 Beiträge

    Standard

    @JanB1, mal abgesehen davon daß I1 nicht verschaltet ist, was hat dieser kuriose Block mit einem logischen UND zu tun? Wie wird dieser Block dem TS helfen seine UND Verknüpfungen zu vereinfachen? Und was hat das mit Modularität zu tun? Und was wo soll wer wann mit deinem Block auslesen was gerade aktiv ist? Reicht die Information "True" nicht um die Aktivität anzuzeigen? Was macht eine 2,4 in einem INT aktiver als eine Bool?

    Fragen über Fragen...
    Geändert von norustnotrust (19.09.2014 um 14:40 Uhr)
    Regards NRNT

  11. #9
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.184
    Danke
    923
    Erhielt 3.290 Danke für 2.659 Beiträge

    Standard

    Zitat Zitat von JanB1 Beitrag anzeigen
    Code:
    FUNCTION_BLOCK Testing
    VAR_INPUT
        I1:        BOOL;
        I2:        BOOL;
        I3:        BOOL;
        I4:        BOOL;
        I5:        BOOL;
        I6:        BOOL;
        I7:        BOOL;
        I8:        BOOL;
    END_VAR
    VAR_OUTPUT
        Q1:        INT;
    END_VAR
    VAR
        a:        INT;
        b:        INT;
        c:        INT;
        d:        INT;
        e:        INT;
        f:        INT;
        g:        INT;
        h:        INT;
    END_VAR
    
    
    IF (I1 = TRUE) THEN
        a := 1;
    ELSE
        a := 0;
    END_IF;
    
    IF (I2 = TRUE) THEN
        b := 2;
    ELSE
        b := 0;
    END_IF;
    
    
    IF (I3 = TRUE) THEN
        c := 4;
    ELSE
        c := 0;
    END_IF;
    
    
    IF (I4 = TRUE) THEN
        d := 8;
    ELSE
        d := 0;
    END_IF;
    
    
    IF (I5 = TRUE) THEN
        e := 16;
    ELSE
        e := 0;
    END_IF;
    
    
    IF (I6 = TRUE) THEN
        f := 32;
    ELSE
        f := 0;
    END_IF;
    
    
    IF (I7 = TRUE) THEN
        g := 64;
    ELSE
        g := 0;
    END_IF;
    
    
    IF (I8 = TRUE) THEN
        h := 128;
    ELSE
        h := 0;
    END_IF;
    
    
    Q1 := a + b + c + d + e + f + g + h;
    Das muß echt ein Depp gewesen sein, wer derart umständlich Bits in ein Byte kopiert

    Harald
    Es ist immer wieder überraschend, wie etwas plötzlich funktioniert, sobald man alles richtig macht.

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

  12. #10
    Registriert seit
    19.06.2008
    Ort
    Ostalbkreis
    Beiträge
    3.140
    Danke
    201
    Erhielt 553 Danke für 498 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    gelöscht.....

    weil im falschen Fred
    Geändert von Verpolt (19.09.2014 um 15:54 Uhr)

Ähnliche Themen

  1. UND Verknüpfung
    Von ETechniker2011 im Forum CODESYS und IEC61131
    Antworten: 3
    Letzter Beitrag: 20.01.2011, 11:06
  2. Schaltplanerstellung: mehrfache Zwischenklemmung
    Von Drain im Forum Elektronik
    Antworten: 2
    Letzter Beitrag: 08.05.2009, 08:02
  3. DWORD AND-Verknüpfung
    Von Gerri im Forum CODESYS und IEC61131
    Antworten: 1
    Letzter Beitrag: 23.02.2009, 17:41
  4. Und Verknüpfung
    Von Computerliebe im Forum HMI
    Antworten: 8
    Letzter Beitrag: 17.12.2007, 12:19
  5. mehrfache Zuweisung von Ausgängen im Programm
    Von mitchih im Forum Programmierstrategien
    Antworten: 7
    Letzter Beitrag: 18.09.2007, 19:19

Lesezeichen

Berechtigungen

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