솔루션전문, -서브윌- 입니다🙂

📧도입 문의 : servewill@naver.com | beta 버전 도입 문의도 언제나 환영합니다👍

🌏통신 프로토콜/PLC

C# 미쯔비시 PLC 실제 실전 연결 방법_2(.NET, ActUtlTypeLib, ActLogicalStationNumber)

서브윌 2023. 8. 28. 18:52

⛔반드시 이전 포스팅 -

 

 C# 미쯔비시 PLC 실제 실전 연결 방법_1(MX Component, 시뮬레이션 X)

 

C# 미쯔비시 PLC 실제 실전 연결 방법_1(MX Component, 시뮬레이션 X)

사전 준비 1. PLC 정보와 통신 환경 최근 제조업체 로봇에 미쯔비시 PLC가 설치되었습니다. PLC의 CPU type은 Q03UDV입니다. 윈도우 환경 컴퓨터와 Ethernet(TCP/IP) 통신이 가능하도록 PLC에 IP와 포트 번호를

servewill.tistory.com

- 를 참고하시길 바랍니다. 위 과정 이후를 기반으로 설명합니다.


ActUtlTypeLib

MX Component 설치 중 설치경로를 따로 지정 안했다면, C:\MELSEC\Act\Control 에서 여러 DLL 파일들을 확인할 수 있습니다. 해당 DLL 파일들은, VBA/Script, Visual Studio 등에서 참조하여 .NET Basic, C++, C# 코드로 PLC를 컨트롤할 수 있게 해주는 라이브러리입니다.

그중 ActUtlType은, Communication Setup Utility 프로그램에서 등록한 PLC에 아주 간편히 액세스하고 데이터 송/수신 및 읽기/쓰기를 할 수 있게 해주는 라이브러리입니다. 한 번 ActUtlType을 이용해 보겠습니다.

 

개발 환경은 Visual Studio 2022 .NET4.8 C# 콘솔앱입니다. 다른 Visual Studio, .NET 버전을 이용해도 상관없으나 되도록 Visual Studio 2010, .NET 4.0 이상 버전을 사용하길 권장합니다.

먼저 Visual Studio에서 ActUtlType을 참조합니다.

● IDE - 참조 우클릭 - 참조 추가(R)

솔루션 탐색기에서 참조를 우클릭하고 참조 추가를 클릭합니다.

● COM - MITSUBISHI ActUtlType Controls Ver1.0 체크 - 확인

참조 관리자 - COM에서 MITSUBISHI ActUtlType Controls Ver1.0 찾아서 체크 후 확인 버튼을 클릭합니다. 또는 찾아보기 버튼을 클릭해서 ActUtlType.dll 을 찾아서 참조해도 됩니다.

참조 부분에 ActUtlTypeLib이라는 라이브러리가 추가된 것을 확인할 수 있습니다.


이제 코드를 확인해보겠습니다.

using System;
using ActUtlTypeLib; // > 1

namespace ConsoleApp1
{
    internal class Program
    {
        static ActUtlType mPLC; // > 2

        static void Main(string[] args)
        {
            mPLC = new ActUtlType(); // > 3

            mPLC.ActLogicalStationNumber = 1; // > 4

            string hex = "0x";
            int result;

            try
            {
                if ((result = mPLC.Open()) != 0) // > 5
                {
                    hex += result.ToString("X8"); // > 6
                    Console.WriteLine("연결 실패 - " + hex);
                }
                else
                {
                    int value;
                    mPLC.GetDevice("D1010", out value); // > 7
                    Console.WriteLine("D1010 디바이스 값 : " + value);
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }

            mPLC.Close(); // > 8
            Console.ReadKey();
        }
    }
}

1. 참조한 ActUtlTypeLib을 선언(using) 합니다.

2. 통신 메소드를 가진 ActUtlType 객체를 생성합니다.

3. 생성한 ActUtlType 객체를 할당합니다.

 

★4. 이전에 Communication Setup Utility 프로그램으로 등록한 PLC의 Logical station number(고유 식별 번호)를 ActUtlType 객체의 ActLogicalStationNumber 멤버 변수에 대입합니다.


5. ActUtlType 객체의 Open 메소드를 호출하여 통신 가능 상태로 전환합니다. Open 메소드 반환값(정수)이 0 이 아니라면 통신 가능 상태가 아닙니다.

6. Open 메소드 반환값을 16진수 문자열로 변환하여 출력합니다. 공식 메뉴얼에서 출력값을 검색하여 통신 실패 원인을 분석합니다.

7. ActUtlType 객체의 GetDevice 메소드를 호출하여 설정된 PLC 디바이스의 값을 가져옵니다.

★8. 위 루틴 이후 Close 메소드를 호출하여 반드시 통신 상태를 종료합니다. SQL Open, Close 호출과 비슷한 원리로 생각하면 됩니다. 똑같이 using 키워드를 이용하여 보안 및 자동 종료 구조를 구현해도 좋습니다.

● 실제 도입된 PLC와 연결 성공

제조업체에 도입된 PLC에서 위 코드를 통해 추출한 디바이스 값입니다.

● PLC 연결 실패

Communication Setup Utility로 PLC를 등록하지 않고 시도했을 때 위와 같이 16진수 오류 값이 반환되는 것을 확인할 수 있습니다.

● MX Component 공식 프로그래밍 메뉴얼

앞서 말한 것처럼 메뉴얼에서 해당 오류 값을 검색하여 원인을 확인할 수 있습니다. 논리 국번은 Logical station number를 의미합니다.

 

drive.google.com/drive/folders/1t82Ud4Dx5dBYkf418Og0K1wsk_8P1AiO에서 MX-Component_v4 메뉴얼(PDF) 파일을 다운로드 받을 수 있습니다.



점검 사항

※ ActUtlType 객체의 ActPassword의 기본값은 공백입니다. PLC 통신 시도 비밀번호가 설정되어있다면 도입 관리자에게 문의해야합니다. 아니라면 ActPassword를 호출할 필요없거나 공백을 대입하면 됩니다.

 

※ 프로젝트 빌드 시 CPU 플랫폼을 Any CPU로 하면 됩니다. 안될 시 32비트(x86)로 지정 후 빌드합니다.



마치며

정말 쉽죠? 연결 방법과 예제 코드를 참고하여, 게더링한 PLC 데이터를 엑셀이나 서버에 저장하거나 Thread 루프로 지속적인 데이터 식별 구조를 충분히 구현할 수 있습니다. 또한, MX Component 라이브러리와 메뉴얼을 통해 PLC와 연동된 설비(로봇, 라인 등)를 코드로 쉽게 조작 명령할 수 있습니다. 하지만 설비 조작 프로그램 구현은 반드시 숙련된 설비 엔지니어와 미팅하여 체계적인 기술 기획을 세워야 합니다.

 

● 서브윌 PLC 데이터 게더링 및 디바이스 명령 전달 프로그램

Communication Setup Utility 실행 시 발생하는 'last operation ended in correctly restart this application' 및 'memory alloc fail or object create fail occurred in control' 오류 해결법을 포스팅하겠습니다. 감사합니다👍


블로그 글 관련 질문, 각 종 S/W 도입 문의는 언제나 환영합니다😄

📧 : servewill@naver.com