FUNCTION_BLOCK FB_MotorControl VAR_INPUT StartButton: BOOL; StopButton: BOOL; OverloadSignal: BOOL; END_VAR VAR_OUTPUT 실행 상태: BOOL; 오류 표시기: BOOLEND_VAR BEGIN // 시작-정지 논리 IF StartButton AND NOT StopButton AND NOT OverloadSignal THEN 실행 상태:= TRUE; ELSIF StopButton OR OverloadSignal THEN RunningStatus:= FALSE; END_IF; // 오류 표시 오류 표시자:= 과부하 신호; END_FUNCTION_BLOCK
스키
케이스 3: PID 온도 조절
FUNCTION_BLOCK FB_TempControl VAR_INPUT 설정점: REAL; 프로세스 값: REAL; END_VAR VAR_OUTPUT 제어출력: REAL; END_VAR VAR Kp: REAL: = 2.0; Ki: REAL:= 0.05; Kd: REAL:= 0.5; IntegralTerm: REAL := 0; LastError: REAL := 0; 타이머: TON; END_VAR BEGIN // 주기적으로 실행 (100ms) 타이머 ((IN := NOT Timer.Q, PT := T#100ms); IF 타이머.Q THEN VAR 오류:= 설정점 - 프로세스 값; IntegralTerm := IntegralTerm + Error; VAR DerivativeTerm := Error - LastError; LastError := Error; ControlOutput := Kp * Error + Ki * IntegralTerm + Kd * DerivativeTerm; ControlOutput := LIMIT(0.0, ControlOutput, 100.0); 타이머 ((IN:= FALSE); END_IF; END_FUNCTION_BLOCK
스키
케이스 5: 안전 게이트 잠금 제어
FUNCTION_BLOCK FB_SafetyGate VAR_INPUT Gate1Closed, Gate2Closed: BOOL; EStopButton: BOOL; ResetButton: BOOL; END_VAR VAR_OUTPUT 안전상황: BOOL; END_VAR VAR 잠금상황: BOOL= FALSE:잠금 타이머: TON; END_VAR BEGIN // 안전 상태 VAR AllGatesClosed := Gate1Closed AND Gate2Closed; // 응급 정지 최우선 사항 IF EStopButton THEN SafetyStatus:= FALSE; LockoutStatus:= TRUE;잠금 타이머:= TRUE, PT := T#10S); RETURN; END_IF; // 로직을 잠금 해제 IF ResetButton AND LockoutStatus AND LockoutTimer.Q THEN LockkoutStatus:= FALSE; END_IF;// 정상 작동 만약 잠금 상태가 아니라면 안전 상태:= AllGatesClosed; END_IF;