9ce6ae37be
- Em dashes: 1712 remplaces par tirets simples (86 fichiers + _index.md, en-tete section Limagrain conserve) - Checklists: 24 '- [ ]' -> '- ☐' (3 pages operations, plus de todos Obsidian) - Ancres: 33 reparees (slugs GitHub + ancres HTML <a id> reconnues), 1 reciblee (manuel de reten) - related: tenseflow -> tense-flow, pie -> mechanical-elements, group.md retire (doublon shipping) - Registre: compteur global 122 -> 131 pages - Rapport racine _lint_report.md mis a jour (scan v2 + re-scan final: 0 anomalie) - Aucun fichier limagrain/ modifie (cloisonnement)
331 lines
14 KiB
Markdown
331 lines
14 KiB
Markdown
---
|
|
title: "Galileo Simulation & Test Setup (Gateway, EasyS, PIE)"
|
|
type: operation
|
|
sources:
|
|
- sources/archives/Tests_Miniload_Gateway.md
|
|
- sources/archives/Configuration_EasyS.md
|
|
- sources/archives/Configuration_SmartUI.md
|
|
- sources/archives/Plan_tests_stations.md
|
|
related:
|
|
- architecture/galileo-integration.md
|
|
- operations/galileo-troubleshooting.md
|
|
- operations/robotics-project-lifecycle.md
|
|
- operations/vm-installation.md
|
|
- operations/vm-network-routing.md
|
|
- concepts/stations.md
|
|
- concepts/mechanical-elements.md
|
|
- concepts/putaway.md
|
|
last_compiled: "2026-04-17"
|
|
---
|
|
|
|
# Galileo Simulation & Test Setup (Gateway, EasyS, PIE)
|
|
|
|
## Overview
|
|
|
|
EasyS is the 3D simulation front-end that speaks the same protocol as GALILEO. Running EasyS + EasyWMS Gateway on a dev VM lets you reproduce the full robotic flow (PIE → Miniload → PK → PS) without physical hardware. This page covers Gateway install, EasyS simulation configuration, PIE event injection, pick/shipping test flows, and station/route synchronisation procedures.
|
|
|
|
Shared demo environment (Mecalux France):
|
|
- VM **ALL** on server **LYOITSW02** - IP `10.58.10.75`
|
|
- Credentials: `mecalux / mecalux`
|
|
- Warehouse: `WRH_MIXTE` (miniload + conveyor path)
|
|
|
|
See [VM Installation](vm-installation.md) and [VM Network Routing](vm-network-routing.md) for creating a fresh dev VM.
|
|
|
|
## 1. Install the EasyWMS Gateway
|
|
|
|
The Gateway is the Windows service that translates between GALILEO/EasyS frames and the EasyWMS API. Install on the same host as EasyWMS.
|
|
|
|
1. Download: https://msscc.mecalux.com/documentation/documentation/master/EN/docs_downloads/services/gateway.md
|
|
2. Run the installer → select **Gateway** → **Install**
|
|
3. Install path: `C:\Program Files\Mecalux\EasyWMS Gateway 2015`
|
|
|
|
### Configure the Gateway
|
|
|
|
File: `C:\ProgramData\Mecalux\EasyWMS Gateway 2015\Config\MainObject.config`
|
|
|
|
1. Set **tenantCode** = the WMS tenant you want to target
|
|
2. Fill the **TokenUser** connection section (not `ClientUser`)
|
|
3. Passwords must be encrypted - run `PasswordEncrypt.exe` from `C:\Program Files\Mecalux\EasyWMS Gateway 2015`
|
|
4. Start the Windows service **EasyWMSGateway2015**
|
|
|
|
Logs go to `C:\ProgramData\Mecalux\EasyWMS Gateway 2015\Logs\AllLog.log` - see [Galileo Troubleshooting](galileo-troubleshooting.md).
|
|
|
|
## 2. Open port 3000 on the VM
|
|
|
|
EasyS / GALILEO use TCP port 3000 to reach the Gateway. Open inbound (and outbound for some edge cases).
|
|
|
|
**PowerShell:**
|
|
```powershell
|
|
Remove-NetFirewallRule -DisplayName "EasyS Port 3000"
|
|
New-NetFirewallRule -DisplayName "EasyS Port 3000" -Direction Inbound -LocalPort 3000 -Protocol TCP -Action Allow -Profile Any -RemoteAddress Any
|
|
```
|
|
|
|
**GUI fallback:** Windows Defender Firewall → New Rule (Inbound + Outbound) → TCP 3000 → Allow.
|
|
|
|
## 3. EasyS warehouse configuration
|
|
|
|
Automation elements live in the EasyS category **Automatic elements**.
|
|
|
|
### 3.1 Location & container settings
|
|
|
|
For locations and stations that feed an automatic warehouse:
|
|
|
|
- `DeleteEmptyContainers` = **Not Delete**
|
|
- Exception: picking stations (PK) may use `Delete` or `Ask` when operators physically remove empty containers
|
|
- Storage mode = **Only Containers**
|
|
|
|
### 3.2 Rack types
|
|
|
|
Every miniload location must be bound to a **rack type** with the exact dimensions of the physical rack. Each rack type declares which container type(s) it accepts.
|
|
|
|
### 3.3 PLC Types (PIE gauge mapping)
|
|
|
|
At each PIE pass, GALILEO returns:
|
|
|
|
- **PLC Container Type** - derived from width
|
|
- **PLC Height Type** - derived from height
|
|
|
|
Procedure:
|
|
|
|
1. EasyS → **PLC Types** menu
|
|
2. Define each container height value
|
|
3. Bind each container master to its PLC Container Type
|
|
|
|
> ⚠️ On miniloads, container type and height are usually tied. If GALILEO reads `PLCHeightType = 1`, `PLCType` must also be `1`. Make the coupling explicit in the interface document delivered with the project.
|
|
|
|
### 3.4 Automatic aisle (TK / Miniload)
|
|
|
|
To simulate a TK, add an **Automatic Aisle**. The aisle ↔ rack link works like a manual aisle:
|
|
|
|
1. Pick the rack → link it to the miniload/TK station
|
|
2. Double-click the rack to open the location editor
|
|
3. Assign each location its rack type
|
|
|
|
### 3.5 Station types (recap)
|
|
|
|
| Type | Role |
|
|
|------|------|
|
|
| Automatic Aisle | Stacker crane / Miniload |
|
|
| PIE | Entry identification (label + weigh) |
|
|
| Picking (PK) | Picking conveyor |
|
|
| PKE | PK entry control - if full, recirculate |
|
|
| Inbound Table (ME) | Conveyor into the TK/Miniload |
|
|
| Outbound Table (MS) | Conveyor out of the TK/Miniload |
|
|
| CME | TK/Miniload entry control - if full, recirculate |
|
|
| Outbound Post | Exit conveyor (operator can pick the container up) |
|
|
| MP | Preparation table (stock drop after pick) |
|
|
| Transporter | Plain conveyor with no special function |
|
|
|
|
Full catalogue: [Stations & Routes](../concepts/stations.md); translation matrix: [Mechanical Elements](../concepts/mechanical-elements.md).
|
|
|
|
### 3.6 Double-depth rack storage zones
|
|
|
|
Two layout patterns for double-depth racks:
|
|
|
|
- **Case #1** (most common at Mecalux France) - best for **mono-product** supports (several supports share the same item inside the TK). Rotation zones split by front face / rear face.
|
|
- **Case #2** - best for **multi-product** supports (a given item never lives in two supports simultaneously). Reduces relocations during picking without pre-emptive defragmentation.
|
|
|
|
### 3.7 Route configuration
|
|
|
|
Every movement needs a route in EasyS between origin and destination. A single task `PIE → Miniload` typically generates **4 movements** - the WMS creates one task, but the routing table must allow every hop.
|
|
|
|
> If no path exists, EasyWMS generates a **reject task** toward the reject station.
|
|
|
|
Route inventory in EasyWMS: **Menu → Control → Itineraries between stations**.
|
|
|
|
Route types:
|
|
|
|
| Type | Description |
|
|
|------|-------------|
|
|
| Galileo | Requires Gateway calls to move the container physically |
|
|
| Manual | Operator action triggered by a WMS task |
|
|
| Virtual | Instant virtual stock movement (e.g. output → consolidation zone) |
|
|
|
|
### 3.8 Entry / outbound tables (TE / TS) on the TK
|
|
|
|
Multiple containers can sit on a TE/TS at once:
|
|
|
|
1. Size the table large enough physically
|
|
2. Lay out containers in **Positions** (side by side) and **Stack** (one behind the other)
|
|
3. **Logical X = 991** - except tables embedded in the rack, which inherit the replaced location's coordinates
|
|
|
|
### 3.9 Multidirectional tables (LTM)
|
|
|
|
Set `routing options = 1` for every feeder conveyor allowed to deposit a container.
|
|
|
|
### 3.10 Picking station configuration
|
|
|
|
1. Add a conveyor with role **Picking**
|
|
2. Create a **Workstation** to drive the station from SmartUI
|
|
3. Define routes - where stock can arrive from, where it can leave to
|
|
|
|
Preparation table (TP/MP) routes:
|
|
- **Manual** route from picking table → preparation tables
|
|
- **Galileo** route from preparation tables → output table
|
|
- **Virtual** route → consolidation zone
|
|
|
|
### 3.11 Reject configuration
|
|
|
|
The reject route lets the WMS redirect containers with no valid route.
|
|
|
|
- Configure **GALILEO** routes from the main stations → REJECT station
|
|
- Add a **VIRTUAL** route → floor zone so lost containers are moved off the simulation automatically
|
|
- Reject routes render in **red**. Unlike normal routes, the red route gives the **task destination** (not the movement destination).
|
|
|
|
Different rejection reasons (`IdentError`) can point to different destinations - see [IdentErrorType](https://msscc.mecalux.com/documentation/Development/master/ES/apis/easywms/Domain/IdentErrorType.md).
|
|
|
|
## 4. SmartUI workstation configuration
|
|
|
|
Companion configuration once the EasyS layout is in place.
|
|
|
|
### 4.1 Preparation tables (MP/TP)
|
|
|
|
Each preparation table is linked to a picking station. After picking confirmation, stock moves from the container to the chosen preparation table.
|
|
|
|
**Assignment mode:**
|
|
- **Automatic** - WMS assigns the next order to a table
|
|
- **Manual** - operator assigns via **Menu → Control → Picking-station assignment**
|
|
|
|
> ⚠️ In manual mode, **tasks do not generate until the shipping order is assigned to a table**.
|
|
|
|
To switch mode: **Menu → Control → Workstations** → select preparation table(s) → **Modify assignment mode**.
|
|
|
|
> ⚠️ The preparation table must have a route to the shipping dock of the order - otherwise tasks won't generate.
|
|
|
|
### 4.2 Picking table max-concurrent orders
|
|
|
|
To cap how many orders a picking table can handle in parallel:
|
|
|
|
**Menu → Control → Workstations** → select the picking station → update the value.
|
|
|
|
> The value must **equal the number of preparation tables** associated with the picking station.
|
|
|
|
## 5. Run EasyS in simulation mode
|
|
|
|
1. Launch EasyS and load the warehouse configuration
|
|
2. Click **Start**
|
|
3. Enter the WMS server IP → **Next**
|
|
4. Uncheck **Generate simulation report** → click **Simulation 3D**
|
|
5. Watch the Gateway log (`AllLog.log`) - lots of lines with no errors = connection OK
|
|
|
|
## 6. Inject a container at the PIE
|
|
|
|
1. Double-click the PIE in EasyS
|
|
2. Tab **PIE Info** → leftmost button
|
|
3. Fill:
|
|
- Transport Number: `0`
|
|
- Data: container code
|
|
- Container Type: corresponding PLC Container Type
|
|
- Weight
|
|
- Height Type: corresponding PLC Height Type
|
|
4. Click **Save** - a pallet/bin visibly moves on the conveyor
|
|
|
|
> ⚠️ **Valid putaway strategies must exist** - even for empty containers. No valid location ⇒ reject.
|
|
|
|
### Simulate a read error
|
|
|
|
Tab **Scripts** on the PIE → **Prepare event** → paste:
|
|
```
|
|
machine.Flags = "256";
|
|
```
|
|
Then inject the container. `256` = barcode error (see [GALILEO Integration - PIE flag table](../architecture/galileo-integration.md)).
|
|
|
|
## 7. Extract a container from the miniload
|
|
|
|
Three triggers:
|
|
- **Demand** the container from the picking workstation
|
|
- **Request empty containers** from the picking workstation
|
|
- **Launch an order** for preparation
|
|
|
|
From the SmartUI picking workstation you can request a specific container, empty containers, or a specific item.
|
|
|
|
### Put the station in manual mode
|
|
|
|
Double-click the picking station in EasyS → tick **Manual action**. Without this, the container departs automatically and testing is impossible.
|
|
|
|
### Send the container back to the miniload
|
|
|
|
1. SmartUI workstation → **Store container**
|
|
2. EasyS → double-click the picking station → click **Liberate**
|
|
|
|
> Once **Manual Action** is ticked, **always** click **Liberate** to release the container. Skipping this step freezes the simulation.
|
|
|
|
### Client-order flow
|
|
|
|
On order release, the WMS:
|
|
1. Assigns the picking station to the order
|
|
2. Creates tasks to extract the container to the PK
|
|
|
|
Tasks are of type `pickingContainer`. After pick confirmation: **Store container** → **Liberate** to return the container to the miniload.
|
|
|
|
> Verify preparation-table config **before** launching an order - tasks won't generate if routes to the dock are missing.
|
|
|
|
## 8. Speed up simulation
|
|
|
|
Use the speed button in EasyS to accelerate container travel. Useful for stress-testing picking/putaway strategies without waiting.
|
|
|
|
## 9. Station & route synchronisation procedure
|
|
|
|
Before going live, confirm WMS and GALILEO agree on stations and routes. Run the audit below during the **Plan de tests des stations** milestone.
|
|
|
|
### 9.1 Retrieve WMS stations via query
|
|
|
|
Execute on the **writing** side:
|
|
|
|
```csharp
|
|
Context.StationRoutes.Where(sr => sr.Manager.ToString() == "Galileo")
|
|
.Select(sr => new {
|
|
StationType = sr.StationTo.Type,
|
|
StationNumber = sr.StationTo.Number,
|
|
StationCode = sr.StationTo.Code,
|
|
StationTypeName = sr.StationTo.Type.ToString(),
|
|
X = sr.StationTo.RealLocations.Any() && sr.StationTo.RealLocations.FirstOrDefault().LogicalCoordinate != null
|
|
? sr.StationTo.RealLocations.FirstOrDefault().LogicalCoordinate.X : 0,
|
|
Y = sr.StationTo.RealLocations.Any() && sr.StationTo.RealLocations.FirstOrDefault().LogicalCoordinate != null
|
|
? sr.StationTo.RealLocations.FirstOrDefault().LogicalCoordinate.Y : 0,
|
|
StationSide = sr.StationTo.RealLocations.Any() && sr.StationTo.RealLocations.FirstOrDefault().LogicalCoordinate != null
|
|
? sr.StationTo.RealLocations.FirstOrDefault().LogicalCoordinate.Side : 0,
|
|
AisleNumber = sr.StationTo.AisleNumber
|
|
})
|
|
// union with StationFrom - full query on Confluence
|
|
.OrderBy(sr => sr.StationType)
|
|
.ThenBy(sr => sr.StationNumber)
|
|
```
|
|
|
|
### 9.2 Routes that must report "full"
|
|
|
|
GALILEO must be able to push these routes as **status 3 = Full** so the WMS can recirculate:
|
|
|
|
| Source type | Destination type |
|
|
|-------------|------------------|
|
|
| CME | TE (ME) |
|
|
| PKE | PK |
|
|
| ET | PS |
|
|
|
|
### 9.3 Compare configuration on failure
|
|
|
|
If `EndErrorCode=4` occurs:
|
|
|
|
1. Open the GALILEO program in `C:\<NomDuClient>\Programme` → double-click the `.mgp` file
|
|
2. Compare the station list side-by-side with the query above
|
|
3. Check that every (StationType, StationNumber) pair exists on both sides, with the same aisle, allowed container types and coordinates
|
|
4. Confirm PLC Container Type / PLC Height Type coupling matches the document
|
|
|
|
More diagnostic steps: [Galileo Troubleshooting](galileo-troubleshooting.md).
|
|
|
|
## Common errors
|
|
|
|
- **Container injected at PIE but immediately rejected** - no valid putaway strategy covers the (container type, height type) combo, or no route exists to any storage location
|
|
- **Tasks don't generate after order launch** - preparation table has no route to the dock, or assignment mode is Manual and the order isn't assigned
|
|
- **Station stays loaded indefinitely in EasyS** - Manual Action ticked without running Liberate
|
|
- **Gateway starts but no activity** - wrong `tenantCode` or `TokenUser` password; check Gateway log
|
|
- **Connection refused from EasyS** - port 3000 not open, or Gateway service not started
|
|
|
|
## Related
|
|
|
|
- [GALILEO Integration](../architecture/galileo-integration.md) - protocol reference
|
|
- [Galileo Troubleshooting](galileo-troubleshooting.md) - log patterns, fault codes
|
|
- [Robotics Project Lifecycle](robotics-project-lifecycle.md) - where simulation fits in the project plan
|
|
- [VM Installation](vm-installation.md) · [VM Network Routing](vm-network-routing.md)
|
|
- [Stations & Routes](../concepts/stations.md) · [Mechanical Elements](../concepts/mechanical-elements.md) · [Putaway](../concepts/putaway.md)
|