비례 + 적분(Proportional + Integral, PI)
이 정보
CompactLogix
5370, ControlLogix
5570, Compact GuardLogix
5370, GuardLogix
5570, CompactLogix
5380, ControlLogix
5580 및 ControlLogix 5590 컨트롤러에 적용됩니다.PI 명령어는 두 가지 연산 방법을 제공합니다. 첫 번째 방법은 종래의 PI 알고리즘을 따릅니다. 즉 비례 및 적분 게인이 입력 신호(에러) 범위에서 계속 일정합니다. 두 번째 방법은 비선형 알고리즘을 이용합니다. 즉 비례 및 적분 게인이 입력 신호(에러) 범위에서 변합니다. 입력 신호는 프로세스의 설정값과 피드백 간 편차입니다.
사용 가능한 언어
래더 다이어그램
이 명령어는 래더 다이어그램에 사용할 수 없습니다.
펑션 블록

구조화된 텍스트
PI(PI_tag);
피연산자
펑션 블록
피연산자 | 유형 | 형식 | 설명 |
|---|---|---|---|
PI tag | PROP_INT | 구조 | PI 구조 |
구조화된 텍스트
피연산자 | 유형 | 형식 | 설명 |
|---|---|---|---|
PI tag | PROP_INT | 구조 | PI 구조 |
스트럭쳐드 텍스트 내 식의 구문에 대한 자세한 내용은
스트럭쳐드 텍스트 구문
을 참조하십시오.PROP_INT 구조
입력 매개 변수 | 데이터 유형 | 설명 |
|---|---|---|
EnableIn | BOOL | 활성화 입력. 선택하지 않으면 명령이 실행되지 않고 출력이 업데이트되지 않습니다. 기본값은 설정 상태입니다. |
In | REAL | 프로세스 에러 신호 입력. 이것이 설정값과 피드백의 차이입니다. 유효값 = 모든 부동 소수점 수 기본값 = 0.0 |
Initialize | BOOL | 명령어 초기화 명령. 설정되면 Out과 내부 적분기는 InitialValue의 값과 같게 설정됩니다. 기본값은 해제 상태입니다. |
InitialValue | REAL | 초기값 입력. Initialize가 설정되면 Out과 적분기는 InitialValue의 값으로 설정됩니다. InitialValue 값은 HighLimit 및 LowLimit을 사용하여 제한합니다. 유효값 = 모든 부동 소수점 수 기본값 = 0 |
Kp | REAL | 비례 게인. 이것은 비례 및 적분 제어 알고리즘 모두의 계산된 값에 영향을 미칩니다. 유효하지 않으면 명령어가 Kp를 제한값으로 강제 설정하고 Status에 적절한 비트를 설정합니다. 유효값 = 0.0보다 큰 모든 부동 소수점 수. 기본값 = 최소 양의 부동 소수점 수. |
Wld | REAL | 라디안/초 단위의 리드 주파수. 이것은 적분 제어 알고리즘의 계산된 값에 영향을 미칩니다. 유효하지 않으면 명령어가 Wld를 제한값으로 강제 설정하고 Status에 적절한 비트를 설정합니다. 유효 = 유효 범위는 아래의 설명 섹션을 참조하십시오. 기본값 = 0.0 |
HighLimit | REAL | 상한값. Out의 최대값입니다. HighLimit가 LowLimit이면 명령어는 HighAlarm과 LowAlarm을 설정하고, Status에 적절한 비트를 설정한 다음, Out = LowLimit를 설정합니다.유효값 = LowLimit < HighLimit 최대 양의 부동 소수점 수기본값 = 최대 양의 부동 소수점 수 |
LowLimit | REAL | 하한값. Out의 최소값입니다. HighLimit가 LowLimit이면 명령어는 HighAlarm과 LowAlarm을 설정하고, Status에 적절한 비트를 설정한 다음, Out = LowLimit를 설정합니다.유효값 = 최대 음의 부동 소수점 수 LowLimit < HighLimit기본값 = 최대 음의 부동 소수점 수 |
HoldHigh | BOOL | 높게 유지 명령. 설정되면 내부 적분기의 값은 늘릴 수 없습니다. 기본값은 해제 상태입니다. |
HoldLow | BOOL | 낮게 유지 명령. 설정되면 내부 적분기의 값은 줄일 수 없습니다. 기본값은 해제 상태입니다. |
ShapeKpPlus | REAL | 양의 Kp 형성 게인 승수. In 0일 때 사용됩니다. 유효하지 않으면 명령어가 ShapeKpPlus를 제한값으로 강제 설정하고 Status에 적절한 비트를 설정합니다. NonLinearMode가 해제되면 사용되지 않습니다.유효값 = 0.1~10.0 기본값 = 1.0 |
ShapeKpMinus | REAL | 음의 Kp 형성 게인 승수. In이 < 0일 때 사용됨. 유효하지 않으면 명령어가 ShapeKpMinus를 제한값으로 강제 설정하고 Status에 적절한 비트를 설정합니다. NonLinearMode가 해제되면 사용되지 않습니다. 유효값 = 0.1~10.0 기본값 = 1.0 |
KpInRange | REAL | 비례 게인 형성 범위. 비례 게인이 | In | / KpInRange 비의 함수로 늘어나거나 줄어드는 In(에러)의 범위를 정의합니다. | In | > KpInRange이면 명령어는 입력된 Kp 형성 게인 x (In - KpInRange)을 이용해 비례 에러의 증감을 계산합니다. 유효하지 않으면 명령어가 KpInRange를 제한값으로 강제 설정하고 Status에 적절한 비트를 설정합니다. NonLinearMode가 해제되면 사용되지 않습니다. 유효값 = 0.0보다 큰 모든 부동 소수점 수. 기본값 = 최대 양의 부동 소수점 수 |
ShapeWldPlus | REAL | 양의 Wld 형성 게인 승수. In 0일 때 사용됩니다. 유효하지 않으면 명령어가 ShapeWldPlus를 제한값으로 강제 설정하고 Status에 적절한 비트를 설정합니다. NonLinearMode가 해제되면 사용되지 않습니다.유효값 = 0.0~10.0 기본값 = 1.0 |
ShapeWldMinus | REAL | 음의 Wld 형성 게인 승수. In이 < 0일 때 사용됨. 유효하지 않으면 명령어가 ShapeWldMinus를 제한값으로 강제 설정하고 Status에 적절한 비트를 설정합니다. NonLinearMode가 해제되면 사용되지 않습니다. 유효값 = 0.0~10.0 기본값 = 1.0 |
WldInRange | REAL | 적분 게인 형성 범위. 적분 게인이 | In | / WldInRange 비의 함수로 늘어나거나 줄어드는 In(에러)의 범위를 정의합니다. 조건 |In| > WldInRange이면 명령어는 적분 에러를 계산할 때 In을 WldInRange로 제한합니다. 유효하지 않으면 명령어가 WldInRange를 제한값으로 강제 설정하고 Status에 적절한 비트를 설정합니다. NonLinearMode가 해제되면 사용되지 않습니다. 유효값 = 0.0보다 큰 모든 부동 소수점 수. 기본값 = 최대 양의 부동 소수점 수 |
NonLinearMode | BOOL | 비선형 게인 모드를 활성화합니다. 설정되면 명령어는 ParabolicLinear가 선택한 비선형 게인 모드를 사용하여 실제 비례 및 적분 게인을 계산합니다. 해제되면 명령어는 비선형 게인 모드를 비활성화하고 Kp와 Wld 값을 비례 및 적분 게인으로 사용합니다. 기본값은 해제 상태입니다. |
ParabolicLinear | BOOL | 비선형 게인 모드 선택. 모드는 선형이거나 포물선입니다. 설정되면 명령어는 포물선 게인법 y=a * x 2 + b를 사용하여 실제 비례 및 적분 게인을 계산합니다. 해제되면 명령어는 선형 게인법 y=a * x + b를 이용합니다.기본값은 해제 상태입니다. |
TimingMode | DINT | 타이밍 실행 모드 선택. 0 = 주기 모드 1 = 오버 샘플링 모드 2 = 실시간 샘플링 모드 타이밍 모드에 대한 자세한 내용은 함수 블록 속성을 참조하세요. 유효값 = 0~2 기본값 = 0 |
OversampleDT | REAL | 오버 샘플링 모드에 대한 실행 시간. 값 = 0~4194.303초 기본값 = 0 |
RTSTime | DINT | 실시간 샘플링 모드에 대한 모듈 업데이트 기간 유효값 = 1~32,767ms 기본값 = 1 |
RTSTimeStamp | DINT | 실시간 샘플링 모드에 대한 모듈 타임 스탬프 값. 유효값 = 0~32,767ms 기본값 = 0 |
출력 매개 변수 | 데이터 유형 | 설명 |
|---|---|---|
EnableOut | BOOL | 명령어의 실행 상태를 나타냅니다. |
Out | REAL | PI 알고리즘의 계산된 출력. 이 출력에 대해 연산 상태 플래그가 설정됩니다. |
HighAlarm | BOOL | 알람 표시기의 최대 한도. Out의 계산된 값 HighLimit이고 출력 및 적분기가 HighLimit에 클램핑되면 설정됩니다. |
LowAlarm | BOOL | 알람 표시기의 최소 한도. Out의 계산된 값 LowLimit이고 출력 및 적분기가 LowLimit에 클램핑되면 설정됩니다. |
DeltaT | REAL | 업데이트 간 경과 시간. 컨트롤 알고리즘에서 프로세스 출력 계산에 사용되는 경과 시간(초)입니다. |
Status | DINT | 펑션 블록의 상태. |
InstructFault (Status.0) | BOOL | 명령어에서 다음 실행 에러 중 하나가 감지됩니다. 마이너 또는 메이저 컨트롤러 에러가 아닙니다. 나머지 상태 비트를 확인하여 발생한 에러를 판단합니다. |
KpInv (Status.1) | BOOL | Kp < 최소값 또는 Kp > 최대값. |
WldInv (Status.2) | BOOL | Wld < 최소값 또는 Wld > 최대값. |
HighLowLimsInv (Status.3) | BOOL | HighLimit LowLimit. |
ShapeKpPlusInv (Status.4) | BOOL | ShapeKpPlus < 최소값 또는 ShapeKpPlus > 최대값. |
ShapeKpMinusInv (Status.5) | BOOL | ShapeKpMinus < 최소값 또는 ShapeKpMinus > 최대값. |
KpInRangeInv (Status.6) | BOOL | KpInRange < 최소값 또는 KpInRange > 최대값. |
ShapeWldPlusInv (Status.7) | BOOL | ShapeWldPlus < 최소값 또는 ShapeWldPlus > 최대값. |
ShapeWldMinusInv (Status.8) | BOOL | ShapeWldMinus < 최소값 또는 ShapeWldMinus > 최대값. |
WldInRangeInv (Status.9) | BOOL | WldInRange < 최소값 또는 WldInRange > 최대값. |
TimingModeInv (Status.27) | BOOL | 유효하지 않은 TimingMode. 타이밍 모드에 대한 자세한 내용은 함수 블록 속성을 참조하세요. |
RTSMissed (Status.28) | BOOL | 실시간 샘플링 모드에서만 사용. ABS | DeltaT - RTSTime | > 1 (.001 초)일 때 설정. |
RTSTimeInv (Status.29) | BOOL | 유효하지 않은 RTSTime 값. |
RTSTimeStampInv (Status.30) | BOOL | 유효하지 않은 RTSTimeStamp 값. |
DeltaT (Status.31) | BOOL | 유효하지 않은 DeltaT 값. |
설명
PI 명령어는 PI 알고리즘의 위치 형태를 사용합니다. 이는 게인 조건이 입력 신호의 변경이 아니라 입력 신호에 바로 적용된다는 의미입니다. PI 명령어는 스캔 비율이 일정하게 유지되는 태스크에서 실행하기 위한 것입니다.
비선형 알고리즘에서는 입력 신호의 진폭이 변함에 따라 비례 및 적분 게인이 바뀝니다. PI 명령어는 선형과 포물선, 이렇게 두 비선형 게인 모드를 지원합니다. 선형 알고리즘에서는 입력의 진폭에 따라 게인이 직선을 따라 변합니다. 포물선 알고리즘에서는 입력의 진폭에 따라 게인이 포물선을 따라 변합니다.
PI 명령어는 다음 수식을 이용해 Out을 계산합니다.

