System Tests · Robot Framework · Modbus TCP

Automatisierte Systemtests für einen Anlagenregler mit Robot Framework und Modbus TCP in einer Software-in-the-Loop Umgebung mit 10 Testfällen, vollständig in GitHub Actions CI integriert.

GitHub Repository

Kontext & Motivation

In der Energietechnik müssen Anlagenregler vor jeder Freigabe sorgfältig geprüft werden. Anlauf- und Abschaltvorgänge, Fehlerbehandlung und Leistungssteuerung müssen einwandfrei arbeiten.

Ziel dieses Projekts war es, manuelle Tests schrittweise durch stabile, automatisierte Systemtests auf Basis des Robot Frameworks zu ersetzen und mit Modbus TCP als Kommunikationsschnittstelle, einer SiL-Umgebung als Ersatz für echte HiL-Hardware und vollständiger CI-Integration.

Domäne

Energietechnik, BHKW, dezentrale Energieversorgung

Protokoll

Modbus TCP

Framework

Robot Framework

Umgebung

SiL (Software-in-the-Loop): Python-Simulator als HiL-Ersatz

1- Architektur

Die Testumgebung besteht aus drei Schichten: Robot Framework Tests, Python BHKWLibrary und BHKW Simulator:

BHKW System Test Architecture Three-layer architecture: Robot Framework, BHKWLibrary, BHKW Simulator, GitHub Actions CI Robot Framework tests (.robot) test_start_stop test_fault_handling test_power_regulation keywords BHKWLibrary.py (Python library) connect · send_command · wait_for_state · check_power · inject_fault Modbus TCP :5020 BHKW simulator (Python — SiL) State machine · Modbus TCP server · Physical value simulation IDLE STARTING RUNNING STOPPING IDLE FAULT fault injection → RESET GitHub Actions CI Start simulator · run all tests · upload HTML report 10 Tests 3 suites · smoke + regression HTML report generated

BHKW Zustandsmaschine

IDLE
→ START →
STARTING
RUNNING
→ STOP →
STOPPING
IDLE
RUNNING
→ Fault →
FAULT
→ RESET →
IDLE

Modbus Register Map

RegisterTypAdresseBeschreibung
CommandHolding0x00010=IDLE 1=START 2=STOP 3=RESET
Power SetpointHolding0x0002kW × 10
StateInput0x00010=IDLE 1=STARTING 2=RUNNING 3=STOPPING 4=FAULT
Power OutputInput0x0002kW × 10
TemperatureInput0x0003Celsius × 10
Fault CodeInput0x00040=None 1=Overtemp 2=LowOil 3=GridFault

2- Robot Framework Tests

Start/Stop Tests

*** Test Cases ***
TC01 BHKW starts from IDLE state
    [Tags]    start    smoke
    ${state}=    Read State
    Should Be Equal    ${state}    IDLE
    Send Command    START
    Wait For State    RUNNING    timeout=30
    Check Power Output    min_kw=40    max_kw=60
    Check Temperature    min_temp=75    max_temp=90
    Check No Fault

Fault Handling Tests

*** Test Cases ***
TC04 Fault detected during RUNNING state
    [Tags]    fault    regression
    Send Command    START
    Wait For State    RUNNING    timeout=30
    Inject Fault    fault_code=1
    Wait For State    FAULT    timeout=10
    ${fault}=    Read Fault Code
    Should Not Be Equal As Integers    ${fault}    0

TC06 START command ignored in FAULT state
    [Tags]    fault    negative
    Inject Fault    fault_code=2
    Wait For State    FAULT    timeout=10
    Send Command    START
    Sleep    3
    ${state}=    Read State
    Should Be Equal    ${state}    FAULT

3- Testergebnisse

Robot Framework Report

Robot Framework Report - All tests passed

Alle Tests

Console - 10 tests 10 passed

BHKW Simulator : Start/Stop Sequenz

BHKW Simulator running

Fault Handling : Simulator

BHKW Simulator fault handling
✅ All tests 17/17 Testfälle : Modbus TCP + REST API.
17
Tests gesamt
17
Tests bestanden
4
Test Suites

4- Test Suites

SuiteTestsTagsBeschreibungStatus
test_start_stopTC01–TC03smoke, regressionStart/Stopp Sequenzen und vollständiger Zyklus✅ 3/3
test_fault_handlingTC04–TC06fault, regressionStörungsinjektion, Recovery und negative Tests✅ 3/3
test_power_regulationTC07–TC10power, temperatureLeistungsbereich, Temperaturüberwachung, Stopp✅ 4/4
test_rest_apiTC11–TC17rest, smoke, regression, negativeREST API - Health, Status, Start, Stop, Power, 409✅ 7/7

Tags-basierte Ausführung

# Nur Smoke Tests (schneller Sanity Check)
python -m robot --include smoke --pythonpath tests/keywords tests/

# Alle Regression Tests
python -m robot --include regression --pythonpath tests/keywords tests/

# Alle Tests
python -m robot --pythonpath tests/keywords --outputdir results tests/

5- Zusammenfassung

KomponenteTechnologieStatus
Test FrameworkRobot Framework 7.x
KommunikationsprotokollModbus TCP (pymodbus)
BHKW SimulatorPython — SiL Umgebung
Python LibraryBHKWLibrary.py
ZustandsmaschineIDLE/STARTING/RUNNING/STOPPING/FAULT
Fault InjectionModbus Register direkt
CI/CDGitHub Actions
Test ReportRobot Framework HTML Report

Erweiterung : Kubernetes Deployment

Dieses Projekt wurde um eine containerisierte Deployment-Variante erweitert : der Simulator läuft jetzt auch als Docker-Container auf einem Kubernetes-Cluster (Minikube), mit automatischen Health Checks, Self-Healing und End-to-End-Tests gegen das deployte System.

→ Kubernetes Deployment ansehen