Allen's 데이터 맛집
[3편] 스마트팩토리 MES 프로젝트의 구현 과정과 주요 기능 본문
지난 글에서는 스마트팩토리 MES 프로젝트에서 사용된 기술과 도구들을 살펴봤습니다. 이번 포스팅에서는 프로젝트의 구현 과정과 주요 기능을 상세히 다루어 보겠습니다.
프로젝트 구현 과정
스마트팩토리 MES 프로젝트는 여러 단계로 나뉘어 진행되었습니다. 각 단계는 실제 공정 데이터를 다루며, 시스템 통합과 자동화에 중점을 두었습니다.
1️⃣ 시스템 설계 및 구조 정의
프로젝트를 시작하기 전에 데이터 흐름과 시스템 구조를 정의했습니다. MES 시스템은 데이터가 다양한 공정을 거치며 통합적으로 관리되는 시스템이기 때문에, 데이터베이스와 통신 프로토콜 설계가 매우 중요했습니다.
- 주요 설계 요소:
- 데이터베이스 설계: 각 공정 데이터를 저장할 테이블 구조 설계.
- 통신 프로토콜 정의: PLC와 VISION 프로그램, 바코드 장비 간 통신 규약 설정.
- 시스템 아키텍처: 데이터 수집, 처리, 저장, 시각화의 전체적인 흐름 정의.
CREATE TABLE `테이블_이름` (
`idx` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT,
`barcode1` VARCHAR(30) DEFAULT NULL,
`barcode2` VARCHAR(30) DEFAULT NULL,
`barcode3` VARCHAR(30) DEFAULT NULL,
`Datetime` DATETIME NOT NULL,
`Model` VARCHAR(20) NOT NULL,
`c1` VARCHAR(20) DEFAULT NULL,
`c14` VARCHAR(20) DEFAULT NULL,
`c15` VARCHAR(20) DEFAULT NULL,
`c16` VARCHAR(20) DEFAULT NULL,
`c17` VARCHAR(20) DEFAULT NULL,
`c18` VARCHAR(20) DEFAULT NULL,
`c180` VARCHAR(20) DEFAULT NULL,
`c19` VARCHAR(20) DEFAULT NULL,
`c20` VARCHAR(20) DEFAULT NULL,
`c21` VARCHAR(20) DEFAULT NULL,
`c22` VARCHAR(20) DEFAULT NULL,
`c23` VARCHAR(20) DEFAULT NULL,
`c24` VARCHAR(20) DEFAULT NULL,
`c25` VARCHAR(20) DEFAULT NULL,
`c26` VARCHAR(20) DEFAULT NULL,
`c27` VARCHAR(20) DEFAULT NULL,
`c28` VARCHAR(20) DEFAULT NULL,
`c29` VARCHAR(20) DEFAULT NULL,
`c30` VARCHAR(20) DEFAULT NULL,
`c31` VARCHAR(20) DEFAULT NULL,
`c32` VARCHAR(20) DEFAULT NULL,
`c33` VARCHAR(20) DEFAULT NULL,
`Decision` VARCHAR(20) DEFAULT NULL,
PRIMARY KEY (`idx`,`Datetime`),
KEY `idx_bcr` (`barcode1`)
) ENGINE=Aria AUTO_INCREMENT=13081 DEFAULT CHARSET=utf8
/*!50100 PARTITION BY RANGE (YEAR(`Datetime`))
SUBPARTITION BY HASH ( MONTH(`Datetime`))
SUBPARTITIONS 12
(
PARTITION p2018 VALUES LESS THAN (2019) ENGINE = Aria,
PARTITION p2019 VALUES LESS THAN (2020) ENGINE = Aria,
PARTITION p2020 VALUES LESS THAN (2021) ENGINE = Aria,
PARTITION p2021 VALUES LESS THAN (2022) ENGINE = Aria,
PARTITION p2022 VALUES LESS THAN (2023) ENGINE = Aria,
PARTITION p2023 VALUES LESS THAN (2024) ENGINE = Aria,
PARTITION p2024 VALUES LESS THAN (2025) ENGINE = Aria,
PARTITION p2025 VALUES LESS THAN (2026) ENGINE = Aria,
PARTITION p2026 VALUES LESS THAN (2027) ENGINE = Aria,
PARTITION p2027 VALUES LESS THAN (2028) ENGINE = Aria,
PARTITION p2028 VALUES LESS THAN (2029) ENGINE = Aria,
PARTITION p2029 VALUES LESS THAN (2030) ENGINE = Aria,
PARTITION p2030 VALUES LESS THAN (2031) ENGINE = Aria,
PARTITION pmax VALUES LESS THAN MAXVALUE ENGINE = Aria) */
- 각 제품의 공정 데이터를 시간 순으로 기록하며, 공정 단계(process_step)와 상태(status)를 관리하도록 설계했습니다.
2️⃣ 데이터 수집 및 통신 구현
스마트팩토리 MES의 핵심은 실시간 데이터 수집입니다. 공정별로 발생하는 데이터를 Mitsubishi PLC와 TCP/IP 통신을 통해 수집했습니다.
- Mitsubishi PLC:
- 각 공정에서 발생한 데이터를 센서를 통해 읽고, VISION 프로그램으로 전달.
- MELSEC 통신 프로토콜을 활용해 실시간 데이터 전송.
PLC 데이터 처리 예제
// PLC에서 데이터 수신
public string ReceiveDataFromPLC()
{
using (TcpClient client = new TcpClient("192.168.0.100", 5000))
{
NetworkStream stream = client.GetStream();
byte[] buffer = new byte[1024];
int bytesRead = stream.Read(buffer, 0, buffer.Length);
return Encoding.ASCII.GetString(buffer, 0, bytesRead);
}
}
3️⃣ 공정 데이터 저장 및 관리
수집된 데이터를 MySQL 데이터베이스에 저장하여, 모든 공정 상태를 추적할 수 있도록 했습니다.
- 실시간 데이터 저장: 각 공정 단계에서 수집된 데이터는 적절한 컬럼에 저장되어, 이후 분석 및 시각화에 활용됩니다.
데이터 저장 코드 예제
public void SaveDataToDatabase(string productId, string processStep, float value)
{
using (MySqlConnection conn = new MySqlConnection("server=localhost;database=smart_factory;uid=root;pwd=password;"))
{
conn.Open();
string query = "INSERT INTO production_data (product_id, process_step, timestamp, value) VALUES (@productId, @processStep, NOW(), @value)";
using (MySqlCommand cmd = new MySqlCommand(query, conn))
{
cmd.Parameters.AddWithValue("@productId", productId);
cmd.Parameters.AddWithValue("@processStep", processStep);
cmd.Parameters.AddWithValue("@value", value);
cmd.ExecuteNonQuery();
}
}
}
5️⃣ 사용자 인터페이스(UI) 설계
작업자가 쉽게 사용할 수 있도록 직관적인 GUI(그래픽 사용자 인터페이스)를 설계했습니다.
윈도우 애플리케이션으로 제작하여 실시간 데이터를 확인하고 제어할 수 있도록 했습니다.
- 주요 기능:
- 공정 상태 요약: 각 공정의 상태를 시각적으로 표시.
- 이상 감지 알림: 데이터 이상 시 경고 메시지 표시.
- 데이터 검색: 특정 제품이나 공정에 대한 데이터를 조회.
GUI 코드 예제 (C#)
private void UpdateDashboard(string status)
{
statusLabel.Text = $"Current Status: {status}";
statusLabel.ForeColor = status == "Normal" ? Color.Green : Color.Red;
}
프로젝트 주요 기능
1. 바코드 기반 제품 식별
- 각 제품은 바코드로 식별되며, 생산 공정에서 데이터를 추적할 수 있습니다.
2. 실시간 공정 모니터링
- 데이터가 실시간으로 수집되고 시각화되어 공정 상태를 한눈에 파악할 수 있습니다.
3. 공정별 데이터 저장
- 각 공정에서 발생한 데이터를 체계적으로 저장하여 품질 분석과 개선에 활용할 수 있습니다.
4. 이상 감지 및 경고 시스템
- 공정 중 데이터 이상이 감지되면 경고 알림이 표시되어 문제를 즉각 해결할 수 있습니다.
5. 유연한 데이터 검색 기능
- 데이터베이스에 저장된 데이터를 검색하여 과거 공정 이력을 분석할 수 있습니다.
구현 중 해결한 기술적 도전
- 데이터 동기화 문제
- PLC와 데이터베이스 간의 동기화를 구현하며, 실시간 처리 속도를 개선했습니다.
- 네트워크 통신 안정성
- TCP/IP 통신 중 발생하는 지연 문제를 해결하기 위해 데이터 전송 로직을 최적화했습니다.
- 시각화 성능 개선
- 대용량 데이터를 처리하며 그래프 렌더링 속도를 높이기 위해 Plotly를 활용했습니다.
https://github.com/siilver94/Smart-factory-MES-program/tree/main
GitHub - siilver94/Smart-factory-MES-program
Contribute to siilver94/Smart-factory-MES-program development by creating an account on GitHub.
github.com
728x90