<!DOCTYPE article PUBLIC "-//NLM//DTD JATS (Z39.96) Journal Archiving and Interchange DTD v1.0 20120330//EN" "JATS-archivearticle1.dtd">
<article xmlns:xlink="http://www.w3.org/1999/xlink">
  <front>
    <journal-meta>
      <journal-title-group>
        <journal-title>Joint Proceedings of IS-EUD</journal-title>
      </journal-title-group>
    </journal-meta>
    <article-meta>
      <title-group>
        <article-title>Assembly Workers as PLC Programmers: A Low-Code Development Platform for Engine Manufacturing</article-title>
      </title-group>
      <contrib-group>
        <contrib contrib-type="author">
          <string-name>Bernhard Schenkenfelder</string-name>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Raphael Zeferer</string-name>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Christian Salomon</string-name>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Mario Winterer</string-name>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <aff id="aff0">
          <label>0</label>
          <institution>Software Competence Center Hagenberg GmbH</institution>
          ,
          <addr-line>Softwarepark 32a, 4232 Hagenberg</addr-line>
          ,
          <country country="AT">Austria</country>
        </aff>
      </contrib-group>
      <pub-date>
        <year>2025</year>
      </pub-date>
      <volume>10</volume>
      <fpage>16</fpage>
      <lpage>18</lpage>
      <abstract>
        <p>A Low-Code Development Platform (LCDP) empowers domain experts without software engineering training to address their software requirements themselves. Techniques such as visual programming and programming by natural language allow them to create software in a way that is more natural to how they think about their problems, thereby leveraging the low-code paradigm rather than traditional textual code. In this paper, we present an LCDP based on the visual programming paradigm and the considerations that guided its design. The LCDP allows assembly workers to generate Programmable Logic Controller (PLC) code for the assembly devices they operate. Feedback from this industry-academia collaboration suggests that the platform can help to reduce the need for professional PLC programmers and allow them to focus on other important issues.</p>
      </abstract>
      <kwd-group>
        <kwd>eol&gt;Low-Code Development Platform (LCDP)</kwd>
        <kwd>Programmable Logic Controller (PLC)</kwd>
        <kwd>Structured Control Language (SCL)</kwd>
        <kwd>Assembly Workers</kwd>
        <kwd>Assembly Devices</kwd>
      </kwd-group>
    </article-meta>
  </front>
  <body>
    <sec id="sec-1">
      <title>1. Introduction</title>
      <p>
        By raising the level of abstraction beyond code, a Low-Code Development Platform (LCDP) empowers
domain experts without software engineering training to address their software requirements
themselves, bridging the gap between the high demand for software and the low supply of professional
developers [
        <xref ref-type="bibr" rid="ref1">1</xref>
        ] and increasing productivity and reducing complexity [
        <xref ref-type="bibr" rid="ref2">2</xref>
        ]. Techniques such as visual
programming and programming by natural language enable users to create software in a way that is
more natural to how they think about their problems, as opposed to traditional textual code [
        <xref ref-type="bibr" rid="ref3">3</xref>
        ].
      </p>
    </sec>
    <sec id="sec-2">
      <title>2. Industry Context</title>
      <p>
        This paper reports on an industry-academia collaboration centered on PLC-Flow, an LCDP designed and
intended for assembly workers. The industry partner is a manufacturer of engines for the recreational
vehicle industry with a turnover of 1 billion euros and 1,700 employees. Some assembly line stations
require custom-built devices that are controlled by Programmable Logic Controllers (PLCs). However,
the shortage of PLC software developers poses a challenge. One possible solution, which served as the
starting point for the industry-academia collaboration, was to empower assembly workers to program
these devices directly using a low-code approach. This issue was first identified and described in [
        <xref ref-type="bibr" rid="ref4">4</xref>
        ].
