Unbelegter Eingang am FB erkennen

LoKo

Level-1
Beiträge
59
Reaktionspunkte
5
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Leute,

weiss jemand wie ich aus einem FB heraus erkennen kann, ob ein Eingangsparameter beschaltet ist?

Eine Lösung dafür muss es wohl geben, da in FUP-Darstellung ja auch erkannt wird ob der Enable Eingang benutzt wird.

Wenn jemand eine Lösung dafür hat, könnte ich mir jede Menge Konfigurationsbits ersparen.

Danke und Gruss,

Lothar.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Edith: Sorry, das mit dem richtig lesen klappt auch noch irgendwann... ... der Pointer auf den Eingang weist dann auf den IDB - auch keine Lösung. Leider.

Ja, mit einem Pointer als Eingangsparameter funktioniert es schon, dort steht ja der Adressbereich mit drin. Das möchte ich aber aus Transparenzgründen nicht machen.

Dies soll mal wieder ein "Spezialisierter-Universeller-Standardbaustein" werden.

Leider hat irgendjemand (Wonderware) dem Kunden erzählt wie toll das doch alles mit der Objektorientierung ist und jetzt will er Standardobjekte.

Entweder bastle ich nun einen ganzen Zoo von "Standard"-Objekten oder ich mache sie parametrierbar. Da dies alles später von unterschiedlichen Firmen verwendet werden soll, will ich keine Pointer als Eingangsparameter verwenden, schliesslich weiss ich nicht was für Programmierer die anderen darauf ansetzen.

Dennoch Danke, Lothar.
 
Zuletzt bearbeitet:
Dein Vorhaben in allen Ehren, dafür habe ich auch keine Lösung.
Vierlagig hat in einem anderen Thread diese Aufgabenstellung als nicht sinnvoll lösbar beschrieben. Allerdings habe ich ein solches Vorhaben an unserer Firma in der Instandsetzung auch schon mal gehegt. Meine Programmierung dem Wissensstand Anderer anzupassen... Glaube mir, es geht nicht !
Wenn deine Kunden Programmierer an die Anlagen lassen die nicht wissen was sie tun, dann kannst du ggf. noch einmal Geld daran verdienen...
Gruß
Toki
 
Neee

Da die FB parameter nicht wie bei fcs übergeben werden, sondern direkt in den instanzdb, wird das nicht gehen!

Wie wärs als startwerte im fb werte vorzugeben, welche real nicht möglich sind und dann auf diese prüfen!
 
Zuviel Werbung?
-> Hier kostenlos registrieren
zb wenn eingan nicht "1" dann "0" vorgeben.

nehme aber an (die hier schon öfter zitierte "Glaskugel"),dass dein Problem im Aufruf des Bausteins ohne Anschaltung des entspechenden Eingangs des FB´s Liegt.
Wenn du im FB die richtige Logik hast, dann gib bei "leeren" Eingängen einfach entsprechend "0" oder "1" vor.
 
Danke für die Meinungen, ich denke mitterweile auch dass es mit S7-Bordmitteln einfach nicht möglich ist.

Dennoch, evtl. fällt ja jemand etwas dazu ein wenn ich die Aufgabenstellung etwas genauer beschreibe:

Ich habe z.B. einen Aufruf eines PID-Reglers, dessen P-/I-/D-Parameter möchte ich über einen FB-Eingang vorgeben. Wenn jetzt an einem dieser Parameter nichts angeschlossen ist, möchte ich den entsprechenden Anteil deaktivieren, d.h. es ist dann ein P- oder PI-Regler. Die Eingänge sind real, in diesem Fall kann ich auf 0.0==R vergleichen, dann weiss ich dass der Eingang unbelegt ist.

Nun habe ich allerdings nicht nur PID-Regler sondern u.a. auch Antriebe die alle möglichen Optionen haben, wie z.B. Reversieren/div. n-Festwerte/Reinigungsbetrieb ect. Alle diese Eingänge sind Bool, aus dem Signal lässt sich also nicht ableiten ob sie belegt sind oder nicht. Deshalb hätte ich gerne aus dem FB heraus erkannt, ob am Eingang eine Variable steht oder nicht, dann könnte ich mir die Konfigurationsbits dazu sparen.

Nochmals Danke für die bisherigen Ansätze, Gruss Lothar.
 
hab leider kein Step7 zu hause, aber bei den EN Eingängen der FB´s funzt das.
weiss aber nicht wie genau.

aber wenn du die Eingänge intern entsprechend auswertest und ev aussen einen "speziellen" Wert vorgibst bei nichtverwendung, dann solltest du auch im FB das dann als "unbeschalteten" Eingang erkennen.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
... die einzige Variante wäre der schon von Onkel Dagobert erwähnte und vom TE verpöhnte Pointer. Etwas anderes gibt es da nicht. Zu berücksichtigen wäre hier aber, dass Pointer ja nicht = ANY heißt.

