Parameter eines FCs in einem DB definieren. Macht man das?

Wie "sollte" man die Parameter einen FCs hinterlegen...

  • 1) direkt dranschreiben

    Stimmen: 4 57,1%
  • 2) über lokale oder globale Variabeln

    Stimmen: 4 57,1%
  • 3) als Aktualwert in einem DB

    Stimmen: 5 71,4%
  • 4) als Anfangswert in einem DB

    Stimmen: 3 42,9%
  • 5) Sonstiges

    Stimmen: 3 42,9%

  • Umfrageteilnehmer
    7
  • Umfrage geschlossen .

dErzOnk

Level-1
Beiträge
2
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo, ich bin ganz neu hier aber ich habe folgende Frage:

Parameter eines FCs (IN und OUT) kann man unter anderem:

1) direkt ranschreiben
2) lokale oder globale Variablen ranschreiben
3) aus einem DB als Aktualwerte nehmen
4) in einem DB als Anfangswerte hinterlegen und nehmen, wenn nichts die Aktualwerte umschreibt (ist fast so wie 3))

Ich habe den Punkt 4) ausgewählt und z.B. für ein Input-BOOL den Wert FALSE in einem DB hinterlegt... an den FC hab ich dann nur noch den Bit aus dem DB geschrieben (z.B. DB100.DBX0.1)

Jetzt ist eine Disskussion entbrannt ob man so etwas machen "darf" "kann" "soll"

Das direkte ranschreiben ist sicvherlich offensichtlicher, ich sehe aber kein Problem mit der Variante 4) bzw Variante 3)... was mein Ihr? Gibt es irgenwelche Probleme mit dieser Methode? Wer macht so was? Ist das ein Anfängerfehler?

Bisher sind die Argumente dagegen:
- Es könnte sein das irgendwas den Aktualwert im DB umschreibt.
- Beim Urlöschen, Stromunterbrechen o.Ä. konnte der DB den Anfangswert verlieren.
- Die Übersichtlichkeit ist nicht gegeben.

Ich bitte euch einfach mal darüber zu diskutieren, ich bin relativ frisch in der S7 Programmierung.

Vielen Dank und Grüße

dErZ
 
Umfrage:

Was ist ein Aktualwert?
Was ist ein Anfangswert?

[ ] Ja [ ] Nein
 

Anhänge

  • akt.jpg
    akt.jpg
    277,5 KB · Aufrufe: 38
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,
ich glaube kaum, das du hiermit jetzt wirklich zu einer Grundsatzdiskussion kommst ... weil außer der Sache mit den Anfangswerten halte ich jede der anderen Varianten für sinnvoll - es hängt somit in erster Linie am Ziel des Ganzen.

Beispiel Vergleicher :
Das wird zwar nach außen nicht als FC dargestellt aber im Grunde kannst du so etwas ja auch als FC machen - in FUP hättest du optisch sowieso keinen wirklichen Unterschied.
Du kannst einen Wert mit einem anderen Wert genauso vergleichen (mal unanhängig davon wo der herkommt) wie mit einer Konstanten.

Gruß
Larry
 
Wenn du eine Grundsatzdiskussion willst, dann solltest du nach einem FB mit Instanz-DB fragen und nicht nach einem FC.
Da hat LL ja schon was zu gesagt.
 
Du meinst:

1) direkt dranschreiben = Konstante ? Wenn ja, dann ist es klar ein Möglicheit wenn es passt zu den Aufgabe.

2) über lokale oder globale Variabeln = Über Variabel ? Wenn ja, dann ist es klar ein Möglicheit wenn es passt zu den Aufgabe.

3) als Aktualwert in einem DB = Ist dasselbe wie 2).

4) als Anfangswert in einem DB = ?. Das Anwenderprogram kennt nicht von "Anfangswerte". Nur wenn das Arbeitsspeicher irgendwie korrupt ist, überträgt der CPU beim Neustart die Anfangswerte von Ladespeicher ins Aktualwerte in Arbeitsspeicher. Darüber hat man in Anwenderprogram kein Einfluss.

