Überwachungszeit über 2 Schrittketten

alonely01

Level-1
Beiträge
55
Reaktionspunkte
1
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo zusammen,

ich habe zwei getrennte Schrittketten die nacheinander ablaufen,
Schrittkette "Mischen" und Schrittkette "Verteilen", deren gesamte Zykluszeit ich überwachen soll.

Gesamte Zykluszeit = Start 1.Kette bis Letzter Schritt 2.Kette

Dies ist ja soweit noch nicht das Problem. ;)

Nur es kann folgender Fall eintreten:
2.Kette ist noch nicht abgearbeitet, neuer Start der ersten Kette. Eben eine neue 2. Mischung
Zeit 1 ist ja noch am laufen.
Somit müßte ja dann eine 2te Zeit programmiert werden und dementsprechend richtig gestartet bzw. rückgesetzt werden.

Hierzu habe ich leider noch nicht die passende Lösung gefunden.
Hoffe Ihr könnt mir weiterhelfen... :rolleyes:

gruß
 
stelle ich mir in etwa so vor:

die zeitüberwachung realisierst du über den cpu-takt (z.b. Mx.0; 0,1s), die zeit schreibst du in einen datenbaustein.
für jede weitere gestartete schrittkette, wird ein weiteres datenwort im db inkrementiert.
also erfassen, wieviele starts erfolgt sind, dementsprechend viele zeiten laufen lassen...
 
und mit dem Takt einen Zähler hochzählen lassen, oder wie meinst du das?

genau das mein ich, in etwa so:

Code:
*
      U     M     x.0
      FP    M    10.0
      SPBN  end
      L     DB1.DBW 0
      +     1
      T     DB1.DBW 0
end:  NOP   0

die nächste gestartete schreibst du dann halt in DBW2. wird parallel zu der ersten hochgezählt.

auf jeden fall mal indirekte adressierung angucken, da läßt sich sicher was drehen. mit adressversatz je gestarter kette und schleife über die anzahl der ketten...
 
Das hilft mir schon mal weiter.

Nur eine Frage bleibt...

Schritt 1 "Mischen": setzen mischung 1
Schritt Ende "Verteilen" rücksetzen Mischung 1

Wie mach ich´s dann, wenn jetz der "Mischung 1"-Merker noch gesetzt ist (Weil Kette 2 noch nicht abgearbeitet ist) und ich eben eine 2.Mischung gestartet bekomme??? :confused:
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo zusammen,

ich habe zwei getrennte Schrittketten die nacheinander ablaufen,
Schrittkette "Mischen" und Schrittkette "Verteilen", deren gesamte Zykluszeit ich überwachen soll.

Gesamte Zykluszeit = Start 1.Kette bis Letzter Schritt 2.Kette

Dies ist ja soweit noch nicht das Problem. ;)

Nur es kann folgender Fall eintreten:
2.Kette ist noch nicht abgearbeitet, neuer Start der ersten Kette. Eben eine neue 2. Mischung
Zeit 1 ist ja noch am laufen.
Somit müßte ja dann eine 2te Zeit programmiert werden und dementsprechend richtig gestartet bzw. rückgesetzt werden.

Hierzu habe ich leider noch nicht die passende Lösung gefunden.
Hoffe Ihr könnt mir weiterhelfen... :rolleyes:

gruß

Wie wäre es mit einer Verriegelung ??
(eine Kette darf nicht starten solange die andere noch nicht fertig ist)

Nachtrag: Du kommst auf das gleiche aus, wenn Du einen Timer/ Taktzähler bei der Zeitüberwachung einsetzen möchtest
 
Zuletzt bearbeitet:
(eine Kette darf nicht starten solange die andere noch nicht fertig ist)

wir wollen aber ausdrücklich zulassen, dass eine zweite abarbeitung gestartet werden darf.

stichworte: fifo, ringpuffer, identifikationsnummer

bei deinem vorhaben solltest du eine eindeutige nummer für jeden start vergeben, welche von schritt zu schritt durchgereicht wird, nur so kannst du sicherstellen, dass die zeit auch richtig gestoppt wird.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
so frei ausm bauch raus mit der vergangenen zykluszeit des vorherigen zykluses (kleine ungenauigkeit kann durch mehr code compensiert werden, ich sag nur flanken pos/neg und den zeitpunkt wenn man anfängt zu summieren um nen zyklus zu verschleppen und so ) mit taktmerkern oder gar nur mit zyklen zählen hat das halt mit ZEIT nicht mehr viel zu tun. das ist dann schätzen

last ob1 scan time --> lastscan int
sktimer1
sktimer2 int/dint je nach prozesslänge
sktimer1_akt
sktimer2_akt /bool


[ code ]

L sktimer1
L 0
==I
u startsk1 //start schritkette 1
s sktimer1_akt

L sktimer1
L 0
<>I
u startsk1
s sktimer2_akt

u sktimer1_akt
spbn _10
L sktimer1
L lastscan
+D
t sktimer1

_10:u sktimer2_akt
spbn _11
L sktimer2
L lastscan
+D
t sktimer2

_11:l sktimer2
L 0
==I
save
u sk2ende
spbn _20
r sktimer1_akt
l 0
t sktimer1

_20:l sktimer1
l 0
<>I
u bie
u sk2 ende
spbn _21
r sktimer1_akt
l 0
t sktimer1
_21:nop 0

[ /code ]


den rest spar ich mir. das is eh nur mehr die auswertung der timervariablen. wenn ich jetzt nicht grad nen gedanken hänger hab sollte das fast copy paste gehen. kann höchstens sein das ich mich mit den vergleichen vertue. das prinzip sollte aber klar sein. wenn die sk1 startet und die sk2 noch nicht am ende ist muss man halt die 2te timevariable beginnen hochzusummieren. wenn sk2 beendet wird gibts eh nur 2 möglichkeiten. entweder rennt sk1 schon wieder oder nicht. je nachdem muss man halt die eine oder andere variable deaktivieren. keine notwendigkeit da irgend welche variablen durch schritte zu schleppen. sk2 kann immer nur vor sk1 fertig werden mit der 2ten messung. sk1 kann nie sk2 überholen so wie ich das verstanden hab. eigentlich eh sehr easy code. hab nicht mal ein adressregister bemühen müssen. das is bei meinen codes selten der fall ;-)
 
Zuletzt bearbeitet:
Zurück
Oben