Timer in Multiinstanz

Zuviel Werbung?
-> Hier kostenlos registrieren
Eine Millisekunde ist ja auch ein riesige Zeit. Es gibt SPSen die in einer Millisekunde recht große Programme mit vielen IEC Timern abarbeiten können.
Stimmt, doch mache das einmal Siemens klar, dass die 840d so schnelle Cpu braucht und unseren Kunden, dass sie eine schneller und leider teuere Hardware brauchen.

bike
 
ich hab für mich entschieden, resourcenschonend die Millisekunden von OB1_prev_cycle zu zählen. Gut, mal geschwind so ein S5-Timer, das ist auch recht nett, wenn es mal schnell und unkompliziert gehen darf. IEC-Timer: im Prinzip besser, aber eben leider teurer in der Verwendung und auch unflexibler:eek:
 
Zuviel Werbung?
-> Hier kostenlos registrieren
ich hab für mich entschieden, resourcenschonend die Millisekunden von OB1_prev_cycle zu zählen. Gut, mal geschwind so ein S5-Timer, das ist auch recht nett, wenn es mal schnell und unkompliziert gehen darf. IEC-Timer: im Prinzip besser, aber eben leider teurer in der Verwendung und auch unflexibler:eek:


wie ich schon sagte, aber man sollte die OB1_prev_cycle nicht für
zu lange Prozesszeiten verwenden - für die Störüberwachung spielt die
Zeitgenauigkeit ja keine Rolle.

Bespiel:

gewünschte Zeit: 30 Sekunden ==>

bei CPU317 OB1_prev_cycle wird immer aufgerundet auf 3 Millisekunden

weil ECHTE Zykluszeit 2,55 msec

das sind 10000 Durchläufe ==> dann hat man gemittelt 25,5 Sekunden und nicht 30 Sekunden.

Dann vielleicht besser alles auf UTC beziehen:

http://www.sps-foren.de/showpost.php?p=124788&postcount=7

Gruß
 
S5Timer kennt jeder, kann jeder!

Was braucht man mehr?

zeiten die man in bibliotheksfähigen bausteinen verwenden kann! also z.b. die iec-timer als multiinstanz in FBs, OB_PREV_CYCLE addierer in FBs und FCs und evtl. die taktmerkerbyte addierer die auch in FCs UND FBs funktionieren... das sind alles bessere lösungen als die übergabe der Timer-Nr. ...
 
Zuviel Werbung?
-> Hier kostenlos registrieren
das sind alles bessere lösungen als die übergabe der Timer-Nr. ...

Ja?

Da sind denke ich erhebliche Zweifel angesagt.
Warum die Übergabe eines Timers nicht gut und zuverlässig sein soll erschliesst sich mir nicht ganz.
Ein IEC timer, den kann ich doch direkt garnicht in anderen Funktionen verwenden, S5 Timer schon.
Und wegen Bibliotek: Es ist doch einfach symbolisch zu programmieren und dann dem Nutzer die Adresse des Timers zu überlassen.



bike
 

JA!

Da sind denke ich erhebliche Zweifel angesagt.
Warum die Übergabe eines Timers nicht gut und zuverlässig sein soll erschliesst sich mir nicht ganz.

weil man immer wieder eine rückversicherung ala referenzdaten/"gehe zu verwendungsstelle" braucht um timer nicht doppelt zu belegen.

Ein IEC timer, den kann ich doch direkt garnicht in anderen Funktionen verwenden, S5 Timer schon.

in funktionen nicht - siehe meine ausführungen oben - in funktionsbausteinen kannst du weiter oben erwähnte multiinstanz verwenden

Und wegen Bibliotek: Es ist doch einfach symbolisch zu programmieren und dann dem Nutzer die Adresse des Timers zu überlassen.

warum auf halben weg stehen bleiben, warum dem nutzer oder sich selber noch auferlegen den aufgerufenen baustein noch mal zu bearbeiten. darüber hinaus kannst du mit globaler adressierung den baustein eben nicht mehrfach aufrufen. und wenn du jetzt wieder sagst: schnittstelle - nr. übergeben, dann schau oben ...
 
Zuviel Werbung?
-> Hier kostenlos registrieren
diese Erfahrung hab ich bis jetzt nur mit der CPU 318 machen müssen.

