RTIndustry / Documentazione / Developers

Guida Integrazione ERP

Documentazione tecnica per integrare il tuo sistema ERP/MES con il Kanban RTIndustry tramite database condiviso.

Introduzione

RTIndustry IIoT permette l'integrazione bidirezionale con sistemi ERP e MES tramite un database condiviso (MySQL o SQL Server). L'integrazione avviene attraverso due tabelle di scambio:

Questo approccio non richiede API REST, webhook o integrazioni custom. L'unico requisito è che entrambi i sistemi (ERP e RTIndustry) abbiano accesso allo stesso database.

Database supportati
RTIndustry supporta sia MySQL 8.x che Microsoft SQL Server (2017+). La struttura delle tabelle è identica, con differenze minime nella sintassi SQL. SQL Server include campi aggiuntivi (receipt, wovalue, spare1-5) disponibili anche su MySQL.

Architettura di Integrazione

ERP / MES
INSERT / UPDATE su writewo
Database Condiviso (MySQL / SQL Server)
Polling ogni 5 secondi
RTIndustry Kanban
INSERT / UPDATE su readwo
Database Condiviso
SELECT da readwo
ERP / MES

Come funziona

  1. L'ERP inserisce un ordine di lavoro nella tabella writewo con readed = 0
  2. Il Kanban esegue un polling ogni 5 secondi sulla tabella writewo, cercando record con readed != 1
  3. Trovato un nuovo record, il Kanban lo processa: crea la card sulla board, aggiorna readed = 1 (accettato) oppure readed = 3 (errore)
  4. Durante la lavorazione, il Kanban scrive/aggiorna i dati di produzione nella tabella readwo
  5. L'ERP può leggere readwo in qualsiasi momento per ottenere lo stato della produzione

Prerequisiti

Importante
Il database hmi viene creato automaticamente dall'installer RTIndustry. Le tabelle writewo e readwo sono già presenti nel database dopo l'installazione. Non è necessario crearle manualmente.

Connessione al Database

Parametri di default

MySQL
SQL Server
Host:     127.0.0.1
Port:     3306
Database: hmi
User:     root
Password: RTIndustry@2025!
Host:     127.0.0.1
Port:     1433
Database: hmi
User:     sa
Password: (configurata in fase di installazione SQL Server)

