  The reuse of code fragments by copying and pasting is widely practiced in
software development and results in code clones. Cloning is considered an
anti-pattern as it negatively affects program correctness and increases
maintenance efforts. Programmable Logic Controller (PLC) software is no
exception in the code clone discussion as reuse in development and maintenance
is frequently achieved through copy, paste, and modification. Even though the
presence of code clones may not necessary be a problem per se, it is important
to detect, track and manage clones as the software system evolves.
Unfortunately, tool support for clone detection and management is not commonly
available for PLC software systems or limited to generic tools with a reduced
set of features. In this paper, we investigate code clones in a real-world PLC
software system based on IEC 61131-3 Structured Text and C/C++. We extended a
widely used tool for clone detection with normalization support. Furthermore,
we evaluated the different types and natures of code clones in the studied
system and their relevance for refactoring. Results shed light on the
applicability and usefulness of clone detection in the context of industrial
automation systems and it demonstrates the benefit of adapting detection and
management tools for IEC 611313-3 languages.
