Concept
More and more machine and system functions are implemented in software. To allow for this, nowadays teams of several programmers are involved in creating the control code and subsequently the commissioning of these machines and systems. This poses several challenges, especially during commissioning:
- In many cases, access to Source Control Systems is not guaranteed.
- The latest (active) software version on the machine may differ from the local version.
- If changes that are "downloaded" to the target system turn out to be incorrect, it is not possible to undo the "download".
TwinCAT Multiuser was developed to meet these challenges. This is a "local" Source Control System on the target system, the handling of which has been fully integrated into the existing workflow. This means that no in-depth knowledge of the exact functionality of Source Control Systems is required to use TwinCAT Multiuser.
TwinCAT Multiuser is available from version TC3.1.4024.0. In this version, TwinCAT Multiuser mainly facilitates collaboration of several programmers, with each programmer working on one PLC project. If several PLC projects are integrated in a TwinCAT project, the multiuser functionality can be enabled separately for each project. In this case, separate repositories are automatically created for each of these projects, both locally and on the target system.
Since version 3.1.4024.4.0, complete TwinCAT projects can also be managed with the multiuser function. It can now be selected in the settings whether complete TwinCAT projects or only individual PLC projects are managed by the multiuser function.
The following diagram illustrates the concept:

The target system is selected as the Source Control Server during commissioning, since a connection to the target system is required in any case in order to load a control program onto the target system. This avoids the need for additional infrastructure.
Another objective of multiuser integration is to avoid the need for specific Source Control knowledge. The Source Control functionality is integrated in the standard workflow. For example, the current project status is automatically transferred to the target system during a download or online change of a project, without the need to trigger the transfer separately. The history is also created automatically. All changes are recorded, including user name, timestamp and change. If required, a query for a comment can be set for each change transfer.
To ensure that the history created in this way continues to be available after commissioning, a Source Control System was integrated, which permits several repositories and also transfers the full history into all repositories. After successful commissioning, it is thus possible to transfer the active project status of the machine/system to a "development repository", including traceability of all steps performed during commissioning. The latter is done with the on-board resources of the Source Control System.
The Source Control System on which the multiuser functionality is based is Git.
Notice | |
The TwinCAT 3 Multiuser function uses Git Git itself is separate and is installed optionally. If a standard Git installation is available on a computer, this can be used for the TwinCAT 3 Multiuser function (see Reference server settings). The TwinCAT 3 Installer allows customers who do not have a Git installation on the computer to install a MinGit that is only intended for use from TwinCAT 3 Multiuser and therefore is not entered in the Path environment variable. |
Differentiation from the Source Control Integration of TwinCAT:
The general interfacing of TwinCAT with Source Control Systems remains unaffected by the multiuser functionality and can take place independently of it. By using the standard interface of the Microsoft Visual Studio Shell integrated in TwinCAT, a large number of Source Control Systems are available for this purpose. In addition, all aspects of a TwinCAT project can be handled by this integration.
The TwinCAT multiuser functionality is based on the Git standard. As already described, the aim of this functionality is to enable a team of several programmers to collaborate on a control program during the commissioning phase, without the need for a special infrastructure or special knowledge of Source Control Systems on the part of the programmers.
Although it is therefore possible to use different Source Control Systems for both functionalities, the full capabilities can only be achieved if both functionalities are based on Git. This refers to the transfer of the history during commissioning to the "main" Source Control System.