Was genau sind Schnittstellen

Zuviel Werbung?
-> Hier kostenlos registrieren
Ein USB-Port, Ethernet-Port etc... sind alles Schnittstellen.
Die Schnittstellen ermöglichen die Verbindungen von 2 Komponenten.
Schreib halt mal nen paar Stichpunkte/Infos, wo wie warum du das Wissen benötigst.
 
Zuletzt bearbeitet:
Ich meine im CodeSYS

Also ich meine die Interfacees imCodesys die man einfügen kann, was kann ich damit machen? verschiedene Typen zusammenführen, oder waie ist das gemeint?
 
Einer Interface-Variablen kann man jede FB-Instanz zuweisen, die dieses Interface implementiert, und über die Interface-Variable dann den zugewiesenen FB aufrufen.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Also wenn ich einen funktionsblock a und einen funktionsblock b habe, welche grundlegend anders sind, aber beide das interface xy implementieren, dann könnte ich sagen a := b ??? Stimmt das so?

dann würden die im tnterface deklarierten daten in a von b überschrieben werden???
 
Ich hab ejetzt auch ein interface mit methode a und methode b.

Habe jetzt ein FB mit "implements interface" geschrieben, aber methode a und b sind da nich tdrin, muss ich die noch selber rein schreiben?
 
Also wenn ich einen funktionsblock a und einen funktionsblock b habe, welche grundlegend anders sind, aber beide das interface xy implementieren, dann könnte ich sagen a := b ??? Stimmt das so?
Nein, aber Du könntest dann eine Interface-Variable MyXY deklarieren und "MyXY:=a" oder "MyXY:=b" sagen.
Habe jetzt ein FB mit "implements interface" geschrieben, aber methode a und b sind da nich tdrin, muss ich die noch selber rein schreiben?
Ja.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Beispiel???

OK Hast du vielleich tmal ein gutes Beispiel, wie man sowas aufbaut?

Also wie man Interfaces implementiert und nutzt un dwie man bsp. Fb´s mit anderen erweitert (also extend) und diese dann anspricht?
 
Beispiel, nicht total ernst nehmen

Hallo, was genau sind schnittstellen und wie wende ich diese an?

Mal etwas leicht formuliert: (Ich warte gerade auf einen Rückruf eines Kunden)

Stell Dir vor, Du und Deine Firma Ihr seid Weltmarktführer in ERBSEN_ZAEHLERN.

Das Produkt ist ausgereift, Ihr macht gute Umsätze bis Ihr die Marktlücke entdeckt, es gibt keine BOHNEN_ZAEHLER!!!
Time to Market ist ein Muss und Ihr stellt fest, die Unterschiede sind nicht so gewaltig und es bieten sich 2 Wege an,
mit der Software schnell fertig zu werden:

1. Neues Directory auf der HD anlegen, den gesamten ERBSEN_ZAEHLER rüberkopieren, jegliches Vorkommen des Namens ERBSE
durch BOHNE ersetzen und dann Zeile für Zeile durchgehen, wo sich was ändert, wenn man eine BOHNE zählen möchte.

2. Etwas nachdenken und feststellen: das Hauptprogramm kann im Prinzip so bleiben, nur der eigentliche Zähler muss angepasst
werden. (Andere Hardware, Erbsen sind weicher, kleiner, in Bohnenschüttgut kommen keine Steinchen vor, Erbsen werden
etwa 10 mal soviel gefuttert wie Bohnen also die neue BOHNEN_ZAEHLER dürfen langsamer sein ...)

Beiden Zählern sind aber folgende Methoden gemeinsam z.B.:

BOOL StartZaehlen (); (* startet den Zähler *)
BOOL StopZaehlen (); (* hält den Zähler an *)
BOOL ResetZaehler ();
INT GibAnzahl (); (* gibt aktuellen Stand *)
BOOL StartSTOP (BOOL bMode); (* schaltet Band ein/aus *)
BOOL NotAus ();
STRING GibText (INT INDEX); (* gibt einen Text zurück *)


Also schreib eine Interface Definition, die diese Methoden aufführt, sowie 2 Libraries (mache ich immer so), die den
ERBSEN_ZAEHLVORGANG oder den BOHNEN_ZAEHLVORGANG durchführen und jeweils das definierte Interface implementieren.
Vom eigentlichen Programm rufst Du dann nur noch die generischen Methoden auf und brauchst da nie wieder was zu ändern,
wenn alles gut überlegt ist, d.h. wenn das Interface nicht geändert werden muss. Kommt jemand mit Äpfeln vorbei, kannst
Du dem Chef beruhigt sagen, der neue APFEL_ZAEHLER ist 1 bis 2 Wochen nach Fertigstellung des Hardware Prototypen bereit, um
auf die Messe nach Italien zu gehen.

