1
2025-05-13 23:27:42 +02:00
2025-04-03 11:42:53 +02:00
2025-05-20 22:32:06 +02:00
2025-05-27 13:52:54 +02:00
2025-05-06 10:19:42 +02:00
2025-05-27 13:52:54 +02:00
2025-05-20 22:32:06 +02:00
2025-05-06 19:55:27 +02:00
2025-04-11 18:45:40 +02:00
2025-03-17 14:04:42 +01:00
2025-05-06 09:22:37 +02:00
2025-03-24 17:24:43 +01:00
2025-05-13 23:27:45 +02:00

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 for ethercat-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-analyzer extension for VSCode
  • Set your interface in server/src/ethercat/init.rs like en10
  • Connect a Beckhoff EK1100 to your interface
  • run cd server && cargo run to start the server (localhost:3001)

Frontend

  • nodejs and npm installed
  • run cd electron && npm i && npm run start to start the frontend

Machines

Machine Type Version Release Date Description Change to Previous Version Vendor ID Machine ID Implemented Docs
Winder V1 ???