I parametri di connessione sono configurabili dalla dashboard RTIndustry (https://localhost:1880/ui → sezione Configuration).

Nota
L'ERP si connette allo stesso database (hmi) utilizzato da RTIndustry. Non è necessario un database separato per l'integrazione.

Tabella writewo (ERP → Kanban)

La tabella writewo è il canale di comunicazione dall'ERP verso il Kanban. L'ERP inserisce un record per ogni ordine di lavoro da inviare alla macchina. Il Kanban legge la tabella ogni 5 secondi e processa i nuovi ordini.

Schema dei campi

Campi identificativi

CampoTipoObbl.DefaultDescrizione
id INT Auto AUTO_INCREMENT ID univoco del record, generato automaticamente
readed INT Si 0 Stato della comunicazione (vedi macchina a stati)
column VARCHAR(50) Si 'requested' Colonna Kanban di destinazione: requested, in_progress, done
kanbanwoid VARCHAR(255) Si 'external' ID dell'ordine di lavoro nel sistema ERP
rejectedreason VARCHAR(255) No NULL Motivo di rifiuto (compilato dal Kanban in caso di errore)

Campi installazione

CampoTipoDefaultDescrizione
serial VARCHAR(50) NULL Numero seriale del dispositivo / macchina di destinazione
client VARCHAR(50) NULL Nome del cliente / stabilimento
plant VARCHAR(50) NULL Nome dello stabilimento
workstation VARCHAR(50) NULL Identificativo della postazione di lavoro

Campi ordine di lavoro

CampoTipoDefaultDescrizione
programname VARCHAR(255) NULL Nome del programma CNC
programnumber VARCHAR(255) NULL Numero del programma CNC
description VARCHAR(255) NULL Descrizione dell'ordine di lavoro
itemcode VARCHAR(50) NULL Codice articolo / codice parte
quantity INT NULL Quantità da produrre
customername VARCHAR(100) NULL Nome del cliente (committente)
customercode VARCHAR(100) NULL Codice cliente
operatorname VARCHAR(100) NULL Nome dell'operatore assegnato
notes VARCHAR(100) NULL Note aggiuntive
duedate DATE NULL Data di consegna prevista
targettime INT NULL Tempo target per pezzo (secondi)
targetenergy VARCHAR(45) NULL Consumo energetico target (Wh)

Campi aggiuntivi

CampoTipoDefaultDescrizione
receipt VARCHAR(50) NULL Numero bolla / ricevuta
wovalue DECIMAL(10,2) NULL Valore economico dell'ordine
spare1 VARCHAR(50) NULL Campo libero 1 (uso personalizzato)
spare2 VARCHAR(50) NULL Campo libero 2
spare3 VARCHAR(50) NULL Campo libero 3
spare4 VARCHAR(50) NULL Campo libero 4
spare5 VARCHAR(50) NULL Campo libero 5
Campi spare
I campi spare1-spare5 sono a disposizione per dati personalizzati specifici dell'integrazione. Possono contenere qualsiasi informazione aggiuntiva che il vostro ERP necessita di passare al Kanban (es. codice lotto, numero commessa, reparto, ecc.).

Inserimento di un ordine di lavoro

Per creare un nuovo ordine di lavoro nella board Kanban, l'ERP inserisce un record nella tabella writewo:

MySQL
SQL Server
INSERT INTO hmi.writewo (
    readed,
    `column`,
    kanbanwoid,
    serial,
    client,
    plant,
    workstation,
    programname,
    programnumber,
    description,
    itemcode,
    quantity,
    customername,
    customercode,
    operatorname,
    notes,
    duedate,
    targettime,
    targetenergy
) VALUES (
    0,                          -- readed: 0 = nuovo, da leggere
    'requested',                -- colonna Kanban di destinazione
    'ERP-ORD-2026-001',         -- ID ordine nel vostro ERP
    'SN-001',                   -- seriale macchina (opzionale)
    'ACME SpA',                 -- cliente
    'Stabilimento Nord',        -- stabilimento
    'Centro Lavoro 1',          -- postazione
    'Flangia_V2',               -- nome programma CNC
    'P1234',                    -- numero programma
    'Flangia acciaio D.120mm',  -- descrizione
    'FLG-120-SS',               -- codice articolo
    100,                        -- quantità da produrre
    'Meccanica Rossi',          -- nome committente
    'CLI-042',                  -- codice committente
    'Mario Bianchi',            -- operatore assegnato
    'Urgente - priorita altà,  -- note
    '2026-02-28',               -- data consegna
    45,                         -- tempo target per pezzo (secondi)
    '150'                       -- energia target (Wh)
);
INSERT INTO hmi.dbo.writewo (
    readed,
    [column],
    kanbanwoid,
    serial,
    client,
    plant,
    workstation,
    programname,
    programnumber,
    [description],
    itemcode,
    quantity,
    customername,
    customercode,
    operatorname,
    notes,
    duedate,
    targettime,
    targetenergy,
    receipt,
    wovalue
) VALUES (
    0,                          -- readed: 0 = nuovo, da leggere
    'requested',                -- colonna Kanban di destinazione
    'ERP-ORD-2026-001',         -- ID ordine nel vostro ERP
    'SN-001',                   -- seriale macchina (opzionale)
    'ACME SpA',                 -- cliente
    'Stabilimento Nord',        -- stabilimento
    'Centro Lavoro 1',          -- postazione
    'Flangia_V2',               -- nome programma CNC
    'P1234',                    -- numero programma
    'Flangia acciaio D.120mm',  -- descrizione
    'FLG-120-SS',               -- codice articolo
    100,                        -- quantità da produrre
    'Meccanica Rossi',          -- nome committente
    'CLI-042',                  -- codice committente
    'Mario Bianchi',            -- operatore assegnato
    'Urgente - priorita altà,  -- note
    '2026-02-28',               -- data consegna
    45,                         -- tempo target per pezzo (secondi)
    '150',                      -- energia target (Wh)
    'DDT-2026-0042',            -- bolla/ricevuta
    1250.00                     -- valore ordine
);
Attenzione
column è una parola riservata SQL. In MySQL va racchiusa tra backtick (`column`), in SQL Server tra parentesi quadre ([column]).

Modifica di un ordine già inviato

Per modificare un ordine di lavoro già accettato dal Kanban (es. cambiare la quantità), l'ERP aggiorna il record e imposta readed = 2 per segnalare la modifica:

MySQL
SQL Server
UPDATE hmi.writewo
SET
    readed = 2,               -- 2 = modificato, da ri-leggere
    quantity = 150,            -- nuova quantità
    notes = 'Quantita aggiornata da 100 a 150'
WHERE kanbanwoid = 'ERP-ORD-2026-001';
UPDATE hmi.dbo.writewo
SET
    readed = 2,               -- 2 = modificato, da ri-leggere
    quantity = 150,            -- nuova quantità
    notes = 'Quantita aggiornata da 100 a 150'
WHERE kanbanwoid = 'ERP-ORD-2026-001';

Il Kanban rileva il record con readed = 2 al prossimo ciclo di polling (entro 5 secondi), aggiorna la card sulla board e reimposta readed = 1.

Tabella readwo (Kanban → ERP)

La tabella readwo contiene i dati di produzione scritti dal Kanban. L'ERP può leggere questa tabella per monitorare lo stato degli ordini, i tempi macchina, le quantità prodotte, gli scarti e tutte le metriche OEE.

Il Kanban aggiorna la tabella in tempo reale ogni volta che cambia lo stato di un ordine di lavoro (cambio fase, conteggio pezzi, completamento). Usa INSERT ... ON DUPLICATE KEY UPDATE (MySQL) oppure MERGE (SQL Server), quindi ogni ordine ha sempre una sola riga aggiornata.

Schema dei campi

Identificazione ordine

CampoTipoDescrizione
idVARCHAR(255)ID univoco dell'ordine di lavoro (PK)
order_numberVARCHAR(255)Numero ordine (dal campo kanbanwoid di writewo)
numberINTNumero sequenziale ordine
columnVARCHAR(45)Colonna Kanban attuale: requested, in_progress, done
statusVARCHAR(255)Stato attuale (REQUESTED, RUNNING, PAUSED, STOPPED, COMPLETED, ecc.)

Informazioni ordine

CampoTipoDescrizione
descriptionVARCHAR(255)Descrizione ordine
item_codeVARCHAR(255)Codice articolo
customer_nameVARCHAR(255)Nome cliente
customer_codeVARCHAR(255)Codice cliente
program_nameVARCHAR(45)Nome programma CNC
program_numberVARCHAR(255)Numero programma CNC
operator_nameVARCHAR(255)Nome operatore
notesVARCHAR(255)Note

Installazione

CampoTipoDescrizione
clientVARCHAR(45)Nome cliente / stabilimento
plantVARCHAR(45)Stabilimento
wardVARCHAR(45)Reparto
workstationVARCHAR(45)Postazione di lavoro
machineVARCHAR(255)Identificativo macchina

Quantità e date

CampoTipoDescrizione
qty_requestedINTQuantità richiesta
qty_doneINTQuantità prodotta (pezzi buoni)
qty_scrapINTQuantità scartata
machine_qtyINTContatore pezzi macchina
target_timeINTTempo target per pezzo (secondi)
target_energyINTEnergia target (Wh)
in_timeTINYINTFlag: 1 = in orario, 0 = in ritardo
due_dateTIMESTAMPData di consegna
start_dateTIMESTAMPData/ora inizio lavorazione
end_dateTIMESTAMPData/ora fine lavorazione
creation_dateTIMESTAMPData/ora creazione record (automatica)
durationVARCHAR(255)Durata formattata

Tempi macchina (MWT — Machine Working Times)

Tutti i tempi sono espressi in secondi.

CampoTipoDescrizione
mwt_totalINTTempo totale ordine
mwt_runningINTTempo in RUNNING (produzione attiva)
mwt_pausedINTTempo in PAUSED
mwt_stoppedINTTempo in STOPPED
mwt_downtimeINTTempo in FAULT (guasto)
mwt_alarmINTTempo in allarme
mwt_maintenanceINTTempo in MAINTENANCE
mwt_cleaningINTTempo in CLEANING
mwt_reworkedINTTempo in REWORK
mwt_setupINTTempo in SET-UP
production_timeINTTempo effettivo di produzione

Metriche di performance

CampoTipoDescrizione
cycletime_avgINTTempo ciclo medio (secondi)
best_cycleINTMiglior tempo ciclo (secondi)
worst_cycleINTPeggior tempo ciclo (secondi)
deviationINTDeviazione dal tempo target (secondi)
deviation_avgINTDeviazione media dal target (secondi)
deviation_v_trendINTDeviazione vs. trend
trend_avg_deviationINTTrend deviazione media
number_of_workorderINTNumero sequenziale ordine

Query di lettura per l'ERP

Tutti gli ordini in corso

MySQL
SQL Server
-- Ordini attualmente in lavorazione
SELECT id, description, item_code, status,
       qty_requested, qty_done, qty_scrap,
       operator_name, start_date
FROM hmi.readwo
WHERE `column` = 'in_progress'
ORDER BY start_date DESC;
-- Ordini attualmente in lavorazione
SELECT id, [description], item_code, [status],
       qty_requested, qty_done, qty_scrap,
       operator_name, start_date
FROM hmi.dbo.readwo
WHERE [column] = 'in_progress'
ORDER BY start_date DESC;

Ordini completati con metriche OEE

MySQL
SQL Server
-- Ordini completati con calcolo OEE
SELECT
    id,
    description,
    qty_requested,
    qty_done,
    qty_scrap,
    -- Disponibilità (%)
    ROUND(mwt_running * 100.0 /
        NULLIF(mwt_running + mwt_paused + mwt_maintenance + mwt_downtime, 0), 1
    ) AS availability_pct,
    -- Performance (%)
    ROUND((target_time * qty_done) * 100.0 /
        NULLIF(production_time, 0), 1
    ) AS performance_pct,
    -- Qualità (%)
    ROUND(qty_done * 100.0 /
        NULLIF(qty_done + qty_scrap, 0), 1
    ) AS quality_pct,
    cycletime_avg,
    best_cycle,
    worst_cycle,
    start_date,
    end_date
FROM hmi.readwo
WHERE `column` = 'done'
ORDER BY end_date DESC
LIMIT 50;
-- Ordini completati con calcolo OEE
SELECT TOP 50
    id,
    [description],
    qty_requested,
    qty_done,
    qty_scrap,
    -- Disponibilità (%)
    ROUND(CAST(mwt_running AS FLOAT) * 100.0 /
        NULLIF(mwt_running + mwt_paused + mwt_maintenance + mwt_downtime, 0), 1
    ) AS availability_pct,
    -- Performance (%)
    ROUND(CAST(target_time * qty_done AS FLOAT) * 100.0 /
        NULLIF(production_time, 0), 1
    ) AS performance_pct,
    -- Qualità (%)
    ROUND(CAST(qty_done AS FLOAT) * 100.0 /
        NULLIF(qty_done + qty_scrap, 0), 1
    ) AS quality_pct,
    cycletime_avg,
    best_cycle,
    worst_cycle,
    start_date,
    end_date
FROM hmi.dbo.readwo
WHERE [column] = 'done'
ORDER BY end_date DESC;

Monitorare lo stato di un singolo ordine

MySQL
SQL Server
-- Stato completo di un ordine specifico
SELECT *
FROM hmi.readwo
WHERE id = 'WO-2026-02-10-001';
-- Stato completo di un ordine specifico
SELECT *
FROM hmi.dbo.readwo
WHERE id = 'WO-2026-02-10-001';

Campo readed — Macchina a stati

Il campo readed nella tabella writewo implementa una macchina a stati che coordina la comunicazione bidirezionale tra ERP e Kanban:

ValoreStatoChi lo impostaSignificato
0 NUOVO ERP L'ERP ha inserito un nuovo ordine di lavoro. Il Kanban deve leggerlo.
1 ACCETTATO Kanban Il Kanban ha letto e accettato l'ordine. La card è stata creata sulla board.
2 MODIFICATO ERP L'ERP ha modificato un ordine già accettato. Il Kanban deve ri-leggerlo e aggiornare la card.
3 ERRORE WORKSTATION Kanban Il Kanban ha rifiutato l'ordine (es. superato il limite di 15 WO per colonna). Il motivo è nel campo rejectedreason.
4 ERRORE KANBAN Kanban Errore interno del Kanban durante la lettura del record.
ERP Kanban | | | INSERT readed=0 | |----------------------------->| | | Legge WHERE readed != 1 | | Processa ordine | | | readed=1 (OK) | |<-----------------------------| | | | UPDATE readed=2 | | (modifica ordine) | |----------------------------->| | | Ri-legge e aggiorna | readed=1 (OK) | |<-----------------------------| | | | INSERT readed=0 | | (colonna piena) | |----------------------------->| | | Rifiuta: troppi WO | readed=3 + rejectedreason | |<-----------------------------|
Query di polling del Kanban
Il Kanban legge SELECT * FROM writewo WHERE readed != 1 ogni 5 secondi. Questo significa che processa tutti i record negli stati 0, 2, 3 e 4. Solo i record con readed = 1 vengono ignorati (già accettati).

Flusso Operativo Completo

1

ERP inserisce l'ordine

L'ERP esegue una INSERT nella tabella writewo con readed = 0 e column = 'requested'. L'ordine contiene tutti i dati necessari alla produzione.

2

Kanban legge l'ordine (entro 5 secondi)

Il polling del Kanban trova il record con readed = 0. Verifica che la colonna di destinazione non abbia superato il limite di 15 card.

3

Kanban crea la card sulla board

Se tutto è valido, il Kanban crea una nuova card nella colonna requested e aggiorna readed = 1, rejectedreason = NULL. Se c'è' un errore, imposta readed = 3 con il motivo in rejectedreason.

4

Operatore lavora l'ordine

L'operatore trascina la card nella colonna In Progress, cambia gli stati (Play, Pause, Stop, ecc.), conta i pezzi buoni e scarti, e infine sposta la card in Done.

5

Kanban aggiorna readwo

Ad ogni cambio di stato, il Kanban aggiorna la tabella readwo con i dati di produzione aggiornati: quantità, tempi macchina, stato, metriche di performance.

6

ERP legge i risultati

L'ERP può interrogare readwo in qualsiasi momento per ottenere lo stato aggiornato dell'ordine, le quantità prodotte, i tempi e le metriche OEE.

Gestione Errori

Errore 3 — Workstation Error

Il Kanban imposta readed = 3 quando non può accettare l'ordine. La causa più comune è il superamento del limite di 15 card per colonna.

Il campo rejectedreason contiene il messaggio di errore, ad esempio:

Colonna 'requested' piena (15/15). Ritento alle 14:35:22

Come gestire l'errore nell'ERP

MySQL
SQL Server
-- Controllare ordini rifiutati
SELECT id, kanbanwoid, rejectedreason
FROM hmi.writewo
WHERE readed = 3;

-- Il Kanban ritenta automaticamente.
-- Se volete forzare il ri-processamento:
UPDATE hmi.writewo
SET readed = 0
WHERE readed = 3 AND kanbanwoid = 'ERP-ORD-2026-001';
-- Controllare ordini rifiutati
SELECT id, kanbanwoid, rejectedreason
FROM hmi.dbo.writewo
WHERE readed = 3;

-- Il Kanban ritenta automaticamente.
-- Se volete forzare il ri-processamento:
UPDATE hmi.dbo.writewo
SET readed = 0
WHERE readed = 3 AND kanbanwoid = 'ERP-ORD-2026-001';
Ritentativo automatico
Quando il Kanban imposta readed = 3, include nel messaggio un timestamp di ritentativo. Al prossimo ciclo di polling, il Kanban riprova automaticamente a processare il record. Se la colonna si è liberata, l'ordine viene accettato e readed torna a 1.

Errore 4 — Kanban Error

readed = 4 indica un errore interno del Kanban (es. errore di parsing dei dati). In questo caso, verificate che i campi inseriti siano nel formato corretto e non contengano caratteri speciali non supportati.

Trasmissione File

Oltre ai dati via database, RTIndustry supporta lo scambio di file tramite cartelle condivise (locali o di rete via SMB/CIFS).

Cartelle di scambio

CartellaDefaultDirezioneContenuto
WOAttachments {installDir}\WOAttachments ERP → Kanban Allegati ordine (PDF, disegni, istruzioni)
WOPartPrograms {installDir}\WOPartPrograms ERP ↔ Kanban Programmi pezzo CNC (NC, ISO, H)
WOMachineDocuments {installDir}\WOMachineDocuments Bidirezionale Documentazione macchina

Struttura delle cartelle

I file vengono organizzati in sottocartelle con il nome dell'ID ordine di lavoro:

WOAttachments/
  +-- WO-2026-02-10-001/
  |     +-- disegno_flangia.pdf
  |     +-- istruzioni_lavorazione.pdf
  +-- WO-2026-02-10-002/
        +-- specifica_tecnica.pdf

WOPartPrograms/
  +-- WO-2026-02-10-001/
  |     +-- Flangia_V2.H
  |     +-- Flangia_V2.NC
  +-- ERP-ORD-2026-001/
        +-- P1234.NC

L'ERP può copiare i file nelle sottocartelle prima o dopo l'inserimento dell'ordine in writewo. Il Kanban mostrerà automaticamente gli allegati disponibili nell'interfaccia HMI.

Percorsi di rete
I percorsi delle cartelle sono configurabili dalla dashboard RTIndustry (/ui → Configuration). Possono essere impostati su percorsi di rete (es. \\server\share\WOAttachments) per consentire l'accesso condiviso tra ERP e RTIndustry. Il servizio Windows deve avere i permessi di lettura/scrittura sulla share.

Part Programs e invio a macchina

I programmi pezzo nella cartella WOPartPrograms possono essere inviati direttamente alla macchina CNC dall'interfaccia HMI dell'operatore:

Per associare automaticamente un programma a un ordine, impostare il campo programname nella tabella writewo con il nome del file (senza estensione). Il Kanban cerchera' il file nella sottocartella corrispondente.

Limiti e Best Practice

Limiti del sistema

ParametroValoreNote
Max card per colonna 15 Se superato, readed = 3 con messaggio di errore
Frequenza polling 5 secondi Il Kanban legge writewo ogni 5 secondi
Colonne Kanban 3 requested, in_progress, done
Max lunghezza kanbanwoid 255 caratteri Identificativo univoco dell'ordine ERP

Best practice

Esempi Completi

Esempio 1: Flusso completo ERP → produzione → consuntivo

MySQL
SQL Server
-- 1. ERP: Inserire un ordine di lavoro
INSERT INTO hmi.writewo (
    readed, `column`, kanbanwoid,
    programname, programnumber, description,
    itemcode, quantity, customername, customercode,
    targettime, targetenergy, duedate, operatorname
) VALUES (
    0, 'requested', 'SAP-PRD-2026-00142',
    'Albero_Motore_V3', 'P5678', 'Albero motore acciaio C45',
    'ALB-MOT-C45', 200, 'Automotive Parts Srl', 'CLI-108',
    32, '120', '2026-03-15', 'Giuseppe Verdi'
);

-- 2. ERP: Verificare accettazione (dopo qualche secondo)
SELECT id, readed, rejectedreason
FROM hmi.writewo
WHERE kanbanwoid = 'SAP-PRD-2026-00142';
-- Risultato atteso: readed = 1, rejectedreason = NULL

-- 3. ERP: Monitorare la produzione in corso
SELECT
    id, status, `column`,
    qty_requested, qty_done, qty_scrap,
    mwt_running, mwt_paused, mwt_stopped,
    cycletime_avg, deviation
FROM hmi.readwo
WHERE order_number = 'SAP-PRD-2026-00142';

-- 4. ERP: Leggere il consuntivo finale (quando column = 'done')
SELECT
    qty_done,
    qty_scrap,
    ROUND(mwt_running / 60.0, 1) AS minuti_running,
    ROUND(mwt_paused / 60.0, 1) AS minuti_pausa,
    ROUND(mwt_stopped / 60.0, 1) AS minuti_stop,
    ROUND(mwt_setup / 60.0, 1) AS minuti_setup,
    cycletime_avg AS tempo_ciclo_medio_sec,
    best_cycle AS miglior_ciclo_sec,
    worst_cycle AS peggior_ciclo_sec,
    start_date,
    end_date,
    TIMESTAMPDIFF(MINUTE, start_date, end_date) AS durata_totale_minuti
FROM hmi.readwo
WHERE order_number = 'SAP-PRD-2026-00142'
  AND `column` = 'done';
-- 1. ERP: Inserire un ordine di lavoro
INSERT INTO hmi.dbo.writewo (
    readed, [column], kanbanwoid,
    programname, programnumber, [description],
    itemcode, quantity, customername, customercode,
    targettime, targetenergy, duedate, operatorname
) VALUES (
    0, 'requested', 'SAP-PRD-2026-00142',
    'Albero_Motore_V3', 'P5678', 'Albero motore acciaio C45',
    'ALB-MOT-C45', 200, 'Automotive Parts Srl', 'CLI-108',
    32, '120', '2026-03-15', 'Giuseppe Verdi'
);

-- 2. ERP: Verificare accettazione (dopo qualche secondo)
SELECT id, readed, rejectedreason
FROM hmi.dbo.writewo
WHERE kanbanwoid = 'SAP-PRD-2026-00142';
-- Risultato atteso: readed = 1, rejectedreason = NULL

-- 3. ERP: Monitorare la produzione in corso
SELECT
    id, [status], [column],
    qty_requested, qty_done, qty_scrap,
    mwt_running, mwt_paused, mwt_stopped,
    cycletime_avg, deviation
FROM hmi.dbo.readwo
WHERE order_number = 'SAP-PRD-2026-00142';

-- 4. ERP: Leggere il consuntivo finale (quando column = 'done')
SELECT
    qty_done,
    qty_scrap,
    ROUND(CAST(mwt_running AS FLOAT) / 60.0, 1) AS minuti_running,
    ROUND(CAST(mwt_paused AS FLOAT) / 60.0, 1) AS minuti_pausa,
    ROUND(CAST(mwt_stopped AS FLOAT) / 60.0, 1) AS minuti_stop,
    ROUND(CAST(mwt_setup AS FLOAT) / 60.0, 1) AS minuti_setup,
    cycletime_avg AS tempo_ciclo_medio_sec,
    best_cycle AS miglior_ciclo_sec,
    worst_cycle AS peggior_ciclo_sec,
    start_date,
    end_date,
    DATEDIFF(MINUTE, start_date, end_date) AS durata_totale_minuti
FROM hmi.dbo.readwo
WHERE order_number = 'SAP-PRD-2026-00142'
  AND [column] = 'done';

Esempio 2: Polling ERP per ordini rifiutati

MySQL
SQL Server
-- Polling periodico per controllare errori
SELECT
    id,
    kanbanwoid,
    readed,
    rejectedreason,
    CASE readed
        WHEN 0 THEN 'In attesa di lettura'
        WHEN 1 THEN 'Accettato'
        WHEN 2 THEN 'Modifica in attesa'
        WHEN 3 THEN 'Rifiutato (workstation)'
        WHEN 4 THEN 'Errore Kanban'
    END AS stato_descrizione
FROM hmi.writewo
WHERE readed != 1
ORDER BY id DESC;
-- Polling periodico per controllare errori
SELECT
    id,
    kanbanwoid,
    readed,
    rejectedreason,
    CASE readed
        WHEN 0 THEN 'In attesa di lettura'
        WHEN 1 THEN 'Accettato'
        WHEN 2 THEN 'Modifica in attesa'
        WHEN 3 THEN 'Rifiutato (workstation)'
        WHEN 4 THEN 'Errore Kanban'
    END AS stato_descrizione
FROM hmi.dbo.writewo
WHERE readed != 1
ORDER BY id DESC;

Troubleshooting

L'ordine non appare sulla board Kanban

Errore "colonna piena"

I dati in readwo non si aggiornano

Caratteri speciali nei campi

Connessione al database rifiutata