본문으로 바로가기
반응형

다양한 형태로 랩뷰가 활용되겠지만, 제가 주로 일하고 있는 FA 분야에서는 HMI용 어플리케이션의 개발 도구로 랩뷰가 상당히 유용하다고 생각합니다. 물론, InTouch와 같은 범용 SCADA 프로그램들도 많이 있고, 실제 필드에서도 많이 사용하고 있지만 개인적으로는 랩뷰가 가진 파워풀한 퍼포먼스를 완벽히 쫓기에는 무리가 따르지 않겠나 생각합니다.

아무튼, 랩뷰를 통해 HMI용 어플리케이션을 개발하기 위해서는 제어기 또는 주변 기기와의 통신이 필요한데요. 이번 글에서는 Modbus 통신을 이용해서 PLC와 통신하는 과정을 알아보도록 하겠습니다.

위 그림은 이번 글에서의 테스트 환경인데요. 보시는 것과 같이 랩뷰가 설치된 PC와 PLC를 Modbus TCP로 연결할 예정이고, PC가 클라이언트, PLC가 서버 역할을 담당합니다. PLC는 슈나이더 일렉트릭 사의 M262 컨트롤러를 사용할 것이지만, Modbus를 지원하는 다른 디바이스를 상대기기로 사용하셔도 관계는 없습니다. (참고로, 태권도의 종주국이 대한민국이듯이, Modbus는 슈나이더 (구 모디콘)에서 개발했습니다. ㅎㅎ)

Modbus 통신에 대한 내용이나 이더넷 통신에서 클라이언트와 서버의 역할에 대해서는 다른 글을 통해 조금 더 자세히 알아보기로 하구요. 여기서는 Modbus 문법에 따라 PC에서 데이터의 읽기 또는 쓰기 요청을 PLC로 보내면, PLC에서 여기에 대해 응답하는 방식으로 통신이 처리된다는 정도만 이해하시고 넘어가겠습니다.

랩뷰에서 Modbus 통신으로 상대 기기와 데이터를 주고 받을 때는 DSC (Datalogging and Supervisory Control) 모듈을 사용하는 방법이 있고 프로그램에서 직접 포트를 제어하는 방법이 있습니다. 여기서는 DSC 모듈을 사용하는 방법에 대해 설명을 드릴텐데요. 그러기 위해서는 먼저 랩뷰의 프로젝트를 하나 생성하셔야 합니다.

랩뷰의 프로젝트 창에서 위 그림과 같이 내 컴퓨터를 마우스 우클릭했을 때 나타나는 메뉴에서 새로 만들기 → I/O 서버를 선택하면,

위 그림과 같이 새 I/O 서버 생성 창이 나타나는데요. 앞에서 말씀드렸듯이, 랩뷰가 설치된 PC를 Modbus TCP 통신에서 클라이언트로 사용할 예정이므로, Modbus를 선택하고 계속... 버튼을 클릭합니다. 참고로, PC를 서버 디바이스로 사용할 경우에는 Modbus Slave를 선택합니다.

새 I/O 서버 생성 창에서 Modbus를 선택하고 계속 버튼을 클릭하면 위 그림과 같이 Modbus 서버에 대한 설정 창이 나타납니다. 다시 말해, 지금의 테스트에서는 PLC에 대한 정보를 설정하는 창인데요. Modbus TCP로 통신 연결할 예정이니 오른쪽 상단의 Model 부분을 클릭해서 Modbus Ethernet으로 변경하구요. PLC의 IP 주소를 IP address 부분에 입력합니다. 여기서 Communication Settings의 Address 부분을 주목하셔야 하는데요. Serial 통신에서의 슬레이브 ID라고 생각하시면 됩니다.

Ethernet 통신 라인에서의 Modbus 통신을 Modbus TCP라고 부르듯이, Serial 통신 라인에서의 Modbus 통신을 Modbus SL (Serial Link)이라고 부릅니다. 혹자는 Modbus RTU라고도 부르는데, 패킷의 전송 방식 때문에 붙여진 이름이구요. 같은 Serial의 Modbus ASCII도 있기 때문에, 정확한 명칭은 Modbus SL입니다. 아무튼, Modbus SL 통신에서는 슬레이브 ID를 통해 읽기 또는 쓰기에 대한 메시지가 전달되는 상대 기기를 지정합니다. 이것을 정확한 명칭으로 Unit ID라고 부르구요. 위 그림에서 Communication Settings의 Address가 바로 이 Unit ID를 의미합니다.