Ein Problem entsteht, wenn ein Nachbar aus der CDU vorbeikommt und fragt, ob Du mal einen MONETEN_ZAEHLER machen
könntest. Sie möchten vor der Wahl die Kohle für die Redeauftritte von Peer Steinbrück auswerten. Bei INT GibAnzahl()
kommst Du mit INT (16 BIT Signed) nicht hin! Schlecht geplant, ULONG wäre besser gewesen (immer noch knapp!), also vorher bei der Interface Definition gut alle Möglichkeiten durchspielen.
 
OK danke dir, aber habe das mit den Libarys nicht so verstanden. Ich dacht edie interfaces implementiere ich in die FB´s? und ich muss doch dann die methoden in den FB´s auch nochmal ausprogrammieren, oder? Wenn ich das mache, warum brauche ich dann ein interface, wenn ich doch eh die methode im FB habe und den ja instanzieren kann, also bsp. ERBSEN_ZAEHLER : FB1; und BOHNEN_ZAEHLER : FB1; ???? stehe da irgendwie auf dem Schlauch
 
OK danke dir, aber habe das mit den Libarys nicht so verstanden. Ich dacht edie interfaces implementiere ich in die FB´s? und ich muss doch dann die methoden in den FB´s auch nochmal ausprogrammieren, oder? Wenn ich das mache, warum brauche ich dann ein interface, wenn ich doch eh die methode im FB habe und den ja instanzieren kann, also bsp. ERBSEN_ZAEHLER : FB1; und BOHNEN_ZAEHLER : FB1; ???? stehe da irgendwie auf dem Schlauch
Das isses. Der Sinn von Interfaces in der SPS-Programmierung erscheint mir auch etwas zweifelhaft. Wenn das aufrufende Programm nicht wüsste, ob es einen Erbsen- oder Bohnenzähler vor sich hat, wäre das Interface praktisch. Aber gerade das ist normalerweise nicht der Fall. Ich baue entweder einen Erbsen- oder einen Bohnenzähler und werde dafür natürlich auch den passenden FB im Programm instanziieren.
 
Verständnis

Ich habe jetzt nichts konkretes vor, mir geht es rein um das Verständnis.

Und mir ist noch nicht so wirklich klar, wofür ich Interfaces brauche, bzw. was diese mir für einen Nutzen bzw. Vorteil bringen könnten.

Wenn dort eh nur Methoden drin definiert werden, dann bringt es mir ja auch nichts, wenn ich einen fb einer interfacevariable zuweisen kann, denn was soll eine interfacevariable sein? Eine Variable mit methoden? was soll ich der denn zuweisen????? verstehe ich nicht, sorry :)
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Du könntest mit der Interface-Variablen den FB aufrufen, den Du ihr zugewiesen hast. Statt "FBVar()" eben "InterfaceVar()". Sinn macht das nur, wenn das aufrufende Programm selbst gar nicht weiss, welcher FB aufgerufen werden soll. Aber das dürfte in der SPS-Programmierung wohl nur selten der Fall sein.
 
ok

Also das dürfte wirklich kaum der fall sein.
Was ich mich jetzt noch frage ist, woher weis denn interfacevar(); welchen FBvar(); es aufrufen soll?
 
Man muss der Interface-Variablen zunächst eine FB-Instanz zuweisen (InterfaceVar:=FBVar). Das geht natürlich nur mit einem FB, der auch ein Interface vom Typ der InterfaceVar implementiert.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
so langsam dämmerts ;-9

Ach so, also könnte ich bspw. sowas machen:

if material = "erbsen" then
interfacevar := fberbsen;
else
interfacevar := fbbohnen;
end if
.
.
.
.
interfacevar.zaehlen();
 
@ST:
ich habe in der OOP (Visual Studio) einigermaßen den Sinn der Interface verstanden und bewundere deine Versuche, hierfür in der SPS-Welt Beispiele zu erschaffen. Ich stimme dir aber zu, dass es auch mir schwerfällt, da etwas sinnvolles liefern zu wollen.

@Benson:
In der OOP kann man ein Interface dazu verwenden, um festzustellen, ob man mit einer einem vollkommen unbekannten Klasse bestimmte Dinge (nämlich die des Interface) machen kann. Das heißt : hat eine Klasse das bekannte Interface, dann muß sie auch die Teile davon bedienen können.
Sorry - ich kriege es auch nicht besser ... :(
 
Ach so, also könnte ich bspw. sowas machen:

if material = "erbsen" then
interfacevar := fberbsen;
else
interfacevar := fbbohnen;
end if
.
.
.
.
interfacevar.zaehlen();
Ja, so was kann man damit tun. Aber wozu sollte man das?
Code:
if material='erbsen'
then
   fberbsen.zaehlen();
else
   fbbohnen.zaehlen();
end_if
So geht es ja auch, und zwar schon in CoDeSys V2. Interessant wird die Interface-Variante erst dann, wenn das Programm sehr viele Methodenaufrufe eines der beiden FB's enthält, weil dann die ständige Unterscheidungsabfrage der material-Variablen doch etwas lästig wird. Aber so etwas ist wie schon gesagt für SPS-Programme weniger typisch.
 
Zurück
Oben