# statisch 0 und 1



## tuppes38 (27 Februar 2007)

Hallo ins Forum,

gibt es vielleicht eine klare Programmierregel dafür wie man sich eine feste 0 und feste 1 im Programm erzeugt.


Gruß


----------



## gravieren (27 Februar 2007)

Hi

UN  M 1.0
S    M 1.0



U    M1.1
R    M1.1


----------



## zotos (27 Februar 2007)

tuppes38 schrieb:


> Hallo ins Forum,
> 
> gibt es vielleicht eine klare Programmierregel dafür wie man sich eine feste 0 und feste 1 im Programm erzeugt.
> 
> ...



Also eine klare bzw. feste Regel kenne ich nicht. 
Bei CoDeSys benutze ich immer die reservierten Worte TRUE bzw. FALSE.
Bei Siemens habe das ich immer so gelöst:

TRUE

```
U  M 0.1
ON M 0.1
=  M 0.1
```
FALSE

```
U  M 0.0
UN M 0.0
=  M 0.0
```
//EDIT: die lösung von gravieren ist schöner ;o)


----------



## TommyG (27 Februar 2007)

Ich kenne die Methode:

'LOW'
U   M10.2
UN M10.2
=   M10.0

'HIGH'
O   M10.2
ON M10.2
=   M10.1

UND muss haalt beides erfüllt sein, dadurch ist die alternierende Abfrage immer '0'. Bei ODER isses genau umgekehrt, daher immer '1'

Kenn dies sogar aus dem OB1, dann wird der '0' oder der'1' Merker halt eingesetzt, symbolisch 'Immer NULL' oder 'Immer EINS'

Greetz


----------



## gravieren (27 Februar 2007)

Hi


Auch möglich

SET
=  M 1.0

CLR
= M1.1



ODER



SET
= M1.0
NOT
= M1.1


----------



## tuppes38 (27 Februar 2007)

Hab mich für 

SET
= M1.0
NOT
= M1.1

entschieden.


Danke


----------



## Jochen Kühner (27 Februar 2007)

*So...*

Ich würde eher

SET
=M0.1
CLR
=M0.2
nehmen.

NOT ist ja wieder eine verknüpfung, CLR löscht das VKE bit direkt!


----------



## thomass5 (28 Februar 2007)

... und ein Programmierer schrieb ne feste 1 als Schmiermerker an nen Ausgang (ist ja feste 1) eines FB und wir suchten uns dumm und ... (wirklich passiert!)
eine Zuweisung 0 oder 1 kurz vor Verwendung ist mir manchmal lieber
und die Kollegen lachen heute noch "feste 1 war locker ha,ha,ha"
Thomas


----------



## Andreas Eisenmann (28 Februar 2007)

thomass5 schrieb:


> ... und ein Programmierer schrieb ne feste 1 als Schmiermerker an nen Ausgang (ist ja feste 1) eines FB und wir suchten uns dumm und ... (wirklich passiert!)
> eine Zuweisung 0 oder 1 kurz vor Verwendung ist mir manchmal lieber
> und die Kollegen lachen heute noch "feste 1 war locker ha,ha,ha"
> Thomas




 Ja Thomas so was kann schon mal vorkommen.
  Aber deswegen die feste 1 jedes Mal neu erzeigen, finde ich übertrieben.
  Da du diesen Fehler nun schon mal hattest wirst du ihn sehr schnell finden das nächste Mal


----------



## plc_tippser (28 Februar 2007)

Jochen Kühner schrieb:


> Ich würde eher
> 
> SET
> =M0.1
> ...


 

Jetzt ich noch.

CLR 
= Mx.0  // .0 ist FALSE
SET
= Mx.1   // .1 ist TRUE

einfacher zu merken.

Meistens habe ich auf MB0 die Taktmerker.

pt


----------



## zotos (28 Februar 2007)

thomass5 schrieb:


> ... und ein Programmierer schrieb ne feste 1 als Schmiermerker an nen Ausgang (ist ja feste 1) eines FB und wir suchten uns dumm und ... (wirklich passiert!)
> eine Zuweisung 0 oder 1 kurz vor Verwendung ist mir manchmal lieber
> und die Kollegen lachen heute noch "feste 1 war locker ha,ha,ha"
> Thomas



Also am besten wäre es doch wenn man auch bei Siemens TRUE und FALSE zu verfügung hätte ;o)

Gibt es eigentlich bei der S7 keine möglichkeit globale Konstanten zu deklarieren?

