일상에 꼭 필요한 정보, 늘 함께하는 나침반 일상에 꼭 필요한 정보, 늘 함께하는 나침반

Function Block Diagram이란?|블록으로 제어로직을 구성하는 방법

읽는 시간 약 17분

Function Block Diagram이란?|블록으로 제어로직을 구성하는 방법

메타디스크립션
Function Block Diagram은 PLC의 연산과 제어 기능을 블록으로 배치하고 입출력을 연결해 프로그램을 구성하는 그래픽 언어입니다. FBD의 기본 구조와 Function Block, Ladder·Structured Text와의 차이 및 실제 활용방법을 알아봅니다.

PLC 프로그램을 작성하는 방법에는 Ladder Diagram만 있는 것이 아닙니다.

논리연산이나 Timer, Counter, PID 제어처럼 특정 기능을 하나의 블록으로 표현하고 블록의 입력과 출력을 서로 연결하여 프로그램을 구성하는 방법도 있습니다.

이러한 PLC 프로그래밍 언어가 Function Block Diagram, 줄여서 FBD입니다.

FBD는 제어로직의 데이터가 어떤 블록을 거쳐 어떻게 처리되는지를 시각적으로 표현할 수 있어 아날로그 연산, PID 제어, 신호처리처럼 데이터의 흐름이 중요한 프로그램에서 활용하기 좋습니다.

Function Block Diagram이란 무엇일까?

Function Block Diagram은 기능을 수행하는 여러 블록을 화면에 배치하고 블록의 입력과 출력을 연결하여 제어로직을 구성하는 그래픽 기반 PLC 프로그래밍 언어입니다.

일반적으로 FBD라고 줄여서 부릅니다.

FBD 역시 Structured Text와 SFC처럼 IEC 61131-3에서 다루는 PLC 프로그래밍 언어입니다.

기본적인 개념은 다음과 같이 이해할 수 있습니다.

입력 데이터 → Function Block → 처리 결과 → 다음 Function Block → 출력

예를 들어 센서에서 측정한 온도를 비교한 뒤 특정 기준보다 높을 때 Cooling 명령을 발생시키는 프로그램을 여러 기능 블록의 연결로 표현할 수 있습니다.

텍스트 코드를 위에서 아래로 작성하는 Structured Text와 달리 FBD에서는 블록 사이의 연결관계를 보면서 프로그램의 흐름을 파악할 수 있다는 특징이 있습니다.

FBD의 기본 구조는 어떻게 되어 있을까?

FBD 프로그램의 기본 요소는 입력, 기능 블록, 연결선, 출력입니다.

예를 들어 두 개의 조건이 모두 TRUE일 때 Motor Run 명령을 발생시킨다고 가정해 보겠습니다.

개념적으로는 다음과 같은 구조가 됩니다.

Start 조건 → AND Block → Motor Run

Ready 조건 ↗

AND Block에는 두 개 이상의 입력이 들어가고 모든 필요한 조건이 TRUE일 때 출력이 TRUE가 됩니다.

수치 계산에서도 비슷합니다.

Sensor Value → SCALE Block → Compare Block → Alarm

센서의 Raw Data를 Scale Block에서 실제 Engineering Value로 변환하고 변환된 데이터를 Compare Block에서 기준값과 비교하여 Alarm을 발생시키는 방식입니다.

따라서 FBD에서는 데이터가 어디에서 들어와 어떤 기능을 거쳐 어디로 전달되는지가 중요한 구조가 됩니다.

Function과 Function Block은 같은 것일까?

PLC 프로그래밍에서 Function과 Function Block이라는 용어가 사용되는데 두 개념을 완전히 동일하게 보면 안 됩니다.

구체적인 정의와 사용방법은 PLC 개발환경에 따라 차이가 있지만 IEC 61131-3의 일반적인 개념에서는 Function은 입력을 받아 결과를 계산해 반환하는 기능으로 이해할 수 있습니다.

반면 Function Block은 내부 상태를 유지할 수 있는 구조를 가질 수 있습니다.

Timer를 생각하면 이해하기 쉽습니다.

Timer는 입력이 들어온 뒤 얼마나 시간이 경과했는지 내부 상태를 관리해야 합니다. 따라서 동일한 Timer 기능을 여러 곳에서 사용한다면 각각의 동작상태를 구분해서 관리할 필요가 있습니다.

이 때문에 Function Block을 사용할 때는 Instance라는 개념이 중요해집니다.

Function Block Instance란 무엇일까?

