Mitsubishi PLC와 C# WinForms 연동 가이드 ( Guide to Integrating Mitsubishi PLC with C# WinForms )

2024. 6. 14. 17:52Development👩🏻‍🦳/C#

 

Communication Setup Utility 를 설치한 모습이다
MITSUBISHI ActUtlType Controls Ver1.0 버전을 추가한다
상세세팅 변경후 연결에 성공한 모습이다

 

Test탭을 통해 연결을 시도하면 된다


컴포넌트별로 분류된 C#메뉴 WindowsFormsApp의 모습이다
연결성공창이다

 



1. ActUtlType 객체 초기화 및 설정

먼저, PLC와의 통신을 위해 ActUtlType 객체를 초기화하고 로지컬 스테이션 번호를 설정해야 합니다.

csharp코드 복사
private ActUtlType plc;

public Form1()
{
    InitializeComponent();
    plc = new ActUtlType();
    plc.ActLogicalStationNumber = 1; // 로지컬 스테이션 번호 설정
}

2. PLC 연결 (Open Port)

PLC에 연결하는 메커니즘은 btnOpenPort_Click 이벤트 핸들러에서 구현됩니다. 이 메서드는 ActUtlType 객체의 Open 메서드를 호출하여 PLC와의 연결을 시도합니다.

csharp코드 복사
private void btnOpenPort_Click(object sender, EventArgs e)
{
    int result = plc.Open(); // PLC에 연결 시도
    if (result == 0)
    {
        MessageBox.Show("PLC에 성공적으로 연결되었습니다."); // 연결 성공 메시지
    }
    else
    {
        MessageBox.Show("PLC에 연결 실패: " + result.ToString()); // 연결 실패 메시지
    }
}

3. PLC 연결 종료 (Close Port)

PLC와의 연결을 종료하는 메커니즘은 btnClosePort_Click 이벤트 핸들러에서 구현됩니다. 이 메서드는 ActUtlType 객체의 Close 메서드를 호출하여 연결을 종료합니다.

csharp코드 복사
private void btnClosePort_Click(object sender, EventArgs e)
{
    int result = plc.Close(); // PLC 연결 종료 시도
    if (result == 0)
    {
        MessageBox.Show("PLC 연결이 성공적으로 종료되었습니다."); // 연결 종료 성공 메시지
    }
    else
    {
        MessageBox.Show("PLC 연결 종료 실패: " + result.ToString()); // 연결 종료 실패 메시지
    }
}

4. 데이터 읽기 (Read Data)

PLC에서 데이터를 읽는 메커니즘은 btnReadData_Click 이벤트 핸들러에서 구현됩니다. 이 메서드는 ActUtlType 객체의 GetDevice 메서드를 호출하여 특정 레지스터(D100)의 데이터를 읽습니다.

csharp코드 복사
private void btnReadData_Click(object sender, EventArgs e)
{
    int data;
    int result = plc.GetDevice("D100", out data); // D100 레지스터 읽기 시도
    if (result == 0)
    {
        txtReadData.Text = data.ToString(); // 읽은 데이터 텍스트 박스에 표시
        MessageBox.Show("읽은 데이터: " + data.ToString()); // 읽기 성공 메시지
    }
    else
    {
        MessageBox.Show("데이터 읽기 실패: " + result.ToString()); // 읽기 실패 메시지
    }
}

5. 데이터 쓰기 (Write Data)

PLC에 데이터를 쓰는 메커니즘은 btnWriteData_Click 이벤트 핸들러에서 구현됩니다. 이 메서드는 ActUtlType 객체의 SetDevice 메서드를 호출하여 특정 레지스터(D100)에 데이터를 씁니다.

csharp코드 복사
private void btnWriteData_Click(object sender, EventArgs e)
{
    int data;
    if (int.TryParse(txtWriteData.Text, out data)) // 텍스트 박스에서 숫자 입력 확인
    {
        int result = plc.SetDevice("D100", data); // D100 레지스터에 데이터 쓰기 시도
        if (result == 0)
        {
            MessageBox.Show("데이터 쓰기 성공"); // 쓰기 성공 메시지
        }
        else
        {
            MessageBox.Show("데이터 쓰기 실패: " + result.ToString()); // 쓰기 실패 메시지
        }
    }
    else
    {
        MessageBox.Show("유효한 숫자를 입력하세요."); // 입력값이 유효하지 않음
    }
}