So ähnlich wie das hier:

```
VAR_GLOBAL CONSTANT
  HIGH      :BOOL   := TRUE;
  LOW       :BOOL   := FALSE;
  HUNDERT   :INT    := 100;
  IQ_zotos  :INT    := 73;  
END_VAR
```

Da kann man dann nichts mehr dran ändern.


----------



## plc_tippser (28 Februar 2007)

Auch noch eine praktische Lösung: Für die IBN sich eigene 0 und 1 Merker zu Basteln, die man nach erfolgter IBN ja alle aus dem Programm gelöscht haben sollte.

Mache sogar ganze IBN-DB´s, für Simulationswerte usw. genaueres wird aber hier OT.

pt


----------



## plc_tippser (28 Februar 2007)

```
]Also am besten wäre es doch wenn man auch bei Siemens TRUE und FALSE zu verfügung hätte ;o)
 
Gibt es eigentlich bei der S7 keine möglichkeit globale Konstanten zu deklarieren?
 
So ähnlich wie das hier:
[code]
VAR_GLOBAL CONSTANT
  HIGH      :BOOL   := TRUE;
  LOW       :BOOL   := FALSE;
  HUNDERT   :INT    := 100;
  IQ_zotos  :INT    := 73;  
END_VAR
```
[/CODE]


Nein, kann der Riese nicht  

pt

..........................


----------



## zotos (28 Februar 2007)

plc_tippser schrieb:


> Nein, kann der Riese nicht
> 
> pt



Aber kann man einen DB nicht irgendwie "schreibgeschützt" initialisieren?

Wenn ich jetzt OT bin ist das keine Absicht.


----------



## plc_tippser (28 Februar 2007)

zotos schrieb:


> Aber kann man einen DB nicht irgendwie "schreibgeschützt" initialisieren?
> 
> Wenn ich jetzt OT bin ist das keine Absicht.


 

Nein, nichts zu machen.

Passt doch zum Thema.

pt


----------



## Zottel (28 Februar 2007)

U M0.0
UN M0.0
=M0.0 //ist mir lieber als SET und CLR geht nämlich auf JEDER Steuerung
UN M0.0
= M0.1  //wenn jetzt die feste 0 "wackelt ", wackelt die 1 gleich mit...


----------



## godi (28 Februar 2007)

zotos schrieb:


> Also am besten wäre es doch wenn man auch bei Siemens TRUE und FALSE zu verfügung hätte ;o)
> 
> Gibt es eigentlich bei der S7 keine möglichkeit globale Konstanten zu deklarieren?
> 
> ...


 
Das stimmt, globale Konstanten gehen bei der S7 nicht.
Wenn man mal in einem Baustein True und False Braucht dann kann man das ja so auch lösen:


```
CALL  FC     1
       True_Bit :=TRUE
       False_Bit:=FALSE
```
 
Das würde dann ein jeder gleich aus der Ferne kennen dass das eine Bit True und das andere False sein muss.
Wenn ich Bausteine in AWL Programmiere dann verwende ich immer SET und CLR.


----------



## godi (28 Februar 2007)

Zottel schrieb:


> U M0.0
> UN M0.0
> =M0.0 //ist mir lieber als SET und CLR geht nämlich auf JEDER Steuerung
> UN M0.0
> = M0.1 //wenn jetzt die feste 0 "wackelt ", wackelt die 1 gleich mit...


 
Auf der S7 geht das SET und CLR schon auf jeder Steuerung oder?

Gibts bei der S5 eigentlich auch so nen Befehl?


----------



## Werner54 (28 Februar 2007)

*Feste 1 und 0*

Hallo,

besonders verwunderlich ist, dass man z. B. am Fb41 in AWL einfach "TRUE" oder "FALSE" an die entsprechenden Eingänge dranschreiben kann, in FUP aber nicht!


----------



## Flinn (28 Februar 2007)

Werner54 schrieb:


> Hallo,
> 
> besonders verwunderlich ist, dass man z. B. am Fb41 in AWL einfach "TRUE" oder "FALSE" an die entsprechenden Eingänge dranschreiben kann, in FUP aber nicht!


 
Geht deswegen nicht, weil für die FUP-Darstellung intern die Bits wieder auf Lokalbits gelegt werden. Und ein "U TRUE" bzw. "U FALSE" geht nun mal nicht... Zumindest nicht bei Siemens...

PS: Logisch Null und Eins mache ich so:

CLR
= M0.0

SET
= M0.1

