본문으로 바로가기

사용자 정의형 데이터 타입

category Programming/PLC 2024. 5. 14. 23:06
반응형

IEC에서 표준으로 정의하고 있는 데이터 타입의 변수들만 가지고도
PLC 어플리케이션을 당연히 만들 수 있습니다. 
하지만, 필드에서 요구하는 기능이 복잡하면 복잡할수록,
처리해야 하는 데이터가 많아지면 많아질수록,
일반적인 변수만 가지고는 개발 과정에서 장벽에 부딪히게 되는데요. 
특히나, 단발성으로 끝나지 않고, 약간씩 버전 업이 되면서 반복적으로 수행하는 프로젝트의 경우에는
IEC 표준 데이터 타입의 변수만으로 개발하기가 더더욱 어려워집니다. 
이런 부분을 IEC에서도 고려하고 있었는지,
사용자가 데이터 타입을 직접 정의할 수 있도록 표준을 만들어 두었는데요. 
대표적으로 배열과 구조체가 여기에 해당합니다.
뭔가 거창하게 글을 시작했습니다만, 사실 배열과 구조체가 IEC의 전유물은 아니구요.
이미 C나 Java와 같은 PC 베이스의 프로그래밍 언어에서
자료 구조를 정의할 때 빠지지 않고 등장하는 데이터 타입들입니다.
이들 언어에서 상당히 유용하고, 안정적이라는 것이 이미 숱하게 증명되었기에
IEC에서도 차용한 것이 아닐까하고 조심스럽게 추측해 봅니다.

일단 배열은 위의 그림처럼 선언합니다. 
물론 개발 환경에 따라 선언하는 방식에 조금씩 차이가 있겠지만,
일반 변수를 선언하는 것처럼 배열의 이름이 반드시 들어가야 하고,
베이스가 되는 데이터 타입과 상한 인덱스 및 하한 인덱스도 선언 과정에 포함되어야 합니다. 
선언 과정에서 이러한 정보들이 필요한 이유는
같은 데이터 타입을 가지는 여러 개의 변수를 한 번에 선언한 것이 배열이기 때문입니다.

배열은 배열 자체로도 일부 연산을 처리할 수 있지만,
배열을 구성하는 개별적인 변수들도 연산에 사용될 수 있습니다. 
다시 말해, 프로그램 안에서 개별적인 변수들을 선택해서 참조할 수 있다는 말인데요. 
배열을 선언하는 과정에서 정의했던 하한 인덱스와 상한 인덱스 사이의 인덱스 번호가
배열의 원소들에 차례로 부여가 되기 때문에,
배열의 이름과 부여된 인덱스 번호를 조합한 형태로 프로그램에서 참조할 수 있습니다. 
여기에 한 발 더 나아가서 인덱스를 지칭하는 부분을 정수 타입의 변수로 넣게 되면,
인덱스 변수가 어떤 데이터를 전달하는지에 따라서 참조할 변수를 선택할 수 있다는 말이 되지요.

 

같은 데이터 타입의 변수를 여러 개 선언한 것이 배열이기 때문에,
일반 변수를 선언하듯이 배열을 선언해서 사용할 수 있습니다. 
하지만, 구조체의 경우에는
서로 다른 데이터 타입의 변수들을 하나의 그룹으로 묶어 놓은 데이터 타입이므로,
데이터 타입 자체를 먼저 정의해주어야 합니다. 
이것 또한 컨트롤러의 개발 환경에 따라 조금씩 달라지겠지만,
대체로 별도의 오브젝트를 통해 구조체 타입을 정의하는데요. 
CODESYS 기반의 개발 환경에서는
DUT (Data Unit Type) 오브젝트를 통해 구조체 타입을 정의하고,
이 과정에서 정의된 이름을 데이터 타입으로 사용합니다. 

구조체 변수 또한 구조체 자체로도 일부 연산을 처리할 수 있지만,
구조체를 구성하는 개별적인 변수들을 프로그램 안에서 참조하는 경우가 더 많습니다. 
이 과정에서 구조체 변수의 이름 다음에 점을 찍고 원소의 이름을 붙여주는 형태로 원하는 변수를 참조하는데요. 
배열에서는 인덱스 변수의 데이터를 변경하는 방식으로 원하는 변수를 선택적으로 접근할 수 있었지만,
구조체에서는 서로 다른 데이터 타입의 변수들이 하나의 그룹으로 묶여 있으므로, 그렇게까지 참조할 수는 없습니다.


서로 다른 데이터 타입의 변수들을 하나의 그룹으로 묶어 놓았다는 것은
각 변수들이 차지하는 메모리의 크기가 제각각일 수 있다는 말입니다. 
다시 말해서, 하나의 그룹으로 묶어 놓았으니 관리적 측면에서도
연속된 메모리를 변수들에게 할당하는 것이 컨트롤러도 편할텐데요.
하지만, 차지하는 메모리의 크기가 다르기 때문에 선두 메모리로부터 오프셋을 주는 방식으로는
어떤 변수를 참조할 것인지가 불분명합니다.
그래서, 동일한 목적을 갖는 데이터들을 하나의 그룹으로 묶어주는 정도로만 구조체를 주로 활용합니다.

이번 글의 주제에 관한 더욱 자세한 내용은 전자책을 통해 확인하실 수 있습니다.
아래 Link를 클릭하면 전자책 대한 소개글로 이동하오니,
전자책 구매에 관심 있으신 분들은 참고하시기 바랍니다.

[EBook] - EPUB3] ESME - 기본편

 

EPUB3] ESME - 기본편

슈나이더 일렉트릭에서 출시한 장비 제어용 컨트롤러인 M2XX 컨트롤러의 어플리케이션을 개발하는EcoStruxure Machine Expert (줄여서 ESME)에 관한 내용을 다루는 전자책입니다.현재 Machine Expert와 관련

sw-eng.tistory.com

 

반응형

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

Sequential Function Chart  (0) 2024.05.14
Structured Text  (0) 2024.05.14
FBD와 CFC  (0) 2024.05.14
래더 다이어그램  (2) 2024.05.14
변수의 종류  (0) 2024.05.14