Web-Visu Geschwindigkeit, Bedienung zeitgesteuerter Tasks, Lösung für den Zeitversatz

tomrey

Level-1
Beiträge
362
Reaktionspunkte
32
Zuviel Werbung?
-> Hier kostenlos registrieren
Hi all, Ausgangssituation: Haussteuerung mit Webvisu. Bestimmte Funktionen (z.B. Heizungssteuerung) laufen in einer Task z.B. alle 10 Sekunden. In diesen Funktionen sollen Bedienungen (z.B. Umschaltung Heizbetrieb) stattfinden. Ich will in der WebVisu natürlich den Taster nicht 10 Sekunden lang festhalten bis er im nächsten Task abgefragt wird. Deshalb lasse ich heute Tasks viel schneller laufen, als es für die Funktion eigentlich erforderlich wäre. Daher denke ich an eine "Zwischenebene", in der Eingaben aus der Visu zwischengespeichert und später vom zeitgesteuerten Task abgeholt wird. Mein Lösungsansatz wäre ein array "Visuvariablen" mit struct string für den Variablennamen und bool für den Zustand. Ich scheitere aber bereits an der Übergabe des Variablennamens an das array weil ich eine Funktion "Varname_to_string" nicht gefunden habe. Oder ist mein Lösungsansatz Unsinn und es gibt eine elegantere Lösung? Grüße
 
Hallo Tomrey
Das Übergeben des VarNamen der sich geändert hat halte ich für zu aufwendig (weis auch gar nicht ob es geht):confused:. Mach doch einfach ein Array oder Struct in die deine Visu alle Variablen reinschreibt und zusätzlich ein Kennungsbit was immer gesetzt wird wenn sich Daten in der Visu ändern.
Jetzt liest du in deinem Heizungstask das Kennungsbit. ist es TRUE werden alle Variablen übernommen und anschließend zu 0 geschrieben.

Mal abgesehen davon. Ist die Systemlast so hoch das sich das reduzieren der Taskzeit lohnt? Nur weil der Task logisch weniger Zeit braucht würde ich ihn nicht hochnehemen. Ob der Prozessor nun im Leerlauf arbeitet oder Programme abarbeitet ist letztlich egal.
Holger
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hi Holger,
danke, daß du dich mit meiner Herausforderung beschäftigst!
Hab's im Moment so gelöst: Die Visu macht ein ASSIGN des VisuVar-Namens in eine tempVar.
Ein Visu_lies.PRG sucht aus einem array mit allen VisuVars anhand der tempVar den Index der VisuVar raus und schreibt dann ein Kennungsbit so wie von dir vorgeschlagen.
Nach Abarbeitung im langsamen Task setzt dieser ein Quittungsbit, das dann die array-Suchroutine als reset nutzt.
Probleme dabei:
1. das array muß mit allen Visuvars initialisiert werden, die in langsamen Tasks vorkommen. (Einmalaufwand, nicht so schlimm)
2. die Visu ist solange blockiert, bis das Quittungsbit die array-Suchroutine resettet hat.
Um das zu verhindern fällt mir nur ein, anstelle eines Visu_lies.PRG jeweils 1 FB und 1 VisuVar-array je Task zu machen..??

Abgesehen davon: Ich glaube das lohnt sich deshalb, weil die Webvisu nur soviel Zeit bekommt, wie die Tasks übrig lassen. Deshalb habe ich alles auf zeitgesteuerte Tasks umgestellt.
Hab aber meine Weisheizen zu 90% hier aus dem Forum...
Grüße
 
ich würde mir das mal nachstellen wollen.
Mit was ist es denn gemacht Codesys2.3, 3.5, eCockpit // Version?

das array muß mit allen Visuvars initialisiert werden, die in langsamen Tasks vorkommen.
Von wievielen reden wir denn hier? und welcher Datentyp?
 
Zuletzt bearbeitet:
here comes the code:
var Global:
Screen Shot 05-17-19 at 01.10 PM.JPG
stru:
Screen Shot 05-17-19 at 01.09 PM 002.JPG
Die Initialisierung:
Screen Shot 05-17-19 at 01.14 PM.JPG

Das Visu-lese Programm:
Screen Shot 05-17-19 at 01.09 PM.JPG
Die Tesk-Task (10sec):
Screen Shot 05-17-19 at 01.09 PM 001.JPG
Die Test-Visu kommt im nächsten Beitrag...
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Die Test-Visu:
Screen Shot 05-17-19 at 01.16 PM.JPG
Das ganze in 2.3
geschätzte 20 Vars nur für die lang-Tasks,
bool, byte und int.
Glücklicherweise sind die boolsche mit kurz/lang-Auswertung für die Rollos und Dimmer nur im Haupt-(kurz)-Task...
Grüße
 
Zuletzt bearbeitet:
Zurück
Oben