본문 바로가기

Programming/C#/WPF

Melsoft MX Component C# Q Series

최근 회사에서 C#과 미쯔비시 PLC Q Series를 연결할 일이 생겨서, 구글링 및 내가 알아낸 내용을

저장하고자 포스팅을 해본다.


Visual Studio 2010 Professional SP1을 사용하였으며, PLC 연결을 위해 MX Component V3를 사용하여

Q02(H) CPU를 사용한 QJ71E71 Ethernet 모듈을 사용한 PLC와 연결을 진행했다.

(PLC의 GX Develop를 이용하여 미리 PLC를 Setting하여 Ready 상태여야 한다.)


1. Project에 DLL을 참조시켜야 한다.

    >> 일단 TCP 모듈을 사용하기 위하여 c:\Melsec\Act\Control\ActEther.dll 을 참조시킨다.


2. 참조시킨 DLL의 객체를 생성한다.

ACTETHERLib.ActQJ71E71TCP _ActQJ71E71TCP = new ACTETHERLib.ActQJ71E71TCP(); //TCP 프로토콜 사용 시
ACTETHERLib.ActQJ71E71UDP _ActQJ71E71UDP = new ACTETHERLib.ActQJ71E71UDP(); //UDP 프로토콜 사용 시


3. 생성한 _ActQJ71E71TCP 또는 _ActQJ71E71UDP 객체에 설정값을 지정.

//PC쪽 설정 내용
_ActQJ71E71TCP.ActSourceNetworkNumber = 0; //Network No
_ActQJ71E71TCP.ActSourceStationNumber = 2; //Station No

//PLC쪽 설정 내용.
_ActQJ71E71TCP.ActCpuType  = 34; //CPU Type : Q02(H) CPU
_ActQJ71E71TCP.ActHostAddress = "192.168.0.1"; //Host (IP Address)
_ActQJ71E71TCP.ActNetworkNumber = 0t; //Network No
_ActQJ71E71TCP.ActStationNumber = 1; //Station No

위의 코드는 TCP 프로토콜일 경우에 사용된 소스이며,
만일 UDP로 연결하고자 할 경우 _ActQJ71E71TCP를 _ActQJ71E71UDP로 변경하여 설정한다. 또한 UDP일 경우 Port No도 설정해 주어야 한다.


4. PLC Connection

    4-1. _ActQJ71E71TCPClass.Open() 를 이용하여 통신을 Open

         4-1-1. 위 Method를 실행후 Retrun Value를 통하여 상태를 확인 가능.

           (Retrun Value는 16진수로 변경하여 확인해야 함. MX_Component_Version_3_Programming_Manual.pdf 참조)


    4-2. iRet = _ActQJ71E71TCPClass.ReadDeviceBlock(string szDevice, int dwSize, out int lpdwData)

           (디바이스의 메모리 블럭에서 데이터를 읽어온다.)

           4-2-1. int iRet  : 실행 결과

           4-2-2. string szDevice : Data를 읽어올 Device 번지.

           4-2-3. int dwSize : 현재 파악 중....

           4-2-4. out int lpdwData : Read Data 변수


    4-3. iRet = _ActQJ71E71TCPClass.WriteDeviceBlock(string szDevice, int dwSize, ref int lpdwData);

            (디바이스의 메모리 블럭에 데이터를 쓴다)

           4-3-1. int iRet  : 실행 결과

           4-3-2. string szDevice : Data를 쓸 Device 번지.

           4-3-3. int dwSize : 현재 파악 중....

           4-3-4. out int lpdwData : Write Data 변수


우선은 여기까지 파악.