My Portfolio
Works-
Using continuous integration in the development and verification of a new central controller for JET -
XMARTe -
MARTe2-python -
Embedded TDMS Logger -
VeriStand Safety Controls -
XMARTe-runner
-
Using continuous integration in the development and verification of a new central controller for JET
Continuous Integration in JET : Using continuous integration in the development and verification of a new central controller for JETUKAEA
Python, C++Preview : View🚀 Honored to Share My Journey with #MARTe2 and Fusion Control Systems 🚀
Just before the shutdown of JET, I had the privilege of contributing to an experiment focused on calculating and controlling the X-point radiator in the tokamak. The existing control system faced several limitations and couldn’t achieve this complex task.
Our solution? Replacing it with #MARTe2 — bringing in advanced software testing across the full stack, including OS and network layers. Through innovative team development and strong collaboration between our users and developers, we built a highly efficient pipeline that drove incredible results.
This work earned me the honor of speaking at the IAEA 14th Technical Meeting on Control Systems, Data Acquisition, Data Management, and Remote Participation in Fusion Research, and subsequently authoring a paper on the project.
Proud to have been part of this groundbreaking effort in fusion research!#Innovation #Teamwork #Efficiency
-
XMARTe
XMARTe : XMARTeUKAEA
Python, C++Preview : ViewBuilding complex MARTe2 applications often means wrestling with large, text-heavy configuration files that are difficult to read, maintain, and scale. As projects grow, managing these XML-like configurations becomes increasingly tedious and error-prone.
This project introduces a Python-based graphical user interface designed to simplify the entire process.
The tool provides an intuitive environment for creating and managing MARTe2 configurations without needing to manually edit raw text files. It supports all core aspects of MARTe2, including defining services (such as web services), configuring events, and designing states and state transitions. By visualising these components, it becomes much easier to understand and structure complex applications.
A key feature of the tool is its plugin-based architecture, allowing users to extend and customise functionality to suit their specific workflows or project requirements. Whether you're working on small setups or large-scale systems, the interface adapts to your needs.
Overall, this GUI transforms a traditionally cumbersome task into a more efficient, user-friendly experience—helping developers focus on system design rather than configuration syntax.
-
MARTe2-python
MARTe2-python : MARTe2-pythonUKAEA
Python, C++Preview : ViewWorking with MARTe2 configuration files can quickly become complex, particularly when automation or dynamic generation is required. Writing and maintaining large, XML-like structures by hand is not only time-consuming but also difficult to scale and reuse.
MARTe2-python addresses this by providing a fully Pythonic representation of MARTe2 classes, enabling developers to define configurations using clean, structured, and reusable code.
Instead of manually crafting configuration files, users can programmatically build applications using familiar Python constructs. This approach makes it significantly easier to automate configuration generation, enforce consistency, and integrate with existing Python-based tooling and workflows.
MARTe2-python also serves as the foundation for higher-level tools, including GUI-based configuration editors. By abstracting MARTe2 concepts into Python objects, it enables seamless interaction between user interfaces and underlying configurations, bridging the gap between visual design and deployable systems.
Whether used for scripting, automation, or as a backend for graphical tools, MARTe2-python streamlines the development process and brings flexibility and clarity to MARTe2 configuration management.
-
Embedded TDMS Logger
Embedded TDMS Logger : Embedded TDMS LoggerUKAEA
LabVIEWPreview : ViewWhen working with real-time systems in VeriStand, data logging is often a critical requirement—but existing solutions don’t always provide the flexibility, performance, or structure needed for demanding applications. In particular, logging directly on the real-time target with rich metadata and efficient storage formats can be difficult to achieve using standard tools.
The Embedded-TDMS Logger was developed to fill this gap.
Built as an add-on in LabVIEW, it enables high-performance, real-time data logging directly on the target system. By writing data in the TDMS (Technical Data Management Streaming) format, it combines the efficiency of binary storage with a flexible, hierarchical structure. This allows metadata to be defined at the file, group, and channel levels—making datasets far more organised, searchable, and meaningful.
The logger supports both waveform and scalar data, providing a complete solution for real-time applications. Whether capturing high-frequency signals or recording key system parameters, it ensures data is stored reliably and with the context needed for analysis.
Designed to integrate seamlessly into VeriStand environments, the Embedded-TDMS Logger delivers a robust, scalable logging solution—giving developers full control over how and where their data is captured, without compromising on performance or usability.
-
VeriStand Safety Controls
VeriStand Safety Controls : VeriStand Safety ControlsUKAEA
C# WPFPreview : ViewMost users of NI VeriStand see its workspace controls as static interfaces—simple inputs and indicators with limited built-in behaviour. But what if those controls could actively enforce logic, monitor system health, and guide operator actions in real time?
VeriStand Safety Controls demonstrates exactly that.
This project showcases how to create fully interactive controls and indicators within VeriStand, backed by custom logic rather than passive bindings. Built as an add-on, it pushes the platform beyond its typical use case by embedding intelligent behaviour directly into the user interface.
At its core is a watchdog-enabled control that actively monitors communication with the real-time system. If conditions fall outside expected bounds, it can raise alarms and take control of channel values—adding an extra layer of protection where it matters most. Alongside this, other controls implement conditional logic, preventing user actions unless predefined criteria are met. This ensures that critical procedures are followed correctly and reduces the risk of operator error.
What makes this particularly powerful is that it introduces safety-oriented behaviour at the interface level—something not commonly explored within VeriStand environments. By combining real-time monitoring, enforced logic, and intuitive interaction, these controls transform the workspace into an active participant in system safety.
VeriStand Safety Controls opens the door to smarter, safer real-time applications—where the interface doesn’t just display data, but actively helps protect the system and guide its users.
-
XMARTe Runner
XMARTe Runner : XMARTe RunnerUKAEA
Python, C++Preview : ViewDeveloping configurations in MARTe2 is only part of the workflow—being able to quickly validate and simulate those configurations is just as important. However, setting up consistent runtime environments for testing can be time-consuming and error-prone, especially when dealing with dependencies across different systems.
This project introduces a containerised runner designed to seamlessly execute MARTe2 configurations generated from XMARTe directly within the GUI environment.
Built using Docker, the runner provides a fully isolated and reproducible execution environment, ensuring that simulations behave consistently regardless of the host system. Users can launch, test, and iterate on their configurations without needing to manually configure runtime dependencies or worry about environment mismatches.
By integrating directly with the XMARTe GUI, the runner enables a smooth development workflow—moving from configuration design to execution in just a few steps. This tight feedback loop makes it significantly easier to validate logic, test system behaviour, and debug configurations early in the development cycle.
Whether used for rapid prototyping or more comprehensive simulation workflows, the containerised runner removes friction from