Gruß
Flinn


----------



## Mironteau (2 März 2007)

*Another possibility*

O     M      1.0
      On    M      1.0
      R     M      1.0
      S     M      1.1


----------



## plc_tippser (2 März 2007)

Gefällt mir gar nicht.

ganz kurz:

SET
R M0.0
S M0.1

pt


----------



## plc_tippser (2 März 2007)

tuppes38 schrieb:


> Hallo ins Forum,
> 
> gibt es vielleicht eine klare Programmierregel dafür wie man sich eine feste 0 und feste 1 im Programm erzeugt.
> 
> ...


 

Die Frage war eigentlich anders.

Die Antwort ist: Nein.

pt


----------



## tuppes38 (3 März 2007)

Hallo,

danke für die vielen Anregungen.

SET
=M100.0
CLR
=M100.1

habe ich schlußendlich benutzt.
Im MB0 benutze ich die Taktmerker, die FCs nenne ich FC10, FC20, FC30 usw. immer in 10er Schritten damit ich die dort verwendeten Merker immer dem FC zuordnen kann.d.h. im FC10 verwende ich nur Merker von M10.0 bis M19.7 und im FC20 nur Merke von M20.0 bis M29.7 usw. So kann jeder der auch mal ohne Symbolik an die Maschine kommt einen Bezug zum Ursprung des Merkers herstellen.


----------



## godi (3 März 2007)

tuppes38 schrieb:


> Hallo,
> 
> danke für die vielen Anregungen.
> 
> ...


 
Das mit den Merkern ist nicht schlecht.
Ich löse das immer so das ich zu den zugehörigen FC bzw FB immer einen Datenbaustein anlege. zb zum FC1 gehört der DB1. 
Das ist dann mit der Symbolik auch immer leichter da ich den Datenbaustein mit den Namen des Anlagenteiles benennen kann.
Desweiteren kann man mehr Daten verwenden. zb wenn du mit Doppelwörter oder so Arbeitest bist du mit deinen paar Merkern schnell am Ende. Bei DB's kanns du sie auch noch im selben DB einfügen und man weiß gleich das es zb zum FC1 gehört.


----------



## Question_mark (4 März 2007)

*Volltreffer*

Hallo,



			
				pt schrieb:
			
		

> Die Frage war eigentlich anders.
> 
> Die Antwort ist: Nein.



Bingo, Du hast es genau getroffen  

Gruss

Question_mark


----------



## Question_mark (4 März 2007)

*VKE-Merker*

Hallo,



			
				tuppes38 schrieb:
			
		

> SET
> =M100.0
> CLR
> =M100.1
> habe ich schlußendlich benutzt.



Eine nicht besonders gute Lösung, der Merker 100.0 hat "1"-Signal, der Merker 100.1 dann "0"-Signal. Ncht so wirklich gut...



			
				pt schrieb:
			
		

> ganz kurz:
> SET
> R M0.0
> S M0.1


Bei der S7 m.E. die beste und kürzeste Lösung ....

Gruss

Question_mark


----------



## godi (4 März 2007)

Question_mark schrieb:


> Hallo,
> 
> 
> 
> ...


 
Über diverse Lösungswege zu sprechen (in diesem Fall zu schreiben) ist oft auch nicht schlecht.
Aber ich muss zugeben dieses "einfache" Thema ist schon sehr stark ausgekaut.  

godi


----------



## tuppes38 (4 März 2007)

sorry, natürlich so:

SET
=M100.1

und

CLR
=M100.0


----------



## plc_tippser (4 März 2007)

godi schrieb:


> Über diverse Lösungswege zu sprechen (in diesem Fall zu schreiben) ist oft auch nicht schlecht.
> Aber ich muss zugeben dieses "einfache" Thema ist schon sehr stark ausgekaut.
> 
> godi


 

Ja, ist schon sehr interessant, die vielen Möglichkeiten. Man denkt eigentlich sonst nicht darüber nach.

pt


----------



## Question_mark (4 März 2007)

*Bin aber auch ein Philosoph heute ...*

Hallo,



			
				pt schrieb:
			
		

> Ja, ist schon sehr interessant, die vielen Möglichkeiten.



Ja, aber es liegt an jedem selber, die optimale Lösung herauszufinden und einzusetzen. Viele Wege führen nach Rom, einige gehen halt über Afrika ...
Und nicht alle bringen einen wirklich nach Rom, manche scheitern an der Alpenüberquerung (mit Elefanten scheint es besser zu funktioinieren, siehe Hannibal), andere ertrinken dabei im Mittelmeer ...

