TIA Unittesting mit TIA

Zuviel Werbung?
-> Hier kostenlos registrieren
Leute ihr schmeißt wieder mit Begriffen um euch die ich erstmal Googeln muss ;)
Davon habe ich noch nie gehört. Macht man das Speziell bei Bibliotheken die man verteilen will oder Testet ihr damit ganze Projekte?

sie unterscheidet sich überhaupt nicht - gar nicht - wenn ich z.B. in C -einzelne Units (also die C-Dateien) zwangsweise mit:
  • Zustandsautomaten bauen
  • keinen Heap nutze
  • rekursionen verbiete
  • einzeln Units zur Laufzeit ersetzbar halte (dynamic (re)load)
  • das ganze in einem Hart-Echtzeit System laufen lasse (FreeRTOs, ThreadX, INTEGRITY,...)
hast du 100% exakt das gleiche wie in einer SPS

Das meine ich eigentlich damit;)

und volmi baut nicht gerade kleine Anlagen ;)

Der Wald und Wiesen, Brot und Butter SPS Anwender wird sich nur wundernd am Kopf kratzen ;)

Nee, mal im Ernst, die meisten SPS-Anwender brauchen sowas nicht und verstehen vielleicht auch nicht, wovon wir hier überhaupt reden. In Einzelfällen macht das ganze vielleicht aber Sinn. FürS TIA würde ich mir wünschen, dass Siemens erstmal die Bugs beseitigt, bevor sie über solche Dinge nachdenken, die eher nur wenige benötigen.

Gruß.
F
 
FürS TIA würde ich mir wünschen, dass Siemens erstmal die Bugs beseitigt, bevor sie über solche Dinge nachdenken, die eher nur wenige benötigen.

Das war ja eben der Fehler den Siemens gemacht hat - mit einem offenen System kannst du immer noch ein TIA oben drauf setzen (und nutzt den gleichen Code) - damit sind die Profis/Entwickler in entsprechende Projekten in der Lage alles zu machen was nötig ist - und die normalen bekommen eben eine GUI mit schön einfach

Code:
Librarys (Kompiler, Linker, Loader, Debugger, Simulator, Source-Handling) <- direkt in Applikation nutzen - oder für automatische Test der Library selbst
     Commandline-Tools <- direkt in Scripts nutzen - oder für automatische Test der Library selbst
     TIA-GUI
     PLCSim-GUI
     ...

bei TIA ist das alles mit einander vermischt - und höchstwahrscheinlich nur noch von Hand mit GUI-Klicken-Tests prüfbar - was nicht hilft viele Fehler schnell zu erkennen und zu fixen - aus diesem Grund macht man das so nicht

nur wie Siemens das angefangen hat lässt sich das eben nicht mehr realisieren (die paar Mio Zeilen TIA Code baut man nichtmehr darauf um) - erst macht man Libraries, dann Kommandozeile - weil man so jede Software einfach und leicht automatisiert testen kann - eben auch TIA selbst - und dann macht man ein ein GUI oben drauf -und Siemens hat das eben nicht gemacht und somit sehr viel Arbeit, schwierige Fehlereingrenzung und eine schlecht skalierbare Zukunftsstrategie definiert
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich wäre ja daran interessiert das einfach mal an der Praxis auszuprobieren. Sozusagen ein Proof of concept.
Step7 classic bringt meiner Meinung nach die passenden Schnittstellen dazu mit, um Quellen zu übersetzen, Bausteine zu laden usw.

D.h. eine Quelldatei übersetzen, die Bausteine in eine SPS laden und in Run versetzen, sowie Variablen aus der SPS auslesen ist möglich. Das ist zumindest eine Voraussetzung.

Dann müssen wir nur spezifizieren, wie dieser Test in der SPS durchgeführt werden soll.
 
Wenn es nicht so ein immens hoher Zeitaufwand wäre würde ich mal gerne die (Kompiler, Linker, Loader, Debugger, Simulator)-Kette exemplarisch für eine 300/400 entwickeln :)
 
Ich muss jetzt mal anders fragen :
"Unit-Test" ist ja schön und gut und ist in bestimmten Bereichen der IT-Branche ja auch schon "Standard" ... aber warum die Unit-Test-Routine in der SPS laufen lassen ? Das könnte doch ein angeschlossener PC, der über B&B die passenden Variablen abfragt/bedient mit einem entsprechenden (PC-)Programm doch ggf. viel besser ...?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Warum das neu entwickeln das schon vorhanden ist.

