Problémy s hodinami controlleru a archivace

Výsledky uložené v ToolsNet obsahují časové razítko poskytnuté controllerem utahování. Pokud jsou interní hodiny controlleru chybné kvůli vybité baterii hodin reálného času (RTC), selhání synchronizace protokolu Network Time Protocol (NTP), chybné ruční konfiguraci nebo posunu hodin, mohou být výsledky uloženy s chybným časovým razítkem. Chybné časové razítko může způsobit, že výsledek bude chybět ve správném archivu nebo bude archivován do chybné archivní databáze.

Běžné příznaky:

  • Výsledky se zobrazují s daty daleko v minulosti (například 1970 nebo 2000).

  • Výsledky se zobrazují s daty daleko v budoucnosti.

  • Celkový počet archivovaných výsledků neodpovídá počtu výsledků v databázi výroby.

Detekce problému

Před spuštěním archivace ověřte, zda žádné výsledky nemají nesprávná časová razítka. Spusťte tento dotaz v databázi ToolsNet, abyste identifikovali podezřelé výsledky:

Výsledky s časovými razítky více než 1 den v budoucnosti

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;

Výsledky s podezřele starými časovými razítky (před spuštěním ToolsNet, upravte rok)

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 jednotky, název a celkové výsledky, u kterých se neshoduje rok

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;

Pokud u dotazu doje k výsledkům, zaznamenejte si název controlleru a IP adresu a před spuštěním archivační úlohy prověřte hodiny controlleru.

Dopad na archivaci

Proces archivace vybírá výsledky pomocí sloupce Časové razítko. Pokud controller odešle výsledky s nesprávným časovým razítkem, chování archivace se změní, jak je popsáno níže.

Scénář

Dopad archivace

Časové razítko v minulosti (například rok 2000)

Výsledky mohou být při prvním spuštění okamžitě archivovány do chybného archivu, i když se jedná o nedávné provozní výsledky. Budou se řídit zásadami uchovávání archivů pro příslušný archiv.

Časové razítko v budoucnosti (například rok 2099)

Výsledky nebudou archivovány, dokud nebude dosaženo daného budoucího data. To způsobí růst databáze výroby.

Kombinovaná správná a nesprávná časová razítka na stejném controlleru

„Nejnovější výsledek“ pro montážní úkol může být chybný. Toto ovlivňuje SPC, statistiky a hlášení.

Časové razítko v nesprávném roce

Výsledky mohou být archivovány do nesprávné archivní databáze.

Doporučené akce před archivací

  • Zkontrolujte baterii RTC controlleru a v případě vybití ji vyměňte.

  • Ujistěte se, že je controller nakonfigurován pro synchronizaci času se spolehlivým NTP serverem a že je synchronizace aktivní.

  • Opravte jakékoli ruční nesprávné nastavení času v controlleru.

  • Nespouštějte archivační úlohu u controllerů, které odeslaly výsledky s nesprávnými časovými razítky.

  • Pro ruční aktualizace časových razítek v ToolsNet otevřete tiket podpory QCM.

  • Pokud má nesprávná časová razítka velký počet výsledků a archivace nemůže bezpečně probíhat, informujte tým podpory ACDC/ToolsNet.

ToolsNet 8 nebude automaticky zjišťovat ani opravovat nesprávná časová razítka controlleru. To je nastaveno záměrně. Za správnost časového razítka výsledků odpovídá controller.

Doporučené akce po archivaci

Pro nalezení výsledků výroby, které nebyly archivovány, spusťte dotaz pro zadaný rozsah dat (2024-01-01 až 2025-01-01). Dotaz musí:

  • Porovnat každé ID výsledku výroby (Result.ID) s odkazem na archiv (Archive.dbo.Result.ResultID).

  • Vrátit pouze záznamy bez odpovídajícího záznamu v archivu.

  • Zahrnout podrobnosti o jednotce a controlleru (zobrazit název hlavní jednotky - název jednotky, je-li to relevantní), IP adresu jednotky a celý záznam výsledku pro podporu prošetření chybějících archivních záznamů.

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;

V Archive.dbo.Result se ujistěte, že je možnost Archiv nahrazena názvem archivní databáze vašeho prostředí. Pokud má například vaše archivní databáze název ToolsNetArchive, aktualizujte jej na ToolsNetArchive.dbo.Result.