Function Block은 동일한 기능을 여러 장치에서 재사용할 수 있습니다.

예를 들어 Motor Control Function Block을 만들었다고 가정해 보겠습니다.

이 블록 안에는 다음과 같은 기능이 포함될 수 있습니다.

Start / Stop 처리

Run Feedback 확인

Fault 확인

Interlock 확인

Alarm 출력

공장에 Motor가 10대 있다면 같은 Motor Function Block의 로직을 재사용하면서 각 Motor별로 별도의 Instance를 생성할 수 있습니다.

예를 들면 다음과 같은 개념입니다.

Motor_01 : MotorControl

Motor_02 : MotorControl

Motor_03 : MotorControl

세 개 모두 같은 MotorControl Function Block을 사용하지만 내부 상태와 입출력 데이터는 각각 독립적으로 관리할 수 있습니다.

이러한 구조를 활용하면 같은 프로그램을 Motor마다 반복해서 작성하는 대신 검증된 제어로직을 재사용할 수 있습니다.

다만 Instance의 생성방법과 메모리 구조는 PLC 제조사와 Programming Software에 따라 다릅니다.

FBD에서 논리연산은 어떻게 표현할까?

FBD에서는 AND, OR, NOT과 같은 논리연산을 블록 형태로 표현할 수 있습니다.

예를 들어 모터가 운전되기 위해 다음 조건이 필요하다고 가정해 보겠습니다.

Start Command

Motor Ready

Interlock 정상

이 세 조건을 AND 관계로 연결하면 모든 조건이 TRUE일 때 Motor Run 명령이 성립하도록 구성할 수 있습니다.

반대로 여러 조건 중 하나라도 만족하면 특정 기능을 실행해야 한다면 OR 연산을 사용할 수 있습니다.

이러한 논리연산은 Ladder Diagram에서도 구현할 수 있습니다.

차이는 표현방법입니다.

Ladder에서는 직렬·병렬 접점 구조를 이용한다면 FBD에서는 논리 Function을 블록으로 배치하고 신호선을 연결하여 표현합니다.

Timer와 Counter도 FBD로 사용할 수 있을까?

FBD에서는 Timer와 Counter 같은 PLC의 기본적인 제어 기능도 블록 형태로 사용할 수 있습니다.

예를 들어 특정 센서가 ON된 후 5초가 지나면 Motor를 동작시킨다고 가정해 보겠습니다.

개념적으로 다음과 같이 구성할 수 있습니다.

Sensor → Timer Block → Motor Run

Timer Block에는 일반적으로 실행조건과 설정시간 등이 입력되고 완료상태나 경과시간 등이 출력될 수 있습니다.

Counter 역시 입력 Pulse를 계산하고 현재 Count와 완료상태 등을 출력하는 방식으로 사용할 수 있습니다.

구체적인 Timer·Counter Block의 이름과 입력·출력 Parameter는 PLC 제조사와 개발환경에 따라 달라질 수 있습니다.

따라서 FBD의 모양만 익히기보다 각 Block이 어떤 입력을 받고 어떤 결과를 출력하는지 이해하는 것이 중요합니다.

FBD는 아날로그 데이터 처리에 왜 유리할까?

FBD가 특히 유용하게 사용되는 분야 중 하나가 아날로그 신호처리입니다.

예를 들어 압력센서의 Raw Value를 실제 압력값으로 변환하고 Low Limit와 High Limit를 비교해야 한다고 가정해 보겠습니다.

다음과 같은 흐름으로 프로그램을 구성할 수 있습니다.

Analog Input

↓

Scaling

↓

Filter

↓

Limit Check

↓

Alarm / Control Output

이 구조를 FBD로 표현하면 데이터가 어떤 처리과정을 거치는지 시각적으로 확인하기 쉽습니다.

특히 여러 개의 연산블록이 연속적으로 연결되는 프로그램에서는 Ladder보다 FBD의 데이터 흐름이 더 직관적으로 느껴질 수 있습니다.

PID 제어와 FBD는 어떤 관계가 있을까?

PID 제어도 FBD가 활용되기 좋은 분야입니다.

온도제어를 예로 들면 현재 온도인 Process Value와 목표온도인 Set Point를 PID Function Block에 입력할 수 있습니다.

PID Block은 두 값의 차이를 기반으로 필요한 제어출력을 계산합니다.

개념적으로 다음과 같습니다.

Set Point ─┐

→ PID Block → Control Output

Process Value ─┘