Aufgabenstellung:
Eine Funktion die zwei Integerzahlen dividiert, mit einem Ausgang mit dem Ergebnis und einen weiteren mit einen Fehlerwert, soll automatisiert getestet werden.
Die Funktion liegt als SCL-Quelle in Textform vor.

Was muss ich testen:
- ist 10/2 = 5
- spezifiziertes Überlaufverhalten
- spezifizierter Fehlercode bei Teilen durch Null

Lässt sich das mit Step7 classic realisieren, und lässt sich das mit TIA realisieren?
 
Die Runtime-Umgebung bei B&R oder Codesys dürfte sich in der Simulation auch von der im Zielsystem unterscheiden. Da ist Siemens sogar im Vorteil, weil der Binärcode CPU-unabhängig ist, Codesys kompiliert hingegen nativ für den jeweiligen Zielprozessor. Außer das Zielsystem ist ebenfalls x86, oder du hast auf dem PC einen ARM o.Ä. Emulator, der dann wieder Unterschiede zur echten CPU aufweisen kann.

Was hilft mir das, wenn bei Siemens der Binärcode CPU unabhängig ist, wenn er unterschiedlich interprediert wird?
Schönes Beispiel sind doch bei der 300er überlappende Bereiche bei Blockmove. Bei 315 und Plcsim funktioniert es und bei einer 312 gibt es einen Stopp.
Wenn es unterschiedliches Verhalten bei der Hardware gibt, dann soll es bei einer Simulation auf die Möglichkeit geben, die Zielplattform einzustellen.
Ich brauch die Simulation nicht für Hausaufgaben, Rollosteuerung oder ähnliche Geschichten, sondern um komplexe Dinge zu testen.
Und wenn ich dann bei der richtigen Inbetriebnahme Überraschungen erlebe, dann ist die Simulation letztlich für den Ar...

Gruß
Blockmove
 
Ich wäre ja daran interessiert das einfach mal an der Praxis auszuprobieren. Sozusagen ein Proof of concept.
Step7 classic bringt meiner Meinung nach die passenden Schnittstellen dazu mit, um Quellen zu übersetzen, Bausteine zu laden usw.

D.h. eine Quelldatei übersetzen, die Bausteine in eine SPS laden und in Run versetzen, sowie Variablen aus der SPS auslesen ist möglich. Das ist zumindest eine Voraussetzung.

Dann müssen wir nur spezifizieren, wie dieser Test in der SPS durchgeführt werden soll.

Ich denke es ist vlt über die TIA Openness auch möglich. Ich schau nächste woche mal ob ich was hinbekomme und stells dann hier vor.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich denke es ist vlt über die TIA Openness auch möglich. Ich schau nächste woche mal ob ich was hinbekomme und stells dann hier vor.

Hast du dir das schon mal angesehen?

Ich habe mal etwas rumprobiert, weil mich ja doch interessiert was sich damit automatisiert erledigen lässt. Denn auch wenn ich eine einfache Funktion schreibe, so muss ich diese trotzdem einmal testen (ich mache das zumindest). Also warum manuell etwas durchprobieren, was sich auch definieren und dann automatisieren lässt.

Bei Step7 v5 habe ich zumindest alle Werkzeuge um das zumindest prinzipiell vollständig automatisiert ablaufen zu lassen.

Einen Standard für eine Unittest-Beschreibung scheint es nicht zu geben. Ich habe mir mal Googles "googletest" angesehen, das scheint auch von anderen so in der Art verwendet zu werden:
https://github.com/google/googletest/blob/master/googletest/docs/Primer.md

Daran könnte man sich zumindest grob orientieren um nicht das Rad komplett neu erfinden zu müssen, und um auf evtl. bestehende Tools zurückgreifen zu können.

So ganz passt das natürlich nicht mit der SPS-Programmierung zusammen, leichte Anpassungen sind unumgänglich.
In meiner "Sprache" für eine Testdefinition könnte ein Test für eine Addierfunktion so aussehen:
Code:
TEST(AdditionTest, BasicTest) {
    VAR
        retval : INT;
    END_VAR

    BEGIN
        retval := FC_ADD(IN1 := 1, IN2 := 2);
        EXPECT_EQ(3, retval);
    END
}

