QiTech Control
QiTech Control is an industrial control panel software for the next generation of QiTech recycling machines built on top of Beckhoff Automation hardware.
Repo Structure
Frontend
/electron: Frontend code for the control software built with React and Electron.
Backend
/server: Glue between Beckhoff and Electron. Implements machine logic./ethercat-hal: Hardware abstraction layer for Beckhoff (and possibly other EtherCat) devices and protocols./ethercat-hal-derive: Macros forethercat-hal/control-core: Core control logic for the server.
Operating System
/nixos: Custom Linux with realtime kernel & preconfigured for touchscreens.
Other
/docs: Documentation for the project.
Technology Choices
Backend
To interface with Beckhoff and other EtherCAT devices we need an EtherCAY master stoftware. Possibilities are PySOEM (Python), SOEM (C) and Ethercrab (Rust). For realtime operation only C and Rust are suitable. We chose Rust because of safety and confidence in the written code.
SocketIO was chosen for performant event driven communication from the backend to the server. But we still use REST with axum for the communication thet benefits from the request/response model.
We use Smol for EtherCAT IO in the control loop for it's performance and Tokio for server IO because of it's ecosystem and maturity.
Frontend
We could combine the code of the frontend and backend using Doxius but it lacks good Linux support. We chose Electron with React for it's maturity and ecosystem. For the UI we use Shadcn components and Tailwind for styling. For routing we use TanStack Router.
Dev Setup
Backend
- Rust stable 1.86^ toolchain (install via rustup)
rust-analyzerextension for VSCode- Set your interface in
server/src/ethercat/init.rslikeen10 - Connect a Beckhoff EK1100 to your interface
- run
cd server && cargo runto start the server (localhost:3001)
Frontend
- nodejs and npm installed
- run
cd electron && npm i && npm run startto start the frontend
Machines
| Machine Type | Version | Release Date | Description | Change to Previous Version | Vendor ID | Machine ID | Implemented | Docs |
|---|---|---|---|---|---|---|---|---|
| Winder | V1 | ??? |
