Seite 3 von 3

Re: [V1.5.1] Erste Custom-Logik - Pumpensteuerung (Logik wird intern nicht aktualisiert?)

Verfasst: Do Jan 02, 2020 2:09 pm
von S. Kolbinger
Noch ein Wort zum Logic-Scope (Grafana):

Es werden sämtliche Level-Werte nach jedem Durchlauf in die Datenbank geschrieben.
Veränderungen die zwischen den Modulen passieren (ein Level wird nacheinander mehrfach verändert) sind unter Umständen nicht sichtbar in Grafana.
Auf das Abspeichern nach jedem Modul-Aufruf habe ich bewusst verzichtet.
Ich hatte Bauchschmerzen, dass dann evtl. die Datenbank explodiert.

Wen in diesem Fall die Darstellung in Grafana zu sehr verwirrt, kann das And-Modul nochmals ans Ende duplizieren (4.Modul):

Code: Alles auswählen

{
	"Level": [
		["$Input","bool",false],
		["$Time_Pulse","float",60.0],
		["$Time_Interlock","float",7200.0],
		["$Pulse","bool",false],
		["$Interlock","bool",false],
		["$Start_Pulse","bool",false]
	],
	"Module": [   
		["And",["$Input","-$Interlock"],"$Start_Pulse"],
		["Monoflop","$Start_Pulse",0,"$Pulse","$Time_Pulse",2],
		["Monoflop","$Pulse",0,"$Interlock","$Time_Interlock",4],
		["And",["$Input","-$Interlock"],"$Start_Pulse"]
	],
	"Input": [
		["Input","Input signal","$Input","c"],
		["Pulse duration","Duration of the switch on impulse","$Time_Pulse","a"],
		["Interlock time","Minimum lock time before output is triggered again","$Time_Interlock","a"]
	],
	"Output": [
		["Output","Output signal","$Pulse","c"]
	]
}
Damit ist die Ausgabe in Grafana optisch leichter nachvollziehbar.
Bild
ABER: Dies ist eine rein kosmetische Änderung und verändert nicht das Verhalten dieser Logik.

Re: [V1.5.1] Erste Custom-Logik - Pumpensteuerung (Logik wird intern nicht aktualisiert?)

Verfasst: Do Jan 02, 2020 3:09 pm
von Eraser
Danke für deine Erklärungen Stefan!

Eine Frage dazu:

Wenn ein Monoflop einen erneuten Durchlauf auslöst, wird dann der aktuelle Durchlauf bis zum Ende weitergeführt?
Sodass im Endeffekt mehrere Durchlaufsequenzen parallel laufen.

Re: [V1.5.1] Erste Custom-Logik - Pumpensteuerung (Logik wird intern nicht aktualisiert?)

Verfasst: Do Jan 02, 2020 3:45 pm
von S. Kolbinger
Eraser hat geschrieben: Do Jan 02, 2020 3:09 pm Wenn ein Monoflop einen erneuten Durchlauf auslöst, wird dann der aktuelle Durchlauf bis zum Ende weitergeführt?
Sodass im Endeffekt mehrere Durchlaufsequenzen parallel laufen.
Das Monoflop startet einen Timer. Dieser muss erst ablaufen, damit ein erneuter Durchlauf angestoßen wird.
Da muss also schon mindestens 1ms (kleinste Zeiteinheit für Timer) vergehen.

Aber ganz allgemein gilt:
Es kann zu jedem Zeitpunkt nur eine Logik-Zelle durchlaufen (berechnet) werden.
Sollte während eines Durchlaufs dieselbe, oder auch eine andere Logik-Zelle getriggert werden, wird deren Start solange verzögert, bis der aktuelle Durchlauf beendet ist.
Sämtliche Durchläufe sind immer sequenziell und niemals parallel.

Re: [V1.5.1] Erste Custom-Logik - Pumpensteuerung (Logik wird intern nicht aktualisiert?)

Verfasst: Do Jan 02, 2020 7:19 pm
von Eraser
Um es visuell darzustellen:

Annahme von oben:

Modul 1: AND
Modul 2: Monoflop 1
Modul 3: Monoflop 2

Ablaufsequenzen A, B und C:
A wird getriggered durch Eingang
B durch Ablaufen des Monoflop 1
C durch Ablaufen des Monoflop 2


Start A1
Fertig A1
Start A2
Fertig A2

Start der Ablaufsequenz B
Start B1
Fertig B1

Start A3
Fertig A3

Start der Ablaufsequenz C
Start C1
Fertig C1
Start C2 ???
Fertig C2 ???

Ende

Kannst du das bitte vervollständigen?
Danke

Re: [V1.5.1] Erste Custom-Logik - Pumpensteuerung (Logik wird intern nicht aktualisiert?)

Verfasst: Do Jan 02, 2020 7:23 pm
von Eraser
Oder so?

Start A1
Fertig A1
Start A2
Fertig A2
Start der Ablaufsequenz B (warten bis A fertig)
Start A3
Fertig A3
Start der Ablaufsequenz C (warten bis B fertig)

Start B1
Fertig B1
Start B2
Fertig B2
Start B3
Fertig B3

Start C1
Fertig C1
Start C2
Fertig C2
Start C3
Fertig C3

Ende

Re: [V1.5.1] Erste Custom-Logik - Pumpensteuerung (Logik wird intern nicht aktualisiert?)

Verfasst: Fr Jan 03, 2020 4:51 pm
von S. Kolbinger
Hallo Wolfgang,

ich bin mir nicht ganz sicher, ob ich deine Frage richtig verstehe.

Ein Durchlauf (alle Module einer Logikzelle werden durchlaufen) dauert meist nur wenige Microsekunden.
Bis ein Timer abläuft dauert das viel, viel länger (kleinste Dauer ist eine Millisekunde).
Es ist also äußert unwahrscheinlich, das ein Timer, der während eines Durchlaufs gestartet wird, noch vor Ende dieses Durchlaufs den nächsten Durchlauf triggert.

Ich versuche mich mal an deiner Notation:
  • Durchlauf A[1,2,3] (< 10µs)
  • warten bis der "Pulse"-Timer abläuft (z.B 10s)
  • Durchlauf B[1,2,3] (< 10µs)
  • warten bis der "Interlock"-Timer abläuft (z.B 20s)
  • Durchlauf C[1,2,3] (< 10µs)
Die allermeiste Zeit wartet die Logic-Engine auf Ereignisse. Das sieht man auch daran, dass sich die CPU-Auslastung durch die LE kaum von 0,1% weg bewegt.

Re: [V1.5.1] Erste Custom-Logik - Pumpensteuerung (Logik wird intern nicht aktualisiert?)

Verfasst: Fr Jan 03, 2020 5:57 pm
von Eraser
Hallo Stefan,

danke für deine immer wieder erklärenden Antworten.

Jetzt hab ich es verstanden.
Ein Triggerereignis (Eingang oder Monoflop) startet einen kompletten Durchlauf, der jede Anweisung direkt hintereinander ausführt (so wie bei einem Mikroprozessor oder SPS auch), nur mit dem Unterschied, dass der Durchlauf nur einmal erfolgt (wie ein Programmteil der flankengesteuert ist).
Sobald dann ein neuer Trigger durch das ablaufende Monoflop kommt, wird der ganze Code nochmal komplett durchlaufen.

Was für mich vorher nicht klar war ist, ob die Abarbeitung des Codes während eines laufenden Monoflops an der Stelle des Monoflops angehalten wird oder dieser weiter läuft.

Vielen Dank!