Hello, ![]()
I am working with PLCnext controllers using PLCnext Engineer (Structured Text only, no high-level languages). I manage multiple workshops, each containing several production lines. One project can run on up to 9 lines within the same workshop. At any given time, only some lines may be active (for example 4 of 9 today, 8 of 9 tomorrow).
I use Git (self-hosted GitLab) for version control. I have:
- Project source files
- Hash of the compiled project
- Hash of the project deployed on each controller
The complexity:
- The same project branch may be deployed to 3 PLCs
- Another branch of the same project may be deployed to 5 other PLCs
- Different workshops may run different branches simultaneously
- Controllers go online/offline dynamically
Main challenges:
-
How to structure Git branches for such a deployment model?
-
How to automate deployment and traceability when different PLCs run different branches?
-
What is the recommended way to identify exactly which project version is deployed on a specific PLC when managing a large fleet?
-
How to reliably link:
- Git commit
- Compiled binary
- Hash/version on PLC
- Physical controller/line/workshop
Since I am using ST inside PLCnext Engineer, not C++ or other high-level components, I do not have typical software versioning mechanisms available inside the runtime.
I am ready to implement a custom microservice (in any programming language) to handle deployment, version tracking, controller registry, or other orchestration tasks if that is considered a proper architectural approach.
What is the recommended architecture for:
- Version tagging
- Branch strategy
- Deployment automation
- Version visibility directly on the PLC
- Fleet-level traceability
How do experienced PLCnext users handle large-scale controller fleets with multiple parallel branches in production?
Any architectural guidance or real-world practice examples would be appreciated.