[포스코x코딩온] 스마트 팩토리 SW 개발자 과정 9 주차 회고 | PLC - 펑션블록(카운트), 사용자 정의 펑션/펑션블록
지난 시간에 배운 펑션블록에 이어 이번에는 카운트 펑션블록과 사용자 정의 펑션/펑션블록에 대해 배웠다. 아래 목차를 통해 오늘 배운 내용을 정리해보겠다.
카운트 펑션 블록의 형태는 CTU_***과 같은 형태로 카운트를 뜻하는 CT 뒤에 Up, Down, Up-Down이 붙고 _***에는 _자료형이 들어가는 형태를 취한다. 사진으로 살펴보면 아래의 형태를 취한다.
예시의 펑션블록은 자료형이 INT인 카운트 UpDown 펑션블록이므로 CTUD_INT 형태를 취한다. 즉, 카운트 펑션블록은 카운트 횟수가 1씩 늘어나는 CTU 펑션블록, 카운트 횟수가 1씩 감소하는 CTD 펑션블록, 마지막으로 카운트가 올라갔을 때의 출력과 내려갔을 때의 출력을 모두 갖는 CTUD 펑션블록이 있다. 이들은 또 뒤에 붙는 자료형에 따라 각각 6가지의 종류를 갖는다.
업 카운트는 위의 형태를 띠며 각각 CU는 입력, Q는 출력을 의미한다. R은 CV의 값을 0으로 초기화하는 것이고 PV는 출력 신호를 내보낼 카운트 숫자를 변수로 갖는다. CU에 신호가 들어올 때마다 CV의 값이 1씩 증가하며 이때 CV = PV가 되면 출력 Q가 동작하는 펑션블록이다.
다운 카운트는 업카운트와 유사하지만 반대의 동작을 하는 펑션블록이다. PV의 값에서 신호가 들어올때마다 1회씩 감소된 값이 CV에 저장된다. 이때, CV가 0이 될 경우 Q가 동작하는 펑션블록이다. LD를 ON하면 CV = PV가 되며 LD를 ON하지 않고 다운 카운트를 동작시킬 경우 CV가 0으로 시작하기때문에 계속 신호를 보내게 된다. 따라서 반드시 LD를 1회 ON한 후 CD에 신호를 입력받아야 다운 카운트가 정상적으로 일어나는 것을 확인할 수 있다. 아래 회로는 이런 상황을 방지하기 위해 초기 1스택만 LD를 동작시켜주는 회로이다.
CTUD 펑션블록은 앞서 언급한 CTU와 CTD의 특성을 하나의 펑션블록에 넣은 것으로서 둘의 특징을 모두 갖는다고 이해하면 되므로 추가적인 설명 없이 넘어가도록 하겠다.
사용자 정의 펑션은 기존의 펑션/펑션블록 외에 사용자가 직접 만드는 펑션/펑션블록으로 동일한 로직을 재활용할 수 있고 사용자 정의로 로직을 숨김으로써 노하우를 보호할 수 있으며 프로그램 메모리를 효과적으로 활용할 수 있다는 점이 강점이다.
시뮬레이션을 켰다면 꼭 꺼주고 만들어야한다. 시뮬레이션을 끄지 않으면 만들 수 없으니 주의할것!
시뮬레이션을 껐다면 위 이미지를 참고해서 사용자 정의 펑션을 만들어주면 된다. 그러면 아래 창이 뜰 것이다.
여기서 중요한 것은 리턴 데이터 타입을 적절히 사용하는 것이다. 리턴 데이터 타입은 이 펑션의 출력 데이터 타입을 의미하기 때문에 어떤 데이터를 반환하는 펑션을 만들것인지 잘 생각한 후에 설정해줘야한다. 이렇게 리턴데이터 타입까지 설정해줬다면 다음은 로컬변수 설정을 해줘야한다.
로컬변수 설정을 해주기 위해 방금 전 만든 사용자 정의 펑션의 이름 앞에 있는 화살표를 누르면 위의 사진처럼 나오는 것을 확인할 수 있다. 여기서 로컬변수를 더블 클릭해주면 로컬변수를 설정할 수 있는 창이 아래처럼 나오게 된다.
이 창에서 어떤 변수를 인풋으로 할지 그런 것들을 본인이 원하는 대로 설정해주면 된다. 마지막으로 남은 것은 프로그램이다.
사용자 정의 펑션 아래 항목에 위치한 프로그램을 더블 클릭하면 XG5000에서 여태까지 작업하던 환경과 같은 창이 열리게 된다. 여기서 해당 사용자 정의 펑션이 수행할 역할에 따라 적절하게 프로그램해주면 사용자 정의 펑션의 정의가 끝나게 된다. 마지막으로 남은 것은 원래 작업하던 프로그램 창에서 해당 펑션을 불러온 후, 제대로 작동하는지 확인하는 일만 남았다.
피타고라스의 법칙을 통해 A변과 B변에 값을 입력하면 C변의 길이를 구해주는 사용자 정의 펑션 PITA가 정상적으로 동작하는 것을 확인할 수 있다.
펑션블록도 사용자 정의 펑션과 마찬가지 방법으로 만들 수 있다. 차이점은 펑션의 경우엔 무조건 하나의 출력만이 존재해야하므로 생성 단계에서 리턴 데이터 형태를 정하고 생성하지만 펑션블록은 여러개의 출력이 존재할 수 있기때문에 로컬변수 설정 단계에서 INPUT 뿐만 아니라 OUTPUT 역시 설정해줘야한다는 것이 있다. 또한, 사용자 정의 펑션과 펑션블록의 정의 단계에서 사용한 로컬변수는 이름 그대로 로컬변수이므로 메인으로 작업하던 탭에서 같은 변수명을 사용해도 충돌이 없다는 것을 알아두면 좋다.
오늘은 이렇게 카운트 펑션블록의 종류와 동작방식, 그리고 사용자 정의 펑션 및 펑션블록의 생성과 사용법에 대해 알아봤다. 다음 시간에는 또 다른 내용으로 돌아오도록 하겠다. 그럼 20000~ 포스팅을 마치도록하겠다.
[포스코x코딩온] 스마트 팩토리 SW 개발자 과정 11 주차 회고 | 파이썬 반복문 (0) | 2023.06.04 |
---|---|
[포스코x코딩온] 스마트 팩토리 SW 개발자 과정 10 주차 회고 | 신호등 PLC 프로젝트 (0) | 2023.05.25 |
[포스코x코딩온] 스마트 팩토리 SW 개발자 과정 9 주차 회고 | PLC - 펑션블록, 타이머 (0) | 2023.05.17 |
[포스코x코딩온] 스마트 팩토리 SW 개발자 과정 7, 8주차 회고 | C++과 Mysql 연동을 활용한 채팅 프로그램 제작 팀프로젝트 (0) | 2023.05.11 |
[포스코x코딩온] 스마트 팩토리 SW 개발자 과정 6주차 회고 | MYSQL - JOIN (0) | 2023.05.01 |