# Wertübergabe zw. FBs



## Jackjackson (16 Oktober 2008)

Hallo Leute,

ich bin gerade dabei ein SPS-Programm zu schreiben... in dem Programm sind zwei FB, wobei der FB2 dem FB1 einen Wert zurückgeben sollte!
Wie stelle ich das an?


----------



## Larry Laffer (16 Oktober 2008)

... ich nehme mal an, dass die beiden FB's sonst nicht miteinander verbunden sind ... also FB2 wird nicht aus FB1 aufgerufen.
In dem Fall wäre die Profi-Lösung, die Schnittstelle der FB's zu benutzen - also wenn FB2 einen Wert an FB1 übergeben soll, dann ist der Wert ein OUT-Parameter bei FB2 und ein IN-Parameter bei FB1.

Gruß
LL


----------



## vierlagig (16 Oktober 2008)

> die Profi-Lösung


 
*ROFL* ...du rettest meinen feierabend

@jack: bitte denk gar nicht erst daran auf die instanz des anderen FB´s zuzugreifen, weil dann kommt der ralle und haut dich


----------



## Gerri (16 Oktober 2008)

das ist doch bei FB sowieso so gedacht mit der Schnittstelle - wenn beide in dem selben übergeordneten baustein aufgerufen werden, dann sper dir die Merker und verwende gleich lokale variablen. Jedenfalls mir ist das sympathischer


----------



## Larry Laffer (16 Oktober 2008)

Gerri schrieb:


> das ist doch bei FB sowieso so gedacht mit der Schnittstelle - wenn beide in dem selben übergeordneten baustein aufgerufen werden, dann sper dir die Merker und verwende gleich lokale variablen. Jedenfalls mir ist das sympathischer


 
Wenn die Reihenfolge der Aufrufe mit OUT nach IN übereinstimmt, dann OK - sonst "böses Foul" - also bitte beachten ...


----------



## Gerri (16 Oktober 2008)

stimmt, man muß schon wissen was lokal variablen sind


----------



## Jackjackson (16 Oktober 2008)

Mit den Merkern funktioniert das irgendwie sowieso nicht bei mir! Wenn ich bei FB2 den Merker M4.2 auf 1 setze, hat das irgendwie keine Auswirkung im FB1
(M4.2 zählt einen Zähler zurück)
Ich probiers mal mit den lokalen Variablen, also danke schonmal....


----------



## Larry Laffer (16 Oktober 2008)

Jackjackson schrieb:


> Mit den Merkern funktioniert das irgendwie sowieso nicht bei mir! Wenn ich bei FB2 den Merker M4.2 auf 1 setze, hat das irgendwie keine Auswirkung im FB1
> (M4.2 zählt einen Zähler zurück)
> Ich probiers mal mit den lokalen Variablen, also danke schonmal....


 
Wenn das mit Merkern nicht funktioniert, dann funktioniert es mit Lokalvariablen (TEMP) erst recht nicht ...
Wie wäre es mit ein paar mehr Info's an das Auditorium ?


----------



## Gerri (16 Oktober 2008)

ist der Zähler selbst geschrieben (mit FP) oder ein baustein aus der lib. ?


----------



## Jackjackson (16 Oktober 2008)

Ich versuche ein Programm für einen "Pulkrollenförderer" zu schreiben!
Es gibt 2 Förderstrecken:
Am Ende der ersten Strecke ist ein Sensor, die die zweite Förderstrecke antreibt und den Inhalt an Fördergütern zählt! Auf der zweiten Förderstrecke dürfen nie mehr als 2 Fördergüter enthalten sein (ebenso wie auf den Folgenden)!
Wenn die zwei FG die Strecke verlassen, zählt der zweite Sensor den ersten wieder zurück, und diesen Wert will ich übergeben!


----------



## vierlagig (16 Oktober 2008)

der aufruf des zweiten ist nach dem aufruf des zählers?

dann mußt du dein signal über einen zyklus retten, also z.b. setzen ... oder eben andersrum programmieren, vom ende zum anfang, ist bei förderstrecken sowieso meist sinnvoller...

zeig mal die aufrufe und kringel die signale ein, die übergeben werden sollen...


----------



## Jackjackson (16 Oktober 2008)

vierlagig schrieb:


> der aufruf des zweiten ist nach dem aufruf des zählers?
> 
> dann mußt du dein signal über einen zyklus retten, also z.b. setzen ... oder eben andersrum programmieren, vom ende zum anfang, ist bei förderstrecken sowieso meist sinnvoller...
> 
> zeig mal die aufrufe und kringel die signale ein, die übergeben werden sollen...



E0.1 vom FB2 soll an FB1 übergeben werden...
(Nf heißt Nachfolger, Vg Vorgänger..... vlt hab ich das Ganze mit den Variablen verhunzt  )


----------



## Jackjackson (16 Oktober 2008)

In AWL... *ACK*


----------



## Gerhard K (16 Oktober 2008)

E 0.0 
E0.1

also mit den eingängen zählst du vorwärts und rückwärts??


----------



## Larry Laffer (16 Oktober 2008)

du verwendest in deinen FB's durchgängig absolute Adressen und nichts von den Schnittstellen ... 
Das ist nicht der Sinn eines FB ...


----------



## Gerhard K (16 Oktober 2008)

Larry Laffer schrieb:


> du verwendest in deinen FB's durchgängig absolute Adressen und nichts von den Schnittstellen ...
> Das ist nicht der Sinn eines FB ...


 
ja das ist nicht gut.denn so kannst du den fb nicht mehrfach nutzen

*ACK*


----------



## Jackjackson (16 Oktober 2008)

Wären FCs angebrachter? Mit denen kann ich aber keine Variablen an den OPC übergeben....


----------



## Gerhard K (16 Oktober 2008)

muß nicht sein.
tausche die absolute adressierung gegen statische variablen und gut ist

```
[FONT=Courier][SIZE=1]
[LEFT][SIZE=3]U([/SIZE]
[SIZE=3]L #Zaehlerwert[/SIZE]
[SIZE=3]L 2[/SIZE]
[SIZE=3]==I[/SIZE]
[SIZE=3])[/SIZE][/LEFT]
[SIZE=3]= M 10.3[/SIZE]
[/SIZE][/FONT]
```
 
ist der zaehlwert jener wert den du vom fb2 brauchst??


----------



## Gerhard K (16 Oktober 2008)

du hast ja nur den wert vom zähler1 im fb1.wo bekommst du den wert von zähler2 her??überleg dir das mal.entweder über inout oder du nutzt die instanz.
aber wie vl schon gesagt hat finden das manche unsauber.
ich nutze die instanzen auch gelegentlich und hatte damit noch keine probleme.so jetzt kann man über mich herfallen.


----------



## vierlagig (16 Oktober 2008)

aua! nicht tun! zeig mir nie wieder solche bausteine, da tut mir ja das programmiererherz weh!

wie gerhard und larry schon richtig sagten, dafür ist ein FB nicht da und ich füge hinzu: er fühlt sich dabei auch verarscht!

das zauberwort heißt kapselung. du erschaffst eine funktion, die du immer wieder verwenden kannst und nur von außen mit anderen übergabewerten versorgt wird. innerhalb der funktion arbeitest du nur mit dem, was dir von außen zur verfügung gestellt wird ... nich mal eben gucken, welcher globale merker da einen anderen wert hat - nein nein nein! entweder er kommt über die schnittstelle rein oder er hat dich nicht zu interessieren!

...aber irgendwie hatte ich schon sowas geahnt... noch viel lernen du mußt, junger krieger! 

@gerhard: solange ich deine instanzangreifenden programmteile nicht unter die finger bekomme, werd ich auch nicht über dich gerfallen, aber wenn ...


----------



## Gerhard K (16 Oktober 2008)

solange du nich in der kunstoffbranche arbeitest wirst du unsere programme auch nicht in die finger kriegen.
und mich auch nicht.
*ROFL*


----------



## vierlagig (16 Oktober 2008)

Gerhard K schrieb:


> solange du nich in der kunstoffbranche arbeitest wirst du unsere programme auch nicht in die finger kriegen.
> und mich auch nicht.
> *ROFL*



wer weiß, wo es mich hinverschlägt ... bin jung und kunststoffe sind auch interessant ... also nimm dich in acht - ich bin der mit dem FUBA pro t-shirt, wenn du das siehst, schnell rennen!


----------



## Gerhard K (16 Oktober 2008)

ok,ich werde mich in acht nehmen.


----------



## vierlagig (16 Oktober 2008)

Gerhard K schrieb:


> ok,ich werde mich in acht nehmen.



aber um das mit den instanzen jetzt nochmal fachlich zu beleuchten:

ich glaube ja auch, dass lesen vollkommen in ordnung ist. übers schreiben brauchen wir gar nicht erst anfangen zu diskutieren!

das problem, dass ich sehe, ist, dass man sich damit in eine abhängigkeit begibt ... man ist abhängig von der instanz eines oder mehrerer anderer bausteine. wenn man das über die schnittstelle macht - also als IN einen wert aus einer instanz, dann könnte man das durchgehen lassen, aber wenn man dass dann noch in den anderen baustein mit einstrickt - ohje, ohje, ich mag gar nicht dran denken!

