250x250
반응형
관리 메뉴

Allen's 데이터 맛집

[2편] 스마트팩토리 MES 프로젝트에서 사용된 기술과 도구 본문

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

[2편] 스마트팩토리 MES 프로젝트에서 사용된 기술과 도구

Allen93 2024. 11. 30. 11:08

프로젝트에 사용된 주요 기술 스택

1. C#: 프로젝트의 중심 언어

C#은 프로젝트 전반에서 핵심적인 역할을 했습니다.
이 언어는 강력한 객체 지향 프로그래밍 기능과 .NET 프레임워크의 지원 덕분에 하드웨어와 소프트웨어 간의 통신을 구현하기에 적합했습니다.

  • 역할:
    • TCP/IP 통신 프로토콜을 활용해 설비 간 데이터 교환 로직 작성.
    • 데이터 수집과 처리, 그리고 데이터베이스 연동 기능 구현.
    • 사용자 인터페이스와 데이터 시각화를 위한 윈도우 애플리케이션 제작.
  • C# 선택 이유:
    • 안정성: 산업 현장에서 사용되는 다양한 장치와의 통신을 안정적으로 지원.
    • 생산성: .NET의 라이브러리와 도구들이 개발 속도를 높임.
    • 유연성: 하드웨어 연동, 네트워크 통신, 데이터베이스 연결 등 다양한 기능 지원.

2. Mitsubishi PLC 및 MELSEC 통신

스마트팩토리 프로젝트에서 PLC(Programmable Logic Controller)는 설비의 동작을 제어하고 데이터를 수집하는 데 핵심적인 역할을 했습니다.
특히, Mitsubishi PLCMELSEC 통신 프로토콜을 통해 다른 장치와 데이터를 주고받을 수 있었습니다.

  • 역할:
    • 생산 공정에서 발생하는 데이터를 센서를 통해 실시간으로 수집.
    • 수집된 데이터를 VISION 프로그램 및 데이터베이스로 전달.
  • Mitsubishi PLC의 장점:
    • 산업용 표준: 스마트팩토리 환경에서 널리 사용됨.
    • 실시간 데이터 처리: 신속한 데이터 수집 및 전송.
    • MELSEC 통신 지원: 네트워크를 통해 VISION 프로그램과 데이터 교환 가능.

3. 제브라사의 라벨 프린트와 TCP/IP 통신

이 프로젝트에서는 각 제품을 식별하기 위해 제브라사의 바코드 출력 기계를 사용했습니다.
TCP/IP 통신 프로토콜을 활용해 제품 정보를 출력 기계로 전달했습니다.

  • 역할:
    • 제품 식별용 바코드를 출력.
    • 생산 공정의 모든 데이터를 제품 단위로 추적 가능하게 함.
  • TCP/IP 통신 활용:
    • 안정적인 데이터 전송: 바코드 출력 명령과 관련 데이터를 정확히 전달.
    • 확장성: 다수의 장치가 네트워크를 통해 연결되어도 통신 효율 유지.

4. MySQL 데이터베이스

생산 공정 데이터를 저장하고 관리하기 위해 MySQL 데이터베이스를 사용했습니다.
이 데이터베이스는 가볍고 효율적인 구조 덕분에 프로젝트에서 발생하는 데이터를 신속히 처리할 수 있었습니다.

  • 역할:
    • 각 공정 단계에서 수집된 데이터를 테이블 형식으로 저장.
    • 실시간 데이터 조회 및 대시보드 시각화를 위한 데이터 제공.
  • MySQL 선택 이유:
    • 오픈소스: 비용 부담 없이 사용 가능.
    • 성능: 중소규모 프로젝트에서 빠르고 안정적인 성능 제공.
    • 유연성: 테이블 구조 설계와 확장이 용이.
/*
SQLyog Ultimate v11.3 (64 bit)
MySQL - 5.5.58-MariaDB : Database - kb_metal_2
*********************************************************************
*/


/*!40101 SET NAMES utf8 */;

/*!40101 SET SQL_MODE=''*/;

/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
CREATE DATABASE /*!32312 IF NOT EXISTS*/`db_이름` /*!40100 DEFAULT CHARACTER SET utf8 */;

USE `db_이름`;

/*Table structure for table `table1` */

DROP TABLE IF EXISTS `table1`;

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=15157 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) */;
 

5. VISION 프로그램과 밸런스 검사 장비

VISION 프로그램은 공정 데이터를 분석하고 판단하는 데 중요한 역할을 했습니다.
특히, 밸런스 검사 장비는 자동차 부품의 품질을 보장하기 위한 필수 장비였습니다.

  • 역할:
    • Mitsubishi PLC로부터 데이터를 받아 공정 상태 확인.
    • 특정 조건에 따라 데이터베이스에 값을 저장하거나, 작업 상태를 피드백.
  • 밸런스 검사 장비:
    • 자동차 부품의 균형을 측정하여 불량 여부를 판단.
    • 데이터를 실시간으로 저장하고 시각화.

6. 생산 현황 모니터링 시스템

이 프로젝트에서는 실시간 모니터링 시스템을 구현해 생산 데이터를 시각적으로 제공했습니다.
작업자는 모니터링 화면을 통해 전체 공정을 한눈에 파악할 수 있었습니다.


기술 선택의 이유와 대안 비교

왜 C#을 선택했을까요?

  • Python이나 Java 같은 언어도 가능했지만, C#은 하드웨어 제어와 GUI 개발에서 강점을 가집니다.
  • .NET 프레임워크의 강력한 라이브러리 지원 덕분에 빠르고 효율적인 개발이 가능했습니다.

왜 MySQL을 선택했을까요?

  • PostgreSQL과 같은 대안도 있었지만, 프로젝트의 데이터 규모와 요구 사항에 비춰봤을 때, MySQL은 가볍고 간단한 설정으로 적합했습니다.

https://github.com/siilver94/Smart-factory-MES-program

 

GitHub - siilver94/Smart-factory-MES-program

Contribute to siilver94/Smart-factory-MES-program development by creating an account on GitHub.

github.com

 

728x90