da mir noch nie eine "echte" 400er begegnet ist: machen die Dinger alle diesen Fehler?



das ist doch kein Fehler :confused: es gibt nunmal keine Nachkommastelle!!!
Das sind ganz normal "Auf" oder ggf. auch "Ab"-Rundungsfehler - also
völlig normal.

Gruß


P.S. Für einen "Kleinmaschinenprogrammierer" ist der S5-Timer ggf. ausreichend :rolleyes:



.
 
...
das ist doch kein Fehler :confused: es gibt nunmal keine Nachkommastelle!!!
Das sind ganz normal "Auf" oder ggf. auch "Ab"-Rundungsfehler - also
völlig normal.
...
ach so, ich vergas: die 318 rundet grundsätzlich auf. Auch wenn nur der OB1 läuft, mit nichts als Inhalt, als dem Befehl "L #OB1_prev_cycle", so sieht man im Status den Wert 1 :(
bei den anderen "Klein"steuerungen kann ich den OB1_prev_cycle aufsummieren, solange ich will, da konnte ich zu einer Referenzuhr bislang keinen Unterschied feststellen (auch nicht zu SFC64). Jetzt wollte ich nur wissen, ob alle "Groß"steuerungen (deren kleinster Vertreter die 318 ist) diesen Fehler aufweisen.
 
Gut, dass wir dich haben, den Grossmaschinen Programmierer.

bike

P.S. Was sind denn Kleinmaschinen? :confused:



Erstens war das ein Witz .. da oben:rolleyes:

Zweitens:

Wenn man größere Programmteile wiederverwenden und vor allem
in einem neuen Programm zusammenführen will, ist es total nervig
ggf. 200-300 Timer umzusortieren.

In eine "kleinen" Maschine mit vielleicht 20 -30 Timern ist aber
durchaus ok.

Ich bin nun definitiv kein Codesys-Fan, aber bei Codesys muß
man eben ganichts umsortieren wegen der Instanziierung.
Es bisschen von diesen Vorteilen kann man sich durchaus
in die STEP7 - Welt "herüberholen".


Gruß
 
Zuviel Werbung?
-> Hier kostenlos registrieren
...
Bespiel:

gewünschte Zeit: 30 Sekunden ==>

bei CPU317 OB1_prev_cycle wird immer aufgerundet auf 3 Millisekunden

weil ECHTE Zykluszeit 2,55 msec

das sind 10000 Durchläufe ==> dann hat man gemittelt 25,5 Sekunden und nicht 30 Sekunden.
...
dann korrigiere ich halt mal diese Aussage. Während der dreissig Sekunden macht die 317 bei echter Zykluszeit 2,55ms insgesamt 11764 Zyklendurchläufe. Während dieser Zeit wechselt #OB1_PREV_CYCLE zwischen 2 und 3, und zwar zeigt diese Startinformation 5291mal zwei und 6473mal drei. was dann aufsummiert 30,001s gibt.
 
dann korrigiere ich halt mal diese Aussage. Während der dreissig Sekunden macht die 317 bei echter Zykluszeit 2,55ms insgesamt 11764 Zyklendurchläufe. Während dieser Zeit wechselt #OB1_PREV_CYCLE zwischen 2 und 3, und zwar zeigt diese Startinformation 5291mal zwei und 6473mal drei. was dann aufsummiert 30,001s gibt.


...wenn es so sein sollte gut, aber wenn die Zykluszeit in jedem Zyklus
aufgerundet wird (es sein den die "abschnittenen" Rest in der CPU werden
irdenwie "aufgehoben" und "nachgenutzt") summieren sich doch die Fehler
mehr und mehr, oder?!

Gruß
 
Genau da liegt das Problem, das ich mit der 318er habe: die rundet grundsätzlich auf (auch 0,1ms ergibt dann 1ms). Die anderen Kleinsteuerungen der dreihunderter-Reihe tun genau das Richtige: nämlich den "abgeschnittenen Rest aufheben und nachnutzen".
In Wirklichkeit wird es sich wohl um einen Interrupt handeln, der alle ms statt findet und einen Zeitzähler weiter zählt. Und am Zykluskontrollpunkt vergleicht dann die CPU den aktuellen Zeitzählerstand mit dem Zeitzählerstand des letzten Zyklus und berechnet aus der Differenz die Dauer des letzten Zyklus.
 
Zurück
Oben