ich betone nochmal: schreiben ist ein absolutes NO GO! lesen würd ich dir im zweifelsfalle durchgehen lassen, selber aber nicht so verwenden


----------



## Gerhard K (16 Oktober 2008)

ich bekomme die programme meistens vom stammhaus und ich muß alles so übernehmen bzw. programmieren wie von dort vorgegeben.
ich zeig dir mal einen kleinen auszug damit du heute nacht alpträume hast.

```
L     "ControlMap".Adr_WLV[1]     // WLV1 ........................
      T     "RCDB F101".Adressbuch[1]   // "RCDB F101".Adressbuch[1]
      T     "RCDB F102".Adressbuch[1]
      T     "RCDB F103".Adressbuch[1]
      T     "RCDB F104".Adressbuch[1]
      T     "RCDB F105".Adressbuch[1]
      T     "RCDB F106".Adressbuch[1]
      T     "RCDB F107".Adressbuch[1]
      T     "RCDB F108".Adressbuch[1]
      T     "RCDB F109".Adressbuch[1]
      T     "RCDB F110".Adressbuch[1]
      T     "RCDB F111".Adressbuch[1]
      T     "RCDB F112".Adressbuch[1]
      T     "RCDB F113".Adressbuch[1]
      T     "RCDB F114".Adressbuch[1]
      T     "RCDB F115".Adressbuch[1]
      T     "RCDB F116".Adressbuch[1]
      T     "RCDB F117".Adressbuch[1]
      T     "RCDB F118".Adressbuch[1]
      T     "RCDB F119".Adressbuch[1]
      T     "RCDB F120".Adressbuch[1]
      T     "RCDB F121".Adressbuch[1]
      T     "RCDB F122".Adressbuch[1]
      T     "RCDB F123".Adressbuch[1]
      T     "RCDB F124".Adressbuch[1]
      T     "RCDB F125".Adressbuch[1]
      T     "RCDB F126".Adressbuch[1]
      T     "RCDB F127".Adressbuch[1]
      T     "RCDB F128".Adressbuch[1]
      T     "RCDB_LK_1".Adressbuch[1]   // "RCDB_LK_1".Adressbuch[1]
      T     "RCDB_LK_2".Adressbuch[2]   // "RCDB_LK_2".Adressbuch[2]
      T     "RCDB_SBV".Adressbuch[2]    // "RCDB_SBV".Adressbuch[2]
 
      UN    "ControlMap".Typ_exist.GB[2]
      SPB   G02e                        // falls GB_2 vorhanden:
      L     "ControlMap".Adr_WLV[2]     // WLV 2 .......................
G02e: T     "RCDB F201".Adressbuch[1]   // "RCDB F201".Adressbuch[1]  
      T     "RCDB F202".Adressbuch[1]
      T     "RCDB F203".Adressbuch[1]
      T     "RCDB F204".Adressbuch[1]
      T     "RCDB F205".Adressbuch[1]
      T     "RCDB F206".Adressbuch[1]
      T     "RCDB F207".Adressbuch[1]
      T     "RCDB F208".Adressbuch[1]
      T     "RCDB F209".Adressbuch[1]
      T     "RCDB F210".Adressbuch[1]
      T     "RCDB F211".Adressbuch[1]
      T     "RCDB F212".Adressbuch[1]
      T     "RCDB F213".Adressbuch[1]
      T     "RCDB F214".Adressbuch[1]
      T     "RCDB F215".Adressbuch[1]
      T     "RCDB F216".Adressbuch[1]
```
so nun wird dir sicher schlecht,oder?
gibt noch mehr socher dinge in unseren projekten

aus irgendwelchen unerklärlichen gründen haben wir auch manchmal probleme weil sich das programm aufhängt.kann aber auch daran liegen,dass in den programmen AR1 und AR2 ohne sicherung manipuliert wird usw.
bin mir sicher du hättest deine helle freude mit den programmen


----------



## vierlagig (16 Oktober 2008)

Gerhard K schrieb:


> bin mir sicher du hättest deine helle freude mit den programmen



nicht nur ich! ... obwohl, die letzten beiden scheiß-programme eines kollegen guck ich einfach nicht an. wenn da irgendwas sein sollte, dann heb ich die hände und weise freundlich darauf hin, dass draußen ein großer container "leck mich am arsch" steht und man sich gerne bedienen könne.

nee, mal ehrlich, dass ist doch bullshit! ...und warum sichert ihr die adressregister nicht? das sind 8 zeilen code vorne 4, hinten 4, das macht den brei auch nicht fett!


----------



## SPSKILLER (16 Oktober 2008)

@4l: Da man in FUP/AWL keine Bausteinanschlüsse unsichtbar schalten kann, wie im CFC, macht es manchmal durchaus Sinn einen FB über statische Variablen zu versorgen.

Hast dir schon mal nen Bausteinaufruf im AWL angeschaut, der über 1-2 Bildschirmseiten geht? :sm12:

Spart ausserdem Zykluszeit und unter Umständen Speicherplatz.


----------



## Gerhard K (16 Oktober 2008)

ich weiß nicht wer mit dem begonnen hat,aber jeder andere hat das auch so gemacht.als ich mal fragte warum adressregister nicht gesichert werden,bekam ich als antwort.das ist alles schon so komplex und flexibel da kann nichts mehr geändert werden.wollte nachhaken,aber das ist sinnlos.wir sind halt nur eine werksvertretung und sind leider daran gebunden es so zu machen wie vorgegeben.


----------



## vierlagig (16 Oktober 2008)

SPSKILLER schrieb:


> Hast dir schon mal nen Bausteinaufruf im AWL angeschaut, der über 1-2 Bildschirmseiten geht? :sm12:


ja, und auch in KOP, ausgedruckt auf 8 oder 9
da läuft was falsch - die zu kapselnden funktionseinheiten sollten sinnvoll und kompakt sein und an der richtigen stelle mit den global-parametersen versorgt sein



SPSKILLER schrieb:


> Spart ausserdem Zykluszeit und unter Umständen Speicherplatz.



das argument zieht bei einer 315 abwärts vielleicht, aber doch nicht bei richtigen männer-cpus, wie du sie einsetzt


----------



## vierlagig (16 Oktober 2008)

Gerhard K schrieb:


> das ist alles schon so komplex und flexibel da kann nichts mehr geändert werden



ja nee, is klar, da reichen temp-variablen aus und die ganze prozedur greift niergendwo weiter ein - naja, was soll man da noch sagen....


----------



## SPSKILLER (16 Oktober 2008)

lol.

Du hast keine Ahnung!

Wenn z.B. mit WinCC visualisiert wird, dann braucht man die Anschlüsse aussen. (mappen un so)

Warum soll man den gleichen Baustein nicht in einem S7 - Intouch System verwenden - mit aufgeräumter Strucktur???

Aber da fehlt dir die Erfahrung, weil du nicht aus deinem Laden rauskommst.

Im übrigen zählt mein Argument bei JEDER!!! SPS, die zu einem gewisen Grad ausgelastet ist.

Schönen Gruß


----------



## vierlagig (16 Oktober 2008)

SPSKILLER schrieb:


> Du hast keine Ahnung!


*ROFL*
reicht es dir nicht, dass dir markus ständig in den arsch tritt? 



SPSKILLER schrieb:


> Wenn z.B. mit WinCC visualisiert wird, dann braucht man die Anschlüsse aussen. (mappen un so)
> 
> Warum soll man den gleichen Baustein nicht in einem S7 - Intouch System verwenden - mit aufgeräumter Strucktur???



MOOOOOOMENT ... von visualisierungen haben wir hier noch gar nicht gesprochen und wenn du deine augen mal anstrengen würdest, könntest du nachlesen, dass ein lesender zugriff akzeptiert wird, selbst von mir und von einer visualisierung auf einen instanz-db lesend zuzugreifen ist für mich dass normalste der welt, da - bei vernünftiger strukturierung, jeder depp, ja auch du, versteht, wo die daten herkommen



SPSKILLER schrieb:


> Aber da fehlt dir die Erfahrung, weil du nicht aus deinem Laden rauskommst.


doch, jeden abend zum feierabend darf ich gehen



SPSKILLER schrieb:


> Im übrigen zählt mein Argument bei JEDER!!! SPS, die zu einem gewisen Grad ausgelastet ist.



du hast in deinem ganzen leben noch keine 300er in den fingern gehabt - aber ja biene, natürlich hast du recht, wenn die zykluszeit sowieso schon an der kotzgrenze ist, kann man mit programmiertricks natürlich verhindern, die nächst größere einzusetzen, so verhindert man dann auch, dass irgendjemand mit dem programm klar kommt ...


----------



## jabba (16 Oktober 2008)

*ROFL*
:sb14:
worum gings hier nochmal ....
wo ist der Popcornsmili


----------



## Gerhard K (16 Oktober 2008)

ui was habe ich hier für eine lawine losgetreten.*ROFL*


----------



## vierlagig (16 Oktober 2008)

jabba schrieb:


