컨트롤러 클록 문제 및 아카이빙
ToolsNet에 저장된 결과에는 체결 컨트롤러가 제공하는 타임스탬프가 포함되어 있습니다. 방전된 실시간 클록(RTC) 배터리, 네트워크 타임 프로토콜(NTP) 동기화 실패, 수동 구성 오류 또는 클록 드리프트로 인해 컨트롤러의 내부 클록이 부정확한 경우 결과가 잘못된 타임스탬프와 함께 저장될 수 있습니다. 잘못된 타임스탬프로 인해 결과가 올바른 아카이브에서 누락되거나 잘못된 아카이브 데이터베이스에 아카이빙될 수 있습니다.
공통 증상:
결과가 먼 과거의 날짜와 함께 표시됨(예: 1970 또는 2000).
결과가 먼 미래의 날짜와 함께 표시됨.
아카이빙된 결과의 총 개수가 생산 데이터베이스의 결과 개수와 일치하지 않습니다.
문제 감지
아카이브 작업을 실행하기 전에 잘못된 타임스탬프를 가진 결과가 없는지 확인합니다. 이 쿼리를 ToolsNet 데이터베이스에 대해 실행하여 의심스러운 결과를 식별합니다.
1일보다 먼 미래의 타임스탬프가 있는 결과
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;
의심스럽게 오래된 타임스탬프가 있는 결과(ToolsNet 배포 전, 연도 조정)
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, 이름 및 총 결과 수
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;
쿼리가 결과를 반환하면 ControllerName 및 IP 주소를 기록하고 아카이빙 작업을 실행하기 전에 컨트롤러 클록을 확인합니다.
아카이빙에 대한 영향
아카이빙 프로세스에서는 타임스탬프 열을 사용하여 결과를 선택합니다. 컨트롤러에서 잘못된 타임스탬프가 있는 결과를 전송하면 아카이빙 동작이 아래 기술한 것과 같이 변경됩니다.
시나리오 | 아카이빙 영향 |
|---|---|
과거의 타임스탬프(예: 2000년) | 결과가 최근 작업 결과라 하더라도 첫 실행 시 잘못된 아카이브로 즉시 아카이빙됩니다. 이러한 결과는 해당 아카이브에 대한 아카이브 유지 정책을 따릅니다. |
미래의 타임스탬프(예: 2099년) | 해당 미래 날짜에 도달할 때까지 결과는 아카이빙되지 않습니다. 이로 인해 생산 데이터베이스가 증가합니다. |
동일한 컨트롤러에 올바른 타임스탬프와 잘못된 타임스탬프가 혼합되어 있음 | 조립 작업에 대한 "최신 결과"가 올바르지 않을 수 있습니다. 이는 SPC, 통계 및 보고에 영향을 줍니다. |
잘못된 연도의 타임스탬프 | 결과가 잘못된 아카이브 데이터베이스에 아카이빙될 수 있습니다. |
아카이빙 전 권장 조치
컨트롤러 RTC 배터리를 확인하고 방전된 경우 교체합니다.
컨트롤러가 신뢰할 수 있는 NTP 서버와 시간을 동기화하도록 구성되고 해당 동기화가 활성화되어 있는지 확인합니다.
컨트롤러의 잘못된 수동 시간 구성을 수정합니다.
잘못된 타임스탬프가 있는 결과를 제출한 컨트롤러에 대해 아카이빙 작업을 실행하지 마십시오.
ToolsNet의 타임스탬프 수동 업데이트를 위해 QCM 지원 티켓을 엽니다.
대량의 결과에 잘못된 타임스탬프가 있고 아카이빙을 안전하게 처리할 수 없는 경우 ACDC/ToolsNet 지원팀에 알립니다.
ToolsNet 8은 잘못된 타임스탬프를 자동으로 감지하거나 수정하지 않습니다. 이는 설계에 의한 것입니다. 결과 타임스탬프 무결성은 컨트롤러의 책임입니다.
아카이빙 후 권장 조치
지정된 날짜 범위(2024-01-01~2025-01-01)에 대해 쿼리를 실행하여 아카이빙되지 않은 생산 결과를 찾습니다. 쿼리는
아카이브 참조(Archive.dbo.Result.ResultID)를 사용하여 각 생산 결과 ID(Result.ID)를 비교합니다.
일치하는 아카이브 항목이 없는 레코드만 반환합니다.
누락된 아카이브 레코드 조사를 지원하기 위해 유닛 및 컨트롤러 세부 정보(적용 가능한 경우 MasterUnitName - UnitName 표시), 유닛 IP 주소, 전체 결과 레코드를 포함합니다.
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;
Archive.dbo.Result에서 아카이브를 사용자 환경의 아카이브 데이터베이스 이름으로 대체합니다. 예를 들어 사용자의 아카이브 데이터베이스에 ToolsNetArchive라고 명명한 경우 이를 ToolsNetArchive.dbo.Result로 업데이트합니다.