Problem med styrenhetens klocka och arkivering
Resultat som lagras i ToolsNet innehåller en tidsstämpel som tillhandahålls av åtdragningsstyrenheten. Om styrenhetens interna klocka är felaktig på grund av ett urladdat RTC-batteri (Real Time Clock), misslyckad NTP-synkronisering (Network Time Protocol), felaktig manuell konfiguration eller klockavvikelse kan resultaten lagras med felaktig tidsstämpel. Felaktiga tidsstämplar kan leda till att ett resultat saknas i rätt arkiv eller arkiveras i fel arkivdatabas.
Vanliga symptom:
Resultaten visas med datum långt tillbaka i tiden (till exempel 1970 eller 2000).
Resultaten visas med datum långt fram i tiden.
Det totala antalet arkiverade resultat stämmer inte överens med antalet resultat i produktionsdatabasen.
Felsökning
Innan du kör arkiveringsjobbet ska du kontrollera att inga resultat har felaktiga tidsstämplar. Kör följande sökfråga mot ToolsNet-databasen för att identifiera misstänkta resultat:
Resultat med tidsstämplar som ligger mer än 1 dag framåt i tiden
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;
Resultat med tidsstämplar som är misstänkt gamla (från tiden före ToolsNet-implementeringen; justera årtalet)
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;
UnitID, namn och totalt antal resultat där årtalet inte stämmer
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;
Om sökningen ger resultat ska du notera ControllerName och IP-adress samt kontrollera styrenhetens klocka innan du kör arkiveringsjobbet.
Inverkan på arkiveringen
Arkiveringsprocessen väljer ut resultat med hjälp av kolumnen Tidsstämpel. Om en styrenhet skickar resultat med felaktig tidsstämpel ändras arkiveringsbeteendet enligt beskrivningen nedan.
Scenario | Konsekvenser av arkivering |
|---|---|
Tidsstämpel i det förflutna (till exempel år 2000) | Resultat kan arkiveras direkt vid den första körningen till fel arkiv, även om det rör sig om aktuella driftsresultat. De kommer att följa arkivets lagringspolicy. |
Tidsstämpel i framtiden (till exempel år 2099) | Resultaten kommer inte att arkiveras förrän det framtida datumet har inträffat. Detta leder till att produktionsdatabasen växer. |
Blandade korrekta och felaktiga tidsstämplar på samma styrenhet | Det ”senaste resultatet” för en monteringsuppgift kan vara felaktigt. Detta påverkar SPC, statistik och rapportering. |
Tidsstämpel i fel år | Resultaten kan komma att arkiveras i fel arkivdatabas. |
Rekommenderade åtgärder före arkivering
Kontrollera RTC-batteriet i styrenheten och byt ut det om det är urladdat.
Se till att styrenheten är konfigurerad för att synkronisera tiden med en pålitlig NTP-server och att synkroniseringen är aktiv.
Korrigera eventuella manuella felkonfigurationer av tiden på styrenheten.
Kör inte arkiveringsjobbet för styrenheter som har skickat in resultat med felaktiga tidsstämplar.
För manuella uppdateringar av tidsstämplar i ToolsNet, öppna ett QCM-supportärende.
Om ett stort antal resultat har felaktiga tidsstämplar och arkiveringen inte kan genomföras på ett säkert sätt, kontakta supporten för ACDC/ToolsNet.
ToolsNet 8 upptäcker eller korrigerar inte felaktiga tidsstämplar från styrenheten automatiskt. Detta är avsiktligt. Ansvaret för att resultatens tidsstämplar är korrekta ligger hos styrenheten.
Rekommenderade åtgärder efter arkivering
Kör en sökning för det angivna datumintervallet (2024-01-01 till 2025-01-01) för att hitta produktionsresultat som inte har arkiverats. Sökningen bör:
Jämföra varje produktionsresultat-ID (Result.ID) med arkivreferensen (Archive.dbo.Result.ResultID).
Endast returnera poster utan matchande arkivpost.
Inkludera enhets- och styrenhetsdetaljer (visa MasterUnitName – UnitName när det är tillämpligt), enhetens IP-adress och den fullständiga resultatposten för att underlätta utredningen av saknade arkivposter.
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;
I Archive.dbo.Result ska du se till att Archive ersätts med namnet på arkivdatabasen i din miljö. Om din arkivdatabas till exempel heter ToolsNetArchive ska du uppdatera den till ToolsNetArchive.dbo.Result.