PLC-Flow allows assembly workers to generate PLC code for approximately 50 devices per year. The
industry partner provided the following use case descriptions to outline the scope of representative
assembly devices and their corresponding PLC code.
2.1. Use Case 1
Use case 1 consists of four steps and is part of an assembly line, so the assembly device is controlled by
another system. The start of the process is determined by the higher-level control of this assembly line
and the completion must be reported back. The first step is to place the part into the assembly device, it
is finished when two sensors send a positive signal to the PLC. Next, more parts are attached until the
rising edge of a sensor signal is detected. Then, to bolt on the attached parts, outputs are set positive to
activate a power screwdriver until an input gives a positive signal. When the part is removed from the
assembly device, two sensors give a negative signal. The result of the cycle must be signaled to the
higher-level control and also indicated by lights.
2.2. Use Case 2
Use case 2 has 10 steps but no higher-level control. First, the part must be placed in the assembly device,
which is completed when a sensor gives a positive signal. The next step is to fix the part. To do this, an
output must be set to a positive state. The step is completed when two inputs are positive and one is
negative. The next four steps are to check the part. These steps are completed when the sensors provide
the required signals and are indicated by a green light. Screws are then inserted and tightened. To do
this, three outputs are set to a positive state to activate a power screwdriver. When an input signals that
this step is complete, the cycle continues with the removal of the part. This step is completed when an
input signals a negative state. The next step is to place the part on a tray. A positive signal indicates the
end of this step. After that, more screws are inserted and tightened as before. Then, an output is set to
a positive state to signal the end of a production cycle.
      </p>
    </sec>
    <sec id="sec-3">
      <title>3. PLC-Flow</title>
      <sec id="sec-3-1">
        <title>3.1. Design</title>
        <p>This chapter presents the history of PLC-Flow, from early design considerations to an initial digital
prototype to the platform in its current state.</p>
        <p>
          The overall idea was to design the platform to reflect the mental model of its users. A mental model is a
person’s internal representation of reality [
          <xref ref-type="bibr" rid="ref5">5</xref>
          ]. This ensures that the platform can be used intuitively, is
easy to learn, and optimally supports the way users work. The design process began with an extensive
literature review and research phase by the academic partner. The goal was to provide an overview of
low-code approaches in order to discuss their respective applicability for the industrial use cases and to
select a basis for the implementation of the prototype. Therefore, it was necessary to categorize the
approaches.
        </p>
      </sec>
      <sec id="sec-3-2">
        <title>3.2. Prototype</title>
        <p>The first versions of the digital prototype were built using Next.js 1 and React2 to discuss the main
building blocks of the platform and how to interact with them. Figure 1 (left) shows a list of components
(sensors and actuators), including their addresses, process steps defined as components and their
respective state.</p>
      </sec>
      <sec id="sec-3-3">
        <title>3.3. Architecture</title>
        <p>PLC-FLow was built using Angular v173 with Angular Material4. To generate Structured Control
Language (SCL) code, a visitor was implemented based on ANTLR45. A grammar was defined for
ANTLR4 to generate the lexer, parser, and the visitor base class. This visitor is included in PLC-Flow as
a service.</p>
        <p>The User Interface (UI) has a column-based layout, guiding the user to work from left to right to
complete a process. The first main column lists all available components. As shown in Figure 1 (right),
columns can be expanded and collapsed. When the column is expanded, the user can add, edit, or
remove components. The second column enables the user to define the program, which is divided
into four parts: (i) the initial position of the assembly device, (ii) the reset action, (iii) the steps of
the assembly process, and (iv) the actions to be executed when a process completes successfully or
unsuccessfully. On the left side of PLC-Flow, there are two additional columns to import a CAD drawing
of the assembly device, to load other projects, and to define whether the assembly device is part of an
an assembly line. On the right, the provided export functionality enables the user to save the program
as an archive. The archive contains the generated SCL code and a flow file, which represents the project
in the defined grammar. This column also contains a preview of the generated SCL code.</p>
      </sec>
    </sec>
    <sec id="sec-4">
      <title>4. Demonstration</title>
      <p>This section demonstrates how a user can create a program using PLC-Flow6, a process that is divided
