lint(standard): corrections completes mode standard
- 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)
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
---
|
||||
title: "AGV Module — Installation Guide"
|
||||
title: "AGV Module - Installation Guide"
|
||||
type: operation
|
||||
sources:
|
||||
- sources/archives/Documentation Module AGV.md
|
||||
@@ -10,11 +10,11 @@ related:
|
||||
last_compiled: "2026-05-15"
|
||||
---
|
||||
|
||||
# AGV Module — Installation Guide
|
||||
# AGV Module - Installation Guide
|
||||
|
||||
## Overview
|
||||
|
||||
This guide covers the end-to-end installation of the AGV module for Easy WMS. The module relies on a PostgreSQL intermediary database, an ODBC driver, an Oracle DBLink (dg4odbc), the Gateway AGV Windows service, and the AGV application package deployed into Easy WMS. For the functional description of the module, see [AGV — Automated Guided Vehicles](../modules/agv.md).
|
||||
This guide covers the end-to-end installation of the AGV module for Easy WMS. The module relies on a PostgreSQL intermediary database, an ODBC driver, an Oracle DBLink (dg4odbc), the Gateway AGV Windows service, and the AGV application package deployed into Easy WMS. For the functional description of the module, see [AGV - Automated Guided Vehicles](../modules/agv.md).
|
||||
|
||||
## Prerequisites
|
||||
|
||||
@@ -35,7 +35,7 @@ dir C:\Mecalux\Motor\oracle\Product\
|
||||
|
||||
> Throughout this guide, `[ORACLE_HOME]` refers to the full path, e.g. `C:\Mecalux\Motor\oracle\Product\19.27.0.0\dbhome_1`. **Always replace** `[ORACLE_HOME]` **with your actual path** - leaving the placeholder is a frequent cause of failure.
|
||||
|
||||
## Step 1 — Install PostgreSQL
|
||||
## Step 1 - Install PostgreSQL
|
||||
|
||||
Download PostgreSQL >= 14 from the official EDB site and install with default options. Note the listening port - this is critical: PostgreSQL <= 17 uses port **5432**, while **PostgreSQL 18+ defaults to port 5433**.
|
||||
|
||||
@@ -63,13 +63,13 @@ netsh advfirewall firewall add rule name="PostgreSQL AGV" dir=in action=allow pr
|
||||
|
||||
Adjust the port number if using PostgreSQL 18+ (5433).
|
||||
|
||||
## Step 2 — Install the PostgreSQL ODBC driver
|
||||
## Step 2 - Install the PostgreSQL ODBC driver
|
||||
|
||||
> The download link in the official MSS documentation is dead. Go to the PostgreSQL ODBC releases page and download the latest `psqlodbc_x64.msi` (not the wrapper setup.exe).
|
||||
|
||||
Install the MSI with default options.
|
||||
|
||||
## Step 3 — Configure the System DSN (64-bit ODBC)
|
||||
## Step 3 - Configure the System DSN (64-bit ODBC)
|
||||
|
||||
Open **ODBC Data Sources (64-bit)** (`C:\Windows\System32\odbcad32.exe`), go to the **System DSN** tab (not User DSN), click **Add**, and select the **PostgreSQL Unicode(x64)** driver.
|
||||
|
||||
@@ -84,11 +84,11 @@ Open **ODBC Data Sources (64-bit)** (`C:\Windows\System32\odbcad32.exe`), go to
|
||||
|
||||
In the **Datasource** tab, **uncheck "Bools as Char"**. Click **Test** to verify the connection.
|
||||
|
||||
> **Critical — DSN name case**: the name `PostgreSQL35W` (capital P and W) is used verbatim in **5 different Oracle configuration files**. The case must be **absolutely consistent** across all files. Using `POSTGRESQL35W` (all caps) or `postgresql35w` (all lowercase) will cause a silent dg4odbc failure. See the Troubleshooting section for details.
|
||||
> **Critical - DSN name case**: the name `PostgreSQL35W` (capital P and W) is used verbatim in **5 different Oracle configuration files**. The case must be **absolutely consistent** across all files. Using `POSTGRESQL35W` (all caps) or `postgresql35w` (all lowercase) will cause a silent dg4odbc failure. See the Troubleshooting section for details.
|
||||
|
||||
## Step 4 — Install and start the Gateway AGV
|
||||
## Step 4 - Install and start the Gateway AGV
|
||||
|
||||
### 4.1 — Verify the configuration file
|
||||
### 4.1 - Verify the configuration file
|
||||
|
||||
The config file is located at `C:\ProgramData\Mecalux\EasyWMS GatewayAGV 2015\`. The XML file must contain exactly **one** `<AGVConfig>` section. If it contains two (e.g., for two stations), the provider will not initialize and the service will crash with `Migration DataBase Provider No Initialized`.
|
||||
|
||||
@@ -121,7 +121,7 @@ Verify that the connection string points to the correct PostgreSQL database:
|
||||
|
||||
> If using **PostgreSQL 18+** (port 5433), add the port explicitly: `Host=localhost;Port=5433;user id=mecaluxAGV;...`
|
||||
|
||||
### 4.2 — First startup (table creation)
|
||||
### 4.2 - First startup (table creation)
|
||||
|
||||
Start the Gateway AGV service (`services.msc` > EasyWMS GatewayAGV). Check the log at `C:\ProgramData\Mecalux\EasyWMS GatewayAGV 2015\Logs\AllLog.log` for successful migration lines:
|
||||
|
||||
@@ -132,15 +132,15 @@ Start the Gateway AGV service (`services.msc` > EasyWMS GatewayAGV). Check the l
|
||||
|
||||
If these lines appear, the tables were created successfully. Errors after these lines are normal (the Gateway tries to communicate with the fleet manager which is not yet connected). **Stop the service** after verification.
|
||||
|
||||
### 4.3 — Verify created tables
|
||||
### 4.3 - Verify created tables
|
||||
|
||||
In PgAdmin4, under the AGV database > Schemas > public > Tables, there should be 7 tables: `agv_age`, `agv_ags`, `agv_eag`, `agv_inputqueue`, `agv_maintenance`, `agv_outputqueue`, `std_migrationinfo`. And 6 sequences: `agv_age_id_seq`, `agv_ags_id_seq`, `agv_eag_id_seq`, `agv_inputqueue_id_seq`, `agv_maintenance_id_seq`, `agv_outputqueue_id_seq`.
|
||||
|
||||
### 4.4 — Execute PostgreSQL scripts
|
||||
### 4.4 - Execute PostgreSQL scripts
|
||||
|
||||
Open the Query Tool in PgAdmin4 on the AGV database and execute:
|
||||
|
||||
**Script 1 — Notification function** (publishes an event on every row change):
|
||||
**Script 1 - Notification function** (publishes an event on every row change):
|
||||
|
||||
```sql
|
||||
CREATE FUNCTION public."NotifyOnDataChange"()
|
||||
@@ -165,7 +165,7 @@ END
|
||||
$BODY$;
|
||||
```
|
||||
|
||||
**Script 2 — Trigger on the inputqueue table**:
|
||||
**Script 2 - Trigger on the inputqueue table**:
|
||||
|
||||
```sql
|
||||
CREATE TRIGGER "OnDataChange"
|
||||
@@ -174,19 +174,19 @@ FOR EACH ROW
|
||||
EXECUTE PROCEDURE public."NotifyOnDataChange"();
|
||||
```
|
||||
|
||||
## Step 5 — Configure the external PostgreSQL user
|
||||
## Step 5 - Configure the external PostgreSQL user
|
||||
|
||||
This user will be used by the Oracle DBLink to access the AGV tables from the WMS.
|
||||
|
||||
### 5.1 — Create the user
|
||||
### 5.1 - Create the user
|
||||
|
||||
In PgAdmin4: create a login role `externalAGV` with a password and login privilege.
|
||||
|
||||
### 5.2 — Grant CONNECT on the database
|
||||
### 5.2 - Grant CONNECT on the database
|
||||
|
||||
In the AGV database properties > Security tab, add `externalAGV` with the **CONNECT** privilege.
|
||||
|
||||
### 5.3 — Grant permissions on tables and sequences
|
||||
### 5.3 - Grant permissions on tables and sequences
|
||||
|
||||
**Quick option (dev environment)**:
|
||||
|
||||
@@ -211,11 +211,11 @@ GRANT ALL ON agv_ags_id_seq TO "externalAGV";
|
||||
GRANT ALL ON agv_inputqueue_id_seq TO "externalAGV";
|
||||
```
|
||||
|
||||
## Step 6 — Configure the Oracle DBLink to PostgreSQL
|
||||
## Step 6 - Configure the Oracle DBLink to PostgreSQL
|
||||
|
||||
This is the most delicate step. Oracle uses the **dg4odbc** component (Database Gateway for ODBC) to connect to PostgreSQL via the ODBC DSN created in Step 3. The configuration touches 3 Oracle files and requires a Listener restart.
|
||||
|
||||
### 6.1 — Edit tnsnames.ora
|
||||
### 6.1 - Edit tnsnames.ora
|
||||
|
||||
File: `[ORACLE_HOME]\network\admin\tnsnames.ora`
|
||||
|
||||
@@ -234,7 +234,7 @@ Leave a blank line between the previous entry and this one. `(HS=OK)` is mandato
|
||||
|
||||
> **Common error**: if the identifier is indented (space or tab before `PostgreSQL35W =`), Oracle returns `ORA-12154: TNS:could not resolve the connect identifier specified`. This is a subtle trap because the rest of the file works fine with indentation.
|
||||
|
||||
### 6.2 — Edit listener.ora
|
||||
### 6.2 - Edit listener.ora
|
||||
|
||||
File: `[ORACLE_HOME]\network\admin\listener.ora`
|
||||
|
||||
@@ -250,7 +250,7 @@ Add a `SID_DESC` block in the existing `SID_LIST_LISTENER` section:
|
||||
|
||||
> **Critical**: the `ORACLE_HOME` path in this block must be the **real, complete path** of your Oracle installation. Never leave a placeholder like `[VERSION]` - this causes `TNS-12518` / `ORA-28545` errors. The listener starts without error and the SID appears in `lsnrctl status`, making the problem hard to diagnose. **Verify** that the `ORACLE_HOME` in the PostgreSQL35W block is **identical** to the other `SID_DESC` blocks in the file.
|
||||
|
||||
### 6.3 — Create initPostgreSQL35W.ora
|
||||
### 6.3 - Create initPostgreSQL35W.ora
|
||||
|
||||
Go to `[ORACLE_HOME]\hs\admin\`, duplicate the file `initdg4odbc.ora`, rename the copy to `initPostgreSQL35W.ora` (name must match the SID_NAME exactly, case-sensitive), and replace all content with:
|
||||
|
||||
@@ -261,7 +261,7 @@ HS_FDS_TRACE_LEVEL = 0
|
||||
|
||||
Do not leave the template lines from the original file. For debugging, temporarily set `HS_FDS_TRACE_LEVEL = 4` for detailed dg4odbc traces. Reset to 0 after diagnosis.
|
||||
|
||||
### 6.4 — Restart the Oracle Listener
|
||||
### 6.4 - Restart the Oracle Listener
|
||||
|
||||
```
|
||||
lsnrctl stop
|
||||
@@ -276,7 +276,7 @@ lsnrctl status
|
||||
|
||||
Expected output: `Service "PostgreSQL35W" has 1 instance(s). Instance "PostgreSQL35W", status UNKNOWN, has 1 handler(s) for this service...` The UNKNOWN status is normal for a Heterogeneous Service - the process is launched on demand.
|
||||
|
||||
### 6.5 — Grant CREATE DATABASE LINK to db_read
|
||||
### 6.5 - Grant CREATE DATABASE LINK to db_read
|
||||
|
||||
Connect as **sysdba** and grant:
|
||||
|
||||
@@ -286,7 +286,7 @@ GRANT CREATE DATABASE LINK TO db_read;
|
||||
|
||||
> The target user is **db_read** (the Easy WMS read model schema). The database link and synonyms must be owned by db_read. Do not create the link under SYS - it will not be visible from db_read.
|
||||
|
||||
### 6.6 — Create the Database Link
|
||||
### 6.6 - Create the Database Link
|
||||
|
||||
Connect as **db_read** (not sysdba):
|
||||
|
||||
@@ -298,7 +298,7 @@ CREATE DATABASE LINK AGV
|
||||
|
||||
> **Double quotes** around the user and password are **mandatory**. Oracle converts identifiers to uppercase by default, but PostgreSQL is case-sensitive. Without quotes, Oracle sends `EXTERNALAGV` instead of `externalAGV` and authentication fails.
|
||||
|
||||
### 6.7 — Test the DBLink
|
||||
### 6.7 - Test the DBLink
|
||||
|
||||
```sql
|
||||
SELECT * FROM "agv_inputqueue"@AGV;
|
||||
@@ -306,7 +306,7 @@ SELECT * FROM "agv_inputqueue"@AGV;
|
||||
|
||||
If the query returns `no rows selected`, the link works. The tables are simply empty at this stage.
|
||||
|
||||
### 6.8 — Create Oracle synonyms
|
||||
### 6.8 - Create Oracle synonyms
|
||||
|
||||
Still connected as **db_read**:
|
||||
|
||||
@@ -322,9 +322,9 @@ CREATE SYNONYM agv_outputqueue FOR "agv_outputqueue"@AGV;
|
||||
|
||||
Verify all synonyms: `SELECT * FROM agv_inputqueue;` (repeat for each). All queries must pass without error (`no rows selected` is expected).
|
||||
|
||||
## Step 7 — Install the AGV module in Easy WMS
|
||||
## Step 7 - Install the AGV module in Easy WMS
|
||||
|
||||
### 7.1 — Modify response.xml
|
||||
### 7.1 - Modify response.xml
|
||||
|
||||
Add the AGV entries in the deployment `response.xml`:
|
||||
|
||||
@@ -340,11 +340,11 @@ Add the AGV entries in the deployment `response.xml`:
|
||||
</Modules>
|
||||
```
|
||||
|
||||
### 7.2 — Run the deploy
|
||||
### 7.2 - Run the deploy
|
||||
|
||||
Execute the deploy using **option 16 — Install application**.
|
||||
Execute the deploy using **option 16 - Install application**.
|
||||
|
||||
### 7.3 — Restart the Gateway AGV
|
||||
### 7.3 - Restart the Gateway AGV
|
||||
|
||||
After the deploy completes, restart the Gateway AGV service in `services.msc`.
|
||||
|
||||
@@ -413,5 +413,5 @@ If this test passes but the Oracle DBLink fails, the problem is in the dg4odbc c
|
||||
|
||||
## Related
|
||||
|
||||
- [AGV — Automated Guided Vehicles](../modules/agv.md) — Functional documentation: architecture, protocol, monitoring, errors
|
||||
- [Stations](../concepts/stations.md) — Station types including AGV (type 65), equipment groups, routes
|
||||
- [AGV - Automated Guided Vehicles](../modules/agv.md) - Functional documentation: architecture, protocol, monitoring, errors
|
||||
- [Stations](../concepts/stations.md) - Station types including AGV (type 65), equipment groups, routes
|
||||
|
||||
Reference in New Issue
Block a user