A configurable industrial automation framework for PLC-controlled machinery, motion systems, and custom manufacturing equipment.
WeaMachine is a runtime-configurable machine control platform built with C++, Qt, and QML. It combines PLC integration, servo motion control, step-based automation, recipe management, and operator-friendly machine configuration into a unified application.
Instead of hardcoding machine behavior inside PLC ladder logic or application source code, machine workflows can be configured directly through the user interface.
- Overview
- Screenshots
- Core Features
- Runtime PLC Configuration
- Motion Control
- Step-Based Automation Engine
- Recipe Management
- Machine Monitoring
- Manual Mode
- Automatic Mode
- Architecture
- Technology Stack
- Design Goals
- Project Status
WeaMachine was designed to provide a flexible runtime automation layer for industrial machines.
The platform enables machine builders and integrators to configure machine behavior without modifying application code or PLC programs.
Typical use cases include:
- Servo-driven machinery
- Packaging systems
- Blow molding machines
- Pick & place systems
- Conveyor systems
- Assembly equipment
- Custom manufacturing machines
Configure machine inputs and outputs at runtime.
Supported features:
- Dynamic I/O registration
- Input/output aliasing
- Normally Open (NO) logic
- Normally Closed (NC) logic
- Runtime signal inversion
- Input filtering
- Output filtering
- Persistent configuration storage
Each signal can be extended with configurable timing behavior.
Available options:
- On Delay
- Off Delay
- Blink Interval
- Runtime activation control
This allows machine behavior to be modified without changing PLC logic.
PLC addresses are useful for engineers but often difficult for operators.
WeaMachine allows assigning human-readable aliases to every signal.
Example:
X0 -> Emergency Stop
X1 -> Front Door Sensor
X2 -> Product Detector
Y0 -> Main Valve
Y1 -> Alarm Buzzer
Y2 -> Pneumatic Cylinder
The operator interface can display aliases instead of raw PLC addresses.
Integrated servo motion subsystem with support for:
- Servo ON/OFF
- Homing
- Absolute positioning
- Relative positioning
- Jog control
- Speed configuration
- Acceleration control
- Deceleration control
- Torque monitoring
- Position feedback
The system supports multi-axis industrial motion workflows.
The automation engine is based on configurable execution steps.
Each step may contain:
Step Name
Supported logic operators:
AND
OR
XOR
Example:
Emergency Stop = OFF
AND
Safety Door = CLOSED
AND
Product Sensor = ON
X Axis Position
Y Axis Position
Speed
Acceleration
Deceleration
Set Coil
Reset Coil
Activate Output
Deactivate Output
Next Step Delay = 200 ms
The platform supports multiple machine recipes.
Each recipe can contain:
- Step sequences
- Motion parameters
- Servo positions
- Coil configurations
- Timing values
- Machine-specific settings
Operators can switch between machine profiles without modifying application code.
Real-time monitoring interface providing:
- PLC input status
- PLC output status
- Servo speed
- Servo torque
- Position feedback
- Encoder values
- Alarm information
- Runtime machine state
Manual mode is intended for:
- Machine commissioning
- Maintenance
- Diagnostics
- Troubleshooting
- Hardware verification
Capabilities include:
- Manual output control
- Servo jogging
- Homing operations
- Position testing
- Runtime parameter adjustment
Automatic mode executes predefined machine workflows.
Features include:
- Step execution
- Conditional transitions
- Motion synchronization
- Output control
- Delay management
- Recipe execution
┌─────────────────────────┐
│ Qt/QML UI │
└────────────┬────────────┘
│
┌────────────▼────────────┐
│ Automation Engine │
│ Step Sequencer │
└───────┬────────┬────────┘
│ │
▼ ▼
PLC Layer Motion Layer
(Modbus) (Servos)
- C++17
- Qt
- QML
- OpenGL
- Modbus RTU
- Delta PLC Integration
- Delta Servo Integration
- Multi-threaded Architecture
- Runtime Configurability
- Operator-Friendly Configuration
- Minimal PLC Modifications
- Flexible Machine Integration
- Reusable Automation Components
- Industrial Reliability
🚧 Active Development
The project is currently under active development.
Planned improvements include:
- Advanced motion profiles
- Extended condition system
- Configuration import/export
- Additional diagnostics
- Enhanced visualization
- Machine simulation mode
Parsa Pournabi (Wearily)
Industrial Automation & Software Engineering
C++ • Qt/QML • OpenGL • PLC Integration • Motion Control
-
Manual GroupBoxes should be enable only when its servo ON and Manual mode is ON.
-
Complete Record Table and model.
-
Add 'General' Setting Page with these sections: [ Axes Configuration, Step Configuration ]
-
Step Configuration:
- Always ON Output while Step is Running ( it takes a list of outputs )
- Step Restart Method [ Manually, Reset & Home, Reset and continue ]
- Encoder Properties:
- Tolerance value for X/Y Axes
- Number of the retries
- Number of Delay for Checking
- Mode when encoder error has occured --> [ Emergency and Stop after Delay of checking is completed and has error, Retry again (send GotoPos and continue until the retry counts is reached) ]
-
Remove unnecessary components from General Setting page.
-
Add Keyboard Shortcut for Manual running.
-
Add Keyboard shortcut for Record Table.
-
Add Step Starting from a specific step.
-
Fix Manual Scaling for Position
-
Fix step refreshing to avoid operator mistakes.
-
Add Notification and Alarm Sound (Low priority)
-
Connect these new UIs with Backend
-
Optimize UI
- ADD RecordTable model logic.
- ADD Alarm for when a specific Step cannot be execute or is freezing.
- ADD Counter register for when Step flow is done.
- Make Homing Smarter
- Auto Connect of TCP/Serial
- Fix Sometimes Servo will freeze at specific Step (Because of Servo Encoder error and we also have an encoder checking for reaching position. you can fix this by using it an option into the general setting.
- Servo OFF at Start
- Replace 3rdParty with Git submodules.
- cleanup and code refactor.