Das Test-Ausführungsprogramm (bei mir z.Zt. in Python geschrieben) übersetzt diese Definition in einen entsprechenden Test-FB in SCL. Diese Quelle wird dann automatisiert übersetzt und geladen (in Plcsim oder eine echte CPU, die Step7 Kommandoschnittstelle verwendet das was erreichbar ist). Die Ergebnisse der Tests könnte man dann in einem DB als String o.Ä. ablegen, und dann über S7comm auslesen ("AdditionTest.BasicTest failed").

Dei Addier-Funktion ist trivial und nur ein Startpunkt. FBs wie z.B. ein Fifo mit diversen Datentypen müssten so auch geprüft werden können. Prinzipiell sehe ich da aber kein Problem.

In meinem obigen Beispiel würde ich alles zwischen VAR/END_VAR als VAR in einen FB einfügen (RAW_VAR), alles zwischen BEGIN/END als Code in einen FB (RAW_CODE). D.h. die Syntax-Prüfung delegiert man dann an den Step7-SCL-Compiler.

EXPECT..() wäre als Funktion oder als Code aufzulösen (wie ein C-Makro, aber abhängig vom Datentyp), welcher die Prüfung vornimmt und das Ergebnis in einem definierten Speicherbereich der SPS ablegt.
Das ist bei googletest und C++ natürlich wesentlich einfacher, weil das dort (d.h. diverse Datentypen) über C++-Templates abgefrühstückt wird (d.h. die Aufgabe löst der Compiler), und Ausgabe der Ergebnisse nur über Kommandozeile. Um Makros aufzulösen bräuchten wir hier zumindest einen rudimentären SCL-Parser. Da SCL für Step7 V5 und TIA-SCL verschieden sind, dementsprechend zwei (herzlichen Dank an den IEC ST Sprachstandard, an den sich keiner hält).

Wenn externe Ressourcen wie FCs/FBs aus Systembibliotheken, Unterfunktionen oder nicht-elementare Datentypen wie UDTs verarbeitet werden, wird das alles nicht mehr ganz so einfach.
 
Thomas, warum soll das Testprogramm auf der SPS ablaufen? Lass das doch auf dem PC laufen und kommuniziere mittels Libnodave oder Net2plcsim mit dem zu testenden Baustein in der SPS. Oder hab ich das falsch verstanden?
Gruss
 
Thomas, warum soll das Testprogramm auf der SPS ablaufen? Lass das doch auf dem PC laufen und kommuniziere mittels Libnodave oder Net2plcsim mit dem zu testenden Baustein in der SPS. Oder hab ich das falsch verstanden?
Es KANN auf einer echten SPS oder in Plcsim laufen. Ich würde mich aber nicht auf Plcsim festlegen, weil wie hier schon erwähnt leichte Unterschiede zwischen Plcsim und einer echten SPS bestehen.
Ich würde später auch nur noch die Ergebnisse der Tests auslesen, d.h. die Koordinierung erfolgt im SPS-Programm selber.

Über nicht-optimierte DBs ist das ja auch noch bei TIA-Plcsim möglich. Ist nur fraglich sich das bei TIA alles über externe Programme steuern lässt. Jochen hat sich diese TIA-Openess ja schon mal angesehen und kann da vielleicht mehr zu sagen. Mir hats gereicht als ich gelesen habe, da muss ich irgendeinen zusätzlichen Key bei Siemens anfragen um das überhaupt einsatzfähig zu bekommen.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
das TIA-Openess hatten wir uns mal angeschaut, war nicht so der Bringer. Geringer Funktionsumfang, schlecht dokumentiert und mit jeder TIA Version Änderungen...

Aber nochmal zum "Testaufbau". Ich meinte das irgendwie anders.

Also meine Idee, bzw. was wir so ähnlich auch mal gemacht haben:

- der SPS-Baustein, welcher automatisiert getestet werden soll, läuft in der originalen SPS. die Ein/Ausgänge werden auf nen nichtoptimierten DB verschaltet
- nen PC mit ner Testsoftware, welche mittels libnodave mit der SPS kommuniziert, beschreibt die Eingänge nacheinander mit den verschiedenen Kombinationsmöglichkeiten und liest die Ausgänge dazu aus.
- in der Testsoftware ist ein "Sollverhalten" des Bausteins hinterlegt, welches mit dem tatsächlichen Verhalten verglichen wird.
- ich denke, es ist einfacher, die Testsoftware (nicht den SPS-Baustein) auf nem PC laufen zu lassen, als ihn mit in die SPS zu packen...

Gruß.
 