출력에 대해 계산된 값이 유효하지 않거나, NAN 또는
INF인 경우 명령어는 Out을 유효하지 않은 값으로 설정하고 연산 오버플로 상태 플래그를 설정합니다. 내부 파라미터는 업데이트되지 않습니다. 각 후속 스캔에서는 마지막으로 출력이 유효했던 스캔의 내부 파라미터를 사용하여 출력을 계산합니다.
INF인 경우 명령어는 Out을 유효하지 않은 값으로 설정하고 연산 오버플로 상태 플래그를 설정합니다. 내부 파라미터는 업데이트되지 않습니다. 각 후속 스캔에서는 마지막으로 출력이 유효했던 스캔의 내부 파라미터를 사용하여 출력을 계산합니다.선형 모드에 조작
선형 모드에서는 비선형 게인 모드가 비활성화됩니다. Kp와 Wld 값은 명령어가 사용하는 비례 및 적분 게인입니다. 명령어는 다음 수식을 이용해 Out의 값을 계산합니다.
값 | 수식 |
|---|---|
ITerm | ![]() 여기서 DeltaT는 초 단위 |
PTerm | Kp x In |
Out | ITerm + PTerm |
Wld의 한도:
- 하한 > 0.0
- 상한 = 0.7p/DeltaT
- WldInput = In
비선형 모드에 조작
비선형 모드에서는 명령어가 ParabolicLinear가 선택한 비선형 게인 모드를 이용해 실제 비례 및 적분 게인을 계산합니다.
Kp와 Wld가 지정하는 게인에는 In=0일 때 1.0을 곱합니다. 에러의 진폭이 변하면 분리된 비례 및 적분 알고리즘이 비례 또는 적분 게인을 늘리거나 줄입니다. 이 두 알고리즘은 입력 범위와 형성 게인 파라미터를 사용하여 실제 비례 및 적분 게인을 계산합니다. 입력 범위는 게인이 형성되는 In(에러)의 범위를 지정합니다. 입력 범위는 두 KpInRange와 WldInRange에 따라 설정됩니다. 형성 게인은 형성 게인 파라미터가 컨트롤하는 사분면의 게인 승수를 지정합니다. 형성 게인은 ShapeKpPlus, ShapeKpMinus, ShapeWldPlus, ShapeWldMinus에 따라 설정됩니다.
ParabolicLinear 입력은 비선형 게인 모드를 선택합니다. ParabolicLinear가 해제되면 선형 모드가 선택됩니다. ParabolicLinear가 설정되면 포물선 모드가 선택됩니다.
특정 형성 게인 곡선을 구성하려면, 적분 형성에 형성 게인 0.0 ~ 10.0을, 포물선 형성에 형성 게인 0.1 ~ 10.0을 입력하고 형성이 적용될 입력 범위를 입력합니다. Kp와 Wld에 계산된 ShapeMultiplier를 곱해 실제 비례 및 적분 게인을 구합니다. 형성 게인 1.0을 입력하면 사분면의 비례 또는 적분 게인을 계산하는 비선형 알고리즘을 비활성화합니다.
In(에러)의 진폭이 InRange보다 크면 ShapeMultiplier는 | In |가 InRange와 같았을 때 계산된 값과 같아집니다.
다음 다이어그램에 포물선과 선형 게인 등식을 표시하는 최대 및 최소 게인 곡선이 표시돼 있습니다.