> wo ist der Popcornsmili



nimmste den:


----------



## SPSKILLER (16 Oktober 2008)

Das hat man gerne.

Erst reagierst du auf meinen ersten Beitrag, der absolut korrekt und in keinster Weise provozierend ist, wie ein kleines Kind und pöbelst direkt mal rum.
Dann probierst du dich rauszuwinden.

Von dem was ich geschrieben habe hast du gar nix kapiert! 

Wenn du deine Augen mal anstrengen würdest, könntest du nachlesen was ich über das Lesen der Visualisierung aus einem Instanz-DB geschrieben habe: gar nix!!!
Du blicksts blos nicht.
Im übrigen schreibt eine Visu auch in Instanz-DBs. Siemens Philosophie.

Und 300er Steuerungen hab ich schon programmiert und in Betrieb genommen, da wusstest du noch gar nicht, wie die aussehen, geschweige denn was das ist.


----------



## Larry Laffer (16 Oktober 2008)

SPSKILLER schrieb:


> @4l: Da man in FUP/AWL keine Bausteinanschlüsse unsichtbar schalten kann, wie im CFC, macht es manchmal durchaus Sinn einen FB über statische Variablen zu versorgen.
> 
> Hast dir schon mal nen Bausteinaufruf im AWL angeschaut, der über 1-2 Bildschirmseiten geht? :sm12:
> 
> Spart ausserdem Zykluszeit und unter Umständen Speicherplatz.



In diesem Zusammenhang und damit "zurück zum Thema" :
Wenn deine FB-Schnittstelle so groß ist, dann könnte es auch sein, dass ein Teil dessen, was da von Aussen kommt vielleicht auch mit in den FB gehört hätte.

Allgemein:
Der Trick bei der Erstellung von FB's ist, dass man dadurch universell verwendbare Sub-Funktionen (oder Prozeduren) erhält (das wurde auch von *Vierlagig* schon recht treffend erwähnt). Um das sinnvoll hinzubekommen sollten im FB *gar keine* globalen Variablen (wie Eingänge, Ausgänge, Merker, Timer, Zähler etc.) verwendet werden. Braucht man so etwas, so nimmt man dafür entweder IEC-Bausteine oder man baut sich aus den zu Verfügung stehenden (statischen) Variablen etwas zusammen. Braucht man Ein- oder Ausgänge oder auch Merker, so ist dafür die Schnittstelle (INPUT, OUTPUT, IN_OUT) vorgesehen. 
Möchte ich von Aussen große Datenblöcke mit bekannter Dimension übernehmen, so kann man dies sehr schön über UDT's oder ARRAY's als Schnittstellen realisieren.

