Step 7 Flankenmerker in FC's

spirit

Level-1
Beiträge
961
Reaktionspunkte
23
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Ihr,

ich habe da mal wieder so eine Frage, die ich mir nicht beantworten kann...

Ich habe in einer FC mehrere Flankenmerker zu verarbeiten.

Nun gibt es ja grundsätzlich zwei Möglichkeiten:

1) In der FC wird der FM z.B. über einen Merker von außen; also z.B. M10.0 gebildet.

2) In der FC wird als FM eine IN_OUT_Variable deklariert und dieser dann beim Aufruf im OB1 der Merker M10.0 zugewiesen.

Fragen:

- Hat eine der beiden Varianten einen bestechenden Vorteil?
- Hat eine der beiden Varianten einen Geschwindigkeitsvorteil?

Lieben Dank...
 
Variante 1 hat den Nachteil dass du den FC nur ein einziges mal im Programm aufrufen darfst.

Variante 2 hat den Nachteil dass du für jeden Flankenmerker einen INOUT deklarieren musst, was die Schnittstelle des Bausteins jäh verdammt gross macht.

mfG René
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Variante 2 hat den Nachteil dass du für jeden Flankenmerker einen INOUT deklarieren musst, was die Schnittstelle des Bausteins jäh verdammt gross macht.

mfG René

Danke René,

somit hätte ich also die Wahl zwischen Pest und Cholera? ;)

Wenn die Schnittstelle bei Verwendung mehrerer FM relativ groß wird, hätte das auch einen Geschw. Nachteil gegenüber der Nutzung von Merkern aus der Symboltabelle oder DB?
 
Danke René,

somit hätte ich also die Wahl zwischen Pest und Cholera? ;)

nö die variante über INOUT ist schon okay. Wenn man nur einen flankenmerker oder so braucht macht es keinen sinn sich dafür einen FB mit instanz zu basteln, der belegt mehr speicher im instanzdb.

Wenn die Schnittstelle bei Verwendung mehrerer FM relativ groß wird, hätte das auch einen Geschw. Nachteil gegenüber der Nutzung von Merkern aus der Symboltabelle oder DB?

denke nicht dass das einen unterschied macht. Aber wissen tue ich es nicht. Auf Zykluszeiten muss man heute oft nur noch bei mächtigen Jonglierarbeiten achten.

mfG René
 
Man könnte bei einer Vielzahl von flankenmerkern ein Byte oder Word anlegen
und diese Temponäre im Baustein umladen. So bleibt die Schnittstelle schön übersichtlich.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Man könnte bei einer Vielzahl von flankenmerkern ein Byte oder Word anlegen
und diese Temponäre im Baustein umladen. So bleibt die Schnittstelle schön übersichtlich.

Meinst du in etwa so? :confused:

Erstes NW:

L MB10
T LD 0

...

Letztes NW:
L LD 0
T MB10

Und dann arbeite ich innerhalb der FC mit den Merkern des MB10, oder?
 
Man könnte bei einer Vielzahl von flankenmerkern ein Byte oder Word anlegen
und diese Temponäre im Baustein umladen.
Sollte man an diesem Punkt nicht lieber über die Verwendung eines FBs nachdenken, statt sich solche "Verrenkungen" zu überlegen? (Vor allem, wenn man nicht gerade SCL mit der AT-Ansicht benutzt.)
;)

Und wenn man keinen (eigenen) IDB dafür haben möchte, bleibt ja (meistens) noch die Multiinstanz.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Sollte man an diesem Punkt nicht lieber über die Verwendung eines FBs nachdenken, statt sich solche "Verrenkungen" zu überlegen? (Vor allem, wenn man nicht gerade SCL mit der AT-Ansicht benutzt.)
;)

Und wenn man keinen (eigenen) IDB dafür haben möchte, bleibt ja (meistens) noch die Multiinstanz.

unbedingt....
 
Um doch noch meine Neugierde zu befriedigen; wie sieht so eine "Verrenkung" in der Praxis aus?

Wie in meinem Beitrag #6 angedeutet oder doch ganz anders?
 
um bei dein Beispiel zu bleiben

Code:
Erstes NW:
 L MB10
 T LD 0 

Flanke 1
U IN_1
FP L 0.0
= IN_OUT_1

Flanke 2
U IN_2
FN L 0.1
= IN_OUT_2

 
Letztes NW:
 L LD 0
 T MB10
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Schön ist das aber nicht und es grenzt die universelle Verwendbarkeit des Bausteins mächtig ein. Dann doch lieber über INOUT.
Ich kann es übrigens nachvollziehen, wenn man wegen einer einzigen Flankenauswertung aus einem FC nicht gleich einen FB machen möchte.
 
um bei dein Beispiel zu bleiben

Code:
Erstes NW:
 L MB10
 T LD 0 

Flanke 1
U IN_1
FP L 0.0
= IN_OUT_1

Flanke 2
U IN_2
FN L 0.1
= IN_OUT_2

 Letztes NW:
 L LD 0
 T MB10


Vielen Dank rN!

In diesem Bsp. könnte man(n) oder frau :p also insgesamt 8 Flankenmerker (L0.0 bis L0.7) benutzen, richtig?

... aber vermutlich geht das nur bis zu gewissen Grenzen, da ja auch LD begrenzt sein wird!
 
Zuviel Werbung?
-> Hier kostenlos registrieren
wie du schon schreibst es hängt davon ab was du anlegst.

Ja stimmt schon; ein FB ist an dieser Stelle dann sicher die bessere Wahl!

Aber es geht in diesem Beispiel jetzt einfach "nur" um das Verständnis. Ist dieses LD so groß, dass beispielsweise auch ein MW oder MD angelegt werden könnte? :confused:
 
Die Grösse hängt mit von der CPU ab. Aber eine 300er hat z.B. 256Byte an Lokaldatenplatz zur Verfügung. diesen gibst du ja aber am Ende des Bausteins wieder frei. Dass heisst, je nachdem wieviel du schon davon aufrufenden Bausteinen reserviert hast bleibt dir der Rest für deinen aktuellen Baustein.
256Byte sind ne ganze Menge, diese Grenze sprengt man normal erst regelmäßig wenn man große Stringgeschwurbel oder Sortierfunktionen im Lokaldatenspeicher durchführt.

mfG René
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Dass Solte so nicht werken.
Met der code
L MB10
T LD0
Wurde MB10 in LB3 gesets und nicht in LB0

Sie muste die code
L MB 10
T LB 0
Brauchen
und an ende

L LB 0
T MB 10

Joop
 
@René: Ok, danke!


der Endbustabe ist bei den Formaten gleich
X - Bit
B - Byte
W - Wort
D - Doppelwort

Worauf beziehst du das jetzt; glaube ich stehe grad auf ner Leitung... ;)

Ich wollte eigentlich nur noch wissen, ob der Lokaldatenplatz in der FC anstatt

L MB10
T LD 0

auch noch

L MD10
T LD 0

verträgt?


Dank' euch!
 
Vielleicht noch zu erwähnen. Wenn man die Lokaldaten absolut adressiert können sich da teilweise ungeahnte Fallstricke auftun. Da die Editoren ja auch regen Gebrauch davon machen.

Also schön ist anders.

LD bedeutet Lokal Doppelwort
Da passt also ein Merker Doppelwort rein.

in ein LW passt nur ein Merkerwort rein

und in ein LX nur ein Bit etc.

mfg René
 
Zurück
Oben