KNX Data Secure Unterstützung
für KNX Logger und KNX Busmonitor

KNX Diagnose Monitor, Import des ETS Projektes deutlich beschleunigt, Suche in der Navigation
Mehr Informationen dazu hier im Forum

Insider Version 6 zur 4.5 jetzt für alle Mitglieder des Insider Clubs installierbar
Alle Infos zum Update im Timberwolf Wiki

[Gelöst] [V1.5.1] Erste Custom-Logik - Pumpensteuerung (Logik wird intern nicht aktualisiert?)

Informationen und Diskussionen über Logik-Engine und Logik-Editor
Forumsregeln
  • Denke bitte an aussagekräftige Titel und gebe dort auch die [Firmware] an. Wenn ETS oder CometVisu beteiligt sind, dann auch deren Version
  • Bitte mache vollständige Angaben zu Deinem Server, dessen ID und dem Online-Status in Deiner Signatur. Hilfreich ist oft auch die Beschreibung der angeschlossener Hardware sowie die verwendeten Protokolle
  • Beschreibe Dein Projekt und Dein Problem bitte vollständig. Achte bitte darauf, dass auf Screenshots die Statusleiste sichtbar ist
  • Bitte sei stets freundlich und wohlwollend, bleibe beim Thema und unterschreibe mit deinem Vornamen. Bitte lese alle Regeln, die Du hier findest: https://wiki.timberwolf.io/Forenregeln

S. Kolbinger
Elaborated Networks
Elaborated Networks
Reactions:
Beiträge: 588
Registriert: Mi Aug 15, 2018 11:34 am
Hat sich bedankt: 82 Mal
Danksagung erhalten: 560 Mal

#21

Beitrag 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.
Gruß,
Stefan K.
Benutzeravatar

Ersteller
Eraser
Reactions:
Beiträge: 678
Registriert: So Aug 12, 2018 1:51 pm
Hat sich bedankt: 218 Mal
Danksagung erhalten: 282 Mal

#22

Beitrag 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.
mfg
Wolfgang

Timberwolf 2500 #151 / VPN offen / Reboot nach Rücksprache
+ PBM #938

S. Kolbinger
Elaborated Networks
Elaborated Networks
Reactions:
Beiträge: 588
Registriert: Mi Aug 15, 2018 11:34 am
Hat sich bedankt: 82 Mal
Danksagung erhalten: 560 Mal

#23

Beitrag 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.
Gruß,
Stefan K.
Benutzeravatar

Ersteller
Eraser
Reactions:
Beiträge: 678
Registriert: So Aug 12, 2018 1:51 pm
Hat sich bedankt: 218 Mal
Danksagung erhalten: 282 Mal

#24

Beitrag 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
mfg
Wolfgang

Timberwolf 2500 #151 / VPN offen / Reboot nach Rücksprache
+ PBM #938
Benutzeravatar

Ersteller
Eraser
Reactions:
Beiträge: 678
Registriert: So Aug 12, 2018 1:51 pm
Hat sich bedankt: 218 Mal
Danksagung erhalten: 282 Mal

#25

Beitrag 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
Zuletzt geändert von Eraser am Do Jan 02, 2020 7:23 pm, insgesamt 1-mal geändert.
mfg
Wolfgang

Timberwolf 2500 #151 / VPN offen / Reboot nach Rücksprache
+ PBM #938

S. Kolbinger
Elaborated Networks
Elaborated Networks
Reactions:
Beiträge: 588
Registriert: Mi Aug 15, 2018 11:34 am
Hat sich bedankt: 82 Mal
Danksagung erhalten: 560 Mal

#26

Beitrag 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.
Gruß,
Stefan K.
Benutzeravatar

Ersteller
Eraser
Reactions:
Beiträge: 678
Registriert: So Aug 12, 2018 1:51 pm
Hat sich bedankt: 218 Mal
Danksagung erhalten: 282 Mal

#27

Beitrag 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!
mfg
Wolfgang

Timberwolf 2500 #151 / VPN offen / Reboot nach Rücksprache
+ PBM #938
Antworten

Zurück zu „Logikengine & Logik-Editor“