Gruss

Question_mark


----------



## t-poke (2 September 2009)

Auch wenn das schon ein ganz alter Thread ist,

ich mache mir meine 0 und 1 Merker immer so:


```
X m0.0
X m0.0
= m0.0     //Null-Merker
UN m0.0
= m0.1     //Eins-Merker
```
 
Gruß Thomas


----------



## Flinn (2 September 2009)

t-poke schrieb:


> Auch wenn das schon ein ganz alter Thread ist,
> 
> ich mache mir meine 0 und 1 Merker immer so:
> 
> ...


 
...womit Du wohl der Einzige weltweit sein wirst...

Gruß
Flinn


----------



## online (2 September 2009)

t-poke schrieb:


> Auch wenn das schon ein ganz alter Thread ist,
> 
> ich mache mir meine 0 und 1 Merker immer so:
> 
> ...


 
Kann den Sinn hier auch nicht verstehen. Läuft wohl eher nach dem Motto:
Warum einfach, wenn es auch kompliziert geht.


----------



## Jan (4 September 2009)

Ich kopiere einfach nur den Standard FC aus der Bibliothek in mein neues Projekt und habe meine feste 1 und 0. Der Standard FC läuft seit über 10 Jahren fehlerfrei. Da kann ich die Zeit besser für die Programmierung der Anlagenfunktionen nutzen.


----------



## t-poke (4 September 2009)

online schrieb:


> Kann den Sinn hier auch nicht verstehen. Läuft wohl eher nach dem Motto:
> Warum einfach, wenn es auch kompliziert geht.


 
Hallo zusammen!

Wo ist das Problem? 

Exclusiv Oder  kennt Ihr doch, Oder? 

Die paar Zeilen sind schon ewig Bestandteil meiner Standartprogramme. Stammen noch aus meiner "Anfangszeit". Funzt, also warum ändern?

Gruß Thomas


----------



## MW (5 September 2009)

t-poke schrieb:


> Wo ist das Problem?
> 
> Exclusiv Oder  kennt Ihr doch, Oder?
> 
> Die paar Zeilen sind schon ewig Bestandteil meiner Standartprogramme. Stammen noch aus meiner "Anfangszeit". Funzt, also warum ändern?



Weil es deutlich einfacher geht !!!

Das deine Variante doch sehr umständlich wirst du doch sicher zugeben, oder ?. Du musst auch mal an die Leute denken die mit deinem Progamm nicht vertraut sind und es schnell verstehen müssen. Da dauert es einfach mal länger diesen Exklusiv Oder-Code zuverstehen als die anderen einfachen Verknüpfungen . So nach dem Motto: "Ich schreib meine Programme extra kompliziert um mich unersetzbar zu machen"


----------



## t-poke (5 September 2009)

Hallo MW, Hi @ all!

Zugegeben, es gibt kürzere / einfachere Varianten. Aber wer schon an dem bissel Code scheitert sollte besser die Finger vom Rest des / der Programme lassen.

Den Vorwurf des "unersetzbar machen wollens" ignorier ich mal! 

Erstens kriegen die Instandhalter meiner Kunden eine Einweisung ins Programm. Und an der Stelle hat es noch nie Probleme gegeben. 

Zweitens sind wir alle zumindest durch eine Lücke ersetzbar.

Gruß Thomas


----------



## Jochen Kühner (5 September 2009)

*Natürlich...*



t-poke schrieb:


> Hallo MW, Hi @ all!
> 
> Zugegeben, es gibt kürzere / einfachere Varianten. Aber wer schon an dem bissel Code scheitert sollte besser die Finger vom Rest des / der Programme lassen.
> 
> ...



Natürlich sollte das bischen Code jeder verstehen, aber

```
SET
S M1.1
```

braucht ja z.B. auch eine anweisung weniger als zwei X und wie oft braucht man denn die Exklusiv Oder FUnktion, also Ich fast nie!


----------



## Thorben Nagel (15 Juni 2018)

sehr alter Thread aber aktuelles Problem.

Mein 1 Merker ist auf einmal 0 ?!


Im OB1 habe ich 


CLR 
= M1.0


SET
= M1.1

Beobachte ich den Baustein ist M1.1 auch 1

Öffne ich nun einen Baustein der ebenfalls den Merker 1.1  enthält und dort ist der NULL.
In einem anderen wiederum ist der Merker 1.1 auch 1.

