Welcome to AutoCore
What Is AutoCore?
AutoCore is an industrial automation platform that runs on standard PC hardware. If you have used TwinCAT, Codesys, or acontis, you can think of AutoCore as a modern alternative that replaces proprietary IDEs and runtimes with open tools and standard programming languages.
With AutoCore you can:
- Write control programs in Rust that execute in a deterministic, real-time loop (1kHz - 4kHz or faster).
- Connect to field devices via EtherCAT and Modbus TCP, with the same kind of cyclic I/O exchange you are familiar with from TwinCAT.
- Build web-based HMIs using React and TypeScript instead of proprietary visualization tools.
- Deploy and monitor using a simple command-line tool (
acctl) that works over the network.
AutoCore runs on Linux. Your development machine can be either an Ubuntu desktop or a Windows 11 Pro machine using WSL2 (Windows Subsystem for Linux).
How AutoCore Compares to Traditional PLCs
If you are coming from a TwinCAT or Codesys background, this table will help you map familiar concepts:
| TwinCAT / Codesys | AutoCore | Notes |
|---|---|---|
| TwinCAT XAE (Visual Studio) | VS Code + Rust + acctl | You write code in any editor; acctl handles build and deploy |
| PLC Runtime | autocore-server | The server process that manages the control loop, I/O, and communication |
| PLC Program (ST/FBD/LD) | control/src/program.rs | Your control logic, written in Rust |
| Global Variable List (GVL) | project.json variables + gm.rs | Variables are declared in JSON; a Rust struct is auto-generated |
| I/O Configuration (XAE) | project.json modules section | EtherCAT slaves, Modbus devices, etc. are configured in JSON |
| EtherCAT Master | autocore-ethercat module | Runs as a separate process; maps I/O into shared memory |
| Modbus TCP Client | autocore-modbus module | Same pattern — separate process, shared memory I/O |
| TwinCAT HMI / Visualization | www/ directory (React app) | Web-based HMI accessible from any browser |
| ADS Protocol | WebSocket JSON API | All monitoring and HMI communication uses WebSockets |
| TcSysManager | acctl CLI | Project creation, deployment, status, log streaming |
| Scan cycle / task cycle | Tick signal | Server-generated timing signal, configurable in microseconds |
Key Concepts
Before you begin, here are the terms you will encounter throughout this manual:
- autocore-server: The main process that manages everything — shared memory, the tick signal, communication, modules, and the web interface.
- Control program: Your Rust application that runs the real-time control logic. It is a separate process from the server, synchronized via shared memory.
- acctl: The command-line tool you use to create projects, deploy code, monitor logs, and manage the server.
- project.json: The single configuration file that defines your entire automation project — variables, hardware modules, cycle time, and more.
- Global Memory (GM): A shared memory region that all processes (control program, EtherCAT driver, Modbus driver, etc.) can read from and write to with zero-copy performance.
- Tick: A periodic timing signal generated by the server. Your control program executes one cycle per tick.
- Module: An external process (EtherCAT master, Modbus client, camera driver, etc.) that connects to the server and exchanges data through shared memory and IPC.
- Variable: A named piece of data in global memory. Variables have a type (e.g.,
u16,bool,f32), a direction (input, output, command, status, internal), and optionally a link to hardware I/O. - FQDN (Fully Qualified Domain Name): The address of any resource in the system, using dot-separated segments. For example,
gm.motor_speedaddresses themotor_speedvariable, andethercat.drive_0.rxpdo_1.controlwordaddresses a specific EtherCAT PDO entry.