oscat.lib > oscat.lib fuer PC WorX/MULTIPROG
Problem mit Timer_P4
michaelgreubel:
Hallo,
ich habe am Timer_P4 ein Problem mit der Startzeit und der Dauer.
Wenn ich die Startzeit mit Set_TOD wandel ist die UDINT Zahl um Faktor 1000 zu hoch.
Im Baustein ist die Wandlung Time_to_Udint auch um den Faktor 1000 zu hoch.
Gibt es hier schon eine Lösung ?
Gruß Michael
peewit:
kann dein problem bei set_tod nicht nachvollziehen
set_tod wandelt die zeit in das format tod und das ist die tagezeit in millisekunden und nicht sekunden somit um faktor 1000 groesser
kann das sein das du dich da irrst ?
da bei pcworx die typen tod, date, dt usw... nicht unterschieden werden können, könnte es sein, das du bei einem der parameter bei timer_p4 einen falschen wert übergibst (falsche einheit) z.b. ein DT wert anstatt TOD ?
michaelgreubel:
Der Timer-P4 benötigt am Eingang DTIME einen DT Typ der keine Millisekunden hat.
Den DT Type braucht der Baustein um Wochentage zu errechnen.
Ich habe folgente änderung gemacht und es scheind zu funktionieren.
alle event.start zu event.start / UDINT#1000 ersetzt.
alle TIME_TO_UDINT(event.DURATION) zu TIME_TO_UDINT(event.DURATION) / UDINT#1000 ersetzt.
alle tref_x zu tref_x / UDINT#1000 ersetzt.
Gruß Michael
peewit:
hallo
ja, jetzt habe ich auch das problem erkannt
beim original-codesys-code wird z.b. folgendes gemacht
start := day_start + TOD_TO_TIME(event.start);
(DT) := (DT) + TIME
DT = zeit in sekunden
TIME und TOD = zeit in millisekunden
im prinzip werden wie bei pcworx verschiedene einheiten addiert, wobei bei codesys der compiler automatisch
den TIME wert vorher noch auf DT konvertiert und somit richtig rechnet , was leider bei pcworx aber nicht passiert
im prinzip hast du mit deiner anpassung das übel schon richtig erkannt
ich habe eine neue version des bausteins gemacht (siehe anhang)
teste das mal und wenn ok werde ich das übernehmen
danke nochmals ....
[gelöscht durch Administrator]
michaelgreubel:
Hallo,
Ja das funktioniert.
Sollte es aber nicht bei der Funktion 43 (* event on workdays Mo-FR and no holiday *)
statt
IF DAY_OF_WEEK(DT_TO_DATE(dtime)) < 6 THEN
IF (Not Holy) and (DAY_OF_WEEK(DT_TO_DATE(dtime)) < 6) THEN
sonst funktionieren die Feiertage nicht.
Gruß Michael
Navigation
[0] Themen-Index
[#] Nächste Seite
Zur normalen Ansicht wechseln