das TIA-Openess hatten wir uns mal angeschaut, war nicht so der Bringer. Geringer Funktionsumfang, schlecht dokumentiert und mit jeder TIA Version Änderungen...
Was heißt geringer Funktionsumfang? Fehlt etwas wichtiges beispielsweise in Vergleich zur Kommandoschnittstelle von Step7?

Wobei die Kommandoschnittstelle auch so ihre Tücken hat. Eine Symboltabelle lässt sich nur in Gänze ex- oder importieren. Zugriff auf einzelne Elemente bekomme ich nicht. Die Symboltabelle kann ich zwar komplett löschen, aber keine neue anlegen. Dazu muss ich dann die komplette SPS-Station lösche und neu anlege.

Also meine Idee, bzw. was wir so ähnlich auch mal gemacht haben:

- der SPS-Baustein, welcher automatisiert getestet werden soll, läuft in der originalen SPS. die Ein/Ausgänge werden auf nen nichtoptimierten DB verschaltet
- nen PC mit ner Testsoftware, welche mittels libnodave mit der SPS kommuniziert, beschreibt die Eingänge nacheinander mit den verschiedenen Kombinationsmöglichkeiten und liest die Ausgänge dazu aus.
- in der Testsoftware ist ein "Sollverhalten" des Bausteins hinterlegt, welches mit dem tatsächlichen Verhalten verglichen wird.
- ich denke, es ist einfacher, die Testsoftware (nicht den SPS-Baustein) auf nem PC laufen zu lassen, als ihn mit in die SPS zu packen...

Kann man so machen. Der Nachteil ist dann aber, dass ich meine Tests nicht mehr in SCL sondern in einer anderen Sprache definieren muss. Oder du schreibst dir für den PC gerade noch einen SCL-Compiler/Interpreter.
Wenn das genutzt werden soll, muss es für den SPS-Programmierer möglichst einfach einzusetzen sein. Wenn man da erst für seinen Test das Visual-Studio o.Ä. anwerfen muss, dann ist selbst mir das schon zu aufwendig.

Ich möchte neben meiner SCL-Quelle eine Testdefinition im Projekt liegen haben, dann habe ich ein externes Tool wo ich sage "guck in das Projekt xy", dann macht es den Rest von selber und zeigt mir nur das Ergebnis des Testlaufs. Das wäre zumindest optimal. Und ich glaube bei Step7 v5 ist das möglich, ich habe das Grundprinzip zu 3/4 fertig.
Bei meiner Variante kannst du deinen Testbaustein z.B. auch in Schleifen aufrufen, z.B. 1000 mal aufrufen und dann das Ergebnis prüfen.
 
OK verstehe.
Zum TIA Openess die Kollegen wollten irgendwas mit Panelbildern machen. Ich glaube aus TIA Bildern Objekte extrahieren. Das ging aber damals nicht (richtig). Zumindest waren die vom Openess nicht begeistert.
Gruss.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Noch ein paar Sachen zum Thema:

Für Tests über ein externes Tool bietet sich die OPC-UA Schnittstelle (ab V14) an. Diese bietet einen voll-symbolischen Zugriff auf alle Datenbereiche und ist daher auch robust gegen Änderungen an den Schnittstellen. Koppel-DBs sind hier nicht notwendig.

S7-PLCSIM ADVANCED hat eine eigene API die viele Möglichkeiten bietet die gut für Unittests geeignet wären. Allerdings ist dies eine ganz eigene Sache, die dann auch nur mit PLCSIM funktioniert und gar nicht mehr in einer realen CPU. Eine weitere Einschränkung ist der Preis von 2500,- pro simulierter CPU. Das dürfte dazu führen, dass die notwendige Lizenz nicht auf jedem System zur Verfügung steht, auf der die Tests gefahren werden sollen.

Für Tests innerhalb der SPS spricht, dass dann für FB und FB-Test die gleichen Schnittstellen und Programmiersprachen verwendet werden können. Das vermeidet Reibungsverluste. Googletest verwendet auch C++ für die Testskripte.

Was hier im Thread schon erwähnt wurde: Die größte Besonderheit von Unittests in der SPS ist, dass das zeitliche Verhalten nicht nur berücksichtigt werden muss sondern, auch eine entscheidende Rolle spielt. Hier bieten sind in der SPS lange Schrittketten (in SCL formuliert) an, bei denen über die Schrittlaufzeit leicht das Zeitverhalten bewertet werden kann. In der Hochsprache müsste man sich hier erst mal eine passende Umgebung zusammenstellen.