명령어는 다음 수식을 이용해 Out의 값을 계산합니다.
값 | 수식 |
|---|---|
Kp 형성 게인 승수 | ![]() |
Kp 입력비 | ![]() |
Kp비 | ![]() |
Kps 형성 게인 | ![]() |
비례 출력 | ![]() |
Wld 형성 게인 | ![]() |
Wld 입력 | ![]() |
Wld 입력비 | ![]() |
Wld비 | ![]() |
Wlds 형성 게인 | ![]() |
Wlds 한도 | ![]() |
적분 출력 | ![]() |
출력 | ![]() |
제한
이 명령어는 유지 입력의 상태에 따라 ITerm 와인드업을 멈춥니다.
조건 | Action |
|---|---|
![]() | ![]() |
![]() | ![]() |
이 명령어는 또 HighLimit와 LowLimit 값을 기준으로 적분기 와인드업도 멈춥니다.
조건 | Action |
|---|---|
Integrator > HighLimit | Integrator = HighLimit |
Integrator > LowLimit | Integrator = LowLimit |
명령어는 HighLimit과 LowLimit 값을 기준으로 Out 값을 제한합니다.
조건 | Action |
|---|---|
HighLimit LowLimit | Out = LowLimit ITerm = LowLimit HighLowLimsInv가 설정됨 HighAlarm 설정됨 LowAlarm 설정됨 WldInput = 0 |
Out HighLimit | Out = HighLimit ITerm = ITerm n-1 HighAlarm 설정됨 |
ITerm > HighLimit | ITerm = HighLimit |
Out LowLimit | Out = LowLimit ITerm = ITerm n-1 LowAlarm 설정됨 |
ITerm < LowLimit | ITerm = LowLimit |
연산 상태 플래그에 영향
아니요
주 폴트/부 폴트
이 명령어에만 해당되는 것은 없습니다. 피연산자 관련 폴트에 대해서는 공통 속성을 참조하십시오.
실행
펑션 블록
조건 | 수행한 작업 |
|---|---|
사전 스캔 | EnableIn과 EnableOut이 거짓으로 해제됩니다. |
Tag.EnableIn이 거짓임 | EnableIn 및 EnableOut 비트가 거짓으로 해제됩니다. |
Tag.EnableIn이 참임 | EnableIn과 EnableOut 비트가 참으로 설정됩니다. 명령어가 실행됩니다. |
명령어 최초 실행 | Out n-1 = 0 Out 계산에 사용되는 알고리즘이 실행되지 않습니다. |
명령어 최초 스캔 | Out n-1 = 0 Out 계산에 사용되는 알고리즘이 실행되지 않습니다. |
사후 스캔 | EnableIn 및 EnableOut 비트가 거짓으로 해제됩니다. |
구조화된 텍스트
조건/상태 | 수행한 작업 |
|---|---|
사전 스캔 | 펑션 블록 표의 사전 스캔을 참조하십시오. |
정상 실행 | 펑션 블록 표에서 Tag.EnableIn이 참임을 참조하십시오. |
사후 스캔 | 펑션 블록 표에서 사후 스캔을 참조하십시오. |
예
PI 명령어는 비례 및 적분 게인 성분이 있는 조절 명령어입니다. 적분 게인 성분은 사용자가 라디안/초로 설정합니다. 이것은 PI 조절기의 기본 주파수 응답을 설정합니다. 비례 게인은 블록의 비례 및 적분 게인을 포함해 블록의 전체 게인을 설정합니다.
다음 다이어그램은 초기화 및 유지/고정 기능을 제외하고 선형 모드에 있을 때 PI 블록의 기본 조절 루프를 보여주고 있습니다.
PI 명령어: 선형 모드