Allerdings:
Wenn mir ein Baustein (z.B. einer meiner Mess-FB's) eine Kurve aufzeichnet und ich die visualisieren möchte, dann verwende ich in der Visu an dieser Stelle auch sehr gerne die Daten des I-DB's. Diese Daten erst irgendwo anders hinzutransferieren macht gar keinen Sinn und wenn ich den Aufbau des FB's an der Schnittstelle oder im Stat-Bereich ändere, dann macht die Visu das automatisch mit ...

Gruß
LL


----------



## jabba (16 Oktober 2008)

SPSKILLER schrieb:


> .
> 
> Und 300er Steuerungen hab ich schon programmiert und in Betrieb genommen, da wusstest du noch gar nicht, wie die aussehen, geschweige denn was das ist.


 
SUUPPER da hacken sich zwei Teenies um den Anfang der S7,
und die 7 Jahre unterschied, naja....

Ich habs 4L schon mal in eine PN bestätigt, und mache das auch gerne öffentlich :
Hochachtung für die Kenntnisse in dem Alter.

Ich finde prinzipiell auch den Ansatz von 4L korrekt... ABER
Das hilft dem Themenstarter nicht weiter, in diesem Fall finde ich das Programm nicht komplett falsch, sondern man muss ihm die Vorzüge des FB's genauer erklären. Eine Grundsatzdiskussion ob man nun auf einen Instanzdb zugreifen darf oder nicht finde ich hier nicht richtig am Platz.
Und am Rande: Ich greife z.B. aus der Visu auf InstanzDB's lesen und schreiben zu.....
Aber nur wenn es fertige Bausteine von Siemens sind z.B. Regler.

Soo. und jetzt könnt ihr auch mich hauen, und morgen helfen wir gemeinsam dem Themenstarter; versprochen ?

EDIT: Der Larry hat schon mal angefangen


----------



## Larry Laffer (16 Oktober 2008)

jabba schrieb:


> Soo. und jetzt könnt ihr auch mich hauen



Warum ... So wie du es machst ist es nichst verwerfliches - aus meiner Sicht.



jabba schrieb:


> und morgen helfen wir gemeinsam dem Themenstarter; versprochen ?



Das sollte doch das Ziel sein - aber manchmal läßt sich eine Grundsatz-Diskussion wohl nicht verhindern ...


----------



## SPSKILLER (16 Oktober 2008)

hey larry,

wenn man aber nen FB ins WinCC mappen will, dann müssen die Parameter nun mal eben als IN/OUT/INOUT deklariert sein, da der statische Bereich nicht gemappt werden kann.

Im CFC schaltet man die Parameter halt unsichtbar, dann stören sie nicht.

Habe ich aber kein WinCC lege ich sie in den STAT-Bereich und beschreibe - wenn nötig - von aussen.

Das war alles was ich geschrieben habe.

Deshalb verstehe ich auch die Aufregung net


----------



## vierlagig (16 Oktober 2008)

SPSKILLER schrieb:


> Das hat man gerne.
> 
> Erst reagierst du auf meinen ersten Beitrag, der absolut korrekt und in keinster Weise provozierend ist, wie ein kleines Kind und pöbelst direkt mal rum.
> Dann probierst du dich rauszuwinden.
> ...



frag mich grad, ob ich da humormäßig irgendwie drauf reagieren muß, aber ich komme immer wieder zu dem punkt: es ist nur ein user. es ist nur einer, der ein problem mit sich selber hat, da kannste jetz nich noch drauf rumtrampeln.

ich denke, wir fahren am besten, wenn wir uns niemals nie beruflich einigen müssen, das gibt nur schwerverletzte. darüber hinaus: ich kann deine sprache verstehen und habe es nicht nötig bockig zu sein. bin alt genug um auch sachlich damit umzugehen, vorrausgesetzt man begegnet mir sachlich!

zum thema visualisierungen: winCC und intouch sind für mich systeme aus der großen weiten welt der visualisierungen und darauf bist du eingegangen, aber: who cares? hauptsache dein kleines ego hat recht ... viel spaß noch!

@larry:

prinzip der kleinsten funktionseinheit! wenn die schnittstelle so groß wird, dass sie nicht mehr darstellbar ist sollte der ansatz überdacht werden und nochmal gründlich geschaut werden, ob man wirklich den sinnvollsten kleinsten nenner gefunden hat



> Wenn mir ein Baustein (z.B. einer meiner Mess-FB's) eine Kurve aufzeichnet und ich die visualisieren möchte, dann verwende ich in der Visu an dieser Stelle auch sehr gerne die Daten des I-DB's.


*ACK*

nachzulesen auch hier: http://sps-forum.de/showpost.php?p=136487&postcount=41

@jabba:

von mir aus können wir ihm auch gern jetzt schon helfen!

wenn ich die funktionen richtig in erinnerung habe, haben sie einen ähnlichen aufbau. wahrscheinlich machen beide bahnen auch das selbe, so dass es eigentlich möglich sein müßte mit nur einem FB mit unterschiedlichen instanzbereichen das ganze zu bewerkstelligen.

nun stellt sich mir die frage: wie machen wir jackjackson klar, dass er mit der schnittstelle und ohne globalen variablen im FB auskommen muß und es auch kann?


----------



## Thomas_v2.1 (16 Oktober 2008)

vierlagig schrieb:


> nun stellt sich mir die frage: wie machen wir jackjackson klar, dass er mit der schnittstelle und ohne globalen variablen im FB auskommen muß und es auch kann?



Ich habe für einen FB zwei Verwendungsweisen:
1. Die ursprünglich angedachte als Funktion mit Speicherbereich, die universell einsetzbar und wiederverwendbar sein muss
2. Um mehrere Daten von Multiinstanzen in einem DB zu legen, bzw. um sehr spezielle Programmteile zusammenzufassen

Zu 2:
Dies verwende ich wenn ich mehrere Programmbereiche habe, die mehr oder weniger nichts mit anderen Bereichen zu tun haben. Dann lege ich in diesen FB einmal meine 1er FBs als Multiinstanz, und dann auch meine Antriebs-FBs als Multiinstanzen. Diese FBs sind dann meist so speziell dass sie sich sowieso nur mit großer Anpassung in anderen Projekten benutzen ließen.
Darum greife ich aus diesen FBs auf globale Variablen, aus Daten aus anderen DBs usw. zu. Diese FBs haben bei mir gar keine Schnittstelle.

Es macht durch die Einsparung an Instanz DBs das ganze Projekt wesentlich übersichtlicher wie ich finde.


----------



## Jackjackson (17 Oktober 2008)

Also danke für die zahlreichen Antworten und den Popcorn-Smily, ich setz mich morgen in der Arbeit damit auseinander.... 
Das alles ist für mich (noch) nicht so ganz einfach! Hatte ja, wie man sieht, nie mit SPSen zu tun 
(es war mir schon fast peinlich die 2 fbs reinzustellen)


----------



## Larry Laffer (17 Oktober 2008)

Jackjackson schrieb:


> ... es war mir schon fast peinlich die 2 fbs reinzustellen


 
Ganz falsche Einstellung ...



Jackjackson schrieb:


> Das alles ist für mich (noch) nicht so ganz einfach! Hatte ja, wie man sieht, nie mit SPSen zu tun


 
Dann solltest du bei der Sache "am Ball bleiben".
Ich denke schon, dass wir dir hier weiterhelfen können (und zwar auch so, dass du es verstehst und sinnvoll einsetzen kannst).
Also ... ich halte es da mit *Jabba* ... lass es uns angehen ...

Gruß
LL


----------



## rostiger Nagel (17 Oktober 2008)

Guten Morgen,
ich war gestern Abend alleine zuhause aber diese Diskussion hat mir den Abend gerettet…!

Aber jetzt zum Thema, vielleicht kannst du Jack die Aufgabe genauer beschreiben, so das wir uns Schritt für Schritt an das Ziel tasten.

Vielleicht fangen wir mit der Symboldatei an, so das wir einen Überblick der Funktionen über die Sensoren bzw. Aktoren haben.

Gruß Helmut


----------



## Jackjackson (17 Oktober 2008)

So, guten Morgen,
ich mach mich jetzt mal an die Arbeit, mit den Tipps, die ihr mir freundlicherweise gegeben hat  , das Programm zu "bearbeiten"...

Stichwort Kapselung:
Die Förderstrecken mit den Sensoren und Aktoren sind alle gleich/haben alle die gleichen Funktion.... 
Welchen Teil von meinem FB, muss ich denn am besten in einen FC einfügen?
Muss ich für jedes Sensor/Motor-Netzwerk ein gesondertes FB nehmen (besonders bei mehreren Förderstrecken) oder kann ich das verallgemeinern (zB mit Zahlerwert x )?



> Vielleicht fangen wir mit der Symboldatei an, so das wir einen Überblick der Funktionen über die Sensoren bzw. Aktoren haben.
> 
> Gruß Helmut



Was muss ich denn in der Symboldatei drinstehn haben :s17: ?


----------



## rostiger Nagel (17 Oktober 2008)

Hallo Jack,
wenn ich das richtig verstanden habe, möchtest du ja einfach eine Information an den nächsten Baustein weitergeben.
Jetzt erst einmal:

- was sollen die Bausteine in einzelnen machen, vielleicht reicht ja sogar einer der dann Instanzen bekommt.

- Du hast ja in deinen Bausteinen mit Eingängen gearbeitet. Die zählen mal hoch ein andere zählt runter. Da wäre es schön zu wissen was für Funktionen die Eingänge bzw. Ausgänge haben z.B. "E 0.0" ist Sensor "1B1" mit der Funktion "LS aufwärtszählen Band 1"

Um so mehr Info wir bekommen um so besser kann dir geholffen werden.

gruss Helmut


----------



## Jackjackson (17 Oktober 2008)

Reparatur schrieb:


> Aber jetzt zum Thema, vielleicht kannst du Jack die Aufgabe genauer beschreiben, so das wir uns Schritt für Schritt an das Ziel tasten.





Jackjackson schrieb:


> Ich versuche ein Programm für einen "Pulkrollenförderer" zu schreiben!
> Es gibt 2 Förderstrecken:
> Am Ende der ersten Strecke ist ein Sensor, die die zweite Förderstrecke antreibt und den Inhalt an Fördergütern zählt! Auf der zweiten Förderstrecke dürfen nie mehr als 2 Fördergüter enthalten sein (ebenso wie auf den Folgenden)!
> Wenn die zwei FG die Strecke verlassen, zählt der zweite Sensor den ersten wieder zurück, und diesen Wert will ich übergeben!




Oder besser 3 Förderstrecken A B und C, wir betrachten das mittlere B;
Sensor A zählt in B eintretende Fördergüter, Sensor B die, die in C eintreten;
Motor B und Sensor A gehören zusammen (Sensor A steuert Motor auf B, Sensor B steuert Motor auf C,...);
Sensor B gibt an Sensor A den Zählwert zurück, der vom Sensor A subtrahiert werden muss (bzw zählt Sensor A zurück)....

Wenn man das bildlich vor Augen hat, ist es vlt einfacher


----------



## Jackjackson (17 Oktober 2008)

Reparatur schrieb:


> Hallo Jack,
> 
> - Du hast ja in deinen Bausteinen mit Eingängen gearbeitet. Die zählen mal hoch ein andere zählt runter. Da wäre es schön zu wissen was für Funktionen die Eingänge bzw. Ausgänge haben z.B. "E 0.0" ist Sensor "1B1" mit der Funktion "LS aufwärtszählen Band 1"
> 
> gruss Helmut



Ich hab mir das so vorgestellt, dass wenn E0.0 bei Förderstrecke A ausgelöst wird, eine Flanke am Zähler auslöst (wenn man das so sagen kann  )...
E0.1 bei Sensor B zählt Sensor A zurück...


----------



## rostiger Nagel (17 Oktober 2008)

Hallo Jack,
dann bau doch erst ein FB wo du die Variablen Deklariest.
- IN aufzählen
- IN abzählen
- IN Zähler
- OUT Antrieb

Dann baust du ein Netzwerk auf wo du zählst. Wenn du einen normalen Zähler nimmst, brauchst du keine Flanken, das macht der Zähler selbst.

Fang doch so einmal an, mach nicht den ganzen Baustein aufeinmal, sondern teste aus was du hast und dann geht es weiter.
Also erst einmal nur den Zähler.

gruss Helmut


----------



## Jackjackson (17 Oktober 2008)

Ok, mach ich mal auf die Schnelle, danke 
Was soll ich in die Symboldatei reinschreiben?


----------



## rostiger Nagel (17 Oktober 2008)

...du must jetzt nicht die ganze Symboltabelle schreiben, beschränke dich auf 2 Bänder. Da schreibst du deine verwendeten Eingänge und Ausgänge mit dem Symbolischen Namen und dem entsprechenden Kommentar...

Symboltabelle finde ich sehr wichtig, ich Programmiere fast nur noch Symbolisch so habe ich sehr wenige fehler.

Die Symbole solltest du den Funktionsgruppen zuordnen:
z.b 1B1-Lichtschranke Band 1; 2B1-Lichtschranke Band 2 usw.
So brauchst du später wenn du etwas kopierst nur den Index ändern
und muß dich nicht darauf konzentrieren "Welcher Eingang war es denn jetzt"

gruss Helmut


----------



## Jackjackson (17 Oktober 2008)

Achso, dann eilt das nicht 

Muss ich nicht auch als OUT noch ein "abzählen" einfügen, damit es vom vorherigen System benutzt werden kann?
(Den Zähler hab ich übrigens....)


----------



## rostiger Nagel (17 Oktober 2008)

...nein nicht umbedingt du legst auf den "IN abzählen" den Sensor der abzählen soll direkt...
Beispiel:

1. aufruf FB1 für Band 1
IN_aufzaehlen: 1S1
IN_abzaehlen: 2S1

2. aufruf FB1 für Band 2
IN_aufzaehlen: 2S1
IN_abzaehlen: 3S1

usw...


----------



## Jackjackson (17 Oktober 2008)

Soll ich die Bedingungen für den Motor, den ich mit dem entsprechenden Sensor antreiben will, in einem FC oder in ein Netzwerk vom FB rein?

- Fragen über Fragen  -


----------



## rostiger Nagel (17 Oktober 2008)

...ist schon OK...
was meinst du mit Bedingung? Die Freigab z.B. Not-Aus wenn ja kommt die auch zu den Eingangsparametern.
Hast du den schon den Zähler fertig?


----------



## Jackjackson (17 Oktober 2008)

Mit Bedingungen mein ich zB:

- Falls sich kein Fördergut auf der Strecke B befindet, wartet das FG , das den Sensor A aktiviert hat, auf der Strecke B (Motor B aus).
- Falls sich bereits ein FG auf der Strecke B befindet (Zaehler A = 1), darf nur ein FG Strecke B, die restlichen warten auf Strecke A (Motor A aus), bis Strecke B leer ist (Zaehler B = 2 --> Zaehler A = 2 - 2 ; Motor B ein--> aus, wenn Zaehler A =1)
usw.... sind eben 2er-Pulks...

hm, ist ein wenig unübersichtlich geworden 


(Ja, Zähler hab ich schon.... vlt hab ich den ein wenig zu primitiv gemacht)


----------



## rostiger Nagel (17 Oktober 2008)

ja da gebe ich dir recht...
du kannst doch parameter machen der sperre heißt.
- IN_sperre
- OUT_sperre
Der IN wird mit dem OUT verschaltet....

Aber ich denke du bist ein bischen zu schnell. 
Also noch mal meine Frage: "Hast du den schon den Zähler fertig"

Wenn Ja dann Teste den einmal dann verstehst du wo wir hin wollen.


----------



## rostiger Nagel (17 Oktober 2008)

ah...jetzt habe ich es gelesen den Zähler hast du...Primitiv gibt es nicht.

Zeige doch einmal her, wie sieht er aus?


----------



## Jackjackson (17 Oktober 2008)

reparatur schrieb:


> ah...jetzt habe ich es gelesen den zähler hast du...primitiv gibt es nicht.
> 
> Zeige doch einmal her, wie sieht er aus?




```
u     e      0.0
      zv    z      1
      u     e      0.1
      zr    z      1
      nop   0
      nop   0
      nop   0
      nop   0
      nop   0
      u     z      1
      =     m     10.0
```

Oder muss ich an den Ausgang senden statt an irgendweinen Merker?


----------



## FrankW (17 Oktober 2008)

Jackjackson schrieb:


> Oder besser 3 Förderstrecken A B und C, wir betrachten das mittlere B;
> Sensor A zählt in B eintretende Fördergüter, Sensor B die, die in C eintreten;
> Motor B und Sensor A gehören zusammen (Sensor A steuert Motor auf B, Sensor B steuert Motor auf C,...);
> Sensor B gibt an Sensor A den Zählwert zurück, der vom Sensor A subtrahiert werden muss (bzw zählt Sensor A zurück)....
> ...


 
Hallo Jackjackson,

wenn der Sensor A den Motor B steuert, dann würde bei einem 3.Teil Motor B anhalten. Dann fährt aber auch kein Teil mehr runter.
Ich würde sagen:
Sensor A startet Motor B bei <2 Teilen auf Band B und stoppt Motor A bei =2 Teilen auf Band B.
Sensor B startet Motor C bei <2 Teilen auf Band C und stoppt Motor B bei =2 Teilen auf Band C.
Einfachste Lösung wäre sicher ein Freigabemerker (oder Bit im DB) für den jeweiligen Motor.

MfG
FrankW


----------



## rostiger Nagel (17 Oktober 2008)

Frank....Frank,
nicht so schnell, wir müssen doch erst einmal Grundlagen machen und dann geht es ans eingemachte.....
Jack muss verstehen wie er mit Instanzen Arbeitet, das war doch sein eigendliches Problemm. Den Ablauf bekommt er später  bestimmt schon selber hin.

gruss Helmut


----------



## Gerhard K (17 Oktober 2008)

wie schon in den gestrigen posts von larry erwähnt sollte man im Fb keine absolute adressierung verwenden.
das heißt eine IN varialble #zaehler anlegen und von aussen den zähler zuweisen.


----------



## Jackjackson (17 Oktober 2008)

FrankW schrieb:


> Hallo Jackjackson,
> 
> wenn der Sensor A den Motor B steuert, dann würde bei einem 3.Teil Motor B anhalten. Dann fährt aber auch kein Teil mehr runter.
> Ich würde sagen:
> ...



Bei einem 3. Teil soll eigentlich Sensor A merken, dass Strecke A anhalten soll, bis der Zähler wieder < 2 ist (der von Sensor B auf der Strecke B, wo 2 Teile drauf sind, zurückgezählt wird)...

Wie ein Freigabemerker funktioniert weiß ich leider nicht :icon_rolleyes:


----------



## Jackjackson (17 Oktober 2008)

Gerhard K schrieb:


> wie schon in den gestrigen posts von larry erwähnt sollte man im Fb keine absolute adressierung verwenden.
> das heißt eine IN varialble #zaehler anlegen und von aussen den zähler zuweisen.



Ich glaub jeder hat seine eigene Vorstelllung, wie das laufen solll...
(quasi, alle wege führen nach rom, bloß meiner nicht  )


----------



## rostiger Nagel (17 Oktober 2008)

Hallo Jack,
schau dir mal das an....

Anhang anzeigen FB1000.pdf


----------



## Gerhard K (17 Oktober 2008)

nur nicht resignieren.dafür gibt es dieses forum ja.da wird anfängern genauso geholfen wie leuten mit komplexen problemen.
wichtig ist darnbleiben und fragen.egal wie blöd es einen vorkommt.ES GIBT KEINE BLÖDEN FRAGEN.NUR BLÖDE ANTWORTEN:


----------



## FrankW (17 Oktober 2008)

Hallo Jackjackson,

eigentlich wollte ich mich in die Schulung nicht weiter reinhängen, aber zur konkreten Frage formuliere ich neu:

Sensor A setzt einen Merker B bei <2 Teilen auf Band B und setzt einen Merker A zurück bei =2 Teilen auf Band B.
Sensor B setzt einen Merker C bei <2 Teilen auf Band C und setzt einen Merker B zurück bei =2 Teilen auf Band C.
Die Motoren laufen nur,  wenn der zugehörige Merker gesetzt ist.

MfG
FrankW


----------



## Jackjackson (17 Oktober 2008)

Danke.... wenn ich soweit bin, komme ich darauf zurück 



Reparatur schrieb:


> Hallo Jack,
> schau dir mal das an....
> 
> Anhang anzeigen 5880



Achso, bei mir heißt "Zaehler" Z1...


----------



## Gerhard K (17 Oktober 2008)

> Achso, bei mir heißt "Zaehler" Z1


 
Z1 ist eine absolute adressierung und sollte in einem FB nicht verwendet werden,damit man den FB für mehrere Motoren,Bänder(gleicher Art)... verwenden kann ohne im Baustein was ändern zu müssen.nur die beschaltung von aussen wird geändert.Andere Eingänge Zähler....
Dafür legt man einen FB an.Sonst könnte man auch eine FC nehmen.


----------



## rostiger Nagel (17 Oktober 2008)

Hallo Jake,
so kann er ja auch weiter heißen, wenn du den Baustein aufrufst kommt an die Eingangsvariable Z1 für Band 1.
Für Band 2 rufen wir den Baustein noch einmal auf und dann heißt er Z2.

So bekommt jedes Band seinen eigenen Zähler.


----------



## Gerhard K (17 Oktober 2008)

```
CALL  "FB_bandmotor" , DB100
       IN_1B1    := [COLOR=red]E0.0[/COLOR]
       IN_2B1    := [COLOR=red]E0.1[/COLOR]
       zaehler1  := [COLOR=red]Z1[/COLOR]
       zaehlwert2:= [COLOR=red]Z2[/COLOR]
       motorA_AUS:= [COLOR=red]A0.0[/COLOR]
```
 
so sieht der baustein z.Bsp. von aussen dann aus


----------



## rostiger Nagel (17 Oktober 2008)

und so wenn mann ihn 2 mal aufruft

Anhang anzeigen OB1.pdf


----------



## Jackjackson (17 Oktober 2008)

Gerhard K schrieb:


> wie schon in den gestrigen posts von larry erwähnt sollte man im Fb keine absolute adressierung verwenden.
> das heißt eine IN varialble #zaehler anlegen und von aussen den zähler zuweisen.



Eben  .... deswegen wars falsch... danke


----------



## rostiger Nagel (17 Oktober 2008)

...ich glaube jetzt hat es klick gemacht...


----------



## Gerhard K (17 Oktober 2008)

sieht so aus


----------



## FrankW (17 Oktober 2008)

@Reparatur, @Gerhard K

ich würde sagen, das war Grundlagenschulung auf Fortgeschrittenen-Niveau. Ihr solltet euch bei SITRAIN bewerben.:s18:

MfG
FrankW


----------



## vierlagig (17 Oktober 2008)

FrankW schrieb:


> Ihr solltet euch bei SITRAIN bewerben.



ja, die setzen wahrscheinlich auch auf die CPU-internen zähler 

nichts für ungut, ihr macht das echt super! respekt! weiter so und schönes wochenende


----------



## Gerhard K (17 Oktober 2008)

das zählen würde ich im fb anders lösen.aber für den anfang sollte das reichen.
Step7 by Step7:-D


----------



## Jackjackson (17 Oktober 2008)

Reparatur schrieb:


> ...ich glaube jetzt hat es klick gemacht...



ne, nicht ganz... 
Wo kommt euer Z1 her? Bspsweise....


----------



## Gerhard K (17 Oktober 2008)

wo hackt es denn??


----------



## Jackjackson (17 Oktober 2008)

Hab jetzt irgendwie einen Aussetzer...
Ihr habt eine IN Variable angelegt in dem FB, aber habt ihr jetzt einen Zaehler im FB drin oder nicht.... es hieß mal "den zahler von außen zuweisen"
Habt ihr zufällig verschiedene Lösungen?


----------



## Gerhard K (17 Oktober 2008)

bei der schnittstelle im FB eine IN variable vom datentyp counter anlegen und diese variable von aussen mit dem Zähler Z1 versorgen.
IN variable vom datentyp counter = das ist mein "interner Zähler"
In_zaehler:= Z1


----------



## Jackjackson (17 Oktober 2008)

Ja, in der Schnittstelle hab ich die Variable schon drin 
Aber ich hab auch in einem Netzwerk im FB einen Zaehler, der Zaehler heißt.... oder ist das mit "aussen" gemeint und ich muss diesen Z1 nennnen?
Entschuldigt.... bin leicht verwirrt! Weit entfernt von "Klick"


----------



## Gerhard K (17 Oktober 2008)

im fb keinen Z1 verwenden auch nicht wenn du ihn mit zaehler benannt hast.Z1 nur über die schnittstelle von aussen an die variable zaehler vom datentyp counter übergeben.
und damit ist dein zähler im FB die variable zaehler.


----------



## Jackjackson (17 Oktober 2008)

dann hab ich ja den Zaehler nicht erstellen müssen... [Post #60]
das hat mich irgendwie ducrheinander gebracht!

Muss ich dann über FCs die Schnittstellen der FB versorgen`?


----------



## rostiger Nagel (17 Oktober 2008)

...du hast deinen Z1 bestimmt in der Symboltabelle Z1 gennant und dann in deinen FB verbaut....
so war es nicht gedacht, wie Gerd schon schreibt wird im Bausteinkopf über eine IN Variable (bei uns jetzt einfach Zaehler gennant) der Zähler übergeben. Deswegen bezeichnet man diese IN; OUT und IN_OUT Paramter auch als schnittstelle...


----------



## rostiger Nagel (17 Oktober 2008)

Die Schnittstelle mußt du da versorgen wo du den Baustein aufrufst,
das kann der OB1 sein oder ein anderer FB.
Schau dir doch noch mal meinen OB1 in Beitrag #73 an!


----------



## Jackjackson (17 Oktober 2008)

Nein, in der Symboltabelle hab ich nichts gemacht.....
Ich will nur wissen, wo der Zähler dann drin ist, .... dass er als Variable im Bausteinkopf enthalten ist weiß ich schon!


----------



## rostiger Nagel (17 Oktober 2008)

Bei der IN Variablen sagst du den Baustein ich möchte einen Zähler haben, nennen wir ihn "Zähler". Dann Programmierst du im FB mit diesen Zähler.
Wenn du den Baustein später aufrufst muß du den Baustein nur noch mitteilen welcher Zähler es sein soll Z0; Z1 ; Z2 usw.
Nehmen wir jetzt z.b. Z1 so arbeitet dein Baustein (intern während des aufrufes)  mit dem Zähler Z1.


----------



## rostiger Nagel (17 Oktober 2008)

Ich habe ihn jetzt einfach Zähler gennant, die IN Variable könnte aber auch Ei oder Baum heißen.

U #auf
ZV #Ei


----------



## FrankW (17 Oktober 2008)

Reparatur schrieb:


> Ich habe ihn jetzt einfach Zähler gennant, die IN Variable könnte aber auch Ei oder Baum heißen.
> 
> U #auf
> ZV #Ei


 
jetzt hast du ihm den "Rest" gegeben!

MfG
FrankW


----------



## Gerhard K (17 Oktober 2008)

```
CALL  "FB_bandmotor" , DB100
       IN_1B1    := [COLOR=red]E0.0[/COLOR]
       IN_2B1    := [COLOR=red]E0.1[/COLOR]
       zaehler1  := [COLOR=red]Z1  // hier übergibst du den Zähler Z1[/COLOR]
       zaehlwert2:= [COLOR=red]Z2[/COLOR]
       motorA_AUS:= [COLOR=red]A0.0[/COLOR]
```
an die interne variable (siehe anhang)

wenn du jetzt intern

```
U     #IN_1B1
      FP    #hf.merker1
      ZV    #zaehler1
      U     #IN_2B1
      FP    #hf.merker2
      ZR    #zaehler1
```
den zähler hoch und runterzählst hast du diesen wert nicht aussen im Z1 enthalten.


----------



## rostiger Nagel (17 Oktober 2008)

...nein glaube ich nicht gerd zeigt ihn das schon ohne eier...

(jetzt bitte nicht falsch verstehen, das ist nicht zweideutig gemeint)


----------



## Jackjackson (17 Oktober 2008)

Ihr 2 habt verschiedene Variablen .... 
@Gerd:
Was sind von dir die ersten 2 IN_Var? Und was hast du im STAT drin?


----------



## Jackjackson (17 Oktober 2008)

So schaut es bei mir aus (immernoch):


----------



## Larry Laffer (17 Oktober 2008)

... wie wäre es, wenn ihr einfach mal bei dem Beispiel aus Beitrag #66 von *Reparatur* bleibt und das erklärt. Es macht für mich keinen Sinn immer wieder mit etwas Neuem anzufangen ...

@Jack:
Die Variablen, die im FB verwendet werden sind im Prinzip Platzhalter für das, was du von Aussen als "Parameter" anträgst. So musst du die Sache dann auch verstehen.

@Helmut:
Du schlägst dich gar nicht schlecht ... Willst du mir Konkurenz machen ?

Gruß
LL


----------



## Larry Laffer (17 Oktober 2008)

Nachsatz:
Der Zähler im FB1 schaltet mit seinem Q den Ausgang ... das macht doch gar keinen Sinn. Der Zähler müßte doch mit einem Wert verglichen werden und das sollte dann den Ausgang schalten ...


----------



## Jackjackson (17 Oktober 2008)

Ja, dass das Q den Antrieb steuert ist komisch...


----------



## rostiger Nagel (17 Oktober 2008)

Hallo Jake, 
zu deinen Beitrag #96 das sieht doch garnicht so schlecht aus.

Teste das doch einmal, es geht doch erst einmal darum das
rüber kommt was so FB alles kann.
Das der Ausgang jetzt noch direkt geschaltet wird ist nicht schlimm
daran können wir später noch Arbeiten.


----------



## Larry Laffer (17 Oktober 2008)

Du müßtest m.E. den Wert des Zählers "Zaehler" auf einen Wert (deinen Wunschwert) vergleichen und damit den Ausgang schalten ...

Also z.B. :
	
	



```
L zaehler
L 2
>=I
= out_antrieb
```
oder so ...


----------



## Jackjackson (17 Oktober 2008)

Reparatur schrieb:


> Hallo Jake,
> zu deinen Beitrag #96 das sieht doch garnicht so schlecht aus.
> 
> Teste das doch einmal, es geht doch erst einmal darum das
> ...



Gehen tut es schon.... kann man das auch so machen (wegen dem Ausgang):

oh sorry, das Q vom Zaehler muss auf einen Merker hinweisen und es sind 2 gleiche NW drin... muss ich vorhin versehentlich vergessen haben
ich überarbeite es lieber nochmal


----------



## rostiger Nagel (17 Oktober 2008)

...ich denke wir müssen das jetzt Schritt für Schritt weiter machen...

- Wenn dein Zähler hochzählt, wird der Ausgang des Zähler auf "1" gesetzt damit kannst du dann einen Motor laufen lassen. D.h. befindet sich etwas auf dem Band läuft der Motor.

- Durch den Sensor am zweiten Band wird der Zähler ja wieder herunter gezählt, ist der Zähler dann auf Null bleibt auch dein Antrieb stehen


----------



## rostiger Nagel (17 Oktober 2008)

...vielleicht noch einmal so als Beispiel ( in AWL, Fup kann ich schon lange nicht mehr ), geh da doch einmal mit schwanger...

Anhang anzeigen FB1.pdf


gruss Helmut


----------



## Jackjackson (17 Oktober 2008)

Der Motor B läuft ja nur, wenn der Zähler 2 ist, und hält wieder an wenn der Zähler durch den nächsten Sensor B, runtergesetzt wird...
Wenn der Zähler 2 ist, muss auch die Strecke A stoppen...usw
Ist ein wenig komisch zum Programmieren!


----------



## rostiger Nagel (17 Oktober 2008)

jake der Baustein ist ja für eine Förderstrecke und wird dann für jede Förderstrecke (Instanz) aufgerufen und entsprechend verschaltet.


----------



## rostiger Nagel (17 Oktober 2008)

Hallo Jake,
jetzt habe ich dir mal den OB1 gemacht wie es vielleicht aussehen könnte. Bitte beachte das für jeden Aufruf ein anderer Datenbaustein vorhanden ist (Instanz DB).
Das ganze baut auf dem FB1 auf den du schon hast. Natürlich muß man das ganze noch verfeinern, aber ich denke wir nähern uns.

Anhang anzeigen OB1.pdf


schönen gruss


----------



## rostiger Nagel (17 Oktober 2008)

...jetzt habe ich mir noch die mühe gemacht wie ich mir das vorstelle, was du da hast oder sagen wir mal so, ich habe es zu meinen Beispiel verbogen...

Anhang anzeigen Schema.pdf


...es ist wichtig genau zu beschreiben, damit wir nicht aneinander vorbei reden...

gruss Helmut


----------



## Jackjackson (18 Oktober 2008)

Also ich bedanke mich für deine Mühe, mir das Ganze ordentlich beizubringen  :TOOL:

Ich schau mir das heute mal im Laufe des Tages genauer an...


----------



## Maeggy (18 Oktober 2008)

Jackjackson schrieb:


> Mit den Merkern funktioniert das irgendwie sowieso nicht bei mir! Wenn ich bei FB2 den Merker M4.2 auf 1 setze, hat das irgendwie keine Auswirkung im FB1
> (M4.2 zählt einen Zähler zurück)
> Ich probiers mal mit den lokalen Variablen, also danke schonmal....



Hallo

wollte gerade schreiben und hab dann bemerkt das alles schon erledigt ist. 

Gruß


----------



## Jackjackson (22 Oktober 2008)

Würde das Programm auch funktionieren, wenn ich die Ein -und Ausgänge vom DB2, zB A124.2, in A125.2 ändern würde, ausgenommen E124.0? 
Ich bräuchte verschiedene Adressen...


----------



## rostiger Nagel (22 Oktober 2008)

Hallo Jake,
das ist ja der Clou an der sache, du kannst einen anderen Ausgang nehmen. Die Eingänge bzw. Ausgänge sind ja nur rein zufällig ausgewählt, so als Beilspiel halt.

Bist du den jetzt ein wenig weiter gekommen....?

gruss Helmut


----------



## Jackjackson (22 Oktober 2008)

Ich war jetzt die ganze Zeit krank und hab nur mit meiner SPS gespielt 
Danke für die schnelle Antwort...


----------



## Jackjackson (22 Oktober 2008)

Aber die Namen zB IN_Freigabe kann man nicht in IN_Freigabe1, IN_Freigabe2,.. usw ändern, oder`?
(P.S.: Das heißt Jack, nicht Jake  )


----------



## vierlagig (22 Oktober 2008)

Jackjackson schrieb:


> Aber die Namen zB IN_Freigabe kann man nicht in IN_Freigabe1, IN_Freigabe2,.. usw ändern, oder`?



wie wärs, wenn du es einfach mal probierst?


----------



## rostiger Nagel (22 Oktober 2008)

Du kannst den im FB mehrere IN_Variablen deklarieren die dann IN_Freigabe_1; IN_Freigabe_2 usw. heißen und dann im FB entsprechend verwenden.
Wenn du dann diesem FB z.B. im OB1 aufrufst kannst du die "Freigaben"  dann mit unterschiedlichen Freigabebedingungen beschalten.


----------



## Jackjackson (22 Oktober 2008)

Reparatur schrieb:


> Du kannst den im FB mehrere IN_Variablen deklarieren die dann IN_Freigabe_1; IN_Freigabe_2 usw. heißen und dann im FB entsprechend verwenden.
> Wenn du dann diesem FB z.B. im OB1 aufrufst kannst du die "Freigaben"  dann mit unterschiedlichen Freigabebedingungen beschalten.



Ja, aber dann muss ich auch das Programm im FB umschreiben, oder?

```
U     #Zaehler
    [COLOR=Red]  U     #IN_Freigabe[/COLOR]
      UN    #IN_Sperre
      =     #OUT_Antrieb
```
Eine Oder-Verknüpfung geht irgendwie nicht!



vierlagig schrieb:


> wie wärs, wenn du es einfach mal probierst?


hab ich auch... bloß jetzt funktioniert gar nix mehr *vde*


----------



## Jackjackson (22 Oktober 2008)

Oder meherer Netzwerke? ...
Dann müsste ich die Anzahl aller meiner Variablen verdreifachen


----------



## rostiger Nagel (22 Oktober 2008)

ja wenn du Variablen im Kopf hinzufügst muß du oder kannst du sie im Baustein verwenden...


----------



## Jackjackson (23 Oktober 2008)

so, jetzt muss ich wieder damit nerven:
kann man das so machen (s. Anhang) oder kriegt man da einen Herzkaschper? 
(getestet hab ichs schon PLCSim *ROFL*, 
ich mein rein qualitativ)


----------



## vierlagig (23 Oktober 2008)

also ich bekomm einen herzkasper..

du adressierst in deinem FB die zähler absolut, obwohl du sie übergibst


----------



## Jackjackson (23 Oktober 2008)

Mist, danke für den Hinweis.... einfach nur #Zaehler reinschreiben oder?


----------



## Gerhard K (23 Oktober 2008)

du mußt nicht alle drei antriebe in einen FB reingeben.mach einen FB und ruf ihn für jeden antrieb im OB1 auf(das ist der sinn eines FB).
ich mach einen(z.bsp. Stern/dreieck) und kann ihn für 100 verschiedene Motoren verwenden ohne etwas im baustein ändern zu müssen.nur von aussen werden andere ein/augänge zeiten,zähler usw.übergeben.
und du hast wieder die absolute adressierung im FB verwendet.
wenn du 3 zähler im FB brauchst,dann deklariere sie in der schnittstelle(zaehler1,zaehler2,zaehler3) und verwebde dann an der stelle wo du den zähler brauchst nicht Z1,2oder3,sondern Zaehler1 usw.


----------



## rostiger Nagel (23 Oktober 2008)

...mit deinen Zähler das habe ich auch noch nicht richtig verstanden...wie soll das jetzt wirklich funktionieren dein Motor darf nur laufen wenn mehr als zwei Werkstücke auf dem Band sind....?


----------



## Jackjackson (23 Oktober 2008)

Gerhard K schrieb:


> du mußt nicht alle drei antriebe in einen FB reingeben.mach einen FB und ruf ihn für jeden antrieb im OB1 auf(das ist der sinn eines FB).
> ich mach einen(z.bsp. Stern/dreieck) und kann ihn für 100 verschiedene Motoren verwenden ohne etwas im baustein ändern zu müssen.nur von aussen werden andere ein/augänge zeiten,zähler usw.übergeben.
> und du hast wieder die absolute adressierung im FB verwendet.
> wenn du 3 zähler im FB brauchst,dann deklariere sie in der schnittstelle(zaehler1,zaehler2,zaehler3) und verwebde dann an der stelle wo du den zähler brauchst nicht Z1,2oder3,sondern Zaehler1 usw.



also das mit den zählern hab ich bereits geändert...
und wegen den antrieben: ich brauch 3 verschiedene namen, damit ich die in mein programm reinimplementieren kann....
der helmut hat mir bereits in einem vorherigen beitrag eine relativ gute lösungsmöglichkeit zukommen lassen, wo das nicht der fall war....


----------



## Jackjackson (23 Oktober 2008)

Reparatur schrieb:


> ...mit deinen Zähler das habe ich auch noch nicht richtig verstanden...wie soll das jetzt wirklich funktionieren dein Motor darf nur laufen wenn mehr als zwei Werkstücke auf dem Band sind....?



wenn nur zwei drauf sind...
den zähler_1 brauch ich eigentlich nicht, könnte man nur mit der sperre machen, oder?


----------



## rostiger Nagel (23 Oktober 2008)

...ja dann läuft dein erstes Band natürlich immer auch wenn kein Teil darauf ist...
ich glaube auch das meine Lössung schon ziemlich weit an deinen Ziel war...mit deiner hast du dich ein wenig davon entfernt....

Aber bitte jetzt nicht Aufgeben, du kommst da schon hin wo du hin sollst!

Den Aktor bitte nur einmal als OUT_Var in deinen FB verarbeiten, du kannst ihn natürlich in einer IN_Var wieder abfragen.


----------



## Jackjackson (23 Oktober 2008)

Reparatur schrieb:


> Den Aktor bitte nur einmal als OUT_Var in deinen FB verarbeiten, du kannst ihn natürlich in einer IN_Var wieder abfragen.



versteh nicht 
meinst du nur einmal OUT_Antrieb in der Variablendeklaration oben in der Liste?


----------



## rostiger Nagel (23 Oktober 2008)

ja genau, OUT heißt ja soviel wie aus den Baustein herausgeben und IN soviel wie in den Baustein einlesen.
Es ist zu empfehlen einen Ausgang in einen Programm nur einmal zu zuweisen damit es übersichtlich bleibt.

Fang doch erst einmal so an das du in deinen FB die OUT_Antrieb 1..3 rausschmeißt und nur noch einen OUT_Antrieb verwendest.
Das dein Antrieb nicht laufen darf wenn das das hintergeschaltete Band läuft erreichen wir doch durch die sperre.


----------



## Jackjackson (23 Oktober 2008)

Das könnte ich schon machen, aber dann hab ich bloß einen Alias-Namen in meinem Programm, in dem ich die Variablen einlesen will! 
Ich bin jetzt auch überfragt, wie ich das mit dem Zähler, bzgl. IN_Auf und IN_Ab, machen sollte!


----------



## rostiger Nagel (23 Oktober 2008)

Drucke dir doch einmal die Anhänge aus beitrag #105; #107 und #108 aus. Versuche das einmal zu übernehmen.
Hast du irgendeine Möglichkeit die Sache zu testen, meinetwegen an der wirklichen Anlage...?
Vielleicht siehst du dann wo es hagt....?

gruss Helmut


----------



## Jackjackson (23 Oktober 2008)

Also wie schon gesagt, das zu übernehmen is nicht das Problem 
Ich teste jetzt das Ganze mal so, und dann melde ich mich vlt wieder:...
danke


----------



## Jackjackson (23 Oktober 2008)

Wie bzw. Wo kann ich die verschiedenen #IN_Ab an Merker übergeben, dass ich sie wenigstens bzgl der Adresse unterscheiden kann?
mfg


----------



## vierlagig (23 Oktober 2008)

Jackjackson schrieb:


> Wie bzw. Wo kann ich die verschiedenen #IN_Ab an Merker übergeben, dass ich sie wenigstens bzgl der Adresse unterscheiden kann?
> mfg



du hast das prinzip noch nicht so recht verstanden, oder?

der FB stellt eine gekapselte funktion da, du übergibst bestimmte parameter, diese werden bearbeitet und es werden dir parameter zur übernahme bereitgestellt. diese funktion ist ein allgemeingültiger algorithmus für die aufgabe, die es zu erfüllen gibt und kann mit unterschiedlichen parametern immer wieder aufgerufen werden...

ergo brauchst du keine zuweisung oder unterscheidung, du brauchst eine funktion, die alle drei förderer abdeckt!

schöner, wutgeladener 4000er


----------



## Jackjackson (23 Oktober 2008)

vierlagig schrieb:


> der FB stellt eine gekapselte funktion da, du übergibst bestimmte parameter, diese werden bearbeitet und es werden dir parameter zur übernahme bereitgestellt.
> 
> schöner, wutgeladener 4000er



:icon_cry:

ich will den #IN_ab bearbeitet haben.... ich könnte natürlich beim OB1 die #IN_Ab als #IN_Auf des Vorgänger-DBs benennen, aber das bringt mir irgendwie recht wenig....


----------



## Gerhard K (23 Oktober 2008)

:s18::s10:
alles gute zum 4000er!!!
wie schafft man das nur neben der arbeit?????


----------



## Jackjackson (23 Oktober 2008)

4000er?


----------



## Gerhard K (23 Oktober 2008)

4000 beiträge in diesem forum


----------



## Jackjackson (23 Oktober 2008)

vierlagig schrieb:


> schöner, wutgeladener 4000er


jetzt komm, den 5000er schaffen wir auch noch


----------



## rostiger Nagel (23 Oktober 2008)

Hallo 4L, alles gute auch von mir!


----------



## vierlagig (23 Oktober 2008)

so, genug!

jetz kümmern wir ums mal wieder um jackjackson! 

hast du das prinzip verstanden?


----------



## rostiger Nagel (23 Oktober 2008)

die IN_Auf und IN_Ab sind doch deine Sensoren die Zählen,
die darfst du ruhig im nächsten FB aufruf mit einer anderen Funktion heranführen. 
Der Sensor zählt an der Auslaufbandes ab und der gleiche Sensor zählt somit auf der Einlaufseite des Folgebandes wieder auf.


----------



## Jackjackson (23 Oktober 2008)

vierlagig schrieb:


> so, genug!
> 
> jetz kümmern wir ums mal wieder um jackjackson!
> 
> hast du das prinzip verstanden?



das prinzip is mir schon klar (für eine bestimmte dauer, bis ich wieder was voreilig ins forum frag  )


----------



## Jackjackson (23 Oktober 2008)

ok, jetzt stimmt mein ganzer fb1 nicht mehr *ROFL*
ich gebs auf für heute..... ich verlier noch die nerven


----------



## vierlagig (24 Oktober 2008)

bevor das hier die von "jemanden" befürchtete endlosschleife wird:

erstelle er einen FB für *einen Antrieb*!

dazu sollteste nochmal alle bedingungen für* einen Antrieb* zusammentragen, ungeachtet seiner position. alle werte, die sich bei allen antrieben unterscheiden werden, führst du variabel aus, so dass du jeden *einzelnen Antrieb* beim aufruf *des dazugehörigen FB*s parametrieren kannst.


----------



## Jackjackson (24 Oktober 2008)

vierlagig schrieb:


> bevor das hier die von "jemanden" befürchtete endlosschleife wird:
> 
> erstelle er einen FB für *einen Antrieb*!
> 
> dazu sollteste nochmal alle bedingungen für* einen Antrieb* zusammentragen, ungeachtet seiner position. alle werte, die sich bei allen antrieben unterscheiden werden, führst du variabel aus, so dass du jeden *einzelnen Antrieb* beim aufruf *des dazugehörigen FB*s parametrieren kannst.



Guten Morgen und danke für den Hinweis  ,
aber daran lags gestern nicht


----------



## rostiger Nagel (24 Oktober 2008)

Guten morgen Jacke,
4L meint du sollst einmal aufschreiben was du hast und möchtest damit man einen überblick bekommt. 

- Zuordnungsliste
- Schema
- Funktionsbeschreibung anhand des Schema

auch wenn du das oben schon in einigen Punkten getan hast mach es bitte einmal komplett.

gruss Helmut


----------



## Jackjackson (24 Oktober 2008)

Reparatur schrieb:


> Guten morgen Jacke,
> 4L meint du sollst einmal aufschreiben was du hast und möchtest damit man einen überblick bekommt.
> 
> - Zuordnungsliste
> ...




Moin,
Ich hab jetzt mal mit Paint ein Schema erstellt.... falls es was hilft!
mfg


----------



## rostiger Nagel (24 Oktober 2008)

...So das sieht ja schon ganz gut aus, jetzt schreibe doch dazu noch deine Symbolliste....

Den Baustein bekommen wir noch heute hin!

gruss Helmut


----------



## Jackjackson (24 Oktober 2008)

Ich habs jetzt mal so gemacht ....
Mal schaun was ich diesmal verbockt hab


----------



## vierlagig (24 Oktober 2008)

sieht doch vielversprechend aus, schon getestet?

eine anmerkung noch: wenn du statt zwei irgendwann mal drei haben willst oder auf band ein und zwei zwei und auf band drei drei oder oder oder wäre es vielleicht eine idee, den vergleichswert, bei die die zwei, als IN-variable zu deklarieren und beim aufruf zu übergeben


----------



## rostiger Nagel (24 Oktober 2008)

...irgend wo habe ich das so ähnlich schon einmal gesehen....!

aber das sieht wirklich gut aus, jetzt noch die Symbolliste dann haben wir es!


----------



## Jackjackson (24 Oktober 2008)

:TOOL:

So?


----------



## Jackjackson (24 Oktober 2008)

Reparatur schrieb:


> ...irgend wo habe ich das so ähnlich schon einmal gesehen....!
> 
> aber das sieht wirklich gut aus, jetzt noch die Symbolliste dann haben wir es!



Ja, der OB1 is noch von dir


----------



## Jackjackson (24 Oktober 2008)

Die Symbolliste is das nächste Problem *ROFL*


----------



## vierlagig (24 Oktober 2008)

und jetz machste ne bibliothek auf, schmeißt deinen baustein rein und kannst ihn immer wiederrausholen, wenn du ein ähnliches problem zu lösen hast - das ist, wie programmierer arbeiten 

bei der symboltabelle seh ich kein problem, einfach eindutige namen vergeben "übergabe zu 2", "übergabe zu 3" ... bißchen kreativ sein halt


----------



## Gerhard K (24 Oktober 2008)

mach daraus "Z3Auf_Z2Ab" oder so.

du kannst einem Eingang nicht 2 symbole zuordnen


----------



## vierlagig (24 Oktober 2008)

Gerhard K schrieb:


> mach daraus "Z3Auf_Z2Ab" oder so.



gerhard, mal unter uns, ich würde eine bezeichnung, die auf die position und funktion des sensors in der anlage einer programmbezogenen symbolik vorziehen


----------



## Gerhard K (24 Oktober 2008)

war ja nur ein beispiel.symbole sollten wie du richtigerweise schreibst aussagekräftig sein.ausser man will sich unentbehrlich machen in einer firma.


----------



## rostiger Nagel (24 Oktober 2008)

...ich finde es sehr schön wenn Sensoren und Aktoren die Symbole aus den Schaltplan haben...


----------



## marlob (24 Oktober 2008)

Zum Thema Symbole hatten wir doch schon mal was
*Symboldeklerationen (IEC 61131-3)*
Nur mal als Randanmerkung


----------



## Jackjackson (24 Oktober 2008)

Also danke an alle für die Hilfe.... habt echt super mitgeholfen!
*vde*

Jetzt muss ich erst mal das mit dem INAT-Server und meinem Simulationsprogramm zum Laufen bringen


----------



## Jackjackson (28 November 2008)

Ich greif das alte Thema zwar ungern wieder auf, aber ich muss ein paar Änderungen vornehmen und weiß nicht, wie ich das anstellen soll:

Ich muss das Programm so gestalten, dass bei einem Zähler von 1 der Motor von der nachfolgenden Förderstrecke angeschalten werden muss und bei einem Zähler von 2 anhält... bei 3 und 4 wieder läuft

ich hab ein wenig rumprobiert, bloß läuft es nicht so wie ich es will 
(hab mal wieder die alten Anhänge reingesetzt.... ich probier in der Zz weiter, bin für jede Hilfe dankbar)


----------



## Jackjackson (28 November 2008)

würde es helfen noch einen DB zu erstellen oder mit einer zusätzlichen globalen Variablen auf den FB zuzugreifen?


----------

