Skip to main content

Codeklone finden

Voraussetzungen:

  • CODESYS Static Analysis ist installiert.

  • Ein CODESYS-Projekt ist geöffnet. Das Projekt enthält in mindestens zwei Programmierobjekten einen gleichen Codeblock.

  1. Wählen Sie den Befehl Erstellen → Statische Analyse → Klone finden .

    Die Ansicht Ergebnisse Klonsuche öffnet sich.

  2. Klicken Sie auf _san_icon_result.png Ergebnisse.

    In einem Fenster werden die gefundenen Codeklone als Baumansicht dargestellt.

    Wenn es neben identischen Codeklonen auch Codeklone mit Abweichungen gibt, sind diese Kindknoten in der Baumansicht farblich hervorgehoben.

  3. Selektieren Sie in der Baumansicht zwei Codeklone eines Kindknotens und klicken Sie auf die Schaltfläche Selektierte Klone anzeigen.

    Die zwei Programmierobjekte, die diesen duplizierten Code enthalten, werden im Editor geöffnet und im oberen Bereich der Ansicht angezeigt.

    Die identischen Codeklone sind hellgelb markiert und die Codeklone mit Abweichungen, wie hier im Beispiel die Variablennamen ivar3 und ivarx, sind farblich rot hervorgehoben.

    _san_img_example_codeclone.png
  4. Um aus dem identischen Codeklon des Programmierobjekts POU_1 eine Funktion zu erstellen, doppelklicken Sie zunächst in der Baumansicht die Zeile mit dem Codeklon von Objekt POU_1.

    Das Programmierobjekt POU_1 öffnet sich im Editor und im Implementierungsteil sind die vier Zeilen markiert, die den duplizierten Code enthalten.

  5. Wenn Sie im Kontextmenü des markierten Codeblocks den Befehl Funktion extrahieren auswählen, wird der Codeblock aus POU_1 extrahiert und daraus eine neue Methode erstellt. Der Codeblock im Implementierungsteil von POU_1 wird automatisch durch den Aufruf der Methode ersetzt.

    Im zweiten Programmierobjekt müssen Sie das Codeduplikat manuell entfernen und durch den Aufruf der Methode ersetzen.

    Tipp

    In einer späteren Version wird die Funktionalität so erweitert, dass aus beiden Progammierobjekten der duplizierte Codeblock automatisch extrahiert und durch den korrekten Funktionsaufruf ersetzt werden kann.