Serial 통신에서는 메시지가 전달될 상대 기기를 Unit ID로 지목하기 때문에 Unit ID가 상당히 중요한 의미를 가지지만, Ethernet 통신에서는 IP 주소를 통해 상대 기기를 지목하므로 일반적인 Modbus TCP 통신에서는 Unit ID를 그렇게 신경쓰지 않습니다. 하지만, Modbus TCP를 Modbus SL 통신으로 바꿔주는 Gateway를 경유하게 된다면 Unit ID를 반드시 입력해 주셔야 하구요. Modbus TCP를 지원하는 디바이스지만 일부 디바이스의 경우에는 Unit ID를 철저히 따지는 경우도 있으니까 상대 기기의 Unit ID 정보를 확인하실 필요가 있습니다. (이 테스트에서 사용되는 M262 컨트롤러의 경우에는 Unit ID로 255를 사용합니다.)

설정을 마치고 OK 버튼을 클릭하면 프로젝트 탐색기에 Modbus1이라는 항목이 나타나면, I/O 서버를 추가하는 작업이 완료됩니다.

I/O 서버는 일정 주기마다 상대 기기로부터 데이터를 수집하고, 또 데이터를 전달하는 작업을 처리합니다. 다시 말해서, 통신 패킷과 관련된 별도의 프로그램 작성 없이, PLC의 IP 주소를 설정했던 Configuration Modbus I/O Server 창에 설정했던 내용에 따라 읽기와 쓰기에 대한 메시지를 알아서 전송한다는 말이구요. 여기서 Refresh rate가 데이터를 업데이트 하는 주기에 해당합니다.

아무튼, I/O 서버를 통해 상대 기기와 통신을 처리하기 위해서는 추가되어야 하는 정보가 있는데요. 바로 어떤 주소의 데이터를 읽거나 써줄 것인지를 정의해 주어야 합니다. 이 부분을 랩뷰에서는 공유 변수로 처리하는데요. 상대 기기로부터 수집된 데이터를 기록한다거나, 상대 기기로 전송할 데이터의 바탕이 되는 변수를 의미합니다. 다시 말해, 데이터를 주고 받을 PLC의 주소값을 I/O 서버에 등록해 주어야 한다는 말이지요.

프로젝트에 추가된 I/O 서버를 마우스 우클릭했을 때 나타나는 팝업 메뉴에서 연결 변수 생성...을 선택하면,

위 그림과 같이 연결 변수 생성 창이 나타납니다. 주고 받을 데이터의 Modbus 주소를 소스 탐색에서 먼저 선택하구요. 사용자- 기본 이름 부분을 클릭해서 공유 변수의 이름을 정의한 다음에, 범위 추가 버튼을 클릭하면 또 다른 범위 추가 창이 나타나구요. 여기서 참조할 메모리의 구체적인 주소와 수량을 지정하면 됩니다.

참고로, 본 테스트의 상대 기기인 M262 컨트롤러의 경우에는 %MW로 시작하는 내부 메모리를 이용해서 통신을 주로 진행하므로, 소스 탐색에서 400001-465534를 선택했구요. PLC와는 1 Word에 대한 데이터만 주고 받을 예정이므로, 주소를 400001로 지정하고 아이템 숫자는 1을 정의하였습니다. (M262의 내부 메모리 %MW0은 Modbus 주소에서 400001에 해당합니다.)

이렇게 추가한 공유 변수는 랩뷰의 블록 다이어그램을 통해 참조할 수 있습니다. 지금까지 설명드린 내용에 따라, PLC와 Modbus TCP 통신이 정확하게 이루어지는지 확인하기 위해 위 그림과 같이 테스트 환경을 간단히 만들어 보았구요. 여기서 왼쪽 하단의 웹 페이지는 M262 컨트롤러의 내부 메모리가 어떻게 변화되는지를 확인하기 위해 임시로 구현한 Web Visualization 화면입니다.

그리고, 위 영상을 통해 통신이 정상적으로 이루어지는 것을 확인할 수 있습니다.

 

반응형

'Programming > LabVIEW' 카테고리의 다른 글

랩뷰의 디자인 패턴 : 상태머신  (2) 2024.06.04
랩뷰로 Modbus 통신하기 (Program)  (0) 2024.05.30
랩뷰에서 파이썬 호출하기  (3) 2024.05.27
랩뷰에서 파이썬 실행하기  (0) 2024.05.27
MAP 데이터 타입  (0) 2024.05.27