màj wiki avec retour MES lot-5 AD
This commit is contained in:
@@ -0,0 +1,330 @@
|
||||
---
|
||||
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)
|
||||
Reference in New Issue
Block a user