Ich verstehe nicht wie es in einem Baustein Null und im anderen Eins sein kann 


EDIT:
in einem Baustein "flattert" der Merker 1.1 (sprich er wechselt zwischen 0 und 1)



Gruß
Thorben


----------



## DeltaMikeAir (15 Juni 2018)

Ich würde im AWL Editor mal rechts auf den Operant M1.1 klicken => Gehe zu => Verwendungsstelle.
Dort auch "überlappende Zugriffe" zuschalten und schauen, an welcher Stelle noch auf den M1.1
geschrieben wird ( oder MB1, MW1, MD1 )



> Ich verstehe nicht wie es in einem Baustein Null und im anderen Eins sein kann



Vermutlich wird der Merker nach dem Baustein, wo er immer auf 1 ist noch einmal beschrieben.
Somit wechselt er seinen Status in dem anderen Baustein.


----------



## Thorben Nagel (15 Juni 2018)

Super vielen Dank, alles wieder i.O

1 ist wieder 1


----------



## Lebenslang (15 Juni 2018)

Die Anweisungen müssen im letzten Netzwerk des OB1 stehen.


----------



## DeltaMikeAir (15 Juni 2018)

> Die Anweisungen müssen im letzten Netzwerk des OB1 stehen.



Also eigentlich müssten Sie im ersten Netzwerk im OB1 und im OB100 (ggf. Ob101 und OB102 je nach CPU ) stehen.

Wenn die Anweisungen ganz unten im OB1 stehen, so wird dass Programm bei Neustart einmal mit Immer1 = 0 durchlaufen.


----------



## Heinileini (17 Juni 2018)

Lebenslang schrieb:


> Die Anweisungen müssen im letzten Netzwerk des OB1 stehen.


Das verstehe ich zwar nicht, aber es erinnert mich an ein eng verwandtes Thema.
Für das letzte Netzwerk des OB1 habe ich mal eingeführt . . .

```
UN   M 0.0
U    M 0.1
BEB
A    DB 0   
BE
```
. . . , nachdem ein Kollege es mal geschafft hatte, die vom Siemens-S5-BetriebsSystem vorgegebenen DefNull- und DefEins-Merker durch eine lausige Parametrierung des FB61 (NC-Daten Lesen) zu zerschiessen. 
Das Fehlverhalten der Software und seine Ursache an einer ganz anderen Stelle zu finden, als wo sie sich auswirkte, war durchaus aufwendig. Deshalb diese HolzhammerMethode, die PLC im "Wiederholungsfalle" in Stopp zu zwingen (mit A DB 0).
S5 kannte weder SET noch CLR noch X noch XN und überhaupt, M 0.0 war einfach immer 0 und M 0.1 immer 1 - theoretisch jedenfalls ;o)

Gruss, Heinileini


----------



## Benited1 (8 Juni 2021)

Hallo zusammen,
gibt es auch eine Möglichkeit, bei einer S7-1200 die ja kein AWL unterstützt mithilfe FUP/KOP/SCL eine statische "1" und statische "0" zu setzen?


----------



## JSEngineering (8 Juni 2021)

Es gibt FALSE und TRUE und in der Variablenliste kannst Du Dir benutzerdefinierte Konstanten anlegen.


----------



## Ph3niX (8 Juni 2021)

Benited1 schrieb:


> Hallo zusammen,
> gibt es auch eine Möglichkeit, bei einer S7-1200 die ja kein AWL unterstützt mithilfe FUP/KOP/SCL eine statische "1" und statische "0" zu setzen?


Aktiviere in der Gerätekonfiguration der CPU das Systemmerkerbyte (und evtl auch das Taktmerkerbyte). In ersterem sind "Always True" und "Always False" vorhanden, genau so wie beispielsweise "First Scan" (Erster Zyklus).


----------



## DeltaMikeAir (8 Juni 2021)

Ph3niX schrieb:


> Aktiviere in der Gerätekonfiguration der CPU das Systemmerkerbyte (und evtl auch das Taktmerkerbyte). In ersterem sind "Always True" und "Always False" vorhanden, genau so wie beispielsweise "First Scan" (Erster Zyklus).


Ja, das ist eine Möglichkeit, ich würde es aber auch wie Jens machen, einfach TRUE oder FALSE nutzen


----------



## Benited1 (8 Juni 2021)

Vielen Dank euch für die schnellen Rückmeldungen! Hab es mit den Systemmerkern realisiert und klappt.


----------

