Visualization Wahlschalter in Codesys 3.5

KeBi2605

Level-1
Beiträge
3
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo liebes Forum,
ich bin neu hier und habe schon einige Zeit mitgelesen.
Mir stellt sich momentan die Frage wie ich in CodeSys 3.5 einen Wahlschalter visualisieren kann.
Er soll drei Stellungen haben: 1-0-2.

Hat jemand eine Idee?

Danke schonmal und viele Grüße!
 
Na ja, habe gerade 10s gegoogelt und zig Beispiele gesehen
Google 'visu Wahlschalter'
Viel Spaß

Gesendet von meinem ONEPLUS A3003 mit Tapatalk
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Danke Shrimps für Deine Antwort.
Leider bringt mich die nicht weiter.
Kannst Du mir evtl nen Link schicken, oder erklären wie ich in CoDeSys nen Wahlschalter mit den Werten 1-0-2 in die Visualiziation einfügen kann?

Danke schonmal :-)
 
Danke Shrimps für Deine Antwort.
Leider bringt mich die nicht weiter.
Kannst Du mir evtl nen Link schicken, oder erklären wie ich in CoDeSys nen Wahlschalter mit den Werten 1-0-2 in die Visualiziation einfügen kann?

Danke schonmal :-)
Hi, vor 5 Jahren hatte ich mit twincat 2.x angefangen, dabei habe ich mir etliche Maschinenteile in der visu konstruiert und diese mit Bewegung und Farbe zum Leben erweckt...
Genauso mühsam ist es, sich einen solchen Wahlschalter zusammenzustellen...
Wenn du auf die Winkelige Darstellung eines Schalters verzichtest, wird es mit einem 3-fachen Rechteck und viel Logik am einfachsten.
Viel Spaß
Shrimps

Gesendet von meinem ONEPLUS A3003 mit Tapatalk
 
Ja, das glaub ich, dass das sehr aufwendig ist.
Mir geht es auch weniger um die Grafik. Wie ich z.B. ein Rechteck oder Bild aus Taster einbinde, das weiß ich.
Mir ist allerdings nicht ganz klar wie ich einen Schalter generieren kann, der nicht nur TRUE oder FALSE ausgibt, sondern
je nach Schalterstellung eben 0 (für Aus) 1 (für die Wahl 1) oder 2 (für die Wahl 2).
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ja, das glaub ich, dass das sehr aufwendig ist.
Mir geht es auch weniger um die Grafik. Wie ich z.B. ein Rechteck oder Bild aus Taster einbinde, das weiß ich.
Mir ist allerdings nicht ganz klar wie ich einen Schalter generieren kann, der nicht nur TRUE oder FALSE ausgibt, sondern
je nach Schalterstellung eben 0 (für Aus) 1 (für die Wahl 1) oder 2 (für die Wahl 2).
Na das könnte z.bsb mit einer function gehen:
3 Eingänge, 1 int Ausgang
Interne bool-logik
Mit ein paar If eine int belegen
Ggf. Einen FB bauen um mehr Ausgänge zu haben und die Farblogig oder Bewegungslogik des Schalters mit zu berechnen und auszugeben
Das ganze wieder zurück zur visu... voila


Gesendet von meinem ONEPLUS A3003 mit Tapatalk
 
Hallo,
hier noch ein Lösungsansatz.

Für Visualisierungselemente wie z.B. Rechteck und Kreis kann man bei einem Mausklick Code ausführen lassen.
Nachdem für jede Schalterstellung ein Visualisierungselement angelegt wurde, definiere man eine Globale Variable
"bySchalterstellung: Byte;"

Für das erste Element wird bei einem Mausklick "bySchalterstellung:= 1; ausführen.
Für das zweite Element wird bei einem Mausklick "bySchalterstellung:= 2; ausführen.
Für das dritte Element wird bei einem Mausklick "bySchalterstellung:= 3; ausführen.

Um einen Farbumschlag für das ausgewählte Element zu erreichen wird eine weitere globale Variable definiert.
xAktiv: ARRAY[1..3] OF BOOL;

Für Schalterstellung 1 (Element 1) bei 3 möglichen Schalterstellungen sieht der Code dann folgendermaßen aus:

bySchalterstellung:= 1;
xAktiv[1]:= TRUE;
xAktiv[2]:= FALSE;
xAktiv[3]:= FALSE;

Für die restlichen Elemente wird der Code entsprechen angepasst.

Die Variable xAktiv[ ] mit dem entsprechenden Index wird jetzt für den Farbumschlag der Schalterelemente eingetragen.

Bei Schaltern mit mehr Stellungen wie z.b. BCD-Schaltern kann man das setzen der Variablen xAktiv[ ] auch in eine
Funktion auslagern um sich Schreibaufwand zu sparen.

Grüße

Peter255
 
Mir ist allerdings nicht ganz klar wie ich einen Schalter generieren kann, der nicht nur TRUE oder FALSE ausgibt, sondern
je nach Schalterstellung eben 0 (für Aus) 1 (für die Wahl 1) oder 2 (für die Wahl 2).
Indem Du für den Schalter eine Variable nimmst, die mehr als 2 Zustände (Werte) haben kann, z.B. BYTE, WORD, INT, ...
Beim Klick auf die Schalter-Objekte weist Du der Schalter-Variable die Werte 0 oder 1 oder 2 oder ... zu.
Fürs Aussehen des Schalters: kann die Visu auch Objekte mit Bild-Listen? Da könntest Du die Schalter-Variable als Index in die Bilder-Liste verwenden.