전체 코드 요약

아래는 주요 메커니즘을 포함한 전체 코드를 정리한 것입니다.

csharp코드 복사
using System;
using System.Windows.Forms;
using ActUtlTypeLib; // ActUtlTypeLib 네임스페이스 참조

namespace PLCCommunication
{
    public partial class Form1 : Form
    {
        private ActUtlType plc;

        public Form1()
        {
            InitializeComponent();
            plc = new ActUtlType();
            plc.ActLogicalStationNumber = 1; // 로지컬 스테이션 번호 설정
        }

        // Open Port 버튼 클릭 이벤트 핸들러
        private void btnOpenPort_Click(object sender, EventArgs e)
        {
            int result = plc.Open(); // PLC에 연결 시도
            if (result == 0)
            {
                MessageBox.Show("PLC에 성공적으로 연결되었습니다."); // 연결 성공 메시지
            }
            else
            {
                MessageBox.Show("PLC에 연결 실패: " + result.ToString()); // 연결 실패 메시지
            }
        }

        // Close Port 버튼 클릭 이벤트 핸들러
        private void btnClosePort_Click(object sender, EventArgs e)
        {
            int result = plc.Close(); // PLC 연결 종료 시도
            if (result == 0)
            {
                MessageBox.Show("PLC 연결이 성공적으로 종료되었습니다."); // 연결 종료 성공 메시지
            }
            else
            {
                MessageBox.Show("PLC 연결 종료 실패: " + result.ToString()); // 연결 종료 실패 메시지
            }
        }

        // Read Data 버튼 클릭 이벤트 핸들러
        private void btnReadData_Click(object sender, EventArgs e)
        {
            int data;
            int result = plc.GetDevice("D100", out data); // D100 레지스터 읽기 시도
            if (result == 0)
            {
                txtReadData.Text = data.ToString(); // 읽은 데이터 텍스트 박스에 표시
                MessageBox.Show("읽은 데이터: " + data.ToString()); // 읽기 성공 메시지
            }
            else
            {
                MessageBox.Show("데이터 읽기 실패: " + result.ToString()); // 읽기 실패 메시지
            }
        }

        // Write Data 버튼 클릭 이벤트 핸들러
        private void btnWriteData_Click(object sender, EventArgs e)
        {
            int data;
            if (int.TryParse(txtWriteData.Text, out data)) // 텍스트 박스에서 숫자 입력 확인
            {
                int result = plc.SetDevice("D100", data); // D100 레지스터에 데이터 쓰기 시도
                if (result == 0)
                {
                    MessageBox.Show("데이터 쓰기 성공"); // 쓰기 성공 메시지
                }
                else
                {
                    MessageBox.Show("데이터 쓰기 실패: " + result.ToString()); // 쓰기 실패 메시지
                }
            }
            else
            {
                MessageBox.Show("유효한 숫자를 입력하세요."); // 입력값이 유효하지 않음
            }
        }
    }
}

이 코드는 PLC와의 통신을 설정하고, 데이터를 읽고 쓰는 모든 주요 메커니즘을 포함하고 있습니다. 각 메서드에는 주석을 추가하여 기능을 설명하였습니다  이 코드를 통해 PLC와의 통신이 정상적으로 설정되고 작동하는지 확인할 수 있습니다.

C#ui적용후 plc와 통신에 성곤한 모습이다


통신 방식은 데이터 전송의 전반적인 메커니즘을 나타내며, 다양한 프로토콜과 물리적 매체를 포함합니다.

여기서 사용된 통신 방식은 Mitsubishi의 PLC와 PC 간의 통신을 설정하기 위한 ActUtlType 라이브러리와 CC-Link를 사용합니다. CC-Link는 산업 자동화 시스템에서 널리 사용되는 필드버스 네트워크 프로토콜입니다.

(해당방식으로 구현하고 프로젝트진행할 예정) 통신 방식의 예시: CC-Link