into eight steps.</p>
      <sec id="sec-4-1">
        <title>4.1. Import</title>
      </sec>
      <sec id="sec-4-2">
        <title>4.2. Settings</title>
        <p>First, the user can import the flow file of an existing project, which extracts all the components and
process steps. The user can also import a CAD drawing of the assembly device, as shown in Figure 2
(left).</p>
        <p>In the second step, the user can define if the assembly device is used in an assembly line or before. If it
is used in an assembly line, the user can define the inputs and outputs of this line. For the assembly
3https://angular.dev/
4https://material.angular.io/
5https://www.antlr.org/
6A public version of PLC-Flow is available online at https://plcflow.scch.at.
line case, an input signaling when to start a process and two outputs signaling when the process is
completed successfully or not must be configured, as illustrated in Figure 2 (right).</p>
      </sec>
      <sec id="sec-4-3">
        <title>4.3. Components</title>
        <p>Next, the components need to be assigned a name and multiple inputs and outputs, each with its own
name and logical address, as shown in Figure 3 (left). The logical address refers to the physical address
used on the PLC.</p>
      </sec>
      <sec id="sec-4-4">
        <title>4.4. Initial Position</title>
        <p>The next step is to define the initial position of the assembly device by selecting the initial states
of the required inputs from drop-down menus. In the first drop-down menu, the component can be
selected by its name. The second drop-down menu defines the state that corresponds to the initial
position. Examples of these drop-down menus can be seen in Figure 3 (right). Each of these conditions
is connected by a logical conjunction in the generated SCL code.
4.5. Reset</p>
      </sec>
      <sec id="sec-4-5">
        <title>4.6. Process Steps</title>
        <p>The user can then define how to reset the assembly device by adding a reset gate and an action. A gate
defines the conditions that must be met for the device to be reset. An action defines the state of a PLC
output upon reset. These definitions are again made using drop-down menus (see Figure 3, right).
Then, the steps to be executed for each production cycle can be defined. Each step is indexed, starting
with 1, and consists of an action that defines what happens in that step, a description of the step, and a
gate. The gate defines the conditions that must be fulfilled for the step to be successfully completed and
for the next step to begin. Steps can be rearranged using drag and drop, and expanded and collapsed.
When collapsed, only the index and the description of a step are displayed, as shown in Figure 1 (right).
Otherwise, the action, description and gate can be edited (see Figure 3, right).</p>
      </sec>
      <sec id="sec-4-6">
        <title>4.7. Result</title>
        <p>The final step in defining a complete process in PLC-Flow is to define what happens at the end of each
cycle by setting the actions to be executed after a successful or unsuccessful production cycle.</p>
      </sec>
    </sec>
    <sec id="sec-5">
      <title>5. Conclusions</title>
      <p>The user can preview the generated SCL code in the export area of PLC-Flow. In addition, the user can
name and download an archive containing the SCL code and a flow file, as shown in Figure 4 (right).
This paper reports on an industry-academia collaboration centered on PLC-Flow, an LCDP designed
and intended for assembly workers to generate Programmable Logic Controller (PLC) code.</p>
      <p>Throughout the design process, reviews with assembly workers–who will be the future users–have
confirmed that the implementation aligns with the original goals. This includes the level of abstraction
(see Section 3.1) and PLC-Flow’s overall usability.</p>
    </sec>
    <sec id="sec-6">
      <title>Acknowledgments</title>
      <p>The research reported in this paper has been funded by the Federal Ministry for Innovation, Mobility
