19. 실시간 모니터링 시스템 구축: C#과 SignalR 활용
제조업체와 공장 자동화 시스템에서 실시간 모니터링은 생산성 향상과 장비 관리의 최적화를 위한 필수 요소입니다. 실시간으로 데이터를 모니터링하고, 즉각적인 피드백을 제공하는 시스템은 공장의 운영 효율성을 크게 개선할 수 있습니다. 이번 글에서는 C#과 SignalR을 활용하여 실시간 데이터 업데이트를 구현하는 방법에 대해 자세히 설명하겠습니다.
1. 실시간 모니터링 시스템의 필요성
현대의 제조 환경에서는 제품의 품질 관리, 설비 상태 모니터링, 생산 현황 파악 등 다양한 정보를 실시간으로 처리해야 합니다. 이를 통해:
- 신속한 의사 결정
- 설비 가동률 향상
- 예방 유지보수 및 다운타임 최소화
이와 같은 이유로, 데이터를 실시간으로 수집하고 이를 사용자에게 제공하는 시스템이 필수적으로 요구됩니다.
2. C#과 SignalR의 개요
SignalR은 ASP.NET을 위한 라이브러리로, 웹 애플리케이션에서 서버와 클라이언트 간의 실시간 통신을 쉽게 구현할 수 있게 도와줍니다. WebSocket을 기반으로 동작하며, 연결이 불안정할 경우 폴백 방법을 제공하여 안정적인 통신을 보장합니다. 이와 같은 특징으로 인해 실시간 모니터링 시스템 구축에 매우 적합합니다.
2.1 SignalR의 기능
- 실시간 데이터 전송: 클라이언트와 서버 간에 즉각적인 데이터를 전송할 수 있습니다.
- 자동 연결 관리: 클라이언트와 서버 간의 연결이 끊어질 경우 자동으로 재연결합니다.
- 다양한 클라이언트 지원: ASP.NET, JavaScript, Java 등 다양한 플랫폼에서 사용할 수 있습니다.
3. 시스템 아키텍처
실시간 모니터링 시스템은 다음과 같은 구성 요소로 이루어집니다:
- 데이터 수집기: 센서나 PLC와 같은 장치로부터 데이터를 수집.
- 서버: C#으로 구축된 SignalR 서버를 통해 실시간 데이터 처리 및 전송.
- 클라이언트: 웹 애플리케이션 또는 데스크탑 애플리케이션에서 데이터를 시각화.
4. C# 및 SignalR을 이용한 실시간 데이터 업데이트 구현
4.1 SignalR 설치
먼저, Visual Studio에서 새로운 ASP.NET Core 웹 애플리케이션을 생성한 후, SignalR 라이브러리를 설치합니다. 다음과 같은 NuGet 패키지를 설치합니다:
Install-Package Microsoft.AspNetCore.SignalR
4.2 Hub 클래스 작성
SignalR의 중심이 되는 Hub 클래스를 작성합니다. 이 클래스는 클라이언트와의 통신을 처리합니다.
using Microsoft.AspNetCore.SignalR;
public class MonitoringHub : Hub
{
public async Task SendMonitoringData(string data)
{
await Clients.All.SendAsync("ReceiveMonitoringData", data);
}
}
4.3 Startup 설정
Startup.cs 파일에서 SignalR을 설정합니다.
public void ConfigureServices(IServiceCollection services)
{
services.AddSignalR();
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
app.UseRouting();
app.UseEndpoints(endpoints =>
{
endpoints.MapHub("/monitoringHub");
});
}
4.4 클라이언트 측 코드
실시간 데이터를 표시하기 위한 클라이언트 측 JavaScript 코드를 설정합니다.
<!DOCTYPE html>
<html>
<head>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/microsoft.signalr/3.1.9/signalr.min.js"></script>
</head>
<body>
<div id="data-container"></div>
<script>
const connection = new signalR.HubConnectionBuilder()
.withUrl("/monitoringHub")
.build();
connection.on("ReceiveMonitoringData", function (data) {
$("#data-container").append("<p>" + data + "</p>");
});
connection.start().catch(function (err) {
return console.error(err.toString());
});
</script>
</body>
</html>
4.5 데이터 발송 메커니즘
서버 측에서는 데이터를 주기적으로 수집하고, 이를 SignalR Hub를 통해 클라이언트로 전송합니다. 예를 들어, Timer를 사용해 일정 시간마다 데이터를 전송할 수 있습니다.
public class DataCollector
{
private readonly IHubContext _hubContext;
public DataCollector(IHubContext hubContext)
{
_hubContext = hubContext;
}
public async Task StartDataCollection()
{
while (true)
{
var data = GetDataFromSensors(); // 여기에 데이터를 가져오는 논리 구현
await _hubContext.Clients.All.SendAsync("ReceiveMonitoringData", data);
await Task.Delay(5000); // 5초 간격
}
}
}
5. 데이터 시각화 및 추가 기능
실시간으로 수신한 데이터를 다양한 형식으로 시각화할 수 있습니다. 예를 들어, 차트 라이브러리를 사용하여 생산량, 설비 상태 등을 그래픽으로 표현할 수 있습니다. 추가적으로, 사용자에게 알림을 질문하기 위한 기능을 추가하여 효과적으로 사용자 인터페이스를 개선할 수 있습니다.
6. 결론
SignalR을 활용한 실시간 모니터링 시스템은 현대 제조업의 필수 요소이며, C#을 이용하여 효율적으로 구현할 수 있습니다. 지속적으로 변화하는 시장 요구에 대처하기 위해 실시간 데이터 분석 및 모니터링 시스템은 점점 더 중요해지고 있습니다. 이 글에서 소개한 방법을 통해 여러분의 제조 공장에도 실시간 모니터링 시스템을 성공적으로 구축할 수 있기를 바랍니다.