이 구조를 사용하면 목표값과 현재값이 어떤 제어블록으로 전달되고 결과가 어디로 출력되는지 파악하기 쉽습니다.

실제 PLC의 PID Function Block에는 Gain, Integral Time, Derivative Time, Auto/Manual Mode, Output Limit 등 다양한 Parameter가 존재할 수 있습니다.

구체적인 Parameter와 실행방식은 PLC 제조사와 PID 명령에 따라 다르므로 해당 매뉴얼을 확인해야 합니다.

FBD와 Ladder Diagram은 무엇이 다를까?

FBD와 Ladder는 모두 그래픽 기반 PLC 프로그래밍 방식이지만 표현방법과 장점이 다릅니다.

구분Function Block DiagramLadder Diagram
기본 표현기능 블록과 연결선접점과 Coil
흐름 중심데이터·신호 흐름논리·전기회로 흐름
논리연산AND·OR 등의 Block직렬·병렬 접점
수치연산비교적 직관적연산이 많으면 복잡해질 수 있음
PID·아날로그활용하기 편리구현 가능
현장 I/O 확인구조에 따라 다름접점 상태 확인이 직관적
재사용Function Block 활용FB 호출 등으로 가능

Motor Start/Stop이나 간단한 Interlock처럼 접점 논리가 중요한 프로그램에서는 Ladder가 이해하기 쉬울 수 있습니다.

반대로 여러 데이터가 Function Block을 순차적으로 통과하는 아날로그 처리나 PID 제어에서는 FBD가 편리할 수 있습니다.

따라서 어느 언어가 무조건 우수하다기보다 제어 대상과 프로그램 특성에 맞는 언어를 선택하는 것이 중요합니다.

FBD와 Structured Text는 무엇이 다를까?

Structured Text는 텍스트 기반 언어이고 FBD는 그래픽 기반 언어라는 차이가 있습니다.

예를 들어 두 값을 더하는 프로그램을 ST에서는 수식으로 작성할 수 있습니다.

Total := ValueA + ValueB;

FBD에서는 ValueA와 ValueB를 ADD Block의 입력에 연결하고 출력값을 Total에 연결하는 형태로 표현할 수 있습니다.

복잡한 계산식이나 반복문, Array 처리에서는 Structured Text가 간결할 수 있습니다.

반대로 여러 Function Block이 어떤 순서로 연결되어 있는지 확인하는 것이 중요하다면 FBD가 이해하기 쉬울 수 있습니다.

실제 PLC 프로젝트에서는 Ladder, FBD, ST 등을 목적에 따라 함께 사용하는 경우도 있습니다.

사용자 정의 Function Block을 만드는 이유

PLC 프로그램 규모가 커지면 같은 제어로직이 반복적으로 등장할 수 있습니다.

예를 들어 공장에 비슷한 Motor가 20대 있다면 각 Motor마다 Start, Stop, Interlock, Fault, Feedback 프로그램을 따로 작성하는 것은 비효율적일 수 있습니다.

이때 공통적인 Motor Control Logic을 하나의 Function Block으로 만들 수 있습니다.

Block의 입력은 다음과 같이 구성할 수 있습니다.

StartCommand

StopCommand

InterlockOK

RunFeedback

FaultInput

출력은 다음과 같이 구성할 수 있습니다.

RunOutput

Ready

Running

Alarm

이렇게 만들어 놓으면 여러 Motor에서 동일한 Function Block을 재사용할 수 있습니다.

설계가 잘 된 Function Block은 프로그램 중복을 줄이고 여러 장치의 제어방식을 일정하게 유지하는 데 도움이 됩니다.

Function Block을 너무 크게 만들면 문제가 될까?

Function Block의 재사용성이 좋다고 해서 모든 기능을 하나의 거대한 Block에 넣는 것이 좋은 것은 아닙니다.

하나의 Block 안에 Motor Control, Alarm History, Sequence, HMI 처리, 통신까지 모두 포함하면 내부 구조가 지나치게 복잡해질 수 있습니다.

Function Block은 가능한 한 명확한 하나의 역할을 중심으로 설계하는 것이 좋습니다.

예를 들어 Motor Control, Valve Control, Analog Scaling처럼 기능을 구분하면 프로그램을 이해하고 테스트하기 편리합니다.

또한 Block의 입력과 출력 이름을 명확하게 지정해야 다른 사람이 프로그램을 보더라도 어떤 데이터를 연결해야 하는지 쉽게 이해할 수 있습니다.

FBD에서도 실행순서를 확인해야 한다

