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

Kann TIME nicht mit Zahl multiplizieren

Benjamin
2006-10-12
2006-11-02
  • Benjamin - 2006-10-12

    Hallo Zusammen,

    für eine Laufzeitüberwachung wollte ich einfach eine Störmeldung nach x mal normalerLaufzeit verwenden. doch der Ausdruck

    timLaufzeit : TIME;
    timTest : TIME;
    timTest := 2*timLaufzeit;
    

    wird als Fehler angemerkt.

    timTest := timLaufzeit + timLaufzeit;
    

    funktioniert ebenso wie

    timTest := DINT_TO_TIME(2 * TIME_TO_DINT(timLaufzeit))
    

    In der Hilfe zu Codesys steht jetzt, dass TIME intern wie DWORD behandelt wird. Daher ist das Verhalten, dass ich TIME-Variablen nicht multiplizieren kann nicht ganz nachvollziehbar.

    Ist das Verhalten so gewünscht, mache ich etwas falsch oder ist das doch eher ein Fehler im Programm?

    MFG

    Benjamin

    Codesys als XSoft von Möller (V 2.3.3.14)

     
  • mwatermann - 2006-10-12

    moin,

    TIME wird intern als DWORD gehandelt. wenn du TIME aber einer variablen zuweisst musst du dies glaube explizit mit TIME_TO_DWORD machen.

    wenn du deine variablen also als DWORD deklarierst und dann multiplizierst sollte es klappen...

     
  • Benjamin - 2006-10-12

    Genau so funktoniert es ja auch. Wenn du dir mein Posting noch einmal genauer anschaust wirst du feststellen, dass ich das durch die Anweisung erledigt habe.

    Das klärt aber nciht die Frage, wieso ich Zeitangaben nicht multiplizieren kann.

     
  • Anonymous - 2006-10-12

    Originally created by: Fx64

    Hallo Benjamin,

    das ist richtig, TIME wird intern als DWORD gehandelt, aber streng gesehen ist es natürlich TIME, also sollten die Casts schon sein.

    Viele Grüsse

     
  • Benjamin - 2006-10-12

    Ein Cast ist schon sinnvoll, aber ich muss Zeiten doch variabel verändern können.

    Und davon abgeshen, wieso ist dann "timTest + timTest" möglich?

    Ich fände eine Multiplikation von Zeitangabe schon sinnvoll.

    Beispiel:

     
  • hugo - 2006-10-12

    time ist immer typ time

    in st kann man also logisch newtime := time1 + time2; den hier sind alle 3 operanden vom typ time.

    time * int geht logischerweise nicht den time und int sind nicht vom gleichen typ.

    eine multiplikation von time ist aber nicxht definiert, eine addition schon.

    um deshalb eine zeit zu multiplizieren muss du erst alles in int oder real umwandeln, dann multiplizieren und dann wieder zurück in time

    newtime := real_to_time(time_to_real(time1) * multi);

    damit das ganze als einfacher funktionsblock zur verfügung steht haben wir inder oscat lib eine funktion dafür angelegt.

     
  • Anonymous - 2006-10-13

    Originally created by: Bernhard Werner

    Hallo allerseits,

    Benjamin hat schon recht, eigentlich sollte es funktionieren TIME mit einer Zahl zu multiplizieren. Das ist ja nur logisch. Tatsächlich geht es nämlich, wenn man die Zahl der zweite Operand ist:

    t1 := t2 * 2;

    das

    t1 := 2 * t2;

    einen Fehler liefert ist selbst ein Fehler und wird behoben.

    Bernhard Werner / 3S

     
  • Benjamin - 2006-10-13

    Der Teufel steckt also mal wieder im Detail.

    MFG

    Benjamin

     
  • debug - 2006-11-02

    Bernhard Werner hat geschrieben:
    Benjamin hat schon recht, eigentlich sollte es funktionieren TIME mit einer Zahl zu multiplizieren. Das ist ja nur logisch. Tatsächlich geht es nämlich, wenn man die Zahl der zweite Operand ist:
    t1 := t2 * 2;
    das
    t1 := 2 * t2;
    einen Fehler liefert ist selbst ein Fehler und wird behoben.

    Genial ist, dass das auch beim Funktionsblock TOF, TON, TP, Blink, etc. geht. Man kann als Basiszeit z.B. 't#1s' eingeben und als Multiplikator ein Eingabefaktor der Visualisierung, ohne Rechenaktionen.

     

Log in to post a comment.