Was in der SPS schlechter funktioniert ist das Protokollieren. Hier gibt es eigentlich nur einen großen Array-DB, der mit den Protokolleinträgen gefüllt wird. Das ist leider nicht besonders flexibel und recht stark limitiert. Besser wäre die Möglichkeit, ein Logfile auf die SD-Karte schreiben zu können. Das ist mir aber bisher noch nicht gelungen. Zwar gibt es über Rezepturen die Möglichkeit, Daten auf die SD-Karte zu schreiben. Dieses System ist aber so limitiert, dass man es nicht so einfach für Logfiles missbrauchen kann. Oder hat hier jemand eine Idee?


Grüsse!
 
Ich packe die Ergebnisse in ein großes String-Array die ich dann anschließend auslese. Bei vielen Tests ist das natürlich begrenzt, vor allem wenn eine echte CPU verwendet wird. Bei Plcsim kann ich ja einfach entsprechend viele und große DBs anlegen. 1000 Strings mit 100 Zeichen Länge sollten wohl ausreichen.

Auf Plcsim-Advanced will ich mich nicht festlegen, wenn dann muss es ohne gehen. Mit dem normalen Plcsim und Nettoplcsim ist das bei TIA aber auch möglich, mit nicht-optimierten DBs als Schnittstelle.

Ich habe so ein automatischen Test bei Step7 v5 lauffähig. So habe ich es gemacht:
- Eine SCL-Quelldatei mit dem zu prüfenden Programm liegt vor
- Eine Quelldatei mit der Testbeschreibung liegt vor
- Mein Programm liest diese Dateien ein, erstellt einen Test-FB aus der Testbeschreibung
- Es wird eine SCL-Quelle erzeugt mit allen notwendigen Dateien (DBs, FCs, FBs)
- Die SQL-Quelle wird über die Kommandoschnittstelle in ein Step7 Projekt geladen und übersetzt
- Über die Kommandoschnittstelle wird das komplette Programm in eine erreichbare SPS geladen (diese muss vorhanden oder Plcsim gestartet sein) und die SPS gestartet
- Über z.Zt. Prosim lese ich aus der SPS (Plcsim) aus ob der Test abgeschlossen ist, und lese dann die Ergebnis-Strings aus und gebe diese aus. Das würde auch über Netzwerk und einer echten SPS gehen, die Plcsim Anbindung in Python habe ich aber schon fertig gehabt.

Erweiterung wäre, die Quellen direkt aus einem auswählbaren Step7-Projekt auszulesen. Über eine entsprechende Kennzeichnung wie #UT#... ist in einer Quelle dann die Testbeschreibung. Dann muss keine Dateien extern abgelegt und vorgehalten werden.

Ich weiß nur nicht ob ich da bei Step7 noch viel Arbeit investieren soll. Die Zukunft ist ja (leider) zwangsweise TIA, und da wissen wir noch nichtmal ob das da ohne weitere kostenpflichtige Tools überhaupt möglich ist.

Vor allem wie lange dauert da so ein Test, wenn ich alleine denke wie lange der Start von TIA-Plcsim dauert.
Die Kommandoschnittstelle bei v5 ist auch langsam (vor allem der Start), aber mein Tool braucht für einen Testlauf bis zum Ergebnis (d.h. Quelle bauen, übersetzen, laden, Ergebnis auslesen) ca. 25 Sekunden. Das ist noch im Rahmen.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Gerade erste gesehen: Nettoplcsim gibt es in einer ganz aktuellen Version mit Unterstützung für TIA v14 und PLCSIM für TIA!

Ich hatte befürchtet, dass Siemens bei TIA die Schnittstellen erst mal wieder unbrauchbar macht und damit eigentlich gar nicht mehr mit Nettoplcsim gerechnet...
 
Ich hatte befürchtet, dass Siemens bei TIA die Schnittstellen erst mal wieder unbrauchbar macht und damit eigentlich gar nicht mehr mit Nettoplcsim gerechnet...
Nettoplcsim nutzt die gleiche (interne) Schnittstelle über die auch eine HMI-Simulation mit Plcsim kommuniziert. Also solange Siemens das nicht ändert wird es auch noch funktionieren. Im Zuge der Einführung von Plcsim-Advanced wurde an der Schnittstellen-dll zwar rumgefummelt, aber es funktioniert noch.
 
Zurück
Oben