acctl - AutoCore Control Tool
A command-line tool for managing AutoCore projects, control programs, and deployments.
Installation
From crates.io (when published)
From source
Quick Start
# 1. List available projects on a server
# 2. Clone a project to start working on it
# 3. Enter the project directory
# 4. Edit your control program
# (edit control/src/program.rs)
# 5. Build, deploy, and start
# 6. Watch the logs
Commands
clone
Clone a project from an AutoCore server into a new local directory.
# List available projects
# Clone the currently active project
# Clone a specific project by name
# Clone with a custom directory name
# Clone from a server on a different port
This creates a local directory with:
control/- Rust control program sourceproject.json- Project configurationwww/- Web interface files (if present)acctl.toml- Local configuration pointing to the server
The autocore-std library is pulled from crates.io automatically when you build.
set-target
Set or update the target server for the current directory.
# Set target server IP
# Set target with custom port
Configuration is saved to ./acctl.toml (local) or ~/.acctl.toml (global).
Local config takes precedence.
push
Push files to the server.
push control
Build and deploy the control program.
# Build, upload, and start the control program
# Build and upload without starting
# Upload without rebuilding (use existing binary)
# Upload the entire control source directory (instead of binary)
push project
Push project.json configuration changes.
# Push project.json
# Push and restart the server to apply changes
push www
Push web interface files.
# Push www/dist/ (production build)
# Push full www/ directory (including source)
pull
Download the current project from the server.
# Download as zip file
# Download and extract
upload
Upload a file to the project directory on the server. This is useful for uploading support files like IODD device descriptors, ESI files, or other resources that modules need.
# Upload a file to the default location (lib/<filename>)
# Upload to a specific path relative to the project directory
# Upload an IODD zip file
Security notes:
- The destination path must be relative (no leading
/) - Path traversal (
..) is not allowed - Files are uploaded to paths relative to the project directory on the server
Common use case - IODD file for IO-Link configuration:
# 1. Upload the IODD file to the server
# 2. Configure an EtherCAT slot to use it
The lib/ directory is included when you clone or pull a project, so IODD files and other support files are preserved across development machines.
status
Show server and control program status.
Example output:
Control Program Status:
Status: Running (PID: 12345)
Projects Directory: /srv/autocore/projects
Available Projects:
- my_project (valid)
- test_project (valid)
logs
View control program logs.
# Show recent logs
# Stream logs continuously (Ctrl+C to stop)
control
Manage the control program lifecycle.
# Start the control program
# Stop the control program
# Restart the control program
# Check status
codegen
Regenerate the gm.rs (global memory mappings) file from the server.
This downloads the latest generated code based on the project configuration.
cmd
Send a command to the server, similar to the AutoCore console. This provides direct access to all server endpoints.
# Basic syntax: acctl cmd <domain.command> [args...]
# Get EtherCAT status
# List devices configured in the project
# Configure an EtherCAT device (with arguments)
# Control program management
# Read/write variables
Arguments use the same syntax as the AutoCore console:
--name valueor-n valuefor named arguments- Positional arguments are collected into
actionif single, or_argsarray if multiple - Values are auto-parsed as numbers, booleans, or JSON when possible
switch
Switch the server to a different project.
# Switch to another project
# Switch and restart the server
Configuration
acctl looks for configuration in two places (in order of precedence):
./acctl.toml- Local project configuration~/.acctl.toml- Global user configuration
Configuration File Format
[]
= "192.168.1.100"
= 11969
[]
= true
Command-Line Overrides
You can override configuration on any command:
# Override host
# Override port
# Override both
Typical Workflows
Starting a New Project
# See what's available
# Clone the project you want to work on
# Start working
Development Cycle
# Edit control/src/program.rs
# Deploy and test
# Watch logs for issues
# Make changes, repeat
Deploying Web Interface Updates
# Build your web interface
# Deploy to server
Working with Multiple Servers
Each project directory can have its own acctl.toml pointing to a different server:
# Project A points to server 1
# [server]
# host = "192.168.1.100"
# Project B points to server 2
# [server]
# host = "192.168.1.101"
Updating Project Configuration
# Edit project.json locally
# Push changes and restart
Configuring IO-Link Devices with IODD Files
IO-Link devices require IODD (IO Device Description) files for proper configuration. Here's how to set up an IO-Link device on a modular EtherCAT I/O hub:
# 1. Download the IODD file from the device manufacturer's website
# (Usually a .xml file or .zip containing the XML)
# 2. Upload the IODD file to the server's lib directory
# 3. List available slots on your modular device
# 4. Import the IODD to configure a specific slot
# 5. Verify the configuration
# 6. Push the updated project and restart to apply changes
The IODD import automatically:
- Detects the IO-Link device's process data size
- Selects the appropriate IO-Link module type (with smart fallback if exact match unavailable)
- Configures vendor ID, device ID, and communication parameters
- Updates the PDO mappings in project.json
Module Selection
The ImportIodd command automatically selects a module based on the device's process data size. If the ideal module isn't available for the slot, it automatically finds the smallest available module that can accommodate the required IO sizes.
You can also manually override the module selection:
# Override automatic module selection (e.g., use 0x0808 instead of auto-selected 0x0108)
This is useful when:
- The auto-selected module isn't supported by your specific slot
- You know from another tool (like TwinCAT) which module works best
- You need a larger module than the minimum required for your device
Troubleshooting
Connection refused
- Verify the server is running:
systemctl status autocore_server - Check the IP address and port
- Ensure firewall allows connections on port 11969
Build failures
- Ensure Rust toolchain is installed:
rustup show - Check that the target architecture matches the server
- For cross-compilation, install the appropriate target:
Permission denied on server
- Check that the autocore_server has write permissions to the project directory
- Verify the control binary has execute permissions after upload
License
Proprietary - Licensed AutoCore Users Only
This software is licensed exclusively for use with validly licensed AutoCore Server installations. You may not use acctl to connect to or manage systems that are not licensed for AutoCore.
See the LICENSE file for complete terms.
For licensing inquiries: support@automateddesign.com