Problemi del clock del controller e archiviazione
I risultati memorizzati in ToolsNet includono un timestamp fornito dal controller di serraggio. Se il clock interno del controller non è corretto a causa dell'esaurimento della batteria dell'orologio in tempo reale (RTC), di un errore nella sincronizzazione tramite il protocollo NTP (Network Time Protocol), di un'errata configurazione manuale o di una deriva dell'orologio, i risultati potrebbero essere salvati con un timestamp errato. Un timestamp errato può causare la mancata presenza di un risultato nell'archivio corretto o la sua archiviazione nel database di archivio sbagliato.
Sintomi comuni:
I risultati riportano date molto lontane nel tempo (ad esempio, il 1970 o il 2000).
I risultati riportano date molto lontane nel futuro.
Il numero totale dei risultati archiviati non corrisponde al numero di risultati presenti nel database di produzione.
Individuazione del problema
Prima di eseguire il processo di archiviazione, assicurati che nessun risultato presenti timestamp errati. Esegui questa query sul database di ToolsNet per individuare i risultati sospetti:
Risultati con data e ora che indicano 1 giorno o più nel futuro
SELECT
r.ID,
r.ResultDateTime,
r.ResultInsertDateTime,
CASE
WHEN u.MasterUnitID IS NOT NULL
AND mu.Name IS NOT NULL
THEN CONCAT(mu.Name, ' - ', u.Name)
ELSE u.Name
END AS ControllerName,
u.IPAddress,
p.Name AS ProgramName,
r.UnifiedResultStatusTypeID AS ResultStatus
FROM AtlasCopco_ToolsNet_Database.ACDC.Result AS r
LEFT JOIN AtlasCopco_ToolsNet_Database.ACDC.Unit AS u
ON r.UnitID = u.ID
LEFT JOIN AtlasCopco_ToolsNet_Database.ACDC.Unit AS mu
ON u.MasterUnitID = mu.ID
LEFT JOIN AtlasCopco_ToolsNet_Database.ACDC.Program AS p
ON r.ProgramID = p.ID
WHERE r.ResultDateTime > DATEADD(DAY, 1, GETUTCDATE())
ORDER BY
r.ResultInsertDateTime DESC;
Risultati con date sospettosamente vecchie (precedenti all'implementazione di ToolsNet; modificare l'anno)
SELECT
r.ID,
r.ResultDateTime,
r.ResultInsertDateTime,
CASE
WHEN u.MasterUnitID IS NOT NULL
AND mu.Name IS NOT NULL
THEN CONCAT(mu.Name, ' - ', u.Name)
ELSE u.Name
END AS ControllerName,
u.IPAddress,
p.Name AS ProgramName,
r.UnifiedResultStatusTypeID AS ResultStatus
FROM AtlasCopco_ToolsNet_Database.ACDC.Result AS r
LEFT JOIN AtlasCopco_ToolsNet_Database.ACDC.Unit AS u
ON r.UnitID = u.ID
LEFT JOIN AtlasCopco_ToolsNet_Database.ACDC.Unit AS mu
ON u.MasterUnitID = mu.ID
LEFT JOIN AtlasCopco_ToolsNet_Database.ACDC.Program AS p
ON r.ProgramID = p.ID
WHERE
r.ResultDateTime < (
SELECT TOP (1)
TimeStamp
FROM AtlasCopco_ToolsNet_Database.ToolsNet.SystemInfoLog
)
AND r.ResultDateTime < (
SELECT TOP (1)
ResultInsertDateTime
FROM AtlasCopco_ToolsNet_Database.ACDC.Result
ORDER BY
ID
)
ORDER BY
r.ResultInsertDateTime ASC;
ID unità, nome e totale dei risultati in cui l'anno non corrisponde
SELECT
r.UnitID,
CASE
WHEN u.MasterUnitID IS NOT NULL AND mu.Name IS NOT NULL
THEN CONCAT(mu.Name, ' - ', u.Name)
ELSE u.Name
END AS ControllerName,
u.IPAddress,
COUNT(*) AS MismatchedYearCount
FROM AtlasCopco_ToolsNet_Database.ACDC.Result r
LEFT JOIN AtlasCopco_ToolsNet_Database.ACDC.Unit u
ON r.UnitID = u.ID
LEFT JOIN AtlasCopco_ToolsNet_Database.ACDC.Unit mu
ON u.MasterUnitID = mu.ID
LEFT JOIN AtlasCopco_ToolsNet_Database.ACDC.Program p
ON r.ProgramID = p.ID
WHERE DATEPART(YEAR, r.ResultDateTime) <> DATEPART(YEAR, r.ResultInsertDateTime)
GROUP BY
r.UnitID,
CASE
WHEN u.MasterUnitID IS NOT NULL AND mu.Name IS NOT NULL
THEN CONCAT(mu.Name, ' - ', u.Name)
ELSE u.Name
END,
u.IPAddress
ORDER BY MismatchedYearCount DESC;
Se la query restituisce dei risultati, prendere nota del nome del controller e dell'indirizzo IP, quindi verificare il clock del controller prima di eseguire il processo di archiviazione.
Impatto sull’archiviazione
Il processo di archiviazione seleziona i risultati utilizzando la colonna Data e ora. Se un controller invia risultati con un timestamp errato, il comportamento di archiviazione cambia come descritto di seguito.
Situazione | Impatto dell'archiviazione |
|---|---|
Timestamp passato (ad esempio, anno 2000) | I risultati potrebbero essere archiviati immediatamente nell'archivio sbagliato già al primo tentativo, anche se si tratta di risultati operativi recenti. Rispetteranno la politica di conservazione prevista per quell'archivio. |
Timestamp futuro (ad esempio, anno 2099) | I risultati non verranno archiviati fino al raggiungimento di tale data futura. Questo fa sì che il database di produzione aumenti di dimensioni. |
Presenza di timestamp corretti e non corretti sullo stesso controller | Il "risultato più recente" di un'operazione di assemblaggio potrebbe essere errato. Ciò ha ripercussioni su SPC, statistiche e report. |
Timestamp nell’anno sbagliato | I risultati potrebbero essere archiviati nel database di archiviazione sbagliato. |
Azioni consigliate prima dell'archiviazione
Controllare la batteria dell'RTC del controller e sostituirla se scarica.
Assicurarsi che il controller sia configurato per sincronizzare l'ora con un server NTP affidabile e che la sincronizzazione sia attiva.
Correggere eventuali impostazioni errate dell'ora sul controller.
Non eseguire il processo di archiviazione per i controller che hanno inviato risultati con timestamp errati.
Per aggiornare manualmente i timestamp in ToolsNet, apri un ticket di assistenza QCM.
Se un numero elevato di risultati presenta timestamp errati e l'archiviazione non può procedere in modo sicuro, si prega di informare il team di assistenza ACDC/ToolsNet.
ToolsNet 8 non rileva né corregge automaticamente i timestamp errati del controller. È voluto. La responsabilità dell'integrità del timestamp dei risultati spetta al responsabile del trattamento.
Azioni consigliate dopo dell'archiviazione
Eseguire una query per l'intervallo di date specificato (dal 1° gennaio 2024 al 1° gennaio 2025) per individuare i risultati di produzione che non sono stati archiviati. La query dovrebbe:
Confrontare ogni ID del risultato di produzione (Result.ID) con il riferimento dell'archivio (Archive.dbo.Result.ResultID).
Restituire solo i record senza una corrispondente voce nell’archivio.
Includere i dettagli relativi all'unità e al controller (indicando MasterUnitName - UnitName, se del caso), l'indirizzo IP dell'unità e il record completo dei risultati per facilitare l'analisi dei record mancanti nell'archivio.
SELECT
u.ID AS UnitID,
CASE
WHEN u.MasterUnitID IS NOT NULL AND mu.Name IS NOT NULL
THEN CONCAT(mu.Name, ' - ', u.Name)
ELSE u.Name
END AS ControllerName,
u.IPAddress AS IPaddress,
r.*
FROM AtlasCopco_ToolsNet_Database.ACDC.Result r
INNER JOIN AtlasCopco_ToolsNet_Database.ACDC.Unit u
ON r.UnitID = u.ID
LEFT JOIN AtlasCopco_ToolsNet_Database.ACDC.Unit mu
ON u.MasterUnitID = mu.ID
LEFT JOIN Archive.dbo.Result arch
ON r.ID = arch.ResultID
WHERE
r.ResultDateTime >= '2024-01-01'
AND r.ResultDateTime < '2025-01-01'
AND arch.ResultID IS NULL
ORDER BY
ControllerName,
r.ResultDateTime DESC;
In Archive.dbo.Result, assicurati di sostituire Archivio con il nome del database di archiviazione del tuo ambiente. Ad esempio, se il database di archivio si chiama ToolsNetArchive, rinominalo ToolsNetArchive.dbo.Result.