# Suche DeMux Funktion 

**URL:** <https://oscat.discourse.group/t/suche-demux-funktion/1405>\
**Category:** Anwendungsbeispiele / Application Examples\
**Created:** [14. August 2012 um 16:16 UTC](https://oscat.discourse.group/t/suche-demux-funktion/1405 "2012-08-14T16:16:40Z")\
**Posts on this page:** 3\
**Page:** 1

<div class="post-metadata">

**Author:** ![rrbd](https://yyz2.discourse-cdn.com/free1/user_avatar/oscat.discourse.group/rrbd/32/10_2.png) [@rrbd](https://oscat.discourse.group/u/rrbd)\
**Post date:** [14. August 2012 um 16:16 UTC](https://oscat.discourse.group/t/suche-demux-funktion/1405/1 "2012-08-14T16:16:40Z")

</div>

Hallo,  
ich habe zwar lange Erfahrung in der SPS-Programmierung, bin aber neu im Thema IEC61131. Nun suche ich für die Übertragung für mich gewohnter Programmstruturen einen DeMultiplexer, der in etwa folgendes leistet  
±----+  
Act - - Q0  
Sel - - Q1  
+ - Q2  
+ - Q3  
+ - Q4  
+ - Q5  
+ - Q6  
±----+

Act: Flag/Bit - Voraussetzung für Ausgangssignale Q  
Sel: Integer - Wählt einen Ausgang: es soll jeweils der durch den Zahlenwert von Sel repräsentierte Ausgang auf 1 gesetzt werden:  
Sel = 0 → Q0 gesetzt  
Sel = 4 → Q4 gesetzt  
Q: Flags (Ausgangs-Bits)  
Ich finde so etwas weder in der Beschreibung der vorhandenen Funktionen bei PC WORX noch in OSCAT\_Basic\_333

Überseh’ ich da etwas oder muss ich mir den Baustein selbst basteln?

Danke schon mal vorab für Hilfe,

Grüße

Rainer

---

<div class="post-metadata">

**Author:** ![peewit](https://avatars.discourse-cdn.com/v4/letter/p/ecc23a/32.png) [@peewit](https://oscat.discourse.group/u/peewit)\
**Post date:** [15. August 2012 um 15:17 UTC](https://oscat.discourse.group/t/suche-demux-funktion/1405/2 "2012-08-15T15:17:29Z")

</div>

hallo

schau dir den baustein “SELECT\_8” an, der kann das was du möchtest und sogar noch ein paar andere sachen  
wenn der für dich nicht passt, kannst du ihn ja einfach adaptieren

```auto
FUNCTION_BLOCK SELECT_8
VAR_INPUT
	E : BOOL;
	SET : BOOL;
	IN : BYTE;
	UP : BOOL;
	DN : BOOL;
	RST : BOOL;
END_VAR
VAR_OUTPUT
	Q0, Q1, Q2, Q3, Q4, Q5, Q6, Q7 : BOOL;
	STATE : INT;
END_VAR
VAR
	last_up: BOOL;
	last_dn : BOOL;
END_VAR

(*
	version 1.1	27. feb. 2009
	programmer hugo
	tested BY oscat

select_8 selects one of 8 outputs at any time. the outputscan be selected by up or down keys and an independent anable switches all outouts off if set false

*)
IF rst THEN
	state := 0;
ELSIF set THEN
	state := IN;
ELSIF up AND NOT last_up THEN
	state := inc(state,1,7);
ELSIF dn AND NOT last_dn THEN
	state := inc(state,-1,7);
END_IF;
last_UP := UP;
last_DN := DN;

Q0 := FALSE;
Q1 := FALSE;
Q2 := FALSE;
Q3 := FALSE;
Q4 := FALSE;
Q5 := FALSE;
Q6 := FALSE;
Q7 := FALSE;

IF E THEN
	CASE state OF
		0: Q0 := TRUE;
		1: Q1 := TRUE;
		2: Q2 := TRUE;
		3: Q3 := TRUE;
		4: Q4 := TRUE;
		5: Q5 := TRUE;
		6: Q6 := TRUE;
		7: Q7 := TRUE;
	END_CASE;
END_IF;

(* revision history
hm	16. jan 2008	rev 1.0
	original version

hm	27. feb. 2009	rev 1.1
	renamed input en to e
*)

```

---

<div class="post-metadata">

**Author:** ![rrbd](https://yyz2.discourse-cdn.com/free1/user_avatar/oscat.discourse.group/rrbd/32/10_2.png) [@rrbd](https://oscat.discourse.group/u/rrbd)\
**Post date:** [17. August 2012 um 07:16 UTC](https://oscat.discourse.group/t/suche-demux-funktion/1405/3 "2012-08-17T07:16:16Z")

</div>

Ah, hervorragend! Der Baustein ist so vielseitig, dass ich die benötigte “Basisfunktion” beim Querlesen glatt übersehen habe. Für mein ursprüngliches Anliegen hatte ich übrigens zunächst auf BYTE\_TO\_BITS zurückgegriffen, in der Webvisualisierung war es mir für die meisten Anwendungen egal, ob ich Meine 4 Tasten für Variable setzen auf 0-1-2-3 oder auf 0-1-2-4 benutze. Aber aus Kompatibilitätsgründen werde ich wohl doch die SELECT\_8 Lösung bevorzugen.

Vielen Dank

Rainer