Bei Schaltern mit mehr Stellungen wie z.b. BCD-Schaltern kann man das setzen der Variablen xAktiv[ ] auch in eine
Funktion auslagern um sich Schreibaufwand zu sparen.
Das Belegen der Elemente von xAktiv[ ] benötigt kaum Schreibaufwand, nämlich je Element (Stellung) nur eine Anweisung:
Code:
xAktiv[1] := bySchalterstellung = 1;
xAktiv[2] := bySchalterstellung = 2;
xAktiv[3] := bySchalterstellung = 3;

Harald
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo @PN/DP

Das Belegen der Elemente von xAktiv[ ] benötigt kaum Schreibaufwand, nämlich je Element (Stellung) nur eine Anweisung:
Code:
xAktiv[1] := bySchalterstellung = 1;
xAktiv[2] := bySchalterstellung = 2;
xAktiv[3] := bySchalterstellung = 3;

Dieses Konstrukt verstehe ich nicht und man lernt ja nie aus.

xAktiv[1] := bySchalterstellung
BOOL Wert wird Byte zugewiesen ohne TO_BOOL ?

= 1;
Verstehe ich auch nicht?

Bytewerte ungleich 0 ergeben BOOL immer TRUE ?


Kannst du mir das bitte erklären?

Grüße

Peter255
 
Hallo @hucki @PN/DP

danke jetzt verstehe ich das Konstrukt.

Das würde in meinem Lösungsansatz bedeuten das nur noch "bySchalterstellung" pro Element n angepasst werden muss.

anstatt

Code:
bySchalterstellung:= 1;
xAktiv[1]:= TRUE;
xAktiv[2]:= FALSE;
xAktiv[3]:= FALSE;

würde der Code pro Element n dann so aussehen

Code:
bySchalterstellung:= n;
xAktiv[1] := bySchalterstellung = 1;
xAktiv[2] := bySchalterstellung = 2;
xAktiv[3] := bySchalterstellung = 3;

Grüße

Peter255
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Das würde in meinem Lösungsansatz bedeuten das nur noch "bySchalterstellung" pro Element n angepasst werden muss.
Ich kenne die Codesys Visu nicht. Kann man bei den 3 verschiedenen "bei Mausklick" immer den selben Code aufrufen und das n (1,2,3) an den Code übergeben? Dann würde der Code seinen Vorteil so richtig ausspielen, weil dann braucht man nur einen gemeinsamen Code für alle 3 Mausklicks ganz ohne IF..THEN und weniger Stellen für Tippfehler.

Harald
 
Hallo @PN/DP,

in der Codesys Visu kann man bei jedem Klick auf ein Element Code ausführen lassen.
Dieser Code wird immer nur für das entsprechende Element geschrieben und ausgeführt.
Anstatt den von mir gezeigten Code für jedes Element, in geänderter Version einzutragen, könnte man
auch eine Funktion schreiben. Dieser Funktion wird dann der Index n des angeklickten Elements übergeben.
Somit würde der Code pro Element nur lauten "FunSelectSwitch(n);".

In dieser Funktion würde dann dieser Code ausgeführt:
Code:
bySchalterstellung:= n;
xAktiv[1] := bySchalterstellung = 1;               //Erstes Schalterelement
xAktiv[2] := bySchalterstellung = 2;
xAktiv[3] := bySchalterstellung = 3;
...................
...................
xAktiv[max] := bySchalterstellung = max;     //Letztes Schalterelement


Und wenn wir es noch mehr optimieren wollen ginge das auch noch
in einer FOR Schleife aber ich glaube wir sollten es hier nicht übertreiben.

Grüße

Peter255
 
Ich nutze für so etwas gern Unions aus einer Enumeration und einer Bit-Struktur, etwa so:
Code:
TYPE enuSwitch :
(  None:=16#00,
   Pos1:=16#01,
   Pos2:=16#02,
   Pos3:=16#04
)   BYTE;
END_TYPE

TYPE strSwitch :
STRUCT
   Pos1:BIT;
   Pos2:BIT;
   Pos3:BIT;
END_STRUCT
END_TYPE

TYPE uniSwitch :
UNION
   Enum:enuSwitch;   // Für Abfrage in Select case Blöcken
   Bits:strSwitch;   // Für Abfrage einzelner Schalterstellungen
END_UNION
END_TYPE

@ PN/DP:
Der gesamte Visu-Code wird in der SPS in einer eigenen Task ausgeführt. Anwendercode bei Mausereignissen geht nur in ST, bedingte Codeausführung ist nicht möglich. Dafür muss man dann Funktionen oder FB-Methoden aufrufen.
 
Ich komme aus der eCockpit-Ecke z.Zt. FW15. Auch in der vorherigen Version habe ich keine Codeeinschränkungen bemerkt.
Das Problem ist nur das es in dem kleinen Editorfenster für den Code sehr schnell unübersichtlich wird und
ob sich der Code dort per Breakpoint debuggen lässt habe ich auch noch nicht ausprobiert.
 
Habe mal auf die Schnelle mit TwinCat 4024.7 getestet. If then else, select case, Zählschleifen funktionieren. Der Rest dann vermutlich auch. Wer weiss, wie lange schon. Beckhoff teilt so etwas ja nicht mit.
 
Zurück
Oben