비교기 및 불감대 로직
제어기는 동시에 두 세계에서 작동합니다. 센서는 실내 온도, 덕트 압력, 밸브 위치 같은 수치를 전달하지만, 설비가 주로 요구하는 것은 운전할지 말지, 열지 닫을지, 경보를 낼지 조용히 있을지 같은 판단입니다. 이 간극을 넘어 값을 전달하는 블록이 비교기입니다. A가 B보다 큰가라는 단순한 질문처럼 보여 그 안의 함정을 놓치기 쉽습니다. 이 페이지에서는 처음부터 끝까지 한 가지를 다룹니다. 수치가 어떻게 판단이 되며, 단일 임계값에서는 왜 채터링이 발생할까요?
이 페이지는 핀, 와이어, 스캔 등 블록 수준에서 와이어시트를 읽을 수 있다고 가정합니다. 이 장의 첫 수업인 함수 블록 기초에서 배울 수 있습니다. 비교기의 답을 AND, OR, 래치가 어떻게 처리하는지와 같은 TRUE/FALSE 측면은 이 장의 별도 수업인 불리언 로직 및 래치에서 다룹니다. 먼저 읽어야 하는 것은 아니지만 서로 이어지는 내용입니다.
비교기 계열: 수치를 입력받아 판단을 출력합니다
비교기는 파란색 와이어로 두 아날로그 값을 입력받고 녹색 또는 회색 와이어로 하나의 디지털 답을 출력합니다. 이것이 블록의 전부이자, 건물의 모든 임계값 판단이 건너는 다리입니다. 실내가 너무 더우면 냉방을 시작합니다. 정압이 너무 높으면 경보를 발생시킵니다. 외기가 회기(RA)보다 차가우면 을 활성화합니다. 이 문장들은 모두 한쪽에 수치, 다른 쪽에 판단이 있고 그 사이에 비교기가 있습니다.
이 계열의 주력 블록은 초과, 미만과 경계를 포함한 각각의 짝까지 네 가지이며, 생각보다 훨씬 드물게 사용하는 등가 비교 두 가지가 더 있습니다.
| 블록 | 의미 | 대표 용도 |
|---|---|---|
| A > B | 경계선 위에서 TRUE | 상한 경보, 증단 조건 확인, 냉방 요구 |
| A < B | 경계선 아래에서 TRUE | 하한 경보, 동결 방지, 절환 |
| A ≥ B · A ≤ B | 동일하되 경계를 포함 | 측정값에서는 > / <와 사실상 호환 |
| A = B · A ≠ B | 같음(허용오차 이내) | 모드, 개수, 정수 포인트 등 이산값 전용 |
세 번째 행을 살펴보겠습니다. 이론상 A > B와 A ≥ B는
두 값이 정확히 같을 때만 다릅니다. 실제 측정값에서는 칼날처럼 좁은
경우입니다. 실내 온도는 연속적인 범위 안을 오가는 부동소수점 값입니다.
설정값과 정확히 일치하는 순간은 무한히 많은 값 중 하나일 뿐이며, 어느 스캔이
우연히 그 값을 포착하더라도 다음 스캔은 그렇지 않습니다. 현장에서
>를 ≥로 바꿔도 관찰할 수 있는 차이는 없습니다.
비교기에서 실제로 중요한 것은 경계선 어느 쪽이 TRUE인지 정하는 방향과
경계선을 어디에 두는지입니다. 여기에 주의를 기울여야 합니다.
등가 비교에는 별도의 경고가 필요합니다. 아날로그 값에 EQ를 사용하는
것은 함정이기 때문입니다. 측정 온도는 결코 정확히 72.0에
머물지 않습니다. 값 자체가 계속 변하기도 하고, 컴퓨터가 소수를 저장하는 방식
때문이기도 합니다. “같은” 수치에 이르는 두 경로, 예를 들어 72.0으로 입력한
설정값과 71.999999…로 계산된 값은 아주 낮은 소수 자리에서 달라질 수 있습니다.
따라서 건물의 모든 화면에 72.0으로 표시되어도 비트 단위 등가 검사는 실패합니다.
이 사이트의 기능 블록 편집기에는
보호 장치가 내장되어 있습니다. A = B 블록은 실제로 “비트가 동일한가?”가
아니라 “두 값이 작은 허용오차 이내인가?”를 묻습니다. 실제 제품의 팔레트도 같은
방식을 쓰거나 허용오차 매개변수를 제공합니다. 허용오차가 있어도 변하는 측정값의
등가 판정은 값이 통과하는 한두 스캔 동안만 TRUE이므로 시퀀스를 맡기기에는 적합하지
않습니다. EQ는 모드 번호, 단수, 정수형 소프트웨어 포인트처럼 실제로 이산적인 값에만
사용합니다.
채터링: 단일 임계값의 함정
가장 직관적인 온도조절기를 배선해 보겠습니다. 실내 온도를 A에,
74 °F 설정값을
B에 연결하고, A > B가 냉방 요구를 구동합니다.
실내 온도가 설정값에 도달하기 전까지는 잘 작동합니다. 냉방이 운전되어
온도가 설정값까지 떨어지면 비교기가 FALSE가 되고 냉방이 멈춥니다. 온도가 조금
올라가면 다시 TRUE가 됩니다. 여기에 실제 아날로그 입력의 세부 특성을 더해
보겠습니다. 약간의 노이즈와 센서 분해능 단계 때문에 값은 스캔마다 몇 십분의
일 도씩 흔들립니다. 온도가 경계선을 타고 있을 때 이 흔들림은 몇 번의
스캔마다 다른 답을 만들고, 와이어시트는 초당 여러 번 평가됩니다. 출력은 단순히
주기 운전하는 것이 아니라 채터링합니다.
이것이 예외 상황이 아니라 함정인 이유가 있습니다. 제어 변수는 대부분의 시간을 설정값 근처에서 보냅니다. 그것이 제어의 목적입니다. 설정값에 단일 임계값을 두면 비교기가 가장 불안정한 곳에 값이 머물도록 보장하는 셈입니다. 출력은 화면의 숫자에 그치지 않습니다. 압축기 요구라면 출력이 바뀔 때마다 접촉기가 투입되고 해제되어 접점에 아크가 생기며 결국 용착될 수 있습니다. 또한 쉴 틈 없는 권선으로 회전자 구속 가 흐르고, 오일은 복귀하지 못하며, 압력은 평형을 이루지 못한 상태에서 압축기가 다시 기동합니다. 압축기는 시간당 몇 회의 기동을 기준으로 설계되지만, 채터링하는 임계값은 분당 열 번을 요구할 수 있습니다. 실제 설비에는 이를 막는 최후 방어선으로 단주기 운전 방지 타이머가 있으며, 이 장 뒤의 최소 운전/정지 시간 수업에서 따로 다룹니다. 그러나 자체 채터링을 안전 타이머에 의존해 정리하는 시퀀스에는 결함이 있습니다.
아래 그림에서 문제 전체를 한눈에 볼 수 있습니다. 파란색 트레이스는 실제 센서
노이즈를 포함한 실내 온도가 밴드를 지나 상승했다가 다시 내려오는 모습입니다.
그 아래에는 같은 신호를 서로 다른 두 판단에 넣은 결과가 있습니다. 하나는 설정값의
단일 A > B이고, 다른 하나는 다음 절에서 만드는 두 경계선의 설정/리셋
쌍입니다. 입력과 노이즈는 같지만 한 출력은 교차할 때마다 채터링하고, 다른 출력은
정확히 두 번만 전환됩니다.
가운데 트레이스를 위쪽 트레이스와 비교해 보겠습니다. 모든 채터링 구간은 노이즈가 섞인 온도가 설정값을 지나는 곳 바로 아래에 있습니다. 비교기가 고장 난 것이 아니라, 십분의 일 도 단위로 계속 마음을 바꾸는 값에 대해 요청받은 질문을 초당 여러 번 정확히 답하고 있습니다. 아래쪽 트레이스는 이 흔들림을 모두 무시합니다. 온도가 상한을 확실히 넘을 때까지 아무 일도 일어나지 않고, 하한 아래로 확실히 내려갈 때까지 상태가 해제되지 않습니다. 두 경계선 사이의 간격이 불감대이며, 이를 만드는 데에는 정확히 세 블록이 필요합니다.
불감대 구현: 두 비교기와 래치
해결 방법은 하나의 경계선을 둘로 나누고 그 사이에 기억 기능을 두는 것입니다.
설정값에 밴드의 절반을 더한 값보다 높으면 켭니다. 설정값에서 밴드의 절반을
뺀 값보다 낮으면 끕니다. 그 사이에서는 현재 상태를 유지합니다. “현재 상태를
유지한다”는 말은 일반 비교기만으로 이 기능을 구현할 수 없다는 단서입니다. 두
경계선 사이에서는 어느 조건도 참이 아니므로, 현재 어느 상태인지 무언가가
기억해야 합니다. 그것이 기억 기능을 가진 불리언 블록인
입니다.
래치의 원리, 안전 로직에서 래치를 사용하는 이유, 설정과 리셋이 동시에 들어올 때의
동작은 불리언 로직 및
래치의 SR 래치 절에서 다룹니다. 여기서는 래치의 기본 역할만 사용합니다.
기능 블록 편집기에는 이
시퀀스가 냉방 온도조절기 예제로 그대로 제공됩니다. 와이어를 하나씩 따라가
볼 가치가 있습니다. 왼쪽에는 실내 온도 아날로그 입력,
74 °F 설정값 상수,
1 °F 불감대 상수가 있습니다.
와이어시트의 단위 없는 숫자는 °F로 읽습니다. ADD와
SUBTRACT가 SP + DB =
75 °F, SP − DB =
73 °F인 두 경계선을 만듭니다.
초과 비교기는 온도가 상한보다 높은지 감시하여 래치의 S를
구동하고, 미만 비교기는 하한보다 낮은지 감시하여 R을 구동합니다.
래치 출력은 냉방 요구를 구동합니다. 다음은 실내가
76 °F까지 올라간 순간의
와이어시트입니다.
파란색 와이어는 아날로그 값을, 녹색 와이어는 TRUE 디지털 신호를, 회색 와이어는 FALSE 신호를 전달합니다. 편집기의 실시간 색상과 같습니다.
이제 이후 동작을 따라가 보겠습니다. 냉방이 실내 온도를 다시 75 °F 아래로 낮추면 초과 비교기가 FALSE로 바뀌지만 아무 일도 일어나지 않습니다. 설정이나 리셋 신호가 없는 래치는 상태를 그대로 유지하기 때문입니다. 설정값 아래로 내려가도 여전히 켜져 있습니다. 73 °F 아래에서만 미만 비교기가 R을 구동하여 요구를 해제합니다. 밴드 안에서는 두 비교기가 모두 FALSE이며, 래치의 기억 기능 자체가 “현재 상태 유지”라는 와이어시트의 답인 불감대가 됩니다. 위 그림에서 단일 임계값을 여덟 번 전환시킨 노이즈도 1 °F 떨어진 경계선에는 접근하지 못합니다. 따라서 설비는 노이즈의 속도가 아니라 건물의 변화 속도에 맞춰 주기 운전합니다.
주의할 수치가 하나 있습니다. 여기서 DB 상수는 밴드 폭의 절반입니다. 위아래에 한 번씩 적용되므로 설정에서 리셋까지 실내 온도의 실제 변화 폭은 2 °F입니다. 제조사마다 정의가 다릅니다. 일부 불감대 매개변수는 전체 폭을, 일부는 절반 폭을 뜻합니다. 확인하지 않고 플랫폼 간 값을 복사하면 자신도 모르게 밴드가 두 배 또는 절반이 됩니다. 블록 문서를 읽거나, 더 확실하게는 이 와이어시트처럼 경계값을 외부에 명시적으로 구성하여 직접 확인할 수 있게 합니다.
이 구성이 덤으로 주는 기능도 있습니다. 래치에 들어가는 두 와이어를 서로 바꾸어 저온 조건이 S를, 고온 조건이 R을 구동하게 하면 같은 아홉 블록이 난방 온도조절기가 됩니다. 실내가 추우면 요구가 켜지고 따뜻하면 꺼집니다. 이것이 정동작 제어(측정값이 올라갈 때 출력도 올라가는 냉방)와 역동작 제어(측정값이 내려갈 때 출력이 올라가는 난방)의 전체 차이입니다. 비교기는 바뀌지 않으며 어느 비교기가 설정하고 어느 비교기가 리셋하는지만 달라집니다. 편집기가 두 온도조절기를 한 쌍으로 제공하는 이유도 바로 이것입니다.
밴드는 얼마나 넓어야 할까요? 모든 규모에서 같은 상충관계가 있습니다. 좁으면 쾌적성을 정밀하게 유지하지만 설비가 자주 동작하고, 넓으면 설비는 쉬지만 재실자는 온도 변동을 체감합니다. 실내 온도조절기의 전체 밴드는 보통 1–2 °F 정도입니다. 규모를 키워도 패턴은 같습니다. 설비 대수제어 수업의 증단·감단 임계값은 플랜트 규모에서 이 구성을 그대로 적용한 것입니다. 두 값의 의도적인 불감대는 전체 펌프 플랜트의 을 방지합니다. 설비가 단순히 켜지고 꺼지는 대신 연속 제어할 수 있다면, 경계선을 없애고 설정값을 중심으로 PID 루프를 폐루프로 구성하는 것이 가장 깔끔한 해법입니다.
실제 팔레트에서 이 기능을 만날 때 알아둘 점이 있습니다. 대부분의 상용 환경은 전체 구성을 하나의 불감대 또는 히스테리시스 비교기로 묶어 제공합니다. 하나의 블록에 설정값과 밴드를 넣으면 채터링 없는 출력이 나옵니다. 그 용도에 맞게 사용하면 됩니다. 이제는 블록 내부가 두 경계선과 기억 기능으로 이루어졌다는 것도 압니다. 통합 블록이 제대로 동작하지 않거나 팔레트에 해당 블록이 없다면 직접 구성할 수 있으며, 더 중요한 것은 다른 사람의 와이어시트에 펼쳐진 구성을 발견했을 때 읽을 수 있다는 것입니다.
이 구성을 읽을 때 관례가 혼란을 일으킵니다. 상수의 의미뿐 아니라 배치도 시퀀스마다, 작성자마다 달라집니다. 이 와이어시트는 밴드의 절반을 설정값 위와 아래에 두어 설정값을 중심으로 삼습니다. 그러나 많은 시퀀스는 밴드 전체를 한쪽에 두어 설정값이 변동 범위의 가운데가 아니라 한쪽 경계가 되게 합니다. 같은 상수라도 경계가 다릅니다. 밴드의 다른 이름도 비슷하게 의미가 달라집니다. 온도조절기의 동작차는 이 간격을 뜻하고, 기계식 스위치에서는 트립 값과 복귀 값 사이의 차이를 뜻하며, 존에서는 난방과 냉방 설정값 사이의 간격을 뜻합니다. 그러나 대부분은 팬이나 펌프 양단의 차압처럼 두 측정값의 차이만을 뜻합니다. 어떤 경우든 읽는 방법은 같습니다. 출력이 실제로 전환되는 경계, 즉 빼고 있는 두 양을 찾아 이름이 아니라 그 값에서 관례를 파악합니다. 직접 시퀀스를 작성할 때에는 어떤 의미인지 명시합니다.
직접 밴드를 따라가 보세요
이 수업의 전체 내용을 기능 블록 편집기에서 실행해 볼 수 있습니다. 냉방 온도조절기 예제를 불러오고 TEMP 블록을 클릭한 뒤 검사기에서 값을 올려 보세요. 74에서는 아무 일도 없고, 74.9에서도 그대로입니다. 75를 넘으면 초과 비교기의 와이어가 녹색으로 바뀌고 요구가 ON으로 래치됩니다. 이제 값을 다시 내리며 해제 지점을 확인하세요. 75도 아니고 74도 아니며, 73 아래에서만 해제됩니다. 서로 다른 값에서 설정과 리셋이 구동되는 모습이 와이어에서 실시간으로 보이는 불감대입니다. 다음으로 난방 온도조절기 예제를 불러와 로직에서 바뀐 부분을 찾아보세요. 아홉 블록과 배치는 그대로이며, S와 R에 들어가는 두 와이어의 위치만 바뀌었습니다. 상수와 블록 이름은 난방에 맞지만 기본 구조는 동일합니다.
기능 블록 편집기 열기 →