PAC을 이용한 머신 컨트롤러 구조
PAC의 장점을 이용하기 위하여 어플리케이션 코드는 입출력, 프로세스 제어 로직, HMI(Human-Machine Interface)나 다른 파트와의 통신 등을 모두 고려하여 잘 구성해야 한다. 이 글에서는 개발 도구로써 LabVIEW Real-Time을 사용하는 CompactRIO 기반의 머신 컨트롤러의 구조를 살펴본다. 이 내용은 Compact FieldPoint나 PXI기반의 다른 리얼타임 타깃에도 동일하게 적용될 수 있다.
자료제공·한국내쇼날인스트루먼트(www.ni.com/korea)
대부분의 장비 제어 어플리케이션의 핵심은 PAC(Programmable Automation Controller)나 PLC(Programmable Logic Controller)와 같은 컨트롤러라고 할 수 있다. 이러한 컨트롤러들은 아날로그 또는 디지털 입출력을 사용하여 센서의 데이터를 받고 그에 따라 장비를 제어한다.
전통적으로 래더 로직이나 순차적 함수 차트를 사용하여 프로그래밍되는 PLC가 장비 제어에 주로 쓰여왔지만, 최근 더 높은 성능과 더 다양한 기능을 요구하는 추세가 늘어감에 따라 장비 제어가 PAC으로 이루어지는 경우가 많아지고 있다.
PAC은 기존의 PLC로는 구현이 어려운 고속 데이터 수집 및 처리, 모션 제어나 머신 비전 등을 하나의 시스템으로 통합하기가 수월하여 이러한 움직임을 더욱 가속화시키고 있다. 이러한 PAC의 장점을 이용하기 위하여 어플리케이션 코드는 입출력, 프로세스 제어 로직, HMI(Human-Machine Interface)나 다른 파트와의 통신 등을 모두 고려하여 잘 구성해야 한다.
이 글에서는 개발 도구로써 LabVIEW Real-Time을 사용하는 CompactRIO 기반의 머신 컨트롤러의 구조를 살펴본다. 이 내용은 Compact FieldPoint나 PXI기반의 다른 리얼타임 타깃에도 동일하게 적용될 수 있다.
개 요
컨트롤러는 HMI와 함께 장비 제어 어플리케이션의 주요 하부 시스템이다. HMI는 장비상태에 대한 정보를 디스플레이하고 오퍼레이터로부터 장비 제어 입력을 받는 역할을 한다. 장비 제어 참조 구조에서 HMI의 또 다른 기능은 경고, 이벤트 감지, 데이터 로깅이 있다. 컨트롤러는 장비와 센서 사이의 통신 및 인터페이스, 현재 장비상태의 제어와 HMI와의 통신 등의 다양한 기능을 수행해야 한다. 이 두 시스템은 모두 현재 데이터를 저장하고 다른 시스템이나 장비와 통신을 핸들링하는 태그 엔진으로 구동된다.(그림 1)
![]() |
| 그림 1. 장비 제어 구조의 구조도 |
컨트롤러 작동
머신 컨트롤러의 핵심 동작에는 입출력 스캔과 프로세스 제어가 포함된다. 초기화 상태가 지나면 컨트롤러는 연속적으로 입력값을 읽고 이 값을 기반으로 어플리케이션의 로직을 이용하여 장비 프로세스를 위한 제어 파라미터를 계산하게 되며 결과적으로 장비에 출력값을 주게 된다.
입출력 과정을 단순화하고 여러 가지 다른 프로세스 제어 시스템에 액세스하기 위해 중앙 데이터 스토리지는 어플리케이션에서 사용되는 모든 변수나 태그 값을 저장한다. 이 태그 테이블은 이전 데이터보다는 현재 데이터를 제공하기 때문에 리얼타임 데이터베이스라고도 불린다.
그림 2에서 기본적인 컨트롤러 구조를 볼 수 있다. 그림에서 보이는 HMI 통신 컴포넌트는 컨트롤러 내부의 태그 테이블의 데이터를 HMI에서 액세스하고 보여주기 위해 필요한 컴포넌트다. 이 컴포넌트는 다중 병렬 제어 프로세스를 가능하게 해준다. 입출력 스캔 엔진이나 HMI 통신, 프로세스 제어 블록 같은 각각의 컴포넌트들은 멀티스레딩 환경에서 병렬로 동작한다. 대부분의 경우 반드시 필요하지는 않지만 필요한 경우 컴포넌트 간의 동기화가 추가될 수 있다.
![]() |
| 그림 2. 방비제어를 위한 소프트웨어 구조 |
태그 엔진
태그 엔진은 컨트롤러의 핵심이 되는 시스템이며 태그 테이블, 입출력 스캔 엔진, HMI 통신 컴포넌트의 기능을 조합하여 사용할 수 있다. 이러한 조합된 기능은 장비와 HMI간의 통신 자동화를 위한 컨트롤러 프로세스 로직에 데이터를 제공한다.
이와 같은 동작이 대부분의 장비 제어 어플리케이션에 널리 사용됨에 따라, 컴포넌트들의 특정 동작이 어플리케이션 개발자의 맞춤형 프로그래밍을 요구하기 보다는 어플리케이션에 따라 대표적인 몇 가지 경우로 선택 및 적용되는 것이 추세다.
현재값 테이블(CVT)
현재값 테이블(Current Value Table: CVT) 컴포넌트는 컨트롤러 내의 태그 테이블을 실행하기 위하여 사용된다. 또한 CVT는 다른 시스템에서도 액세스할 수 있는 데이터 저장 메커니즘을 제공한다. CVT 내의 태그는 이름이 붙어 있어 설계와 실행을 위한 프로세스 제어 로직을 쉽게 만들 수 있을 뿐만 아니라 유지와 보수도 쉽게 할 수 있다. CVT에 저장된 태그 리스트는 직관적인 설정 도구인 Tag Configuration Editor를 이용하여 설정할 수 있다.
CVT는 장비와 HMI 각 부분과의 통신을 자동화하기 위해 cRIO 입출력 엔진과 CVT 클라이언트 통신 컴포넌트에 의해 직접 액세스 된다.
입출력 스캔 엔진
cRIO 입출력 엔진(cRIO I/O Engine;CIE)은 입출력 스캔 엔진을 제공한다. 이 컴포넌트는 CompactRIO 플랫폼에서 구성가능한 싱글 포인트 I/O를 개발하기 위한 디자인 패턴이다. 한번 특정 FPGA와 cRIO 모듈 인터페이스에 맞는 cRIO 입출력 엔진이 만들어지면, Tag Configuration Editor를 사용하여 특정 어플리케이션에 맞도록 설정할 수 있다. 이와 동시에 추가적인 입출력 동작을 지원하는 FPGA 인터페이스도 만들 수 있다.
HMI 통신
컨트롤러 작동 중에 장비 제어 파라미터와 다른 중간값들을 읽어들이는 센서는 입출력 엔진과 다른 컴포넌트에 의해 사용되는 프로세스 제어 블록에 의해 CVT 내부에 위치한다. 모든 데이터는 디스플레이, 로깅, 이벤트/알람 감지용 HMI에서 사용 가능하다.
HMI 통신은 CVT 클라이언트 통신 컴포넌트에 의해 제공되는데, 이는 로컬 CVT에 연결되는 네트워크 인터페이스도 제공한다. HMI에서 읽어 들인 컨트롤러 입력 데이터는 HMI에 존재하는 다른 CVT위에 올라간다.
컨트롤러 CVT에서 HMI CVT로의 매핑(Mapping)은 Tag Configuration Editor에 의해 수정 가능하다.
장비 프로세스 제어
컨트롤러 내부의 데이터와 입출력을 핸들링하는 프레임워크가 설치된 다음에는 어플리케이션 개발은 태그 엔진의 설정과 프로세스 제어 로직의 실행만이 남게 된다. 컨트롤러에서 이 부분은 각각의 어플리케이션, 장비, 자동화 프로세스에 맞추어 설정된다.
프로세스 제어 블록은 CVT에 인터페이스 되며 따라서 실제 물리적 입출력단에 직접 상호작용할 필요 없이 쉽고 빠르게 개발할 수 있다. 컨트롤러 어플리케이션에서 이 부분은 각각의 어플리케이션 마다 매우 다른 부분이지만 공통적인 디자인 패턴은 존재한다.
상태 머신
장비 제어에 있어서 프로세스 제어 실행을 위한 디자인 패턴은 대부분 상태 머신의 형태로 되어 있다. 기존의 상태 머신은 프로세스 제어 블록이 장비의 현재 상태와 대응되는 정해진 상태에서 수행되어 왔다. 상태가 변함에 따라 경과된 시간이나 작동자의 명령이 HMI를 통해서 수신되고 프로세스 제어 블록은 하나의 상태에서 다른 상태로 넘어간 후 장비에 출력값을 업데이트 해주게 된다.
LabVIEW Real-Time 개발 도구를 이용하여 상태 머신을 여러 가지 방법으로 구현할 수 있다. 가장 일반적인 방법은 While 루프에 시프트 레지스터를 추가하고 내부에 케이스 구조를 추가하는 방법이다. 이렇게 해서 상태 머신의 다음 반복 구간 동안 상태를 계속 업데이트 할 수 있다.
이 방법은 시프트 레지스터 대신 LabVIEW 큐를 사용하거나 FIFO를 사용하여 더 복잡한 구조로 변경될 수 있으며, 결과적으로 여러 개의 상태를 저장할 수 있거나 여러 하부 상태를 정해놓은 순서대로 연이어 실행할 수 있게 된다.
버퍼를 사용한 상태 머신의 변형인 이벤트 프로세서는 큐나 FIFO에 있는 이벤트나 동작을 한번씩만 사용한다. 이벤트나 어떤 동작이 반복적으로 큐에 쌓이지 않으면 프로세서는 현재 상태에 머물러 있지 않다.
LabVIEW State Chart module은 복잡한 상태 머신 모델을 세울 때 적합한 고급 툴이다. 개발자는 상태 차트를 이용하여 LabVIEW 또는 LabVIEW 리얼타임 타겟에서 실행되는 병렬 상태 다이어그램을 쉽게 설계할 수 있다.
또한 상태 사이의 Transition에 LabVIEW 코드를 할당할 수 있으며, 각각의 상태와 Transition에 들어가기 위한 조건을 설정할 수 있다. 이 모듈은 또한 장비 제어용 표준인 OMAC PackML 등과 같은 산업 표준 상태 다이어그램의 실행을 핸들링 할 수도 있다.
고속 입출력, 제어 및 프로세싱
PAC을 사용하는 가장 큰 장점 중 하나는 기존의 PLC에서 핸들링이 불가능했던 다른 태스크들을 어플리케이션에 추가할 수 있다는 점이다. NI CompactRIO를 컨트롤러로 사용할 경우 고속 데이터 수집, 모션 제어, 하드웨어 기반의 폐루프 제어를 마이크로초 범위 내로 수행할 수 있다.
CompactRIO와 그 안에 탑재된 FPGA 기술을 이용하면 더 복잡하고 정교한 FPGA 기능을 설정할 수 있는데 이는 앞서 소개된 cRIO 입출력 엔진보다 LabVIEW 리얼타임 어플리케이션에서 더 자주 사용된다.
cRIO 입출력 엔진 FPGA 코드를 실행시키면서 동시에 다른 아날로그 입력 모듈을 이용한 고속 데이터 수집이나 LabVIEW 리얼타임에서 수행되는 각각의 태스크에 적용되는 DMA 채널을 사용한 스트리밍도 할 수 있다. FPGA와 컨트롤러 양쪽 모두에서 이 코드는 기존 구조와 병렬적으로 수행되며, 장비 제어 어플리케이션과는 별도로 수행되어 아무런 영향을 주지 않는다.
고속 아날로그 데이터를 사용하여 진동 분석, 장비 상태 모니터링, 주파수 분석 등 다양한 기능을 장비 제어 어플리케이션에 추가할 수 있다. 따라서 추가적인 측정 장비 없이 태스크를 추가할 수 있어 추가적인 비용을 최소화하면서 장비 제어 어플리케이션을 개선 및 효율 향상을 이룰 수 있다.
모션 제어를 직접 장비 컨트롤러에 추가할 수 있음으로 인해 기존에 별개의 어플리케이션 또는 장치로 구현되어 왔던 다양한 동작을 장비에 추가할 수 있게 된다. NI SoftMotion과 C 시리즈 모션 모듈, 디지털 입출력 모듈을 이용하여 어플리케이션에 서보/스텝 모터의 고속 폐루프 제어를 더 손쉽게 추가할 수 있다. FPGA를 사용함으로써 하드웨어 기반으로 밖에는 제공되지 않는 신뢰성과 결정성 높은 모션 컨트롤러를 제작할 수 있다.
LabVIEW RT 기반의 SoftMotion 궤적 생성기는 다차원 등고선을 생성할 수 있으며, 고급 모션 제어 요구에 맞는 움직임을 만들어 낸다. 고속 데이터 수집 동작과 마찬가지로, 이러한 기능들은 기본적인 장비 제어 어플리케이션과 병렬적으로 수행이 가능하다.
고속 데이터 수집이나 모션 제어 같은 추가적인 태스크는 CVT를 이용하여 장비 제어 어플리케이션의 나머지 부분과 통신을 하므로 결국 동일한 데이터와 정보에 액세스된다. 위에서 언급한 서로 다른 컴포넌트들 또는 큐, FIFO, 알림자를 사용하는 장비 제어 어플리케이션 간의 통신 경로는 계속 추가될 수 있다. 또한 태스크간 고속통신은 CVT 클라이언트 통신 인터페이스와 병렬적으로 수행될 수 있다.




