--- title: "GALILEO Integration (TMS ↔ EasyWMS)" type: architecture sources: - sources/archives/Presentation_GALILEO.md - sources/archives/Communication_WMS_GALILEO.md - sources/archives/Communication_Easy_Galileo.md - sources/archives/Bases_fonctionnement_robotique_EasyWMS.md - sources/archives/Documents_utiles.md related: - concepts/stations.md - concepts/mechanical-elements.md - concepts/task.md - concepts/location.md - operations/galileo-simulation.md - operations/galileo-troubleshooting.md - operations/robotics-project-lifecycle.md - modules/automation-dashboard.md last_compiled: "2026-04-17" --- # GALILEO Integration (TMS ↔ EasyWMS) ## Overview **GALILEO** is the Mecalux **Transport Management System (TMS)** — the automation layer that physically controls conveyors, stacker cranes (TK / Miniload), shuttles, AGVs, lifts and all other mechanized equipment. EasyWMS holds all the business intelligence (stock, strategies, orders); **GALILEO has no predictive vision** — it requests work from EasyWMS and executes it. Two parallel automation controllers exist in the Mecalux ecosystem: - **GALILEO** — classic PLC-driven TMS, deployed on production sites - **EasyS** — 3D simulation environment that speaks the same protocol as GALILEO; used for development, demos and pre-site validation (see [Galileo Simulation](../operations/galileo-simulation.md)) Both dialogue with EasyWMS through the **EasyWMS Gateway** Windows service — a translator between GALILEO's low-level frame protocol and the EasyWMS API. Reference documents: - [Control_Communications_Interface_EN_GB.pdf](https://msscc.mecalux.com/documentation/Automation/master/ES/Documents/GalileoAWS/Control_Communications_Interface_EN_GB.pdf) — all station types, event types, PIE flags - [EasyWMSGateway_ControlInterface_EN.pdf](https://msscc.mecalux.com/documentation/documentation/master/ES/docs_downloads/services/docs/EasyWMSGateway_ControlInterface_EN.pdf) — frame structure (low-level) - [Stations index](https://msscc.mecalux.com/documentation/documentation/master/EN/areas/layout/stations/index.md) — station-specific behaviour - [IdentErrorType](https://msscc.mecalux.com/documentation/Development/master/ES/apis/easywms/Domain/IdentErrorType.md) — rejection reason codes ## EasyWMS Gateway Service Windows service that runs on the WMS server and brokers all communication with GALILEO / EasyS. - **Download**: https://msscc.mecalux.com/documentation/documentation/master/EN/docs_downloads/services/gateway.md - **Install path**: `C:\Program Files\Mecalux\EasyWMS Gateway 2015` - **Config file**: `C:\ProgramData\Mecalux\EasyWMS Gateway 2015\Config\MainObject.config` - **Log file**: `C:\ProgramData\Mecalux\EasyWMS Gateway 2015\Logs\AllLog.log` - **Service name**: `EasyWMSGateway2015` - **Port used by GALILEO/EasyS**: TCP 3000 (must be open inbound/outbound on the WMS host) Config keys (MainObject.config): - `tenantCode` = tenant of the target WMS - `TokenUser` = authentication (prefer over `ClientUser`) - Passwords must be encoded via `PasswordEncrypt.exe` in the install folder Installation and bring-up procedure: see [Galileo Simulation & Test Setup](../operations/galileo-simulation.md). ## Tasks vs Movements EasyWMS expresses transport work at two granularities: - **Task** = end-to-end transfer order for a container (e.g. `PIE → Miniload Location A-12-3`) - **Movement** = single conveyor-to-conveyor hop inside a task; a single task typically spawns **N movements** (a `PIE → Miniload` task commonly resolves to 4 movements) A movement can only be generated if a **route** exists in EasyS between its origin station and the next station. If no path exists, EasyWMS generates a **reject task** toward the configured reject station. ### Task lifecycle (robotics view) | Status | Description | |--------|-------------| | **En attente** / Pending | Not yet transmitted to GALILEO, no tracking | | **Générée** / Generated | Next movement generated but not yet transmitted | | **En cours** / In progress | Tracking picked up by GALILEO; container placed on virtual location **Mov** | | **Terminée** / Completed | Container reached the final task destination | | **Annulée** / Cancelled | Cancelled before reaching destination | **Mov** is the virtual system location used to hold a container while it's physically travelling between stations. See [Location](../concepts/location.md) and [Task](../concepts/task.md). ## Stations & Routes (from GALILEO's perspective) Stations are the start/end points of every movement. A station is uniquely identified by the couple **(StationType, StationNumber)** — this pair must be identical in EasyS and in GALILEO; any drift causes `EndErrorCode=4` errors (see Troubleshooting). For the full reference of station codes (FR/ES/EN), acronyms (ALM/TK/PK/PIE/PS/ME/MS/PKE/CME/ET/MU/REAC/RECH/…) and roles, see [Mechanical Elements](../concepts/mechanical-elements.md) and [Stations & Routes](../concepts/stations.md). ### Route types (EasyS) | Type | Description | |------|-------------| | **Galileo** | Movement that requires calls to the Gateway (physical conveyor moves) | | **Manual** | Movement that requires an operator action in response to a WMS task | | **Virtual** | Automatic, instantaneous virtual stock movement (e.g. output → consolidation zone) | ### Routes that MUST report "full" to EasyWMS GALILEO must be able to report these routes as **full** (status `3`) so the WMS can recirculate / pause: | Source type | Destination type | |-------------|------------------| | CME | TE (or ME) | | PKE | PK | | ET | PS | Sometimes `ETPSxx → PSxx` must be reported to sequence shipping. ### Route status values | Value | Meaning | |-------|---------| | `0` | No communication | | `1` | Available / in service | | `2` | Electromechanical fault | | `3` | Full (and in service) | ## Three Communication Types (initiated by GALILEO) **All communication is GALILEO → Gateway → EasyWMS.** The WMS never pushes unsolicited commands; it only responds. Three message types drive the workflow plus two status update streams. ### 1. Event (log → `Event`) Declaration of container presence at a meaningful point. Primary sources: - **PIE**: reports a new container with label read + gauge data — EasyWMS decides conformity - **TK**: announces presence - **Picking confirmation**: operator has finished a picking task **PIE event fields:** | Field | Description | |-------|-------------| | Code | Container barcode read | | Weight | Weighed value | | Dimensions | Physical measurements | | Container type | PLC Container Type code (starts at 1, defined in PLC Types menu) | | Height type | PLC Height Type code (starts at 1) | | Flags | Bitwise gauge check result | | Event type | Event-specific code (e.g. `9` = reject) | PIE flag values (bitwise): | Flag | Meaning | |------|---------| | `65536` | Container OK — no error | | `256` | Barcode error | | `512` | Recovered container | | `1024` / `66560` | Correct + empty | | `3` | Holes + studs detected | | `4` | Overheight | | `8` – `64` | Overhangs | | `128` | Weight excess | **Two PIE processes depending on container origin:** 1. **New container** — GALILEO reads the label and sends type/height; EasyWMS verifies conformity and decides destination 2. **Known container returning** — EasyWMS pre-sends a movement toward PIE; GALILEO verifies types match, without re-reading the label **PIE insert modes (set from EasyWMS → Control → Stations):** - **Normal (known containers)** — reject anything the ASN doesn't recognize - **Empty container creation** — create supports from the data GALILEO sends (code, weight, height type…) - **Pallet pile creation** — operator activates "insert pallet piles" on the GALILEO console; GALILEO sends events with `Transport Number = 10`; item code + qty per pile must be defined in EasyWMS **Workflow triggered:** `Galileo_PIEEventHandler_PR` To enable instance tracking on PIE events: activate the process `__GalileoPIE` in ApplicationService. ### 2. Search (log → `Search`) GALILEO asks EasyWMS "what should I do with this container?" or "give me a next task". Triggered when: 1. A container arrives at a station and GALILEO needs the next hop 2. A TK/Miniload is idle and polls in a loop (hundreds per second) **Search content:** tracking number, container code, station (type + number). **Search response content:** destination station info. Capacity semantics differ by station type: - **Conveyors / TK**: capacity = number of simultaneous trackings the station can manage - **PK and PS**: capacity = max containers on the station **plus** all containers in movement toward it **Station capacity vs route capacity vs WMS logical capacity** (worked example): | Layer | Typical value for a PK | |-------|------------------------| | Physical station PK | 1 container on the conveyor | | Route to PK | 4 containers in transit on intermediate conveyors | | WMS PK capacity | 15 — physical + transit + every task whose destination is PK | **Response state codes:** | Code | Meaning | Used by | |------|---------|---------| | `83` | **S** = Servicio (in service) | Conveyors | | `70` | **F** = Fallo (fault) | TK | | `69` | **E** = Error | TK | **X actual / Y actual** — only meaningful for TK; the current crane position is sent so EasyWMS can optimise task ordering. **Workflow triggered:** `Galileo_SearchCreatedEventHandler_PR`. Routed by station type inside the process. **Command used to transmit the order to GALILEO:** `GalileoMovTrackingCreateCommand` (preferred over `GalileoMovTrackingCreateChangingTargetCommand`). Effects: - Gateway translates the command into a GALILEO frame - Movement transitions from **Generated** → **In progress** - Container is virtually relocated to **Mov** > ⚠️ GALILEO can emit dozens of Search per second per station. **Do not enable workflow instance tracking on Search events carelessly** — scope it to the process and keep trace TTL very short, otherwise the trace tables explode. ### 3. End (log → `End0`, `End1`, …) Signals that GALILEO has finished the current movement. EasyWMS advances to the next movement of the task (or closes the task). **End error codes:** | Code | Meaning | Consequence | |------|---------|-------------| | `0` | Movement completed | Next movement generated | | `1` | Deposit error | Error mask + relocation / reject | | `2` | Extraction error | Error mask + relocation / reject | | `4` | Inconsistent order | WMS/GALILEO configuration mismatch — see troubleshooting | | `7` | Gauge error | Relocation / reject | **Workflow triggered:** `Galileo_EndCreatedEventHandler_PR` ## Station and Route Status Updates Sent **every 1–3 seconds** by GALILEO (or immediately on change of state / load). ### Station update (log → `Update station`) | Field | Meaning | |-------|---------| | StationType | Station type code | | StationNumber | Station number | | Status | `0` = unavailable (fault, manual mode, safety); `1` = available | | Loaded | `0` = occupied; `1` = free — **note the inversion** | | Capacity | Max containers | | CurrentCount | Current GALILEO trackings on the station | | Aisle | Aisle number associated with the station | > ⚠️ The Loaded semantic is inverted between sources: historical GALILEO docs use `1 = free` / `0 = loaded`, while Comprendre_logs_Gateway lists the same values (`1` = libre, `0` = chargé). Always cross-check the log with the current Gateway protocol version. **Function exposed by GALILEO:** ``` SetStationStatus(Type, Numéro, Status, Présence, Capacité, Occupation, Allée) ``` ### Route update (log → `Update route`) | Field | Meaning | |-------|---------| | StationTypeSource / StationNumberSource | Origin station | | StationTypeDestination / StationNumberDestination | Destination station | | Status | `0`/`1`/`2`/`3` — see Route status values above | | CurrentCount | Trackings currently between the two stations | **Function exposed by GALILEO:** ``` SetRouteStatus(TypeOrigine, NuméroOrigine, TypeDestination, NuméroDestination, Etat) ``` ## End-to-End Example — Container Arriving at PIE ``` 1. PIE reads label + gauges → Event (Galileo_PIEEventHandler_PR) then Search (Galileo_SearchCreatedEventHandler_PR) 2. EasyWMS sends next movement → container placed on Mov virtual location movement status → In progress 3. Container reaches next station → End (Galileo_EndCreatedEventHandler_PR) 4. If on a conveyor → new Search If on a TK inbound table (TE) → TK polls Search in loop 5. If shipping conveyor (PS) → container leaves the installation If picking conveyor (PK) → operator confirms pick → Event → Search ``` ## Sequential Machine Model (Grafcet) Every automation element is a sequential machine (grafcet) with discrete steps and transitions. Typical conveyor sequence: 1. Rest — ready to receive 2. Request output from upstream conveyor 3. Verify conditions (no presence, no tracking…) 4. Copy tracking + physical transfer + (if station) notify WMS 5. Release upstream conveyor 6. Request output toward downstream conveyor 7. Return to rest This model is visible from the GALILEO SCADA: double-click a machine → **Graph** tab shows the current grafcet step; **Variables** shows live PLC memory. ## Application Dictionary Entry Points Core workflows: | Workflow | Trigger | Purpose | |----------|---------|---------| | `Galileo_PIEEventHandler_PR` | PIE event | Inbound identification + decision | | `Galileo_SearchCreatedEventHandler_PR` | Search request | Next-hop routing and task delivery | | `Galileo_EndCreatedEventHandler_PR` | End notification | Advance movement, handle error codes | Core commands: - `GalileoMovTrackingCreateCommand` — push an order frame to GALILEO (preferred) - `GalileoMovTrackingCreateChangingTargetCommand` — variant that changes target mid-transport (avoid unless strictly necessary) See [Application Dictionary](application-dictionary.md) for naming conventions and extension points. ## SCADA & Tracking The GALILEO SCADA (visualization tool) displays machines, trackings and faults in real time. - **Default credentials**: `mecalux / robmec` - **Tracking editor** (double-click a machine): - *Show tracking* — the order in execution - *End order* — force-tell EasyWMS that the pallet has reached destination (manual override) - *Machine state* — what GALILEO is currently reporting to EasyWMS - **Advanced tab (unlock icon + password):** - *Variables* — live variables; booleans can be forced - *Graph* — current grafcet step - **Edit buttons:** - *Edit tracking* — origin, destination, height, type… (click "Edit" first) - *Delete tracking* — remove tracking from the machine - *Reset* — jump the grafcet to a specific step Manual tracking edits are a last-resort diagnostic / recovery tool. ## Related - [Mechanical Elements (acronyms, conveyors, station codes)](../concepts/mechanical-elements.md) - [Stations & Routes](../concepts/stations.md) — full station catalogue from the WMS side - [Galileo Simulation & Test Setup](../operations/galileo-simulation.md) - [Galileo Troubleshooting (Logs, Faults)](../operations/galileo-troubleshooting.md) - [Robotics Project Lifecycle](../operations/robotics-project-lifecycle.md) - [Automation Dashboard](../modules/automation-dashboard.md) — fault monitoring UI - [Task](../concepts/task.md) · [Location](../concepts/location.md)