Welcome to our new forum
All users of the legacy CODESYS Forums, please create a new account at account.codesys.com. But make sure to use the same E-Mail address as in the old Forum. Then your posts will be matched. Close

Logikproblem

Anonymous
2009-12-13
2009-12-14
  • Anonymous - 2009-12-13

    Originally created by: softwareheini

    Hallo zusammen,

    ich habe ein kleines Logikproblem.

    Ich habe einen FB der 10 Integer Eingangsvariablen und

    eine boolsche Ausgangsvariable hat.

    Wenn jetzt am Eingang 1 z.B. eine Zahl von 1 bis ... steht und

    bausteinintern eine Berechnung OK ist, dann soll mein Ausgang TRUE sein.

    Wenn jetzt aber am Eingang 1 und am Eingang 2 eine Zahl von 1 bis ... steht,

    dann müssten meine zwei internen Berechnungen mit UND verküpft werden.

    D.h. meine Ausgang wird erst TRUE wenn beide Berechnungen OK sind.

    Es kann auch vorkommen das nur z.B. Eingang 5 beschalten wird

    und mein Ausgang nach der Berechnung TRUE wird.

    Und das ganze eben mit 10 Eingängen.

    Kann mir vielleicht jemand einen Tipp geben wie man so etwas lösen könnte?

    Hoffe hab das ganzen einigermaßen verständlich beschrieben

    Das ganze läuft auf einem Wago 750-841.

    Vielen Dank schon mal vorab und noch einen schönen Sonntag!

    mfg

    softwareheini

     
  • Matze001 - 2009-12-13

    Hallo,

    hab ich das richtig verstanden?

    Eingang 1 ist IMMER vorhanden.

    Eingang 2-10 sind nicht immer beschaltet.

    Dann wäre es doch im Prinzip

    Eingang 2 -> Rechnung | OR

    Eingang 3 - > Rechnung | OR

    Eingang N - > Rechnung | OR

    Eingang 10 -> Rechnung |

    ___|

    AND

    Eingang 1 -> Rechnung

    Setzt den Ausgang.

    Was soll passieren wenn zwei Eingänge beschaltet sind? Soll der Ausgang nur gesetzt werden wenn beide Rechnugen TRUE liefern?

    MfG

    Marcel

     
  • Anonymous - 2009-12-13

    Originally created by: softwareheini

    Hallo,

    1) Nein, es sind immer alle Eingange vorhanden.

      Nur kann ich durch einen Wert > 0 am jeweiligen Eingang sagen,
    
      das quasi jetzt die dazugehörige Berechnung im FB stattfinden soll.
    
    
    
      Steht 0 am Eingang, wird dieser nicht benutzt.
    

    2) Ja, wenn zwei oder mehrere Eingänge beschalten sind sollen

       die berechneten Ergebnisse mit UND verknüpft werden und den
    
        Ausgang schalten.
    

    mfg

    softwareheini

     
  • Michael.Klank - 2009-12-14

    Meinst Du sowas in der Art:

    CASE uiState OF
    0:
       IF bStart THEN
          IF iVal1<>0 THEN
             diErgebnis:=iVal1+1;
             uiState:=1;
          ELSE
             uiState:=1;
          END_IF
       END_IF
    1:
       IF iVal2<>0 THEN
          diErgebnis:=iVal1+iVal2+1;
          uiState:=2;
       ELSE
          uiState:=2;
       END_IF
    2:
       IF iVal3<>0 THEN
          diErgebnis:=iVal1+iVal2+iVal3+1;
          uiState:=3;
       ELSE
          uiState:=3;
       END_IF
    3:
       IF iVal4<>0 THEN
          diErgebnis:=iVal1+iVal2+iVal3+iVal4+1;
          uiState:=4;
       ELSE
          uiState:=4;
       END_IF
    4:
       IF iVal5<>0 THEN
          diErgebnis:=iVal1+iVal2+iVal3+iVal4+iVal5+1;
          uiState:=5;
       ELSE
          uiState:=5;
       END_IF
    5:
       IF iVal6<>0 THEN
          diErgebnis:=iVal1+iVal2+iVal3+iVal4+iVal5+iVal6+1;
          uiState:=6;
       ELSE
          uiState:=6;
       END_IF
    6:
       IF iVal7<>0 THEN
          diErgebnis:=iVal1+iVal2+iVal3+iVal4+iVal5+iVal6+iVal7+1;
          uiState:=7;
       ELSE
          uiState:=7;
       END_IF
    7:
       IF iVal8<>0 THEN
          diErgebnis:=iVal1+iVal2+iVal3+iVal4+iVal5+iVal6+iVal7+iVal8+1;
          uiState:=8;
       ELSE
          uiState:=8;
       END_IF
    8:
       IF iVal9<>0 THEN
          diErgebnis:=iVal1+iVal2+iVal3+iVal4+iVal5+iVal6+iVal7+iVal8+iVal9+1;
          uiState:=9;
       ELSE
          uiState:=9;
       END_IF
    9:
       IF iVal10<>0 THEN
          diErgebnis:=iVal1+iVal2+iVal3+iVal4+iVal5+iVal6+iVal7+iVal8+iVal9+iVal10+1;
          uiState:=10;
       ELSE
          uiState:=10;
       END_IF
    10:
       IF NOT bStart THEN
          uiState:=0;
          diErgebnis:=0;
       END_IF
    END_CASE
    

    Michael

     
  • Anonymous - 2009-12-14

    Originally created by: softwareheini

    Hallo Michael,

    erstmal vielen Dank für Deine Antwort.

    Vom Prinzip her, so ungefähr.

    Nur ist mein Problem der boolsche Ausgang, der

    (falls mehr als ein Eingang belegt ist) mit UND verknüpft werden soll.

    Die Eingänge die nicht belegt sind, müssten irgendwie „ausgeblendet“ werden.

    Und wenn nur einer belegt ist müsste dieser dem Ausgang direkt zugewiesen werden.

    mfg

    softwareheini

     
  • Matze001 - 2009-12-14

    Dann mach doch einfach das der "Eingang" vom AND immer TRUE ist wenn der Wert 0 ist

    MfG

    Marcel

     
  • HenryR - 2009-12-14

    Probiers mal so:

    IF "alle Eingänge nicht gesetzt"

    THEN Ausgang = FALSE
    

    ELSE

    Ausgang = TRUE
    

    ENDIF.

    IF EINGANG1 > 0 AND Ausgang = TRUE

    Ausgang =  TRUE/FALSE von "Berechnung1"
    

    ELSEIF EINGANG2 > 0 AND Ausgang = TRUE

    THEN Ausgang = TRUE/FALSE von "Berechnung2"
    

    ELSEIF EINGANG3 > 0 Ausgang = TRUE

    THEN Ausgang = TRUE/FALSE von "Berechnung3"
    

    ELSEIF EINGANG4 > 0 Ausgang = TRUE

    THEN Ausgang = TRUE/FALSE von "Berechnung4"
    

    ....

    ENDIF

    Somit sind alle Berechnungen UND Verknüpft und bei dem ersten negativen Ausgang einer Berechnung werden auch nicht mehr die anderen Berechnungen durchgeführt, da der Ausgang ja sowieso FALSE sein muss.

    lg

    Henry

     
  • HenryR - 2009-12-14

    Hab zu schnell auf senden gedrückt - sollten natürlich lauter IFs sein:

    IF EINGANG1 > 0 AND Ausgang = TRUE

    Ausgang = TRUE/FALSE von "Berechnung1"

    ENDIF.

    IF EINGANG2 > 0 AND Ausgang = TRUE

    THEN Ausgang = TRUE/FALSE von "Berechnung2"

    ENDIF

    IF EINGANG3 > 0 AND Ausgang = TRUE

    ...

    lg

    Henry

     
  • Anonymous - 2009-12-14

    Originally created by: softwareheini

    Hallo Marcel,

    oooh mann, ich hab glaub ich ein RIEßEN Brett vorm Kopf!

    Einfacher gehts nun wirklich nicht mehr.

    Mann sollte echt nicht immer so kompliziert denken!

    Vielen Dank Marcel! --> auch an Henry

    P.S. Klasse Forum hier. DANKE!

     
  • Matze001 - 2009-12-14

    Manchmal sieht man den Wald vor lauter Brettern nicht

    Oder wie ging der Spruch?

    Ist doch schön das es nun klappt.

    MfG

    Marcel

     

Log in to post a comment.