FBD는 블록이 선으로 연결되어 있어 데이터가 자연스럽게 흐르는 것처럼 보이지만 실제 실행순서는 PLC 시스템의 규칙에 따라 결정됩니다.

특히 서로 의존하지 않는 여러 블록이나 Feedback 구조가 있을 때는 화면상의 위치만 보고 실행순서를 임의로 판단해서는 안 됩니다.

PLC 개발환경에 따라 네트워크 순서, 데이터 의존관계, 명시적인 실행순서 등을 기준으로 처리할 수 있습니다.

따라서 특정 연산이 반드시 먼저 실행되어야 하는 프로그램에서는 사용하는 PLC의 FBD 실행규칙을 확인하는 것이 중요합니다.

FBD에서도 Scan Cycle을 고려해야 한다

FBD 역시 PLC에서 실행되는 프로그램이므로 Scan Cycle의 영향을 받습니다.

Function Block의 출력이 한 번 계산된 뒤 다음 Scan에서 다시 계산되는 구조인지, 특정 Task 주기에 따라 실행되는지 등을 이해해야 합니다.

특히 PID처럼 일정한 실행주기가 중요한 제어 Function Block은 아무 위치에서 임의로 호출하기보다 제조사가 권장하는 실행주기와 Task 설정을 확인해야 합니다.

많은 Function Block과 복잡한 연산을 한 Scan에서 실행하면 전체 프로그램 실행시간도 증가할 수 있습니다.

따라서 FBD는 그래픽 언어라고 해서 실행시간을 고려하지 않아도 되는 것이 아니라 각 Block도 CPU에서 실제 연산되는 프로그램이라는 점을 기억해야 합니다.

Function Block Diagram을 사용할 때 주의할 점

FBD 프로그램에서 가장 흔하게 발생할 수 있는 문제 중 하나는 블록과 연결선이 지나치게 많아지는 것입니다.

처음에는 시각적으로 이해하기 쉬워도 하나의 Network에 수십 개의 블록을 배치하면 오히려 전체 흐름을 파악하기 어려워질 수 있습니다.

따라서 기능별로 Network나 Program을 적절하게 분리하고 신호 이름을 명확하게 지정하는 것이 좋습니다.

또한 동일한 Function Block을 여러 번 사용할 때는 각각의 Instance가 올바르게 분리되어 있는지 확인해야 합니다.

Timer나 상태를 기억하는 사용자 정의 Function Block에서 Instance를 잘못 공유하면 서로 다른 장치가 예상하지 못한 데이터를 공유하는 문제가 발생할 수 있습니다.

복잡한 계산에서는 데이터형도 확인해야 합니다. INT, DINT, REAL 등 서로 다른 데이터형을 연결할 때 변환이 필요한지 확인하고 값의 범위와 정밀도도 고려해야 합니다.

Function Block Diagram 핵심 정리

Function Block Diagram은 기능을 수행하는 블록을 배치하고 각 블록의 입력과 출력을 연결하여 PLC 제어로직을 구성하는 그래픽 프로그래밍 언어입니다.

FBD는 IEC 61131-3에서 다루는 PLC 언어로 논리연산뿐 아니라 Timer, Counter, 수치연산, 아날로그 신호처리, PID 제어 등에 활용할 수 있습니다.

특히 데이터가 여러 Function Block을 거쳐 처리되는 프로그램에서는 신호의 흐름을 시각적으로 확인하기 쉽다는 장점이 있습니다.

사용자 정의 Function Block을 만들면 Motor나 Valve처럼 반복적으로 사용하는 장치의 제어로직을 표준화하고 여러 Instance에서 재사용할 수도 있습니다.

다만 FBD를 사용할 때도 Block의 실행순서, Instance 관리, 데이터형, Scan Time과 Task 실행주기를 함께 고려해야 합니다.

결국 FBD를 잘 활용하려면 블록을 단순히 연결하는 방법만 익히는 것이 아니라 각 Function Block이 어떤 데이터를 입력받고 내부에서 무엇을 처리하며 어떤 결과를 출력하는지 이해하는 것이 중요합니다.

jssj2627

함께 보면 좋은 글

댓글 0

첫 댓글을 남겨보세요.

error: Content is protected !!

광고 차단 알림

광고 클릭 제한을 초과하여 광고가 차단되었습니다.

단시간에 반복적인 광고 클릭은 시스템에 의해 감지되며, IP가 수집되어 사이트 관리자가 확인 가능합니다.