# Call-by-Function (BlOCK_FC/FC) und UC / CC



## Potenzial (6 Juli 2010)

Hallo an alle Tüftler …

  Vorab, hoffe ich bin irgend wie in der richtigen Ecke?

  1.                Also ich habe vor in von Zyklus zu Zyklus ggf. immer einen andern FC im OB1 aufzurufen.So weit ich das nachgelesen habe kann man das mit UC[#mw0] mache für FB/FC’s ohne Parameterübergabe, Quelle: Step7 Crashkurs Extended S. 654. Gibt es eine Möglichkeit doch Parameter zu übergeben? 

  Pseudocode:

  Fcnr : mw 0 //  ist Global!

  Zyklus 1:
  Beginn OB1:
  …
  Uc [#fcnr] // z. B. FC1
  Beginn FC1:
    L 2
  T # fcnr
  …
  Ende FC1
  Ende OB1

  Zyklus 2: 

  Beginn OB1:
  …
  Uc [#fcnr] // FC2
  Beginn FC2:
  …
  L 1
  T # fcnr
  …
  Ende FC2
  Ende OB1


  -----------------------------------------
  -----------------------------------------

  2.                  Wie sieht es mit dem Übergabe Parameter Block_FC aus?
Also vor ab Volkers beitrat ist echt Spitze!!! 
http://spsforum.eu/showthread.php?p=77858
Aber es steht leider nicht drin wie man eine Zeiger für eine FB/FC auf baut… 
Wenn ich das in dem Buch richtig sehe geht’s es so z. B. für den FC1:


```
LAR1  P##QANY                     //Zeiger ins Adressregister laden  
        L     W#16#10                     //SyntaxID. bei S7 immer 10
        T     LB [AR1,P#0.0]
        L     W#16#17                      //Typ BLOCK_FC = 18// für Block_FB = 17
        T     LB [AR1,P#1.0]
        L     W#16#1                  // Warum 1?        T     LW [AR1,P#2.0]
        L     W#16#0                  // Kein DB        T     LW [AR1,P#4.0]
        L     1
//     SLD   3 // Um 3 Bit Links schieben?
        T     LD [AR1,P#6.0]
```

    Dies ist aber dann auch wieder nur ohne Übergabeparameter möglich?
  Kann das jemand so bestätigen?

Gruß an Alle...


----------



## vierlagig (6 Juli 2010)

aufrufe überspringen?
wie wäre es mit ner sprungleiste?
da kannste schön zyklusweise hochzählen und dementsprechend deinen baustein aufrufen

...wofür auch immer das gut sein soll...


----------



## Potenzial (6 Juli 2010)

Hmm wie meinst das genau mit Überspringen?

Sofern ich mir das richtig mit der Sprungliste angesehen hab ist die star?
Ähnlich wie swtih case in C!?
Und möchte zyklisch hochzählen sondern das Verhalten austauschen!

Wie sieht es mit 2. aus?



			
				vierlagig schrieb:
			
		

> aufrufe überspringen?
> wie wäre es mit ner sprungleiste?
> da kannste schön zyklusweise hochzählen und dementsprechend deinen  baustein aufrufen
> 
> ...wofür auch immer das gut sein soll...


----------



## vierlagig (6 Juli 2010)

du kannst doch den call überspringen, und beim call kannste doch parameter übergeben und du kannst doch die selbe funktion so oft du willst mit call aufrufen ... was ist daran nicht verständlich?

ja, es ist wie case...


----------



## Jochen Kühner (6 Juli 2010)

Potenzial schrieb:


> Hallo an alle Tüftler …
> 
> Vorab, hoffe ich bin irgend wie in der richtigen Ecke?
> 
> ...



Parameter übergeben könntest du denke Ich wenn du direkt den MC7 Code des bausteines bearbeitest, da der MC7 Code eines UC mit Parameter anderst aussieht als der ohne Parameter.

Also Ich denke direkt mit S7 Mitteln kannst du das nicht bewerkstelligen, aber vieleicht wenn du deinen Baustein mit einem Hex Editor bearbeitest, oder wenn mein S7 Programmeditor fertig ist.

Infos gibts hier:
http://www.sps-forum.de/showthread.php?t=27703
und hier:
http://www.sps-forum.de/showthread.php?t=36635


----------



## PN/DP (7 Juli 2010)

Wat für abstruse Ideen man doch so als Anlaß für Eigenwerbung ausnutzen kann...

Wieso sind wir noch so blöd und schreiben S7-Programme mit so langweiligen 
und die Kreativität behindernden KOP-/FUP-/AWL-/SCL-/CFC- und Graph-Editoren, 
wo direktes Code-Erzeugen mit MC7- oder Hex-Editor doch viiiel aufregender ist?
Wozu muß ein Maschinenprogramm stabil, berechenbar, lesbar und verstehbar sein?!

@JK:
Nur weil Du seit kurzem weißt, wie MC7 aussieht, mußt Du das nicht als Lösung für 
jedes (eigentlich simple) Problem verkaufen oder gar selber glauben, man könnte 
damit alles lösen.
Der Traum von Potenzial wird sich aber nicht mit MC7 oder einem Hex-Editor lösen 
lassen, selbst wenn der MC7-Editor aus der tollen trial-and-error-Schmiede von 
jfk-solutions stammt.
Entweder der Code macht (mehr oder weniger sichtbar) eine Fallunterscheidung 
oder es müßte selbst-modifizierender Code sein.



Jochen Kühner schrieb:


> Also Ich denke direkt mit S7 Mitteln kannst du das nicht bewerkstelligen


Wenn ein Lösungskonzept absolut nicht mit den vorhandenen S7-Mitteln realisierbar 
ist, dann ist das Konzept für eine S7-Steuerung unbrauchbar. Man sollte sich was 
anderes überlegen und nicht auf irgendwelche Wunder-Editoren hoffen.

Man muß nicht immer alles sonstwie kompliziert denken, es geht doch so einfach:

```
// Pseudocode
IF fcnr==1 THEN
  CALL FC1 (p11, p12, p13)
ELSE IF fcnr==2 THEN
  CALL FC2 (p21)
ELSE IF fcnr==3 THEN
  CALL FC3 (p31, p32)
ELSE IF ...
  ...
ELSE
  CALL FCx ()
END IF

// Die FC können dann die Nummer des beim nächsten Mal 
// aufzurufenden FC in fcnr schreiben.
```



vierlagig schrieb:


> ...wofür auch immer das gut sein soll...


Würde mich auch interessieren, wofür das sinnvoll und unumgänglich sein soll.

Gruß
Harald


----------



## Jochen Kühner (7 Juli 2010)

PN/DP schrieb:


> Wat für abstruse Ideen man doch so als Anlaß für Eigenwerbung ausnutzen kann...
> 
> Wieso sind wir noch so blöd und schreiben S7-Programme mit so langweiligen
> und die Kreativität behindernden KOP-/FUP-/AWL-/SCL-/CFC- und Graph-Editoren,
> ...



War ja nur nee Idee, das man das also Lösung benutzen sollte war ja nicht gedacht.

Wurde ja auch nicht gefragt wie es mit Call geht (gehe davaon aus das der Threadersteller das weiss), es wurde ja direkt gefragt ob es mit UC möglich ist.


----------



## Potenzial (7 Juli 2010)

Noch mal Hallo an Alle!
Finde es echt gut und toll der Ihr bisher so viel gepostet habt [ =

  Möchte eure Frage warum ich so was frage auch gerne beantworten! Weis aber jetzt schon das ich dafür die Ohren lang gezogen bekomme bzw. das als Weltfremd bezeichnet wird!
  Und vor ab noch mal ich bin KEIN geborener SPS Programmierer und habe auch nicht viel (naja kaum) Erfahrung und habe mir meine bescheidenen Künste die letzten paar Wochen angelesen.

  Hintergrund ist das ich ein Zustandmodell nicht mit dem S7-Graph Abbilden will. Naja er steht mir auch nicht zur Verfügung!
  Soweit ich das die Funktion des S7-Graph nachvollzogen habe, hier bitte ich ALLE um Korrektur meiner Auffassung die wahrschlichst so nicht richtig ist!
  Also mit dem Graph bilde man ein Zustandsmodell einer Funktion (Maschinen, Anlage…) ab, dies besitzt Trigger, Aktionen und Zustände. Ein Zustand wird nur dann gewechselt wenn der Passende Trigger (Trigger Kombinationen) dies auslösen.

  Nach der Abbildung des gewünschten Zustandmodells wird dies in Step7 Code umgesetzt und entspricht einer Verkettung von UND- und ODER- Bedingungen die dann die entsprechende Zustand auswählen, die entsprechenden Aktionen ausführen und dann die Trigger prüfen und es zu einem evtl. wechsel es Zustands kommt.
  Je komplexer das Zustandmodell um so mehr UND- und ODER Anweisungen!?
  Bei einer Änderung des Modells (Aktionen, Tigger, Zustände) muss dies immer wieder NEU übersetzt werden!?
  Also wie gesagt, hier wird MEIN Fehler liegen das ich das so falsch auf fasse und BITTE um Korrektur!!!

  So weit ich es gelernt habe und meinem jetzigem Empfinden entspricht ist so was kein guter Programmier stiel wenn man so was von Hand abbilden will. Da es fast immer zu Fehler und Änderungen Trigger kommt, d.h. man müsste immer dies unübersichtliche Netzwerk von UNDs und ODERs beherrschen.

  Ich hatte so was schon mal angedeutet im Thread „Schrittkette IN SCL oder mit SPL in AWL“ angedeutet, kann auch sein das ich hier was mit der Schrittkette verwechsel, wie gesagt Klärt mich auf! [ =
http://www.sps-forum.de/showthread.php?t=36889

  In der Software Technik gibt’s für Hochsprachen ander Möglichkeiten um einen Zustandsgraphen abzubilden außer mit einer unschönen starren IF-ESLE Anweisungskette.

  Dies löst man kurz gesagt das jeder Zustand sie wie oben selber prüft und entscheidet im nach der Abarbeitung sein Aktionen welcher zustand aufgerufen werden soll.
  Ähnlich wie der Pseudocode in der ersten Fragestellung. Für die Jenigen unter euch die sich auch mit Hochsprachen beschäftigen müssen kann man auf „UML Tutorial: Finite State Machines“ von Robert C. Martin verweisen, hier gibt’s mehrer Dokumente und Betrachtungsweisen, die immer Modularer und komplexer werden!
http://www.objectmentor.com/resources/articles/umlfsm.pdf

  Des weitern eine sehr gute Einführung bietet und nahezu ein Standardwerk: „Entwurfsmuster von Kopf bis Fuß (Head First design patterns)“ aus dem O'Reilly Verlag, Kap. 10 Seite 385.
http://books.google.com/books?id=k4...e=gbs_book_other_versions#v=onepage&q&f=false 

  Denke Ihr habt dafür echt ander Lösungsstrategien und denkt sicher wo von redet der eigentlich…
  Dies ist gar nicht so in der Strukturierten SPS Welt umzusetzen bzw. das wird anders gemacht (S7-Graph), dies muss ich mir aber als Anfänger gefallen lassen!!!

  Wie schon richtig gesagt hatte:


			
				PN/DP schrieb:
			
		

> Wenn ein Lösungskonzept absolut nicht mit den vorhandenen S7-Mitteln realisierbar ist, dann ist das Konzept für eine S7-Steuerung unbrauchbar.


 
  Also Das obrige Lösungskonzept ist zwar mit „UC“ bzw. „CC“ umsetzbar aber ohne Parameterübergabe.


  Noch mal zu meiner zweiten Fragestellung: ist der ANY-FC Zeiger so Richtig gestrickt?


  Danke so weit für eure Stellung nahem,
euer *Potenzial*


----------



## IBFS (7 Juli 2010)

Jochen Kühner schrieb:


> Also Ich denke direkt mit S7 Mitteln kannst du das nicht bewerkstelligen, aber vieleicht wenn du deinen Baustein mit einem Hex Editor bearbeitest, oder wenn mein S7 Programmeditor fertig ist.


 
@jk
Du hast eindeutig zu viel Zeit. Bei einer 50-60 Stundenwoche las
Programmierer würde ich nen Teufel tun und irgendwelches 
propritäres Zeug programmieren. Wenns ein echtes Produkt werden
könnte, dann ja. Aber ansonsten sollte man - so vorhanden - lieber
was mit der Familie machen oder in den Biergarten gehen 

Frank


----------



## Jochen Kühner (7 Juli 2010)

*Betriebsbegleitung....*

Wenn man auf Baustelle ist und nur Betriebsbegleitung macht, und alles Störungsfrei läuft, muss man sich halt beschäftigen...

Mfg


----------