and Infrastructure (BMIMI), the Federal Ministry for Economy, Energy and Tourism (BMWET), and the
State of Upper Austria in the frame of the SCCH competence center INTEGRATE (FFG grant no. 892418)
in the COMET - Competence Centers for Excellent Technologies Programme managed by Austrian
Research Promotion Agency FFG.</p>
    </sec>
    <sec id="sec-7">
      <title>Declaration on Generative AI</title>
      <p>During the preparation of this work, the author used DeepL Write and DeepL Translate in order to: Text
Translation, Improve writing style, and Grammar and spelling check. After using these tools/services,
the author reviewed and edited the content as needed and takes full responsibility for the publication’s
content.</p>
    </sec>
  </body>
  <back>
    <ref-list>
      <ref id="ref1">
        <mixed-citation>
          [1]
          <string-name>
            <given-names>R. D.</given-names>
            <surname>Caballar</surname>
          </string-name>
          ,
          <article-title>Programming without code: The rise of no-code software development -</article-title>
          ieee spectrum,
          <year>2020</year>
          . URL: https://spectrum.ieee.
          <article-title>org/ programming-without-code-no-code-software-development.</article-title>
        </mixed-citation>
      </ref>
      <ref id="ref2">
        <mixed-citation>
          [2]
          <string-name>
            <given-names>J.</given-names>
            <surname>Cabot</surname>
          </string-name>
          ,
          <article-title>Positioning of the low-code movement within the field of model-driven engineering</article-title>
          ,
          <source>in: Proceedings of the 23rd ACM/IEEE International Conference on Model Driven Engineering Languages and Systems: Companion Proceedings, ACM, Virtual Event Canada</source>
          ,
          <year>2020</year>
          , p.
          <fpage>1</fpage>
          -
          <lpage>3</lpage>
          . URL: https://dl.acm.org/doi/10.1145/3417990.3420210. doi:
          <volume>10</volume>
          .1145/3417990.3420210.
        </mixed-citation>
      </ref>
      <ref id="ref3">
        <mixed-citation>
          [3]
          <string-name>
            <given-names>M.</given-names>
            <surname>Hirzel</surname>
          </string-name>
          ,
          <article-title>Low-code programming models</article-title>
          ,
          <source>Communications of the ACM</source>
          <volume>66</volume>
          (
          <year>2023</year>
          )
          <fpage>76</fpage>
          -
          <lpage>85</lpage>
          . doi:
          <volume>10</volume>
          . 1145/3587691.
        </mixed-citation>
      </ref>
      <ref id="ref4">
        <mixed-citation>
          [4]
          <string-name>
            <given-names>B.</given-names>
            <surname>Schenkenfelder</surname>
          </string-name>
          ,
          <string-name>
            <given-names>C.</given-names>
            <surname>Salomon</surname>
          </string-name>
          , G. Buchgeher,
          <string-name>
            <given-names>R.</given-names>
            <surname>Schossleitner</surname>
          </string-name>
          ,
          <string-name>
            <given-names>C.</given-names>
            <surname>Kerl</surname>
          </string-name>
          ,
          <article-title>The potential of low-code development in the manufacturing industry</article-title>
          ,
          <source>in: 2023 IEEE 28th International Conference on Emerging Technologies and Factory Automation (ETFA)</source>
          , IEEE, Sinaia, Romania,
          <year>2023</year>
          , p.
          <fpage>1</fpage>
          -
          <lpage>8</lpage>
          . URL: https://ieeexplore.ieee.org/document/10275503/. doi:
          <volume>10</volume>
          .1109/ETFA54631.
          <year>2023</year>
          .
          <volume>10275503</volume>
          .
        </mixed-citation>
      </ref>
      <ref id="ref5">
        <mixed-citation>
          [5]
          <string-name>
            <given-names>D.</given-names>
            <surname>Gentner</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A. L.</given-names>
            <surname>Stevens</surname>
          </string-name>
          , Mental models, Psychology Press, Hove, East Sussex, England,
          <year>2014</year>
          .
        </mixed-citation>
      </ref>
    </ref-list>
  </back>
</article>