CC-Link (Control & Communication Link)는 고속 필드 네트워크로, 다양한 자동화 기기 간의 데이터 통신을 가능하게 합니다. CC-Link는 주로 다음과 같은 요소로 구성됩니다:

  1. CC-Link Network: 네트워크에서 데이터를 주고받기 위해 사용되는 물리적 및 논리적 구조.
  2. Master-Slave 구조: 마스터 장치와 슬레이브 장치 간의 통신 방식. 마스터는 네트워크를 제어하고 슬레이브 장치에 명령을 보냅니다.
  3. 통신 프레임: 데이터 패킷의 구조로, 주소, 명령, 데이터 등의 정보를 포함합니다.

CC-Link를 사용한 통신 예시

CC-Link를 사용하여 Mitsubishi PLC와 PC 간의 통신을 설정하는 예시는 다음과 같습니다. 여기서는 C#과 ActUtlType 라이브러리를 사용하여 CC-Link 네트워크에서 PLC의 데이터를 읽고 쓰는 방법을 설명합니다.

1. ActUtlType 객체 초기화 및 설정

csharp코드 복사
private ActUtlType plc;

public Form1()
{
    InitializeComponent();
    plc = new ActUtlType();
    plc.ActLogicalStationNumber = 1; // 로지컬 스테이션 번호 설정
}

2. PLC 연결 (Open Port)

PLC에 연결하는 메커니즘입니다.

csharp코드 복사
private void btnOpenPort_Click(object sender, EventArgs e)
{
    plc.ActLogicalStationNumber = 1; // 로지컬 스테이션 번호 설정
    int result = plc.Open(); // PLC에 연결 시도
    if (result == 0)
    {
        MessageBox.Show("PLC에 성공적으로 연결되었습니다."); // 연결 성공 메시지
    }
    else
    {
        MessageBox.Show("PLC에 연결 실패: " + result.ToString()); // 연결 실패 메시지
    }
}

3. 데이터 읽기 (Read Data)

PLC에서 데이터를 읽는 메커니즘입니다.

csharp코드 복사
private void btnReadData_Click(object sender, EventArgs e)
{
    int data;
    int result = plc.GetDevice("D100", out data); // D100 레지스터 읽기 시도
    if (result == 0)
    {
        txtReadData.Text = data.ToString(); // 읽은 데이터 텍스트 박스에 표시
        MessageBox.Show("읽은 데이터: " + data.ToString()); // 읽기 성공 메시지
    }
    else
    {
        MessageBox.Show("데이터 읽기 실패: " + result.ToString()); // 읽기 실패 메시지
    }
}

4. 데이터 쓰기 (Write Data)

PLC에 데이터를 쓰는 메커니즘입니다.

csharp코드 복사
private void btnWriteData_Click(object sender, EventArgs e)
{
    int data;
    if (int.TryParse(txtWriteData.Text, out data)) // 텍스트 박스에서 숫자 입력 확인
    {
        int result = plc.SetDevice("D100", data); // D100 레지스터에 데이터 쓰기 시도
        if (result == 0)
        {
            MessageBox.Show("데이터 쓰기 성공"); // 쓰기 성공 메시지
        }
        else
        {
            MessageBox.Show("데이터 쓰기 실패: " + result.ToString()); // 쓰기 실패 메시지
        }
    }
    else
    {
        MessageBox.Show("유효한 숫자를 입력하세요."); // 입력값이 유효하지 않음
    }
}

요약

  1. 레지스터 읽기 및 쓰기: 특정 레지스터에서 데이터를 읽고 쓰는 작업으로, 이는 통신 방식의 작은 부분입니다.
  2. 통신 방식: CC-Link를 사용하여 PLC와 PC 간의 데이터 전송을 관리합니다.
  3. CC-Link 네트워크: 고속 필드 네트워크로, 마스터-슬레이브 구조와 통신 프레임을 사용하여 데이터를 주고받습니다.

이 예시를 통해 CC-Link를 사용하여 Mitsubishi PLC와 PC 간의 통신을 설정하고 데이터를 읽고 쓰는 방법을 이해할 수 있습니다. 통신 방식은 데이터 전송의 전반적인 메커니즘을 나타내며, 레지스터 읽기 및 쓰기는 그 일부로 작동합니다.

 


 

자동화 분야에서는 다양한 통신 방식이 사용됩니다.

 

각각의 통신 방식은 특정 목적과 환경에 최적화되어 있으며, 산업 자동화 시스템의 요구사항에 따라 선택됩니다. 아래는 주요 통신 방식들을 정리한 것입니다.

