-
Notifications
You must be signed in to change notification settings - Fork 2
Beckhoff testing
Wiki > The Backend System > IOCs > Motor IOCs > Beckhoff > Beckhoff testing
Note
The beckhoff XAR runtime environment does not support windows 11. This means that if you are on a Windows 11 development PC, you cannot run the beckhoff tests.
Beckhoff XAE (the editor) is supported on Windows 11.
You may need to disable some windows features, such as Hyper-V, Windows Hypervisor Platform etc. For reference, here is a working setup and its features (click to expand)
To revert this run: Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V -All
in an elevated Powershell window.
Beckhoff code can be run as a simulated system on a developer machine by doing the following:
- Clone
BeckhoffTestRunner
usinggit clone --recurse-submodules https://github.com/ISISComputingGroup/BeckhoffTestRunner.git C:\Instrument\Dev\BeckhoffTestRunner\
- Run
settick.bat
with admin privileges (this requires a reboot, but do it after the next step) - Download and install VERSION 4024.11(and no later!) of TwinCAT 3 XAE from
<public_share>\installers
. The XAE is really just a DLL and a Visual Studio plugin. Reboot after installing.TwinCAT 3 XAE If you do not have permission ask IDD. - Run
build.bat
to build thetwinCATAutomationTools
binaries, which then sets up a working simulated PLC. - To run a PLC locally you need a license. Open TwinCAT XAE shell, select "open solution" and open
C:\Instrument\Dev\BeckhoffTestRunner\PLC_solution\solution.sln
Navigate in the solution explorer tosolution -> SYSTEM -> License
- open this and select "7 days trial license". You may now close the XAE Shell. - run
run_tests.bat
in theBeckhoffTestRunner
directory to begin testing. You should notice that your system tray icon turns green which means you are running a simulated PLC and testing against it.
NB the IOC tests do not stop the PLC at the end of the run, however this isn't a problem as the PLC is restarted when the IOC tests start.
When you have finished testing/reviewing a PR, it is best to run unsettick.bat
as admin and reboot - otherwise you will have loads of "time discontinuity detected" messages in IOC logs
manual steps
-
Ensure that you have the following toolbars enabled in the XAE shell (
Tools > Customize...
):TwinCAT PLC
TwinCAT XAE Base
-
Click the
Activate Configuration
button -
TwinCAT will ask you to enter a code to get a trial license. You will need to do this once a week.
-
If prompted if you wish to start the system in
Run Mode
clickOk
. Otherwise start run mode using the button next toActivate Configuration
-
You now have a simulated beckhoff PLC running on your PC. This behaves the same as real hardware and so all development can be done against it. You could now also run an IOC up talking to this local PLC.
-
To see what is happening inside this PLC in more detail, and to change values, you can use the login button
Jenkins
Beckhoff PLC code is being developed by people who do not have CI expertise and have their own repository structures yet we want integration into some form of CI to be as easy as possible. This lent itself to the following structure:
- A
BeckhoffTestRunner
repository that is owned by us and contains the jenkinsfile and other utilities required for CI - Every branch on this repository (apart from master) then pulls a different PLC project down (note each project could be from a different repository or from separate branches on the same repository)
- The jenkinsfile can then do the one or both of the following:
- Build the project (currently assumed to be called
solution.sln
at the top of pulled PLC project) - Run any IOCTestFramework tests (currently assumed to be in a
tests
folder at the top of the pulled PLC project) - these will likely be written by us
- Build the project (currently assumed to be called
This means that the workflow for adding new PLC projects into CI is:
- A PLC developer writes their code (making sure the solution is called
solution.sln
) - They give us a link to the repo and branch that contains the code
- We create a new branch on
BeckhoffTestRunner
and modify it to point at their repo - At this point they have CI for building their code
- We make a decision about whether the code requires any system tests and if so add some into their repository
To actually run tests we use the Beckhoff automation interface
which can do any of the things you can do in the Twincat XAE automatically through DCOM. AC# (Beckhoff do not fully support a Python interface 😢) program (twinCATAutomationTools
) has been written to leverage this interface in the following way to write integration tests for the Beckhoff:
- Jenkins will pull a branch of BeckhoffTestRunner.
-
build.bat
is run to do the following:- Build the
TwincatAutomationTools
solution, twinCATAutomationTools - Use the
twinCATAutomationTools
to import thetest_config
into the generic Twincat Solution and build the PLC code using theautomation interface
. This build will also create a*.tpy
file, which outlines how to connect to the PLC and can be used to configure the IOC itself.
- Build the
- The IOC test framework is started. This will use the
TwinCATAutomationTools
program to run a local simulated PLC. Then startup and test the Beckhoff twincat in the usual way.
This is currently being run on the ndw1926 node on Jenkins. A quirk of using this DCOM interface is that the Jenkins slave must be run as an interactive user and thus not as a service. To do this there is a bat file that should run on startup inside C:\Users\ibexbuilder\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup
.
The current Beckhoff applications that are being run through tcIOC
and the CI pipeline discussed above are:
- dummy_PLC- a PLC that does very little, basically used to test that fundamental tcIOC comms works
- old_ISIS_code - this is the old ISIS prototype motion code that is currently on the CRISP jaws. Hopefully this code can be removed once the jaws are moved on.
-
ESS_base_code (now linked to by
main
of theBeckhoffTestRunner
repository) - this is the collaboration code that we will be using go forward.
MCAG (defunct) - click to expand
This IOC was originally written by ESS. It uses an ASCII protocol over TCP/IP to do the communication and is very specifically designed for motion. There is a simulator which can be run using the following steps:
cd EPICS\support\MCAG_Base_Project\master\epics\simulator
doit.bat
- Start the IOC (host macros needs to be set to 127.0.0.1:5024)
Currently this is only being run on IMAT. It should soon be replaced by the collaboration code. - It has been replaced by the new code, so is now defunct.
This is a weird error that seems to occur sometimes when running a Beckhoff simulator on a dev machine. To stop it you need to do run unsettick.bat
script in tcioc\master
and reboot. NB this should never happen on an instrument machine as they do not run simulated Beckhoffs.