This post documents my Professional Practice carried out at the Institute of Information Engineering, Automation, and Mathematics. I developed a cross-platform HMI for PLCs over Modbus TCP, learned modern .NET tooling, and validated the result in teaching/lab conditions.

Summary

I completed my Professional Practice at Institute of Information Engineering, Automation, and Mathematics, STU FCHPT. The aim was to contribute a useful software tool for laboratory teaching while gaining experience with industrial communication, modern UI frameworks, version control, and engineering workflows.

Why this project

I wanted to build a simple, usable HMI that lowers the barrier to running lab experiments. While MATLAB/Python scripts are powerful, they’re often not user-friendly—especially for students or visitors who don’t yet know the process and just need to observe, start, and log. A small GUI with clear trends and profile-based setup lets them focus on the plant, not the tooling.

As an added value, I integrated an intuitive CSV logger so data collection is effortless and consistent. The logs can be used immediately for data analysis, model identification, and reporting (MATLAB/Python/Excel), making the tool helpful both for teaching and for early-stage research.

Application and Architecture

I built a cross-platform HMI in .NET MAUI that runs natively on Windows and Android from a single codebase. This choice keeps development and maintenance simple: one set of views (XAML) and view-models (MVVM) ships to multiple platforms without duplicating logic, while still giving access to native performance, device APIs, and installers. Compared with a web app, MAUI avoids browser/device quirks and gives tighter control over networking and charts; compared with WPF, it isn’t Windows-only. For a small institute team, “one codebase → multiple platforms” minimizes testing effort and speeds up future features.

What is .NET Maui?. What is Maui? | by Robby Boney | Short Bits | Medium

The app uses profiles to describe PLCs, variables (units, register mapping, writability), and graph groups, so onboarding a new PLC typically takes about five minutes—no code changes, just configuration.
It presents live trends and KPIs with consistent colors and rolling chart windows, so the UI stays smooth and readable while showing only the most recent, relevant data.
Writes are safe by design: only variables explicitly marked as writable in the profile can be changed, reducing the chance of operator error.
A built-in CSV logger exports time-stamped data, making it trivial to continue in MATLAB, Python, or Excel for analysis, model identification, or reports.
The layout supports multiple PLCs in one session; each PLC has its own graphs and key values, so you can compare units or switch focus without reconfiguring the app.


Process & methods

For development, I built the UI with MVVM in .NET MAUI (XAML views + C# view-models), handled PLC communication over Modbus TCP using NModbus, and rendered live trends with LiveCharts. Configuration was kept in JSON profiles, which made lab setups repeatable without code changes.

MVC vs MVVM- A complete guide with comparison

For source control, I used Git/GitHub in a public repository. Day-to-day work took place on the 0.21 branch, with small, issue-referenced commits.

What I learned

  • Architecture & patterns: MVVM, clean separation of UI and I/O, profile-driven design
  • Industrial communication: Modbus TCP, float↔2×WORD mapping, connection lifecycle
  • Async correctness: serialize I/O, cancellation tokens, safe teardown (Dispose)
  • Data visualization: rolling time-series charts; performance over full rebinds
  • Tooling & teamwork: Git/GitHub workflow, readable commits, reproducible configs

Security & limits

Modbus TCP has no encryption/authentication. I ran the app on trusted lab networks. For production, we would isolate the network or switch to OPC UA and add role-based access in the UI.

What’s next & future possibilities

• SQLite history + CSV export; alarms & thresholds
• Cloud solution
• Web application & Automated Start-Up Sequence to steady state for specific process

Project logistics

• Repository: GitHub
• Current working branch: 0.21
• Contact: adam.fedor@stuba.sk


0 Comments

Leave a Reply

Avatar placeholder