FUNCTION_BLOCK FB_모터 컨트롤
VAR_INPUT
시작 버튼: BOOL;
정지 버튼: BOOL;
과부하 신호: BOOL;
END_VAR
VAR_OUTPUT
실행 상태: BOOL;
오류 표시기: BOOL;
END_VAR
시작해
시작-정지 논리
만약 StartButton NOT StopButton NOT OverloadSignal 그렇다면
실행 상태:= TRUE;
ELSIF 중지 버튼 또는 과부하 신호 다음
실행 상태:= FALSE;
END_IF
// 결함 표시
오류 표시기:= 과부하 신호;
END_FUNCTION_BLOCK
케이스 2: 타이머 적용
스키
FUNCTION_BLOCK FB_DelayStart
VAR_INPUT
시작 신호: BOOL;
지연 시간: 시간:= T#5S;
END_VAR
VAR_OUTPUT
출력 신호: BOOL;
END_VAR
VAR
지연시간: TON
END_VAR
시작해
DelayTimer ((IN:= 시작 신호, PT:= 지연 시간);
출력 신호:= 지연시간.Q;
END_FUNCTION_BLOCK
케이스 3: PID 온도 조절
스키
FUNCTION_BLOCK FB_TempControl
VAR_INPUT
설정점: REAL
프로세스 값: REAL
END_VAR
VAR_OUTPUT
제어 출력: REAL
END_VAR
VAR
Kp: REAL:= 20;
Ki: REAL:= 0.05;
Kd: REAL:= 0.5;
융합Term: REAL:= 0;
LastError: REAL:= 0;
타이머: 톤
END_VAR
시작해
// 주기적으로 실행 (100ms)
타이머 ((IN:= 타이머가 아닙니다.Q, PT:= T#100ms);
타이머.Q 다음
VAR 오류:= 설정점 - 프로세스 값;
IntegralTerm:= IntegralTerm + 오류;
VAR 파생어:= 오류 - 마지막 오류;
LastError:= 오류;
제어 출력:= Kp * Error + Ki * IntegralTerm + Kd * DerivativeTerm;
제어 출력:= LIMIT(0.0, 제어 출력, 100.0);
타이머 ((IN:= FALSE);
END_IF
END_FUNCTION_BLOCK
케이스 4: 생산 라인 대기열 관리
스키
FUNCTION_BLOCK FB_프로덕션 큐
VAR_INPUT
NewOrder: BOOL;
OrderID: INT;
완료 신호: BOOL;
END_VAR
VAR_OUTPUT
현재 명령어: INT;
대기열 길이는: INT
END_VAR
VAR
OrderQuee: INT의 ARRAY[1...50]
큐헤드: INT:= 1;
큐테일: INT:= 1;
END_VAR
시작해
새로운 주문 큐
만약 NewOrder AND QueueLength < 50 THEN
OrderQueue[QueueTail]:= OrderID;
QueueTail:= QueueTail MOD 50 + 1;
QueueLength:= QueueLength + 1;
END_IF
// 순서 정렬 완료
만약 CompleteSignal AND QueueLength > 0 그렇다면
큐헤드:= 큐헤드 MOD 50 + 1;
대기열 길이는:= 대기열 길이는 - 1;
END_IF
// 현재 순서
만약 QueueLength > 0 그렇다면
CurrentOrder:= OrderQueue[QueueHead];
다른 것
현재 명령어:= 0;
END_IF
END_FUNCTION_BLOCK
케이스 5: 안전 게이트 잠금 제어
스키
FUNCTION_BLOCK FB_SafetyGate
VAR_INPUT
게이트1 닫힌, 게이트2 닫힌: BOOL;
EStopButton: BOOL;
리셋 버튼: BOOL;
END_VAR
VAR_OUTPUT
안전상황: BOOL
END_VAR
VAR
잠금 상태: BOOL:= FALSE;
잠금시간: TON
END_VAR
시작해
안전 상태
VAR AllGatesClosed:= Gate1Closed AND Gate2Closed.
/ 응급 정지 최우선
만약 ESTOPButton 그렇다면
안전상태:= FALSE
잠금 상태:= TRUE;
로크아웃타이머 ((IN:= TRUE, PT:= T#10S);
반환
END_IF
// 논리를 해제
IF ResetButton AND LockkoutStatus AND LockkoutTimer.Q 다음
잠금 상태:= FALSE;
END_IF
// 정상 작동
잠금 상태가 안되면
안전 상태:= 모든 게이트가 닫혔다.
END_IF