00caf78e30e5a6423d5cfda4dddfa607ac2bc6cb
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./stepper-driver: Generic stepper driver for absolute, relative & speed movements with PID controllers./ethercat-hal: Hardware abstraction layer for Beckhoff (and possibly other EtherCat) devices and protocols./ethercat-hal-derive: Macros forethercat-hal/ethercrab: Fork ofethercrabfor ad-hoc changes.
Operating System
/nixos: Custom Linux with realtime kernel & preconfigured for touchscreens.
Other
/docs: Documentation for the project.
Technology Choices
Dev Setup
Machines
More Docs
-
- Example Winder V2
-
Machine Implementation Guide
- Link: How to create a Device
- Link: How to create an Actor
- Link: How to create a Machine
- API (SocketIO + REST)
- Creation/Validation Logic
- Optional/Mandatory Devices
- Validate Devices
- Business Logic
- Link: How to create Machine Abstraction (Like Traverse/Puller/...)
- Forward
actin winder.
-
Electron
- Folder Structure
- Routing with TanStack Router
- Design with Tailwind & Shadcn
-
Interfacing with Electron/Server
- SocketIO
- Rooms & Caching
- Joining leaving rooms
- RoomId
- Our rooms vs native socketIO rooms
- Caching
- Serverside Caching
- Clientside Caching
- Machine Room
- Main Room
- REST
- Machine Mutations
- Write Device Identification
- SocketIO
-
Server
- Control Loop Setup
- Control Loop Thread
- Realtime
- Maindevice
- Group
- Extracting Device Identifications
- Identifying Groups
- Validating Machines
- Run Control Loop
- Control Loop Thread
- Control Loop
- Ethercat TX/RX
- Reading Inputs
- Calling Actors
- Writing Outputs
- Machine/Device Identification
- SubDevice Identity
- Identification design choices
- Machine/Device Identification Values
- Device Identification with EEPROM
- Grouping Devices
- Validating Device Groups to Machines
- How to: Identify a New Device
- Find free EEPROM words
- Get identity values and add them to pattern matching
- Machines
- When to create a new Machine?
- Creating/Validating a Machine
- Validation
- Configuration
- Control Loop Setup
-
Ethercat HAL
- Devices/PDO
- CoE Theory
- Parameters
- PDO Assignment
- PDO Theory
- PDO Objects
- PDO "Primitives"
- Limit
- Tx / Rx Meaning
- Presets
- Mapping
- IO
- How to: Full Device Implementation Guide
- Create Port
- implement IO Device Trait
- Create IO
- Create Tx/RxPDO
- Create PDO Assignment
- Create CoE
- Implement ConfigurableDevice
-
Ethercat Basics
- State Machine
- Network Topology Packets
- Master / Slave
- Terms of Communication
- SDO
- PDO
- Mailbox
- CoE
- Commands
- EEPROM
-
Ethercat HAL
-
Ethercat Devices
- Buscoupler
- Digital Input
- EL2000er
- Digital Output
- EL1000er
- Analog Input
- EL3000er
- Temperature Input
-
Operating System
- Why
- How
Languages
Rust
62.3%
TypeScript
36.1%
Nix
0.9%
Shell
0.4%
CSS
0.2%
