IOBusMonitor is a small Windows desktop utility for querying, logging, and visualising field‑bus data from Modbus TCP / Modbus RTU devices and Siemens S7 PLCs.
The application is designed to be compiled and run as a single executable without external services or complex deployment steps.
| Topic | Detail |
|---|---|
| Target OS | Windows 10/11 (x64) |
| UI Framework | WPF (.NET Framework 4.8, C# 7.3) |
| Storage | Local SQLite databases (one file per day) |
| Protocols | Modbus TCP, Modbus RTU, Siemens S7 (S7‑200/300/400/1200/1500, LOGO 0BA8) |
| License | MIT |
The executable maintains two working folders next to itself:
Settings/Settings.db # devices, points, application options
Data/Data_YYYYMMDD.db # daily measurement archive (SQLite)
No external installer is required—copy the folder to any workstation, double‑click IOBusMonitor.exe, and begin polling.
- Live dashboard – realtime list of the most recent values per point.
- History view – ad‑hoc line charts from the daily SQLite archives.
- In‑app administration – create/edit devices, points, and measurements without editing JSON or XML.
- Self‑contained data – all numeric samples are written to SQLite; you can analyse them later with Python, Excel, etc.
- Protocol plug‑ins – new buses can be supported by adding one C# reader class that returns a
PointViewModel.
- Clone or download the repository and open IOBusMonitor.sln in Visual Studio 2019 (or newer).
- Press F5 to build and launch in Debug mode.
- On first run the program creates the default
Settings/Settings.dband an emptyDatafolder. - Use the Administration menu to add a device → point → measurement chain.
- Click the green Start button (▶︎) to begin polling.
Tip – If you do not have hardware available, call
TestDataGenerator.GenerateTestData()once (e.g. from the Immediate Window). The method writes a dummyData_YYYYMMDD.dbwith random values so you can explore the UI.
IOBusMonitor.sln # solution file
├─ IOBusMonitor # WPF views, windows, XAML pages
├─ IOBusMonitorLib # protocol readers, view‑models, storage, helpers
└─ ShortcutTool # cmd helper
IOBusMonitor.exe
Settings/Settings.db # persistent configuration & definitions
Data/ # rolling SQLite archives (one per day)
Logs/ # optional diagnostic output
- Define models (if required) for the new protocol’s devices/points.
- Implement a reader with a single public method that returns
PointViewModel:public Task<PointViewModel> LoadPointDataAsync(MyPoint point) { /* … */ }
- Register the reader in
TimerServiceso it is called during the scan loop. - Duplicate the CRUD XAML pages for devices/points/measurements and adjust the SQL queries.
All other layers—storage, live dashboard, history charts—are protocol‑agnostic and work automatically once you populate PointViewModel instances.
# from repository root
msbuild IOBusMonitor.sln -p:Configuration=ReleaseCopy the resulting IOBusMonitor\bin\Release folder to the target machine. No installer or registry keys are required.
Pull requests are welcome.
Before submitting, please ensure:
- The solution builds with C# 7.3 / .NET Framework 4.8.
- New code uses the existing logging (
LogService) instead ofConsole.WriteLine. - UI strings are written in English; localisation can be discussed separately.
Areas that could use help:
- Additional protocol readers (OPC UA, BACnet, MQTT ⟶ SQL bridge).
- UX refinements, dark theme, high‑DPI tweaks.
- Performance profiling when polling thousands of points.
This project is licensed under the MIT License – see LICENSE for details.