1. Ethernet/IP (Ethernet Industrial Protocol)

  • 설명: Ethernet/IP는 산업용 이더넷 프로토콜로, 표준 이더넷 기술을 사용하여 산업용 네트워크를 구성합니다.
  • 특징:
    • 고속 데이터 전송
    • 대규모 네트워크 지원
    • CIP (Common Industrial Protocol) 기반

2. PROFINET (Process Field Net)

  • 설명: PROFINET은 지멘스(Siemens)에서 개발한 산업용 이더넷 표준입니다.
  • 특징:
    • 실시간 데이터 전송
    • 고속 및 저속 장치 모두 지원
    • 강력한 진단 및 유지보수 기능

3. Modbus

  • 설명: Modbus는 Modicon (현재는 Schneider Electric)에서 개발한 통신 프로토콜로, 산업 자동화 시스템에서 널리 사용됩니다.
  • 특징:
    • 오픈 프로토콜
    • 마스터-슬레이브 구조
    • 다양한 물리적 매체(RS-232, RS-485, TCP/IP) 지원

4. CC-Link (Control & Communication Link)

  • 설명: CC-Link는 Mitsubishi Electric에서 개발한 필드 네트워크 프로토콜입니다.
  • 특징:
    • 고속 통신
    • 주로 아시아 지역에서 사용
    • 마스터-슬레이브 구조

5. DeviceNet

  • 설명: DeviceNet은 CAN (Controller Area Network) 기술을 기반으로 한 산업용 네트워크 프로토콜입니다.
  • 특징:
    • 비용 효율적
    • 간단한 배선
    • 높은 신뢰성

6. CANopen

  • 설명: CANopen은 CAN (Controller Area Network) 기반의 통신 프로토콜로, 주로 산업 자동화 및 제어 시스템에서 사용됩니다.
  • 특징:
    • 실시간 통신 지원
    • 높은 신뢰성
    • 복잡한 네트워크 구성 가능

7. HART (Highway Addressable Remote Transducer)

  • 설명: HART는 아날로그 신호와 디지털 신호를 동시에 전송할 수 있는 프로토콜입니다.
  • 특징:
    • 기존 4-20mA 아날로그 배선을 사용
    • 디지털 통신 추가
    • 양방향 통신 가능

8. Profibus (Process Field Bus)

  • 설명: Profibus는 지멘스(Siemens)에서 개발한 필드버스 프로토콜로, 공장 자동화 및 공정 자동화에서 널리 사용됩니다.
  • 특징:
    • 고속 데이터 전송
    • 강력한 진단 기능
    • 다양한 장치와 호환성

9. AS-Interface (Actuator Sensor Interface)

  • 설명: AS-Interface는 간단한 디지털 및 아날로그 센서/액추에이터와 제어 시스템 간의 저가형 네트워크입니다.
  • 특징:
    • 간단한 배선
    • 저비용
    • 설치 및 유지보수 용이

10. SERCOS (Serial Real-time Communication System)

  • 설명: SERCOS는 주로 모션 제어 애플리케이션에서 사용되는 실시간 통신 프로토콜입니다.
  • 특징:
    • 실시간 통신
    • 고속 데이터 전송
    • 모션 제어에 최적화

11. BACnet (Building Automation and Control Networks)

  • 설명: BACnet은 빌딩 자동화 및 제어 시스템을 위한 네트워크 프로토콜입니다.
  • 특징:
    • 표준화된 프로토콜
    • HVAC, 조명, 화재 경보 시스템 통합
    • 상호 운용성

12. EtherCAT (Ethernet for Control Automation Technology)

  • 설명: EtherCAT은 고속 이더넷 기반 필드버스 시스템으로, 주로 산업 자동화에서 사용됩니다.
  • 특징:
    • 매우 짧은 사이클 타임
    • 높은 데이터 처리량
    • 정밀한 동기화

요약

이러한 다양한 통신 방식들은 각각의 장단점과 특정 용도에 맞게 설계되었습니다. 시스템 요구사항과 환경에 따라 적절한 통신 방식을 선택하여 사용하면 됩니다. 예를 들어, 고속 데이터 전송과 실시간 통신이 필요한 경우 EtherCAT이나 SERCOS를 고려할 수 있으며, 단순하고 저비용 솔루션이 필요한 경우 AS-Interface를 선택할 수 있습니다.