Ansonsten ist es aber korrekt, dass der Code des Bausteins dadurch nicht eben lesbarer wird ...

Gruß
Larry
 
Danke für die Meinungen, ich denke mitterweile auch dass es mit S7-Bordmitteln einfach nicht möglich ist.

Dennoch, evtl. fällt ja jemand etwas dazu ein wenn ich die Aufgabenstellung etwas genauer beschreibe:

Ich habe z.B. einen Aufruf eines PID-Reglers, dessen P-/I-/D-Parameter möchte ich über einen FB-Eingang vorgeben. Wenn jetzt an einem dieser Parameter nichts angeschlossen ist, möchte ich den entsprechenden Anteil deaktivieren, d.h. es ist dann ein P- oder PI-Regler. Die Eingänge sind real, in diesem Fall kann ich auf 0.0==R vergleichen, dann weiss ich dass der Eingang unbelegt ist.

Nun habe ich allerdings nicht nur PID-Regler sondern u.a. auch Antriebe die alle möglichen Optionen haben, wie z.B. Reversieren/div. n-Festwerte/Reinigungsbetrieb ect. Alle diese Eingänge sind Bool, aus dem Signal lässt sich also nicht ableiten ob sie belegt sind oder nicht. Deshalb hätte ich gerne aus dem FB heraus erkannt, ob am Eingang eine Variable steht oder nicht, dann könnte ich mir die Konfigurationsbits dazu sparen.

Nochmals Danke für die bisherigen Ansätze, Gruss Lothar.

Also ich halte dieses Ansinnen für verwirrend.... selbst wenn das funktionieren würde, was ist, wenn jemand die Instanz von woanders beschreibt, was ja durchaus legitim ist?
Da blickt ja keiner mehr durch dann.

Du brauchst eben zusätzlich (meistens Binär-) Eingänge wo Du Parameter (o.ä.) für aktiv und gültig erklärst. Das ist bei jedem WollMilchSau- Baustein im PCS7 ja auch so. Der kann (fast) alles, was genau er tun soll legt man mit "Schaltern" fest.
Das ist klar, TRANSPARENT (wie Du oben schreibst), und nachvollziehbar!
 
TE kannst ja auch für jeden Eingang den du sinnvoll mit Variablen versorgen willst einen Binäraingang vorsehen, in dem du Freigibst ober der entsprechende Eingang im FB verarbeitet werden soll oder nicht. Hat auch noch den Vorteil, dass du zum Testen nicht die Variable entfernen musst, sondern nur das Bit entsprechend:)
 
Vierlagig hat in einem anderen Thread diese Aufgabenstellung als nicht sinnvoll lösbar beschrieben.

hab ich das? man lernt hier ja viel über sich selbst ... :rolleyes:

ich habe das mal speilhaft im forum mit any für einen analog-(un)scale gemacht... wie gesagt mit any... da konnte dann noch der datentyp mit ausgewertet werden...

eine system-funktion gibt es dafür nicht...noch? siemens will uns ja immer wieder überraschen mit service packs und hotfixes ... aber eine JK-schlagrate haben sie zum glück noch nicht...

zum thema an sich nochmal: wenn ich in einer OO-sprache eine funktion überladen möchte, nichts anderes möchtest du ja, muß ich sie auch mit den möglichen parametern neu anlegen (und intern weiter schachteln um es übersichtlich zu machen) ...nichts anderes würd ich hier machen. die funktionen mit unterschiedlichen parametern aber selber funktion in einem nummerband anlegen und das rudimentäre sotierattribut "family" nutzen...
in ner quelle ja relativ schnell mit copy-paste zu bewerkstelligen... leider ist es in der schönen heilen-welt nicht möglich die funktionen gleich zu benennen, aber dafür kann man ja noch das alleinstellungsmerkmal im symbol codieren...
 
Hi,

wie vorher schon öfters geschrieben einen Pointer anlegen.

z.B. Kp : POINTER usw. wenn nichts an den Baustein geschrieben wird ist dieser = P#0.0 und dass kann man im Baustein abfragen.

Gruss Daniel
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hier mal eine andere Lösung:

Du hast Deinen FC/FB ganz normal mit BOOL'schen IN Parametern beschaltet und fügst nun noch eine WORD (oder DWORD)-Variable hinzu in der Du die benutzten Eingänge mit "1" markiertst. Jedes Bit steht für einen Eingang. Im Baustein selbst kannst Du dann dieses WORD auswerten und sehen welchen Eingang Du benutzt und welchen nicht!
 
Zuletzt bearbeitet:
Zurück
Oben