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)
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
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.
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
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
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
damit das ganze als einfacher funktionsblock zur verfügung steht haben wir inder oscat lib eine funktion dafür angelegt.
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
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
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
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.
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Hallo Zusammen,
für eine Laufzeitüberwachung wollte ich einfach eine Störmeldung nach x mal normalerLaufzeit verwenden. doch der Ausdruck
wird als Fehler angemerkt.
funktioniert ebenso wie
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)
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...
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.
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
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:
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.
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
Der Teufel steckt also mal wieder im Detail.
MFG
Benjamin
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.