다음 예는 속도 조절기로 사용되는 PI 명령어를 보여주고 있습니다. 이 예에서 속도 에러는 시스템의 속도 기준에서 (SCRV 명령어를 통해) 속도 피드백 신호(PMUL 명령어 보기 참조)를 빼서 구합니다. 속도 에러는 PI 명령어로 직접 구동되며, PI 명령어는 위 다이어그램에 표시된 기능에 따라 이 신호를 처리합니다.
펑션 블록

구조화된 텍스트
Reference_Select.In1 := Master_Machine_Ref;
Reference_Select.Select1 := Master_Machine_Select;
Reference_Select.In2 := Section_Jog;
Reference_Select.Select2 := Jog_Select;
SSUM(Reference_Select);
S_Curve.In := Reference_Select.Out;
S_Curve.AccelRate := accel_rate;
S_Curve.DecelRate := accel_rate;
SCRV(S_Curve);
PMUL_01.In := Resolver_Feedback;
PMUL_01.WordSize := 12;
PMUL_01.Multiplier := 100000;
PMUL(PMUL_01);
Speed_Feedback := PMUL_01.Out;
Velocity_Error := S_Curve.Out - Speed_Feedback;
PI_01.In := Velocity_Error;
PI_01.Initialize := Enable_Regulator;
PI_01.Kp := Velocity_Proportional_Gain;
PI_01.Wld := Velocity_Integral_Gain;
PI(PI_01);
Torque_Reference := PI_01.Out;
의견을 작성 부탁드립니다.
LowLimit이면 명령어는 HighAlarm과 LowAlarm을 설정하고, Status에 적절한 비트를 설정한 다음, Out = LowLimit를 설정합니다.
0일 때 사용됩니다. 유효하지 않으면 명령어가 ShapeKpPlus를 제한값으로 강제 설정하고 Status에 적절한 비트를 설정합니다. NonLinearMode가 해제되면 사용되지 않습니다.