5) Sonstiges = ?

Vertauscht du vielleicht FBs und FCs ?
IN und OUT auf ein FC muss mit ein Parameter belegt werden.
IN und OUT auf ein FB muss nicht mit ein Parameter belegt werden. Wenn ein IN auf ein FB kein Parameter zugewiesen hat, dann bedeutet es das der FB arbeitet mit der Aktualwert in Instanz-DB. Diese Aktualwert bleibt auf das Anfangswert wenn kein neuen Wert auf die Adresse geschrieben wird. Es gibt aber weitere Möglichkeiten ein IDB Aktualwert zu ändern als per IN Parameter. Z.B. per Anwenderprogram innerhalb oder ausserhalb von der FB, oder per HMI Eingabe.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Und jetzt sehe ich das du über ein BOOL fragt.
Dann gibt es kein nr. 1 (Konstante).
In STEP7 gibt es kein "TRUE" oder "FALSE" Konstante.
Dies ist ein Mangel bei STEP7. Auf diesen Grund machen viele Programmierer sein eigene TRUE und FALSE "Konstante" indem das sie irgendeine Adresse (typisch ein paar Merker) fest auf TRUE und FALSE setzt.

Zu nr. 2 muss ich auch bemerken das in STEP7 gibt es keiner Trennung in Localen und Globalen Daten.
 
uuups ja ich meinte tatsächlich FBs

Das 4) also Anfangswert nicht ganz stimmt sondern eingentlich das gleiche wie 3) Aktualwert ist ist mir auch klar...

Jedoch kann man auch einen DB anlegen und alle Anfangswerte auf default lassen. Vor dem Aufruf des DBs schreibt man dann Werte in den DB, der Anfangswert und der Aktualwert sind nicht gleich.

Ich will auch nicht das es um eine Grundsatzdisskussion geht aber 2 Kollegen meinten das man Variante 4) nicht machen darf...

Einen Grund warum konnten sie mir nicht liefern, daher wollte ich mal unbefangene befragen. Wie macht Ihr es denn? Gibt es irgend einen Grund (und keine Mutmaßung) warum man Variante 4) nicht machen darf???

Danke schonmal und Grüße

DerZ
 
Wenn du mit Anfangswert meinst, das ein IN Parameter Eingang nicht belegt ist, somit das der Aktualwert auf die Anfangswert bleibt, dann gibt es kein Grund das man es nicht "darf".

So etwas mache ich z.B. in ein Standard FB für Analogwert-Skalierung.
Min und Max Roh-Werte sind im 95% von die Fällen immer 0 und 27648.
Aber manchmal muss ich eine engere Mess-Bereich einrichten.
Also habe ich die Anfangswerte auf 0 und 27648.
Die IN Parameter Eingänge sind also meistens leer. Nur im Sonderfall tippe ich andere Werte rein.

Ein anderes Beispiel wäre ein Standard FB für ein FU. Dann hat man vielleicht 20 verschiedene Parameter für den FU, wo im normal-Fall die typische Werte als Anfangswerte eingestellt sind, und nicht geändert werden.
 
In STEP7 gibt es kein "TRUE" oder "FALSE" Konstante.
Dies ist ein Mangel bei STEP7. Auf diesen Grund machen viele Programmierer sein eigene TRUE und FALSE "Konstante" indem das sie irgendeine Adresse (typisch ein paar Merker) fest auf TRUE und FALSE setzt.
[Klugscheißmodus]
TRUE- und FALSE-Konstanten gibt es in Step7, die kann man aber nur an FB/FC-IN-Parametern in AWL benutzen
Code:
      CALL  FC    12
       bIN0:=FALSE
       bIN1:=TRUE
       bIN2:=M0.0
       bIN3:=M0.1
[/Klugscheißmodus]

Harald
 
Ja, da war ich zu schnell. Davon sieht man das ich programmiere fast nie in AWL.
Eigentlich verstehe ich nicht warum es diese Einschränkung bei KOP und FUP gibt.
 
Zurück
Oben