Controller Program Synthesis for Industrial Machines
In this thesis, a new synthesis algorithm for industrial controller programs is presented. Verification and synthesis are the two basic approaches to guarantee that a system is correct. While verification requires the programmer to provide both the specification and the implementation, synthesis automatically transforms the specification into an implementation that is correct by construction. The presented approach includes a new specification language that is geared towards usability in an industrial set-up. Specifications consist of two parts: a generic description of the machine components that is reused for different programs, and a description of the production goals that is specific to each program. The behaviour of the machine components is described by timed automata, while the production goals are captured by safety and bounded liveness properties. The advantage of this approach is that the description of the goals, and thus of the behaviour of the overall system, is decoupled from the technical details of the machine components. This results in a high degree of re-usability, adaptivity, and maintainability. The specification of the machine components can be reused for different programs, and a reconfiguration of the machine no longer requires a time-consuming re-implementation. The synthesis problem is solved by finding a memory-less strategy in a safety game. A winning strategy is transformed into an intermediate controller program, which controls the machine such that the production aims are met. The intermediate program is improved in several optimisation steps before it is cross-compiled for a machine controller. The approach is illustrated with a prototype implementation that includes a crosscompiler for IEC 1131-3 assembler code. The implementation has been applied in several case studies using the Siemens S7-300 programmable logic controller, which is the current industrial standard.