# Eingänge forcen mit Libnodave möglich?



## poppycock (11 Februar 2009)

Hallo,

ich bin noch nicht richtig warm mit Libnodave geworden, aber ich möchte es gerne zur Übung einsetzen.
Dank diesem Forum habe ich auch gute Unterstützung von einem Mitglied für die ersten Schritte bekommen!

Jetzt stelle ich mir aber die Frage, ob man mit Libnodave auch einzelne Eingänge forcen kann. Das wäre natürlich total genial, oder kann man das mit Libnodave nur indirekt machen, indem man einen Merker setzt, der in der SPS einen vorhandenen Eingang vortäuscht, also quasi 


```
O     E      0.0 // erwarteter Eingang
O     M      1.0 // vorgetäuschter Eingang mit Libnodave
=     A      2.0 // Ausgang
```
????

Gruß,
poppycock


----------



## Question_mark (11 Februar 2009)

*Im Prinzip ja, aber ...*

Hallo,



			
				Cock schrieb:
			
		

> ob man mit Libnodave auch einzelne Eingänge forcen kann. Das wäre natürlich total genial,



Das geht so wie bei Radio Eriwan. Im Prinzip ja, aber spätestens am Anfang des nächsten SPS-Zyklus wird vom Systemprogramm der SPS der Status der Eingangsbaugruppen in das Prozeßabbild geladen. Und damit dein S/R der Eingänge aus LibNoDave überschrieben.

Gruß

Question_mark


----------



## Rainer Hönle (12 Februar 2009)

Question_mark schrieb:


> Hallo,
> 
> 
> 
> ...


Wenn auf einer 300er diese Eingangsbaugruppe NICHT vorhanden ist (besser diese Eingangsadresse nicht belegt ist), dann funktioniert es. Wenn es sich um eine 400er handelt, kann diese eventuell beleidigt sein.


----------



## poppycock (12 Februar 2009)

Hallo ihr beiden und danke für die Antwort.

Es handelt sich hierbei um eine S7-300, aber die Eingänge sind tatsächlich vorhanden.
Also geht das im Grunde nur über den Umweg mit einer ODER-Verknüpfung von Eingang+Vortäuschung...

Dann kann ich mir ja einen Merkerbereich für das Simulieren von Eingängen definieren und wenn die Merker gesetzt sind, könnte man das visuell mit Libnodave darstellen.

Vielen Dank,
poppycock


----------



## Rainer Hönle (13 Februar 2009)

Das Problem an dieser Lösung ist dann, dass mit der Simulation kein EIngang auf 0 gesetzt werden kann, wenn am physikalischen Eingang eine 1 ansteht.
Eine "Holzhammermethode" dafür: Merkerbereich auswählen der dem Eingangsbereich entspricht. Ein Bit als Simulationsbit definieren. Wenn dieses gesetzt ist, wird der Merkerbereich am Anfang des OB1 in das Prozessabbild Eingänge kopiert. Dadurch wird auch eine aufwändige Programmänderung (überall das Oder einfügen) vermieden. Dies funktioniert nur für Daten im PAE, für den Peripheriebereich darüber hinaus geht diese Lösung nicht.


----------



## poppycock (16 Februar 2009)

Danke Rainer,

diese Methode hört sich sehr vielversprechend an.
Es geht dabei um eine Übungsanlage, bei der man z.B. Endschalter simulieren kann, die gar nicht vorhanden sind.
Quasi, dass man diese Eingänge softwaretechnisch brückt.
Und bei deinem Vorschlag braucht man nicht die vielen ODER-Glieder in den betroffenen Bausteinen.

Trotzdem verstehe ich wohl nicht ganz, wie du das meintest...

Ich habe z.B. einen Eingangsbereich von einem Byte: EB10
Jetzt definiere ich mir dazu ein Merkerbyte: MB10
Nun noch ein Simulationsbit: M11.0

So, aber wie gebe ich im OB1 an, dass bei gesetztem Simulationsbit der Eingang von einem Merker gesetzt wird?

```
U M11.0
U M10.2
= E10.2
```
So richtig?

Wäre super, wenn du mir das nochmal genauer erklären könntest.
Ich bilde mich nur privat in Sachen SPS weiter, habe leider noch keinen Lehrgang bekommen.
Möchte mir deshalb viel Wissen aneignen wie es nur geht!

Gruß,
poppycock


----------



## MW (16 Februar 2009)

poppycock schrieb:


> Trotzdem verstehe ich wohl nicht ganz, wie du das meintest...
> 
> Ich habe z.B. einen Eingangsbereich von einem Byte: EB10
> Jetzt definiere ich mir dazu ein Merkerbyte: MB10
> ...



so funktioniert es, allerdings kannst du bei diesem Code deine Simulation nicht abschalten, da der Eingang immer zugewiesen wird, um die Simulation richtig auszuschalten, solltest du die anweisungen überspringen wenn der Merker 11.0 false ist zb. so:


```
U M11.0
spbn next
L MB 10
T EB 10
next: nop 0
```


----------



## Rainer Hönle (16 Februar 2009)

Im Prinzip richtig, aber je nach Datenaufkommen sehr aufwändig.
Weitere Möglichkeiten sind:

```
UN M11.0
      SPB Ohne  // Ohne "Simulationsforcen"
      U M 10.0
      = E 10.0
      U M 10.1
      = E 10.1
      ...
Ohne: NOP 0
```

oder


```
UN M11.0
      SPB Ohne  // Ohne "Simulationsforcen"
      L MB 10
      T EB 10
      ...
Ohne: NOP 0
```

oder die Verwendung des SFC 20


----------



## poppycock (18 Februar 2009)

Danke euch beiden, mal wieder was dazugelernt. :-D

Ich werde eure Codes ausprobieren, sehen aber sehr vielversprechend aus!

Besten Dank,
poppycock


----------

