250x250
반응형
관리 메뉴

Allen's 데이터 맛집

[3편] 스마트팩토리 MES 프로젝트의 구현 과정과 주요 기능 본문

Project/스마트팩토리 C#으로 MES 구축

[3편] 스마트팩토리 MES 프로젝트의 구현 과정과 주요 기능

Allen93 2024. 12. 3. 11:14
지난 글에서는 스마트팩토리 MES 프로젝트에서 사용된 기술과 도구들을 살펴봤습니다. 이번 포스팅에서는 프로젝트의 구현 과정과 주요 기능을 상세히 다루어 보겠습니다.

프로젝트 구현 과정

스마트팩토리 MES 프로젝트는 여러 단계로 나뉘어 진행되었습니다. 각 단계는 실제 공정 데이터를 다루며, 시스템 통합과 자동화에 중점을 두었습니다.


1️⃣ 시스템 설계 및 구조 정의

프로젝트를 시작하기 전에 데이터 흐름과 시스템 구조를 정의했습니다. MES 시스템은 데이터가 다양한 공정을 거치며 통합적으로 관리되는 시스템이기 때문에, 데이터베이스와 통신 프로토콜 설계가 매우 중요했습니다.

  • 주요 설계 요소:
    1. 데이터베이스 설계: 각 공정 데이터를 저장할 테이블 구조 설계.
    2. 통신 프로토콜 정의: PLC와 VISION 프로그램, 바코드 장비 간 통신 규약 설정.
    3. 시스템 아키텍처: 데이터 수집, 처리, 저장, 시각화의 전체적인 흐름 정의.
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 PLCTCP/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(그래픽 사용자 인터페이스)를 설계했습니다.
윈도우 애플리케이션으로 제작하여 실시간 데이터를 확인하고 제어할 수 있도록 했습니다.

  • 주요 기능:
    1. 공정 상태 요약: 각 공정의 상태를 시각적으로 표시.
    2. 이상 감지 알림: 데이터 이상 시 경고 메시지 표시.
    3. 데이터 검색: 특정 제품이나 공정에 대한 데이터를 조회.

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. 유연한 데이터 검색 기능

  • 데이터베이스에 저장된 데이터를 검색하여 과거 공정 이력을 분석할 수 있습니다.

구현 중 해결한 기술적 도전

  1. 데이터 동기화 문제
    • PLC와 데이터베이스 간의 동기화를 구현하며, 실시간 처리 속도를 개선했습니다.
  2. 네트워크 통신 안정성
    • TCP/IP 통신 중 발생하는 지연 문제를 해결하기 위해 데이터 전송 로직을 최적화했습니다.
  3. 시각화 성능 개선
    • 대용량 데이터를 처리하며 그래프 렌더링 속도를 높이기 위해 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