Zuviel Werbung? - > Hier kostenlos beim SPS-Forum registrieren

Seite 1 von 3 123 LetzteLetzte
Ergebnis 1 bis 10 von 29

Thema: Testen eines Funktionsbausteines

  1. #1
    Registriert seit
    23.06.2014
    Beiträge
    12
    Danke
    10
    Erhielt 0 Danke für 0 Beiträge

    Idee


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo SPS-Forum! Ich habe bereits mich mit dem Stichwort "testen" durch ein paar interessante Diskussionen durchgelesen.

    Ausgangssituation: Ein Kollege war vor seinem Urlaub so nett und hat einen Funktionsbaustein (im Folgenden: FB) implementiert, der einige Sachen macht, was spielt ja keine Rolle.

    Im Speziellen ist z.B. eine Case-Abfrage drin, die ich gerne Testen möchte.

    In der Theorie ist alles total trivial:
    Im Prinzip muss ich ja nur die Inputvariablen des FBs mit bestimmten Werten belegen und kann dann im Online-Modus schauen, ob alles wie gewünscht verläuft.
    Mein erster Ansatz war eine Variablentabelle zu füllen, jedoch habe ich mehrere String-Input-Variablen und somit stoße ich sehr bald an deren Grenzen.
    Mein zweiter Ansatz ist nun, einen eigenen FB zu bauen, der den Anderen testet. Mein Gedanke ist: Ich beschreibe im Test-FB die Variablen nach meinem Wunsch und reiche diese dann an den zu testenden FB weiter.

    Frage 1: Ist diese Vorgehensweise zu Empfehlen? (Byteweise ein Char in die Vartab zu schreiben stößt sehr schnell an Grenzen!)
    Code:
    IF (Frage 1 != TRUE) THEN 
                   Frage2: Gibt es einfachere Möglichkeiten des Testens? (Generierung eines Test-FBs oder Ähnliches).

    Frage 3: So einfach wie ich mir das vorgestellt habe, ist es nicht: Ich dachte ich kann meinen FB einfach in das Netzwerk einfügen und die PINs verbinden. Ich schätze, dass ich einen Merker dazwischen brauche, jedoch hab ich hier im Forum gelesen, dass man auch über Datenbausteine sowas realisieren kann. Was würdet ihr mir empfehlen?

    Frage 4: Sobald ich dann einen Kontrollfluss (ein case) getestet habe, werde ich noch mehr Cases und IF-Abfragen usw. testen wollen.
    Ist mein Ansatz mit x-Test-Funktionsbausteinen dann überhaupt sinnvoll?


    Vielen Dank im Voraus liebe community und sorry, ich bin einfach sehr sehr verwöhnt von Java und Eclipse (Stichwort: Modellbasiertes Testen)

    PS: Ich darf in diesem Falle mit STEP7 Version 5.5 arbeiten.
    Zitieren Zitieren Testen eines Funktionsbausteines  

  2. #2
    Registriert seit
    27.07.2012
    Ort
    AUT
    Beiträge
    480
    Danke
    84
    Erhielt 159 Danke für 90 Beiträge

    Standard

    Interessanter Ansatz, habe ich selbst schon mal verfolgt (aber nicht für Simatic) aber dann aufgrund diverser Gründe verworfen.

    Muß der Test in der Simatic laufen oder kann der Test extern laufen? Mein Ansatz damals war einen FB mit einem externen Programm zu testen da die Dokumentation des Testes einfacher wäre. d.H. Ich habe eine SPS (real oder simuliert) in dem alle zu testenden FBs instanziert sind mit EAs auf Variablen. Dann geht ein externes Programm her und testet die FBs nach den definierten Test Cases. Damit kannst du dir komfortablere Möglichkeiten schaffen deine Cases zu definieren bzw. die Ergebnisse zu validieren und zu dokumentieren.

    Was du dir überlegen mußt ist dass im Vergleich zu einer Funktion ein FB auch einen inneren Zustand hat, also seine Rückgabewerte aufgrund dessen was du vorher gemacht hast anders sein kann. Dazu müßtest du auch den IDB entsprechend vor jedem Test initalisieren (auch für Timer müßte man sich was wahrscheinlich was überlegen). Außerdem ist es bei Bausteinen vermutlich schwierig Testcases gut zu definieren da im Gegensatz zu einer Funktion in Java halt viele Funktionen in einem FB ablaufen und miteinander interagieren können. Wäre sehr daran interessiert wenn du uns hier betreffend deiner Fortschritte auf dem laufenden halten könntest
    Regards NRNT

  3. Folgender Benutzer sagt Danke zu norustnotrust für den nützlichen Beitrag:

    sps_newbie (24.06.2014)

  4. #3
    sps_newbie ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    23.06.2014
    Beiträge
    12
    Danke
    10
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Bevor ich auf die Antwort von NRNT eingehen muss ich noch zwei Sachen ansprechen:

    1. Ich verwende STEP7 in einer VM mit WinXP.
    2. Ich möchte einen FB testen mit möglichst wenig Aufwand.
    3. Den Ansatz mit der Variablentabelle hab ich schon verworfen. Das Ganze kann nur scheitern, nicht zuletzt, wegen dieser tollen Fehlermeldung:

    KeinSpeicherBeimSteuern.JPG
    Wenn man schnell zwei Werte setzen will ist das ja i.O., doch ich habe einen Baustein mit insg. 116 EA-Variablen!
    Von den 1024 Zeilen der Variablentabelle belegt eine String-Variable (allein zum Setzen) schon 256 Zeilen – und ich hab noch nicht mal die Ausgänge auf deren Werte geprüft... Wisst ihr jetzt vielleicht, was ich meine?

    Zitat Zitat von norustnotrust Beitrag anzeigen
    Muß der Test in der Simatic laufen oder kann der Test extern laufen?
    In meinem Falle sollte in einem ersten Schritt der SIMATIC-Umgebung stattfinden. Ich dachte, diese STEP7 IDE unterstützt mich in irgendeiner Form beim Testen. Mein Ziel ist es das komplette Programm bis Ende der Woche auf der echten SPS auszuführen. Der „Test“(-Baustein) ist nur für mich quasi erstmal nur zur Übung, da die Kollegen eh keine Zeit haben zum testen, darf der Neue (==SPS_newbie das mal machen. Dieser wiederum hat schon Erfahrungen gemacht mit JUNIT und TestDrivenDevelopment zum Beispiel. Ich könnte hier Stunden verbringen und die Vorteile aufzählen, aber es würde uns nicht weiterbringen.

    Zitat Zitat von norustnotrust Beitrag anzeigen
    Mein Ansatz damals war einen FB mit einem externen Programm zu testen da die Dokumentation des Testes einfacher wäre.
    Ich habe eine SPS (real oder simuliert) in dem alle zu testenden FBs instanziert sind mit EAs auf Variablen.
    Dann geht ein externes Programm her und testet die FBs nach den definierten Test Cases.
    Damit kannst du dir komfortablere Möglichkeiten schaffen deine Cases zu definieren bzw. die Ergebnisse zu validieren und zu dokumentieren.
    Wow, interessante Antwort NRNT. Darf ich zu diesem Quote ein paar kurze Fragen stellen?


    1. Wie kannst du einen FB von aussen ansprechen/triggern?
    2. Hast du das externe Programm selbst geschrieben oder ist das ein Test-Framework das zu Simatic passt?

    Generell ist das für mich eine Hiobsbotschaft! Wenn ich z.B. mit Bash- oder Python-Scripte EAs setzen könnte, das wäre ja genial. Dann könnte ich mir ein eigenes Test-Framework schreiben...


    Zitat Zitat von norustnotrust Beitrag anzeigen
    Was du dir überlegen mußt ist dass im Vergleich zu einer Funktion ein FB auch einen inneren Zustand hat, also seine Rückgabewerte aufgrund dessen was du vorher gemacht hast anders sein kann.
    Dazu müßtest du auch den IDB entsprechend vor jedem Test initalisieren (auch für Timer müßte man sich was wahrscheinlich was überlegen). Außerdem ist es bei Bausteinen vermutlich schwierig Testcases gut zu definieren da im Gegensatz zu einer Funktion in Java halt viele Funktionen in einem FB ablaufen und miteinander interagieren können. Wäre sehr daran interessiert wenn du uns hier betreffend deiner Fortschritte auf dem laufenden halten könntest
    Auch sehr interessante Informationen NRNT.
    Ich gebe dir vollkommen Recht bezüglich dem, was du angesprochen hast (Neuinitialisierung, Timing). Aber... kann das denn so schwer sein? Ich meine, gibts in der SPS-Welt denn wirklich gar nichts, was einem beim Testen unterstützt?!

    Du sprichst in meinen Augen generell wichtige Punkte an.

    Ich versuche ein Vergleich herzustellen mit JUnit (Ohne Gewähr):

    Bei einem JUnit-Test kann man mit der Annotation @Before alles so einrichten, wie man es gerne hätte. Da könnte man die Variablen setzen wie man will.
    Kurz-Hilfe zu @Before: This method is executed before each test. It is used to prepare the test environment (e.g., read input data, ...).

    Man kann noch weiter gehen, ganze Komponenten/Module mocken, Stichwort Mocking Framework.

    Klar ist ein FB schwierig zu testen, da es zig Testfälle geben könnte.
    Doch letztenendes will ich ja nur den Kontrollfluss des Programms durchtesten.
    In einfachen Worten: Ich will den Zustandsautomat in dem FB testen.
    Aber dafür gibt es doch wiederum Tools. Das geht jetzt bestimmt zu weit, aber schau mal hier z.B. http://www.verifysoft.com/de_mccabe_metrics.html.
    Während meines Studiums haben wir deren Software mal eingesetzen dürfen.

    Ich bin gespannt auf eure Meinungen.


    cheers

  5. #4
    Registriert seit
    27.07.2012
    Ort
    AUT
    Beiträge
    480
    Danke
    84
    Erhielt 159 Danke für 90 Beiträge

    Standard

    Hallo sps_newbie

    Zitat Zitat von sps_newbie Beitrag anzeigen
    Wenn man schnell zwei Werte setzen will ist das ja i.O., doch ich habe einen Baustein mit insg. 116 EA-Variablen!
    Also erstmal muß ich sagen dass Bausteine die insgesamt 116 EA Variablen haben generelle schwer zu handeln sind und imho eine schlechte Lösung in einer SPS. Ich fürchte mal das wird dir aber hier nicht weiterhelfen.
    Zitat Zitat von sps_newbie Beitrag anzeigen
    Wie kannst du einen FB von aussen ansprechen/triggern?
    Du kannst auf DBs etweder über OPC oder über Libaries die du in ein Programm einbindest zugreifen.

    Zitat Zitat von sps_newbie Beitrag anzeigen
    Hast du das externe Programm selbst geschrieben oder ist das ein Test-Framework das zu Simatic passt?
    afaik gibt es kein Test Framework für Unit Tests. Den Prototypen damals habe ich selbst geschrieben. Was es gibt sind Simulationssysteme (z.B. WinMOD) aber das ist eben kein Testframwork wie JUNIT..

    Zitat Zitat von sps_newbie Beitrag anzeigen
    Wenn ich z.B. mit Bash- oder Python-Scripte EAs setzen könnte, das wäre ja genial. Dann könnte ich mir ein eigenes Test-Framework schreiben...
    Es gibt, wie gesagt Libaries mit denen du aus Hochsprachen auf DBs zugreifen kannst um Variablen zu lesen/schreiben. Das wäre also ein Weg den du gehen könntest
    Zitat Zitat von sps_newbie Beitrag anzeigen
    Ich dachte, diese STEP7 IDE unterstützt mich in irgendeiner Form beim Testen.
    afaik nein
    Zitat Zitat von sps_newbie Beitrag anzeigen
    Dieser wiederum hat schon Erfahrungen gemacht mit JUNIT und TestDrivenDevelopment zum Beispiel.
    Es ist üblicherweise ein Gedankenverbrechen hier im Forum Ansätze aus der Hochsprachenentwicklung in die SPS Welt übertragen zu wollen. Es wundert mich überhaupt warum hier noch kein Shitstorm durch den Thread weht


    Zitat Zitat von sps_newbie Beitrag anzeigen
    Ich meine, gibts in der SPS-Welt denn wirklich gar nichts, was einem beim Testen unterstützt?!

    Du sprichst in meinen Augen generell wichtige Punkte an.

    Ich versuche ein Vergleich herzustellen mit JUnit (Ohne Gewähr):

    Bei einem JUnit-Test kann man mit der Annotation @Before alles so einrichten, wie man es gerne hätte. Da könnte man die Variablen setzen wie man will.
    Kurz-Hilfe zu @Before: This method is executed before each test. It is used to prepare the test environment (e.g., read input data, ...).

    Man kann noch weiter gehen, ganze Komponenten/Module mocken, Stichwort Mocking Framework.
    nein, nein, nein und.. laß mich überlegen... nein.

    Zitat Zitat von sps_newbie Beitrag anzeigen
    Aber dafür gibt es doch wiederum Tools. Das geht jetzt bestimmt zu weit, aber schau mal hier z.B. http://www.verifysoft.com/de_mccabe_metrics.html.
    Irgendwo im Forum findest du einen verhungerten Thread von mir der sich mit der Frage nach Metriken in SPS Programmen beschäftigt. Kurz gesagt: nein, gibt es nicht. Ich habe ein paar Experimente mit Easycode gemacht die einfache Metriken für Code der in ST erstellt wurde anbieten. Leider ist das nicht wirklich anwendbar. Man findet ein paar Arbeiten dazu, ich kann mal ein bißchen bei meinen Downloads suchen. Leider kein wirkliches Tool (für den TÜV wurde mal was gemacht für Sicherheitssteuerungen). Die Frage ist auch was sind brauchbare Kennzahlen für ein SPS Programm? (Ich weiß es natürlich aber ich verrate es nicht )

    Wenn du wirklich Unit Testing betreiben willst kann ich mir nur folgenden Weg vorstellen:
    - SimaticTestprojekt erstellen FBs rein und in Simu SPS
    - Framework basteln mit Hilfe von Libnodave oÄ
    Geändert von norustnotrust (24.06.2014 um 18:14 Uhr)
    Regards NRNT

  6. Folgender Benutzer sagt Danke zu norustnotrust für den nützlichen Beitrag:

    sps_newbie (25.06.2014)

  7. #5
    Registriert seit
    09.08.2006
    Beiträge
    3.626
    Danke
    911
    Erhielt 656 Danke für 542 Beiträge

    Standard

    Zitat Zitat von norustnotrust Beitrag anzeigen
    Es ist üblicherweise ein Gedankenverbrechen hier im Forum Ansätze aus der Hochsprachenentwicklung in die SPS Welt übertragen zu wollen. Es wundert mich überhaupt warum hier noch kein Shitstorm durch den Thread weht
    Das Wetter ist zu gut, da haben wir nicht so viel Langeweile Nein, der TE wird schon selbst dahinter kommen, was man übernehmen kann und was nicht Spätestens nach der ersten Inbetriebnahme weiss er, womit man üblicherweise zu kämpfen hat.

    zum Thema Softwaretest gibt's ja diesen Thread hier: Umfrage: Formale Verifikation / Modellprüfung

    Für jetzt auf die Schnelle würd ich an die FB-Eingänge nen DB hängen und darin die Werte ändern, bzw. über ne Visu auf den DB zugreifen, hast Du ne Visu mit in der VM?

    Nebenbei verhält sich PLCSIM im Detail anders als die reale SPS.

    So einfach wie ich mir das vorgestellt habe, ist es nicht: Ich dachte ich kann meinen FB einfach in das Netzwerk einfügen und die PINs verbinden.
    Der war gut Das sind halt die kleinen Besonderheiten in der SPS-Welt. Mit FUP geht das nicht, in CFC schon.

    Gruß.

    PS:

    In meinem Falle sollte in einem ersten Schritt der SIMATIC-Umgebung stattfinden. Ich dachte, diese STEP7 IDE unterstützt mich in irgendeiner Form beim Testen. Mein Ziel ist es das komplette Programm bis Ende der Woche auf der echten SPS auszuführen. Der „Test“(-Baustein) ist nur für mich quasi erstmal nur zur Übung, da die Kollegen eh keine Zeit haben zum testen, darf der Neue (==SPS_newbie das mal machen. Dieser wiederum hat schon Erfahrungen gemacht mit JUNIT und TestDrivenDevelopment zum Beispiel. Ich könnte hier Stunden verbringen und die Vorteile aufzählen, aber es würde uns nicht weiterbringen.
    wenn ich böse wäre würde ich sagen, die wollen Dir mal zeigen, wo der Simatic-Hammer hängt
    Geändert von ducati (24.06.2014 um 19:37 Uhr)

  8. #6
    Registriert seit
    27.07.2012
    Ort
    AUT
    Beiträge
    480
    Danke
    84
    Erhielt 159 Danke für 90 Beiträge

    Standard

    zum Thema Softwaretest gibt's ja diesen Thread hier: http://www.sps-forum.de/programmiers...erifikation-mo
    Heieiei, wie konnte mir dieser Thread nur durchrutschen. Da muß ich mich gleich beteiligen... Schließlich pflegt sich mein Ruf "größtenteils diskussionswürdige" Beiträge zu liefern nicht von selbst
    Regards NRNT

  9. #7
    Registriert seit
    03.04.2008
    Beiträge
    6.200
    Danke
    237
    Erhielt 815 Danke für 689 Beiträge

    Standard

    Schön, dass erkannt wurde PLC != Hochsprache.

    Ich finde es in höchsten Masse unfair einen Newbiew mit solche einem MonsterFB allein zu lassen.
    Aber das ist, nach meiner Erfahrung, die Denke wie mit Praktikanten und Studis umgegangen wird.


    bike
    "Any fool can write code that a computer can understand.
    Good programmers write code that humans can understand."
    --Martin Fowler

  10. Folgender Benutzer sagt Danke zu bike für den nützlichen Beitrag:

    ducati (24.06.2014)

  11. #8
    Registriert seit
    17.07.2009
    Ort
    Am Rande der Ostalb
    Beiträge
    5.476
    Danke
    1.140
    Erhielt 1.238 Danke für 971 Beiträge

    Standard

    Tja alle x-Wochen dieselben tollen Ideen zu Software- und Unittests
    Nur leider hat es kein einziger SPS-Hersteller irgendwie in seinem Produktspektrum.
    Also entweder sind die Hersteller alle nur kurzsichtige Idioten oder das Thema muss wohl wirklich auf der SPS komplexer sein ...

    Das einzige was man zunehmend findet sind Simulationstools.
    Siemens arbeitet gerade an der Verbindung von 3D-CAD (UG NX) und PLC-SIM. Aber dabei handelt es sich auch "nur" um eine Simulationssoftware.

    Gruß
    Dieter

  12. #9
    Registriert seit
    27.07.2012
    Ort
    AUT
    Beiträge
    480
    Danke
    84
    Erhielt 159 Danke für 90 Beiträge

    Standard

    Also entweder sind die Hersteller alle nur kurzsichtige Idioten oder das Thema muss wohl wirklich auf der SPS komplexer sein ...
    Also ich glaube nicht dass die Komplexität auf der SPS zu hoch ist, im Gegenteil.

    Ich glaube daß die Komplexität der Funktionen im Vergleich zu den übergebenen Parametern zu gering ist.
    Außerdem glaube ich dass:
    - die Abhängigkeiten zwischen einzelnen Modulen zu gering ist (keine tiefe Schachtelung)
    - SPS Programme im Gegensatz zu Software nur einen sehr beschränkte Evolution innerhalb des Lebenszykluses durchmachten(keine neuen Betriebssysteme, keine neuen Versionen, etc...)
    - Im Gegensatz zu einem Anwenderprogramm immer nur ein Teil des gesamten Problems darstellen
    - Fehlerfälle auch fast immer eine Funktion darstellen (nämlich die Fehlerbehandlung)

    Von daher machen Unit Tests imho nur dort (ökonomisch) Sinn wo oben genannte Punkte nicht zutreffen (z.B. Entwicklung/Pflege großer Bibliotheken).
    Regards NRNT

  13. #10
    Registriert seit
    09.08.2006
    Beiträge
    3.626
    Danke
    911
    Erhielt 656 Danke für 542 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Im Gegensatz zu dem anderen Thread, will der TE hier ja nur einen Baustein testen und nicht das komplette Steuerungsprogramm.

    Wie ich in dem anderen Thread schon geschrieben habe, sehe ich das auch als realistisch an, wenn der jeweilige Kollege die KnowHow dazu hat und die Zeit.

    Es spricht ja nichts dagegen, in C++ und Libnodave sich nen Algorithmus zu schreiben, welchen nen FB in der SPS durchtestet.

    Nur selbst wenn man das kann, dauerts bestimmt nochmal so lange wie das schreiben des FBs und man muss schon ziemlich aufpassen, das man wirklich alle relevanten Fälle durchtestet, sonst macht das ganze garkeinen Sinn.

    Wo bei auch da der Unterschied besteht, ob ich jetzt nen FB mit 100 CAse Fällen testen will, oder nen Baustein der z.B. aus Betriebsgrößen die Normgrößen berechnet, oder ne Schrittkette oder nen Baustein der nicht alles OOP mäßig nach aussen gibt sondern aus dem Baustein heraus irgendwelche Daten, Merker oder Kommunikationsaufträge geschrieben werden. Bausteine welche ne komplizierte Visuanbindung haben sind der nächste Fall.

    Also m.M. ist solch eine Testumgebung einfach nur für Spezialfälle möglich. Alle sonstigen Schweinereien die so in der SPS-Software veranstaltet werden sind einfach nicht ganzheitlich abzudecken...

    Gruß.

Ähnliche Themen

  1. Antworten: 15
    Letzter Beitrag: 04.06.2014, 12:06
  2. Antworten: 14
    Letzter Beitrag: 21.10.2012, 11:39
  3. Antworten: 27
    Letzter Beitrag: 09.02.2011, 10:29
  4. Testen eines Profibusteilnehmers nur mit Laptop
    Von Stefan H. im Forum Feldbusse
    Antworten: 1
    Letzter Beitrag: 07.04.2006, 18:09
  5. Antworten: 2
    Letzter Beitrag: 09.08.2003, 21:24

Stichworte

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •