aktionen

hepo
2009-03-23
2009-03-29
  • hepo - 2009-03-23

    hallo an die runde!

    hätte da mal eine frage betreffend aktionen.

    in oscat hat hugo einen beitrag zu aktionen geschrieben. ganz verstehe

    ich allerdings nicht, wie man sich dann mit aktionen die ganzen if-then-endif

    ersparen kann.

    ich hätte mehr als 100 solcher abfragen, jede weniger wäre eine freude !

    wenn ich eine aktion mit einer BOOL-variable aufrufe, dann meckert

    die kiste, obwohl das ja am logischten wäre (...wenn true dann mach die

    aktion).

    gibt es noch eine möglichkeit, mit einer einfachen zustandsabfrage eine

    aktion zu starten?

     
  • Matze001 - 2009-03-24

    Wenn du eine Variable einfach vergleichen willst sollte EQ (equal) helfen.

    Wenn dir der Wert bekannt ist den sie haben soll. Wenn nicht GT (größer als) oder LT (kleiner als)

    MfG

    Marcel

     
  • hepo - 2009-03-24

    den vergleich in ST mach ich sowieso mit := , also ein EQ brauch ich

    da nicht wirklich.

    es geht mir rein darum, die endlosen if-then verknüfungen mittels

    auktionenaufruf los zu werden.

     
  • gravieren - 2009-03-24

    Hi

    Zitat:
    den vergleich in ST mach ich sowieso mit := , also ein EQ brauch ich
    da nicht wirklich.

    Seltsam, ich benutze immer das "=" für den Vergleich auf Gleichheit.

     
  • Matze001 - 2009-03-24

    und ich == oder ===

    MfG

    Marcel

     
  • gravieren - 2009-03-24

    Hi

    Und ich ( NOT ( x <> Y))

     
  • Matze001 - 2009-03-24

    dann nehmen wa...

    NOT ( NOT ( a == b))

    So langsam wirds... bekloppt:-D

    MfG

    Marcel

     
  • gravieren - 2009-03-24

    Hi Matze

    Zitat:
    NOT ( NOT ( a == b))

    Spassbeseite, das mit dem "==" geht nur bei C++.

    Bei ST sollte es "=" heissen, oder irre ich mich ?

    Z.b.

    IF X = Y THEN

    X := 333;
    

    END_IF;

     
  • Matze001 - 2009-03-24

    Okay, hast recht.

    Dann habe ich ST und php durcheinander geworden.

    Grad nochmal getestet.

    Es geht also mit "=".

    MfG

    Marcel

     
  • gravieren - 2009-03-24

    Hi

    Zitat:
    Okay, hast recht.

    Akzeptiere ich jedoch NUR, wenn du das nächste mal recht hast.

    P.S:

    Habe es erst auch mal getestet.

    Das ist eigentlich unlogisch.

    Logischerweise, da möglich :

    <=

    =

    <>

    Folglich --> sollten es auch 2 Zeichen sein.

    Sieht man jedeoch:

    <

    Dann wieder logisch. --> verwirrend

     
  • Matze001 - 2009-03-24

    gleich hau ich dich

    in PHP ist es so:

    = zuweisung (hier := [zwei zeichen^^])

    == vergleicht den inhalt

    === vergleicht inhalt und datentyp (int, word, ...)

    Hier nur ein einfaches = ist akzeptiert

    MfG

    Marcel

     
  • hepo - 2009-03-25

    ...ok das wüssten wir ja nun.

    aber gäbe es noch infos zum aufruf von aktionen?

     
  • Else - 2009-03-25

    Für die Aktionen weiß ich nichts, aber wenn es immer die gleiche Variable ist die Du abfragst, wäre doch eine Case Verteilung sinnig:

    CASE Var OF

    1:

    ( mach was );

    2..5:

    ( mach was anderes );

    END_CASE

     
  • hepo - 2009-03-27

    ...grundsätzlich richtig, aber da ich mit BOOL variablen arbeite, müßte

    ich vorher wieder einen numerischen index anlegen, das wollte ich mir

    eigentlich mit den aktionen ersparen.

     
  • Else - 2009-03-27

    Naja nicht unbedingt:

    test_Bo: BOOL;

    ...

    CASE BOOL_TO_INT(test_Bo) OF

    1:

    (* tu was *)
    

    0:

    (* tu nix oder was anderes *)
    

    END_CASE

    Wenn Du allerdings viele unterschiedliche Variablen hast wird sich der Aufwand gegenüber dem IF-Gedöns nicht wesentlich reduzieren.

     
  • hepo - 2009-03-27

    genau das ist das problem. ich hab ca. 120 fehlermeldungen zu verarbeiten,

    die alle als BOOL-variable am CAN-bus zur verfügung stehen.

    trotzdem danke für die mühe!

     
  • Else - 2009-03-27

    Dann hab ich noch ne Idee:

    Wenn Du jeweils die Adresse von 8 Bits in eine Struktur packst (also als POINTER TO BOOL) kannst Du mit der Adresse der Struktur wie auf ein Byte zugreifen, weil die Bits der Struktur im Speicher aufeinander folgen. Wenn nun eines der Bytes <> 0 ist, hast Du einen Fehler und mußt nur noch auswerten, an welcher Stelle des Bytes. Geht natürlich auch mit Word etc. Mit Bytes würdest Du zumindest auf 15 Auswertefragen reduzieren.

     
  • hepo - 2009-03-29

    danke, else!

    an diesen ansatz hab ich auch schon gedacht. werd ich gleich mal ausprobieren!

     

Log in to post a comment.