내부 모델 컨트롤(IMC)
이 정보는
CompactLogix
5370, ControlLogix
5570, Compact GuardLogix
5370, GuardLogix
5570, Compact GuardLogix
5380, CompactLogix
5380, ControlLogix
5580, GuardLogix
5580 및 ControlLogix 5590 컨트롤러에 적용됩니다.내부 모델 컨트롤(IMC) 명령어는 단일 제어 변수 출력을 조작하여 단일 프로세스 변수를 제어합니다. 이 함수 블록은 실제 에러 신호가 내부의 1차 래그와 프로세스의 데드타임 모델과 비교되는 알고리즘을 수행합니다. IMC 펑션 블록은 PV - SP 편차, 내부 모델 및 튜닝에 따라 자동 모드에서 제어 변수 출력(CV)을 계산합니다.
사용 가능한 언어
래더 다이어그램
이 명령어는 래더 다이어그램에 사용할 수 없습니다.
펑션 블록

구조화된 텍스트
IMC(IMC_tag);
피연산자
펑션 블록
피연산자: | 유형: | 형식 | 설명: |
IMC 태그 | INTERNAL MODEL CONTROL | 구조 | IMC 구조 |
구조화된 텍스트
피연산자: | 유형: | 형식 | 설명: |
IMC 태그 | INTERNAL MODEL CONTROL | 구조 | IMC 구조 |
스트럭쳐드 텍스트 내 식의 구문에 대한 자세한 내용은
스트럭쳐드 텍스트 구문
을 참조하십시오.
중요:
APC 블록이 델타 시간(DeltaT)의 변화를 감지할 때마다 ModelInit가 수행됩니다. 따라서 블록은 DeltaT가 상수인 TimingMode 중 하나에서 실행되어야 합니다.
- TimingMode = 0(주기적)이고 이러한 펑션 블록이 주기 태스크에서 실행되는 동안
- TimingMode = 1(오버 샘플링)
두 경우 모두 주기 태스크 시간 또는 OversampleDT가 동적으로 변하는 경우 블록이 ModelInit를 수행합니다.
DeltaT에서 발생하는 지터로 인해 다음 TimingMode 설정은 사용하지 않는 것이 좋습니다.
- TimingMode = 0(주기적)이고 이러한 펑션 블록이 연속 또는 이벤트 태스크에서 실행되는 동안
- TimingMode = 2 (실시간 샘플링)
구조
입력 파라미터 | 데이터 유형 | 설명 | 유효값 및 기본값 |
|---|---|---|---|
EnableIn | BOOL | 활성화 입력. 거짓이면 함수 블록이 실행되지 않고 출력이 업데이트되지 않습니다. | 기본값 = 참 |
PV | REAL | 스케일링된 프로세스 변수 입력. 이 값은 일반적으로 아날로그 입력 모듈에서 읽어옵니다. | 유효값 = 모든 부동 소수점 수 기본값 = 0.0 |
PVFault | BOOL | PV 불량 상태 표시기. PV를 아날로그 입력에서 읽어오면 PVFault는 일반적으로 아날로그 입력 폴트 상태로 제어됩니다. PVFault가 참이면 입력 모듈에 에러가 있음을 나타내고 Status에 비트를 설정합니다. | 기본값은 거짓임 거짓 = 올바른 상태 |
PVUEMax | REAL | PV 최대 스케일링 값. 프로세스 변수의 100% 범위에 해당하는 PV 및 SP의 값입니다. PVEUMax ≤ PVEUMin이면 Status에 비트를 설정합니다. | 유효값 = PVEUMin < PVEUMax ≤ 최대 양의 부동 소수점 수 기본값 = 100.0 |
PVUEMin | REAL | PV 최소 스케일링 값. 프로세서 변수의 0% 범위에 해당하는 PV 및 SP 값. PVEUMax ≤ PVEUMin이면 Status에 비트를 설정합니다. | 유효값 = 최대 음의 부동 소수점 수 ≤ PVEUMin < PVEUMax 기본값 = 0.0 |
SPProg | REAL | PV 단위로 스케일링되는 SP 프로그램 값. SP는 프로그램 제어 상태일 때 이 값으로 설정됩니다. SPProg 또는 SPOper의 값이 < SPLLimit 또는 > SPHLimit인 경우 Status에 비트를 설정하고 SP에 사용되는 값을 제한합니다. | 유효값 = SPLLimit ~ SPHLimit 기본값 = 0.0 |
SPOper | REAL | PV 단위로 스케일링되는 SP 작업자 값. SP는 작업자 제어 상태일 때 이 값으로 설정됩니다. SPProg 또는 SPOper의 값이 < SPLLimit 또는 > SPHLimit인 경우 Status에 비트를 설정하고 SP에 사용되는 값을 제한합니다. | 유효값 = SPLLimit ~ SPHLimit 기본값 = 0.0 |
SPCascade | REAL | PV 단위로 스케일링되는 SP 캐스케이드 배열 값. 캐스케이드/비율 모드와 UseRatio가 거짓이면, SP는 이 값으로 설정되고, 대개 이것은 1차 루프의 CVEU가 됩니다. 캐스케이드/비율 모드와 UseRatio가 참이면 SP는 이 값에 Ratio를 곱한 값으로 설정됩니다. SPCascade의 값이 < SPLLimit 또는 > SPHLimit이면 Status에 비트를 설정하고 SP에 사용되는 값을 제한합니다. | 유효값 = SPLLimit ~ SPHLimit 기본값 = 0.0 |
SPHLimit | REAL | PV 단위로 스케일링되는 SP 상한 값. SPHLimit < SPLLimit 또는 SPHLimit > PVEUMax인 경우 Status에 비트를 설정합니다. | 유효값 = SPLLimit~PVEUMax 기본값 = 100.0 |
SPLLimit | REAL | PV 단위로 스케일링되는 SP 하한 값. SPLLimit < PVEUMin 또는 SPHLimit < SPLLimit인 경우 Status에 비트를 설정하고 SPLLimit 값을 사용하여 SP를 제한합니다. | 유효값 = PVEUMin~SPHLimit 기본값 = 0.0 |
UseRatio | BOOL | 비율 제어를 허용합니다. 캐스케이드/비율 모드일 때 참으로 설정하여 비율 제어를 사용합니다. | 기본값은 거짓임 |
RatioProg | REAL | 프로그램 제어일 때 비율 승수, 단위 없음(예: 스칼라). 프로그램 컨트롤일 때 Ratio 및 RatioOper가 이 값으로 설정됩니다. RatioProg 또는 RatioOper가 < RatioLLimit 또는 > RatioHLimit이면 Status에 비트를 설정하고 비율에 사용되는 값을 제한합니다. | 유효값 = RatioLLimit to RatioHLimit 기본값 = 1.0 |
RatioOper | REAL | 작업자 제어일 때 비율 승수, 단위 없음(예: 스칼라). Ratio는 오퍼레이터 컨트롤일 때 이 값으로 설정됩니다. RatioProg 또는 RatioOper가 < RatioLLimit 또는 > RatioHLimit이면 Status에 비트를 설정하고 비율에 사용되는 값을 제한합니다. | 유효값 = RatioLLimit to RatioHLimit 기본값 = 1.0 |
RatioHLimit | REAL | Ratio 상한값, 단위 없음(예: 스칼라). RatioProg 또는 RatioOper에서 얻은 Ratio 값을 제한합니다. RatioLLimit < 0이면 Status에 비트를 설정하고 0으로 제한합니다. RatioHLimit < RatioLLimit이면 Status에 비트를 설정하고 RatioLLimit의 값을 사용하여 Ratio를 제한합니다. | 유효값 = RatioLLimit~최대 양의 부동 소수점 수 기본값 = 1.0 |
RatioLLimit | REAL | Ratio 하한값, 단위 없음(예: 스칼라). RatioProg 또는 RatioOper에서 얻은 Ratio 값을 제한합니다. RatioLLimit < 0이면 Status에 비트를 설정하고 0으로 제한합니다. RatioHLimit < RatioLLimit이면 Status에 비트를 설정하고 RatioLLimit의 값을 사용하여 Ratio를 제한합니다. | 유효값 = 0.0 ~ RatioHLimit 기본값 = 1.0 |
CVFault | BOOL | 제어 변수 불량 상태 표시기. CVEU가 아날로그 출력을 제어하면 CVFault는 일반적으로 아날로그 출력의 폴트 상태에서 발생합니다. CVFault가 참이면 이것은 출력 모듈에 에러가 있음을 나타내고 Status에 비트를 설정합니다. | 기본값은 거짓임 거짓 = 올바른 상태 |
CVInitReq | BOOL | CV 초기화 요청. 참이면 CVEU를 CVInitValue의 값으로 설정합니다. 이 신호는 일반적으로 CVEU로 제어되는 아날로그 출력 모듈의 In Hold 상태를 통해 컨트롤되거나 보조 IMC 루프의 InitPrimary 출력에서 얻습니다. | 기본값은 거짓임 |
CVInitValue | REAL | CVEU 초기화 값, CVEU 단위로 스케일링됨. CVInitializing이 참이면 CVEU를 CVInitValue와 동일하게 설정하고 CV를 해당 백분율 값으로 설정합니다. CVInitValue는 일반적으로 CVEU로 컨트롤되는 아날로그 출력의 피드백 또는 보조 루프의 설정값에서 얻습니다. CVFaulted 또는 CVEUSpanInv가 참(불량)이면 펑션 블록 초기화가 비활성화됩니다. | 유효값 = 모든 부동 소수점 수 기본값 = 0.0 |
CVProg | REAL | CV 프로그램-수동 값. CV는 프로그램 제어 및 수동 모드 상태일 때 이 값으로 설정됩니다. CVManLimiting이 참일 때 CVProg 또는 CVOper의 값이 < 0 또는 > 100, 또는 < CVLLimit 또는 > CVHLimit이면 고유 Status 비트를 설정하고 CV에 사용되는 값을 제한합니다. | 유효값 = 0.0~100.0 기본값 = 0.0 |
CVOper | REAL | CV 작업자-수동 값. CV는 오퍼레이터 컨트롤 및 수동 모드일 때 이 값으로 설정됩니다. 오퍼레이터-수동 모드가 아닌 경우 각 함수 블록 실행이 끝날 때 CVOper를 CV 값으로 설정합니다. CVManLimiting이 참일 때 CVProg 또는 CVOper의 값이 < 0 또는 > 100, 또는 < CVLLimit 또는 > CVHLimit이면 고유 Status 비트를 설정하고 CV에 사용되는 값을 제한합니다. | 유효값 = 0.0~100.0 기본값 = 0.0 |
CVOverrideValue | REAL | CV 오버라이드 값. 오버라이드 모드일 때 CV가 이 값으로 설정됩니다. 이 값은 IMC 루프의 안전 상태 출력에 해당되어야 합니다. CVOverrideValue의 값이 < 0 또는 > 100이면 고유 Status 비트를 설정하고 CV에 사용되는 값을 제한합니다. | 유효값 = 0.0~100.0 기본값 = 0.0 |
CVTrackValue | REAL | CV 추적 값. CVTrackReq가 활성화되고 IMC 함수 블록이 수동 상태이면 CVTrackValue가 무시되고 IMC 내부 모델이 CVOper 또는 CVProg 값으로 기록 데이터를 업데이트합니다. CVTrackReq가 활성화되고 IMC 함수 블록이 자동 상태이면 내부 모델이 CVTrackValue 값을 기반으로 기록 데이터를 업데이트합니다. 이 경우 CV은 마치 IMC 함수 블록이 계속해서 프로세스를 컨트롤하고 있는 것처럼 이동할 수 있습니다. 이는 IMC 함수 블록이 다른 컨트롤 알고리즘 출력을 따르도록 하려는 다중 루프 선택 스키마에서 유용하며 여기에서 컨트롤 알고리즘 출력을 CVTrackValue에 연결합니다. | 유효값 = 0.0~100.0 기본값 = 0.0 |
CVManLimiting | BOOL | 수동 모드 요청에서 CV 제한. 수동 모드 및 CVManLimiting이 참인 경우 CV는 CVHLimit 및 CVLLimit 값에 의해 제한됩니다. | 기본값은 거짓임 |
CVEUMax | REAL | CVEU의 최대값. 100% CV에 해당하는 CVEU의 값입니다. CVEUMax = CVEUMin이면 Status에서 비트를 설정합니다. | 유효값 = 모든 부동 소수점 수 기본값 = 100.0 |
CVEUMin | REAL | CVEU의 최소값. 0% CV에 해당하는 CVEU의 값입니다. CVEUMax = CVEUMin이면 Status에서 비트를 설정합니다. | 유효값 = 모든 부동 소수점 수 기본값 = 0.0 |
CVHLimit | REAL | CV 상한 값. 이 값은 CVHAlarm 출력을 설정하는 데 사용됩니다. 또한 자동 또는 캐스케이드/비율 모드에서 CV를 제한할 때나 CVManLimiting이 참인 경우 수동 모드에서 CV를 제한할 때도 사용됩니다. CVLLimit < 0인 경우, CVHLimit > 100인 경우, CVHLimit < CVLLimit인 경우에 Status에 비트를 설정합니다. CVHLimit < CVLLimit인 경우, CVLLimit의 값을 사용하여 CV를 제한합니다. | 유효값 = CVLLimit < CVHLimit ≤ 100.0 기본값 = 100.0 |
CVLLimit | REAL | CV 하한 값. 이 값은 CVLAlarm 출력을 설정하는 데 사용됩니다. 또한 자동 또는 캐스케이드/비율 모드에서 CV를 제한할 때나 CVManLimiting이 참인 경우 수동 모드에서 CV를 제한할 때도 사용됩니다. CVLLimit < 0인 경우, CVHLimit > 100인 경우, CVHLimit < CVLLimit인 경우에 Status에 비트를 설정합니다. CVHLimit < CVLLimit인 경우, CVLLimit의 값을 사용하여 CV를 제한합니다. | 유효값 = 0.0 ≤ CVLLimit < CVHLimit 기본값 = 0.0 |
CVROCPosLimit | REAL | CV의 증가 변화율 제한, 초당 퍼센트 단위로 표시됩니다. 변화율 제한은 자동 또는 캐스케이드/비율 모드에서 또는 CVManLimiting이 참인 경우 수동 모드에서만 사용됩니다. 값이 0이면 CV ROC 제한을 비활성화합니다. CVROCPOSLimit의 값이 < 0이면 Status에 비트를 설정하여 CV ROC 제한을 비활성화합니다. | 유효값 = 0.0 ~ 최대 양의 부동 소수점 수 기본값 = 0.0 |
CVROCNegLimit | REAL | CV의 줄임 변화율 제한, 초당 퍼센트 단위로 표시됩니다. 변화율 제한은 자동 또는 캐스케이드/비율 모드에서 또는 CVManLimiting이 참인 경우 수동 모드에서만 사용됩니다. 값이 0이면 CV ROC 제한을 비활성화합니다. CVROCNegLimit의 값이 < 0이면 Status에 비트를 설정하여 CV ROC 제한을 비활성화합니다. | 유효값 = 0.0 ~ 최대 양의 부동 소수점 수 기본값 = 0.0 |
HandFB | REAL | CV HandFeedback 값. 핸드 모드이고 HandFBFault가 FALSE(양호한 상태)일 때 CV가 이 값으로 설정됩니다. 이 값은 보통 현장에 장착된 핸드/자동 스테이션의 출력으로 핸드 모드에서 무충돌 전환을 수행하는 데 사용됩니다. HandFB 값이 0보다 작거나 100보다 큰 경우 고유 Status 비트를 설정하고 CV에 사용되는 값을 제한합니다. | 유효 = 0.0…100.0 기본값 = 0.0 |
HandFBFault | BOOL | HandFB 값 불량 상태 표시기. HandFB 값이 아날로그 입력에서 읽혀지면 HandFBFault는 일반적으로 아날로그 입력 채널의 상태에 의해 제어됩니다. HandFBFault가 참이면 이것은 입력 모듈에 에러가 있음을 나타내고 Status에 비트를 설정합니다. | 기본값은 거짓임 거짓 = 올바른 상태 |
WindupHIn | BOOL | 와인드업 상한 요청. 참이면 CV의 값 증가가 허용되지 않습니다. 이 신호는 일반적으로 보조 루프의 WindupHOut 출력입니다. | 기본값은 거짓임 |
WinduplIn | BOOL | 와인드업 하한 요청. 참이면 CV의 값 감소가 허용되지 않습니다. 이 신호는 일반적으로 보조 루프의 WindupLOut 출력입니다. | 기본값은 거짓임 |
GainEUSpan | BOOL | EU 또는 범위의 % 형태의 ModelGain 단위입니다. EU 또는 범위의 % 형태의 CV ModelGain 단위입니다. ModelGain을 EU로 해석하도록 설정하거나 범위의 %로 해석하도록 리셋합니다. | 기본값은 거짓임 참 = EU 단위 게인 거짓 = 범위의 % 단위 게인 |
ProcessGainSign | BOOL | Autotune에만 사용됩니다. 프로세스 게인의 부호(Delta PV/Delta CV). 음의 프로세스 게인(출력이 증가하면 PV가 감소)을 나타내도록 설정합니다. 양의 프로세스 게인(출력이 증가하면 PV가 증가)을 나타내도록 리셋합니다. | 기본값은 거짓임 |
ProcessType | DINT | 프로세스 유형 선택(1 = 적분, 0 = 비적분) | 기본값 = 0 |
ModelGain | REAL | 내부 모델 게인 파라미터. 프로세스 방향에 따라 양 또는 음의 게인을 입력합니다. | 유효값 = 최대 음의 부동 소수점 수 −> 최대 양의 부동 소수점 수 기본값 = 0.0 |
ModelTC | REAL | 초 단위의 내부 모델 시간 상수. | 유효값 = 0.0 ~ 최대 양의 부동 소수점 수 기본값 = 0.0 |
ModelDT | REAL | 초 단위의 내부 모델 데드타임. | 유효값 = 0.0 ~ 최대 양의 부동 소수점 수 기본값 = 0.0 |
RespTC | REAL | 초 단위의 제어 변수 동작 속도를 결정하는 튜닝 파라미터. | 유효값 = 0.0 ~ 최대 양의 부동 소수점 수 기본값 = 0.0 |
PVTracking | BOOL | SP가 PV를 추적하도록 요청. SP가 PV를 추적하도록 하려면 참으로 설정합니다. 캐스케이드/비율 또는 자동 모드일 때는 무시됩니다. | 기본값은 거짓임 |
CVTrackReq | BOOL | CV 추적 요청. 오토 튜닝이 꺼진 경우 CV 추적을 활성화하려면 참으로 설정합니다. 핸드 및 오버라이드 모드에서는 무시됩니다. | 기본값은 거짓임 |
AllowCasRat | BOOL | 캐스케이드/비율 모드를 허용합니다. ProgCasRatReq 또는 OperCasRatReq를 사용하여 캐스케이드/비율 모드를 선택하려면 참으로 설정합니다. | 기본값은 거짓임 |
ManualAfterInit | BOOL | 초기화 후 수동 모드 요청. 참인 경우, 현재 모드가 오버라이드 또는 핸드가 아니면 CVInitializing을 참으로 설정할 때 펑션 블록이 수동 모드가 됩니다. ManualAfterInit이 FALSE이면 함수 블록의 모드가 변경되지 않습니다. | 기본값은 거짓임 |
ProgProgReq | BOOL | 프로그램 프로그래밍 요청. 프로그램 제어를 요청하려면 사용자 프로그램에서 참으로 설정합니다. ProgOperReq가 참인 경우 무시됩니다. 이 값을 TRUE로 유지하고 ProgOperReq를 FALSE로 유지하면 함수 블록을 프로그램 컨트롤로 잠글 수 있습니다. ProgValueReset가 TRUE이면 함수 블록은 입력을 FALSE로 재설정합니다. | 기본값은 거짓임 |
ProgOperReq | BOOL | 프로그램 작업자 요청. 작업자 제어를 요청하려면 사용자 프로그램에서 참으로 설정합니다. 이 값을 TRUE로 유지하면 함수 블록을 오퍼레이터 컨트롤로 잠글 수 있습니다. ProgValueReset가 TRUE이면 함수 블록은 입력을 FALSE로 재설정합니다. | 기본값은 거짓임 |
ProgCasRatReq | BOOL | 프로그램-캐스케이드/비율 모드 요청. 캐스케이드/비율 모드를 요청하려면 사용자 프로그램을 통해 TRUE로 설정합니다. ProgValueReset가 TRUE이면 함수 블록은 입력을 FALSE로 재설정합니다. | 기본값은 거짓임 |
ProgAutoReq | BOOL | 프로그램-자동 모드 요청. 자동 모드를 요청하려면 사용자 프로그램에서 참으로 설정합니다. ProgValueReset가 TRUE이면 함수 블록은 입력을 FALSE로 재설정합니다. | 기본값은 거짓임 |
ProgManualReq | BOOL | 프로그램-수동 모드 요청. 수동 모드를 요청하려면 사용자 프로그램에서 참으로 설정합니다. ProgValueReset가 TRUE이면 함수 블록은 입력을 FALSE로 재설정합니다. | 기본값은 거짓임 |
ProgOverrideReq | BOOL | 프로그램-오버라이드 모드 요청. 오버라이드 모드를 요청하려면 사용자 프로그램에서 참으로 설정합니다. ProgValueReset가 TRUE이면 함수 블록은 입력을 FALSE로 재설정합니다. | 기본값은 거짓임 |
ProgHandReq | BOOL | 프로그램-핸드 모드 요청. 핸드 모드를 요청하려면 사용자 프로그램에서 참으로 설정합니다. 이 값은 일반적으로 핸드/자동 스테이션에서 디지털 입력으로 읽습니다. ProgValueReset가 TRUE이면 함수 블록은 입력을 FALSE로 재설정합니다. | 기본값은 거짓임 |
OperProgReq | BOOL | 작업자 프로그램 요청. 프로그램 제어를 요청하려면 작업자 인터페이스에서 참으로 설정합니다. 함수 블록은 이 매개 변수를 FALSE로 재설정합니다. | 기본값은 거짓임 |
OperOperReq | 작업자 작업자 요청. 작업자 제어를 요청하려면 작업자 인터페이스에서 참으로 설정합니다. 함수 블록은 이 매개 변수를 FALSE로 재설정합니다. | 기본값은 거짓임 | |
OperCasRatReq | BOOL | 작업자-캐스케이드/비율 모드 요청. 캐스케이드/비율 모드를 요청하기 위해 작업자 인터페이스에 의해 참으로 설정됩니다. 함수 블록은 이 매개 변수를 FALSE로 재설정합니다. | 기본값은 거짓임 |
OperAutoReq | BOOL | 작업자-자동 모드 요청. 자동 모드를 요청하려면 작업자 인터페이스에서 참으로 설정합니다. 함수 블록은 이 매개 변수를 FALSE로 재설정합니다. | 기본값은 거짓임 |
OperManualReq | BOOL | 작업자-수동 모드 요청. 수동 모드를 요청하려면 작업자 인터페이스에서 참으로 설정합니다. 함수 블록은 이 매개 변수를 FALSE로 재설정합니다. | 기본값은 거짓임 |
ProgValueReset | BOOL | 프로그램 제어 값 리셋. 참이면 Prog_xxx_Req 입력이 거짓으로 리셋됩니다. 참이고 프로그램 제어인 경우 SPProg를 SP로 설정하고 CVProg를 CV로 설정합니다. ProgValueReset이 TRUE이면 함수 블록은 이 매개 변수를 FALSE로 재설정합니다. | 기본값은 거짓임 |
TimingMode | DINT | 시간 기준 실행 모드 선택. 값/설명 0 = 주기 모드 1 = 오버 샘플링 모드 2 = 실시간 샘플링 모드 타이밍 모드에 대한 자세한 내용은 함수 블록 속성을 참조하세요. | 유효값 = 0…2 기본값 = 0 |
OverSampleDT | REAL | 오버 샘플링 모드에 대한 실행 시간. | 유효값 = 0 ~ 최대. TON_Timer 경과 시간(4194.303초) 기본값 = 0 |
RTSTime | DINT | 실시간 샘플링 모드에 대한 모듈 업데이트 기간. | 유효값 = 1~32,767 1카운트 = 1 ms |
RTSTimeStamp | DINT | 실시간 샘플링 모드에 대한 모듈 타임 스탬프 값. | 유효값 = 0~32,767 (32,767에서 0으로 건너뜀) 1카운트 = 1 ms |
PVTuneLimit | REAL | PV 단위로 스케일링되는 PV 튜닝 제한. 오토 튜닝이 실행 중이고 예측 PV가 이 제한 값을 초과할 것으로 예상하는 경우 튜닝이 중단됩니다. | 범위: 모든 부동 소수점 수 기본값=0 |
AtuneTimeLimit | REAL | CV 단계 변경 후 오토 튜닝 완료에 걸리는 최대 시간. 오토 튜닝이 이 시간을 초과할 경우 튜닝이 중단됩니다. | 유효 범위: 0 보다 큰 모든 부동 소수점 수. 기본값 = 60분 |
NoiseLevel | DINT | 튜닝 중에 보상할 PV에서 예상되는 노이즈 레벨 추정값. 선택 항목: 0=낮음, 1=중간, 2=높음 | 범위: 0 ~ 2 기본값=1 |
CVStepSize | REAL | 튜닝 단계 테스트를 위한 CV 단계 크기(퍼센트). 단계 크기는 상한/하한에 따라 CV에 직접 추가됩니다. | 범위: -100% ~ 100% 기본값=10% |
ResponseSpeed | DINT | 폐쇄 루프 응답의 요구 속도. 느린 응답: ResponseSpeed=0 중간 응답: ResponseSpeed=1 빠른 응답: ResponseSpeed=2. ResponseSpeed가 0보다 작은 경우 느린 응답이 사용됩니다. ResponseSpeed가 2보다 큰 경우 빠른 응답이 사용됩니다. | 범위: 0 ~ 2 기본값=1 |
ModelInit | BOOL | 내부 모델 초기화 스위치. | 기본값은 거짓임 |
Factor | REAL | 비적분 모델 근사치 요소. 적분 프로세스 유형에만 사용됩니다. | 기본값 = 100 |
AtuneStart | BOOL | 오토 튜닝 시작 요청. 펑션 블록의 오토 튜닝을 시작하려면 참으로 설정합니다. IMC가 수동 모드가 아니면 무시됩니다. 함수 블록은 이 매개 변수를 FALSE로 재설정합니다. | 기본값은 거짓임 |
AtuneUseModel | BOOL | 오토 튜닝 모델 요청을 사용합니다. 현재 모델 파라미터를 계산된 오토 튜닝 모델 파라미터로 바꾸려면 참으로 설정합니다. 펑션 블록은 입력 파라미터를 거짓으로 설정합니다. | 기본값은 거짓임 |
AtuneAbort | BOOL | 오토 튜닝 중단 요청. IMC 펑션 블록의 오토 튜닝을 중단하려면 참으로 설정합니다. 함수 블록은 입력 매개 변수를 FALSE로 설정합니다. | 기본값은 거짓임 |
출력 매개 변수 | 데이터 유형 | 설명 | 유효값 및 기본값 |
|---|---|---|---|
EnableOut | BOOL | 명령어의 활성화 여부를 나타냅니다. CVEU가 오버플로되는 경우 거짓으로 해제됩니다. | |
CVEU | REAL | 스케일링된 제어 변수 출력. CVEUMax 및 CVEUMin을 사용하여 스케일링됩니다. 여기서 CVEUMax는 100%에 해당하고 CVEUMin은 0%에 해당합니다. 일반적으로 이 출력은 아날로그 출력 모듈 또는 2차 루프를 제어하는 데 사용됩니다. CVEU = (CV * CVEUSpan / 100) + CVEUMin CVEU 범위 계산: CVEUSpan = ( CVEUMax − CVEUMin ) | |
CV | REAL | 제어 변수 출력. 이 값은 항상 0 ~ 100%로 표시됩니다. CVManLimiting이 참이면 자동 또는 캐스케이드/비율 모드 또는 수동 모드일 때 CVHLimit 및 CVLLimit에 의해 CV가 제한됩니다. 그렇지 않으면 0 ~ 100%로 제한됩니다. | |
DeltaCV | REAL | 현재 CV와 이전 CV의 차이(현재 CV - 이전 CV). | |
CVInitializing | BOOL | 초기화 모드 표시기. CVInitReq 또는 펑션 블록 FirstScan이 참일 때, 또는 CVFault가 참에서 거짓으로 전환할 때(불량 상태 -> 올바른 상태) 참을 설정합니다. 함수 블록이 초기화되고 CVInitReq가 더 이상 TRUE이 아닌 경우 CVInitializing이 FALSE로 설정됩니다. | |
CVHAlarm | BOOL | CV 상한 알람 표시기. CV의 계산 값이 100보다 크거나 CVHLimit일 때 참입니다. | |
CVLAlarm | BOOL | CV 하한 알람 표시기. CV의 계산 값이 < 0 또는 CVLLimit인 경우 참. | |
CVROCPosAlarm | BOOL | CV 변화율 알람 표시기. CV에 대해 계산된 변화율이 CVROCPosLimit를 초과하는 경우 참. | |
CVROCNegAlarm | REAL | CV 변화율 알람 표시기. CV에 대해 계산된 변화율이 CVROCNegLimit를 초과하는 경우 참. | |
SP | REAL | 현재 설정값. SP의 값은 자동, 캐스케이드/비율 또는 PV 추적 모드에서 PV 단위로 스케일링될 때 CV를 제어하는 데 사용됩니다. | |
SPPercent | REAL | PV의 범위 퍼센트로 표시되는 SP 값. SPPercent = ((SP − PVEUMin ) * 100) / PVSpan 여기서 PVSpan = PVEUMax − PVEUMin | |
SPHAlarm | BOOL | SP 상한 알람 표시기. SP ≥ SPHLimit인 경우 참입니다. | |
SPLAlarm | BOOL | SP 하한 알람 표시기. SP ≤ SPLLimit인 경우 참입니다. | |
PVPercent | REAL | 범위 퍼센트로 표시된 PV. PVPercent = (( PV − PVEUMin ) * 100) / PVSpan PV 범위 계산: PVSpan = (PVEUMax − PVEUMin) | |
E | REAL | 프로세스 에러. PV 단위로 스케일링되는 SP와 PV의 차이. | |
EPercent | REAL | 범위 퍼센트로 표시된 에러. | |
InitPrimary | BOOL | 1차 루프 명령을 초기화합니다. 캐스케이드/비율 모드가 아니거나 CVInitializing이 참인 경우 참입니다. 이 신호는 일반적으로 기본 루프의 CVInitReq 입력에 의해 사용됩니다. | |
WindupHOut | BOOL | 와인드업 상한 표시기. SP 상한 또는 CV 상한/하한에 도달하는 경우 참입니다. 이 신호는 일반적으로 기본 루프에서 CV 출력의 와인드업을 제한하기 위해 WindupHIn 입력에서 사용됩니다. | |
WindupLOut | BOOL | 와인드업 하한 표시기. SP 또는 CV 상한/하한에 도달하는 경우 참입니다. 이 신호는 일반적으로 기본 루프에서 CV 출력의 와인드업을 제한하기 위해 WindupLIn 입력에서 사용됩니다. | |
Ratio | REAL | 현재 비율 승수, 단위 없음. | |
RatioHAlarm | BOOL | 비율 상한 알람 표시기. Ratio > RatioHLimit인 경우 참입니다. | |
RatioLAlarm | BOOL | 비율 하한 알람 표시기. Ratio < RatioLLimit인 경우 참입니다. | |
ProgOper | BOOL | 프로그램/작업자 제어 표시기. 프로그램 제어인 경우 참입니다. 작업자 제어인 경우 거짓입니다. | |
CasRat | BOOL | 캐스케이드/비율 모드 표시기. 캐스케이드/비율 모드일 때 참입니다. | |
Auto | BOOL | 자동 모드 표시기. 자동 모드일 때 참입니다. | |
Manual | BOOL | 수동 모드 표시기. 수동 모드일 때 참입니다. | |
Override | BOOL | 오버라이드 모드 표시기. 오버라이드 모드일 때 참입니다. | |
Hand | BOOL | 핸드 모드 표시기. 핸드 모드일 때 참입니다. | |
DeltaT | REAL | 업데이트 간에 경과된 시간(초). | |
StepSizeUsed | REAL | 튜닝에 사용되는 실제 CV 단계 크기. | |
GainTuned | REAL | 튜닝이 완료된 후 계산된 내부 모델 게인 값이 표시됩니다. | |
TCTuned | REAL | 튜닝이 완료된 후 계산된 내부 모델 시간 상수 값이 표시됩니다. | |
DTTuned | REAL | 튜닝이 완료된 후 계산된 내부 모델 데드타임 값이 표시됩니다. | |
RespTCTunedS | REAL | 튜닝 후 느린 응답 속도에서 제어 변수 시간 상수의 계산된 값이 완료되었습니다. | |
RespTCTunedM | REAL | 튜닝 후 중간 응답 속도에서 제어 변수 시간 상수의 계산된 값이 완료되었습니다. | |
RespTCTunedF | REAL | 튜닝 후 빠른 응답 속도에서 제어 변수 시간 상수의 계산된 값이 완료되었습니다. | |
AtuneOn | BOOL | 오토 튜닝이 시작되면 참을 설정합니다. | |
AtuneDone | BOOL | 오토 튜닝이 완료되면 참을 설정합니다. | |
AtuneAborted | BOOL | 사용자에 의해, 또는 오토 튜닝 작업 중에 발생한 에러로 인해 오토 튜닝이 중단되면 참으로 설정합니다. | |
AtuneStatus | DINT | 블록 튜닝 상태를 나타냅니다. | |
AtuneFault | BOOL | 오토 튜닝에서 다음과 같은 폴트가 발생했습니다. | AtuneStatus의 비트 0 |
AtunePVOutOfLimit | BOOL | PV 또는 PV의 데드타임-단계 사전 예측 값이 오토 튜닝 중에 PVTuneLimit를 초과합니다. 참이면 오토 튜닝이 중단됩니다. | AtuneStatus의 비트 1 |
AtuneModeInv | BOOL | IMC 모드가 오토 튜닝 시작시 수동이 아니었거나 IMC 모드가 오토 튜닝 중 수동에서 변경되었습니다. 참이면 오토 튜닝이 시작되지 않거나 중단됩니다. | AtuneStatus의 비트 2 |
AtuneCVWindupFault | BOOL | WindupHIn 또는 WindupLIn은 오토 튜닝 시작시 또는 오토 튜닝 중 참입니다. 참이면 오토 튜닝이 시작되지 않거나 중단됩니다. | AtuneStatus의 비트 3 |
AtuneStepSize0 | BOOL | 오토 튜닝 시작시 StepSizeUsed = 0. 참이면 오토 튜닝이 시작되지 않습니다. | AtuneStatus의 비트 4 |
AtuneCVLimitsFault | BOOL | CVLimitsInv 및 CVManLimiting은 오토 튜닝 시작시 또는 오토 튜닝 중 참입니다. 참이면 오토 튜닝이 시작되지 않거나 중단됩니다. | AtuneStatus의 비트 5 |
AtuneCVInitFault | BOOL | CVInitializing은 오토 튜닝 시작시 또는 오토 튜닝 중 참입니다. 참이면 오토 튜닝이 시작되지 않거나 중단됩니다. | AtuneStatus의 비트 6 |
AtuneEUSpanChanged | BOOL | 오토 튜닝 중에 CVEUSpan 또는 PVEUSpan이 변경됩니다. 참이면 오토 튜닝이 중단됩니다. | AtuneStatus의 비트 7 |
AtuneCVChanged | BOOL | CVOper는 작업자 제어일 때 변경되거나, CVProg는 프로그램 제어일 때 변경되거나, CV는 오토 튜닝 중 상/하한에 도달하거나 ROC 제한이 됩니다. 참이면 오토 튜닝이 중단됩니다. | AtuneStatus의 비트 8 |
AtuneTimeout | BOOL | 단계 테스트가 시작된 이후 경과 시간이 AtuneTimeLimit보다 큽니다. 참이면 오토 튜닝이 중단됩니다. | AtuneStatus의 비트 9 |
AtunePVNotSettled | BOOL | PV가 오토 튜닝하기에 너무 많이 변경되었습니다. 참이면 오토 튜닝이 중단됩니다. PV가 보다 안정될 때까지 기다렸다가 오토 튜닝합니다. | AtuneStatus의 비트 10 |
Status1 | DINT | 펑션 블록에 대한 비트 매핑 상태입니다. | |
Status2 | DINT | 펑션 블록에 대한 추가 비트 매핑 상태입니다. | |
InstructFault | BOOL | 펑션 블록에서 폴트가 발생했습니다. Status1 및 Status2의 비트 상태를 나타냅니다. 값이 0이면 폴트가 발생하지 않았음을 나타냅니다. 유효하지 않은 값으로 구성될 수 있는 파라미터에는 유효하지 않은 상태를 나타내는 상태 파라미터가 있어야 합니다. | Status1의 비트 0 |
PVFaulted | BOOL | 프로세스 변수 PV의 상태가 좋지 않습니다. | Status1의 비트 1 |
CVFaulted | BOOL | 제어 변수 CV 폴트 발생 | Status1의 비트 2 |
HandFBFaulted | BOOL | HandFB 값의 상태가 좋지 않습니다. | Status1의 비트 3 |
PVSpanInv | BOOL | PV 범위가 유효하지 않음, PVEUMax < PVEUMin. | Status1의 비트 4 |
SPProgInv | BOOL | SPProg < SPLLimit 또는 > SPHLimit. SP에 사용되는 값을 제한합니다. | Status1의 비트 5 |
SPOperInv | BOOL | SPOper < SPLLimit 또는 > SPHLimit. SP에 사용되는 값을 제한합니다. | Status1의 비트 6 |
SPCascadeInv | BOOL | SPCascade < SPLLimit 또는 > SPHLimit. SP에 사용되는 값을 제한합니다. | Status1의 비트 7 |
SPLimitsInv | BOOL | 한계값이 유효하지 않음: SPLLimit < PVEUMin, SPHLimit > PVEUMax 또는 SPHLimit < SPLLimit. SPHLimit <SPLLimit인 경우, SPLLimit를 사용하여 값을 제한합니다. | Status1의 비트 8 |
RatioLimitsInv | BOOL | 비율 상한-하한이 유효하지 않음, 하한 < 0 또는 상한 < 하한. | Status1의 비트 9 |
RatioProgInv | BOOL | RatioProg < RatioLLimit 또는 > RatioHLimit. Ratio에 사용되는 값을 제한합니다. | Status1의 비트 10 |
RatioOperInv | BOOL | RatioOper < RatioLLimit 또는 > RatioHLimit. Ratio에 사용되는 값을 제한합니다. | Status1의 비트 11 |
CVProgInv | BOOL | CVManLimiting이 참이면 CVProg < 0 또는 > 100, 또는 < CVLLimit 또는 > CVHLimit입니다. CV에 사용되는 값을 제한합니다. | Status1의 비트 12 |
CVOperInv | BOOL | CVManLimiting이 참이면 CVOper < 0 또는 > 100, 또는 < CVLLimit 또는 > CVHLimit입니다. CV에 사용되는 값을 제한합니다. | Status1의 비트 13 |
CVOverrideValueInv | BOOL | CVOverrideValue < 0 또는 > 100입니다. CV에 사용되는 값을 제한합니다. | Status1의 비트 14 |
CVTrackValueInv | BOOL | CVTrackValue < 0 또는 > 100입니다. CV에 사용되는 값을 제한합니다. | Status1의 비트 15 |
CVEUSpanInv | BOOL | CVEU의 범위가 유효하지 않음, CVEUMax와 CVEUMin이 같습니다. | Status1의 비트 16 |
CVLimitsInv | BOOL | CVLLimit < 0, CVHLimit > 100, 또는 CVHLimit <= CVLLimit입니다. CVHLimit <= CVLLimit인 경우, CVLLimit을 사용하여 CV를 제한합니다. | Status1의 비트 17 |
CVROCLimitInv | BOOL | CVROCLimit < 0이고, ROC 제한을 비활성화합니다. | Status1의 비트 18 |
HandFBInv | BOOL | HandFB < 0 또는 HandFB > 100. CV에 사용되는 값을 제한합니다. | Status1의 비트 19 |
SampleTimeTooSmall | BOOL | 모델 데드타임/DeltaT는 200보다 작거나 같아야 합니다. | Status1의 비트 20 |
FactorInv | BOOL | Factor < 0입니다. | Status1의 비트 21 |
ModuleGainInv | BOOL | ModelGain은 1.#QNAN 또는 -1.#IND(숫자가 아님), 또는 ± 1.$ (무한대 ∞)입니다. | Status1의 비트 22 |
ModelTCInv | BOOL | ModelTC < 0입니다. | Status1의 비트 23 |
ModelDTInv | BOOL | ModelDT < 0입니다. | Status1의 비트 24 |
RespTCInv | BOOL | RespTC < 0입니다. | Status1의 비트 25 |
TimingModelInv | BOOL | TimingMode가 유효하지 않습니다. 현재 모드가 오버라이드 또는 핸드가 아니면 수동 모드로 설정합니다. | Status2의 비트 27 |
RTSMissed | BOOL | RTS 모드에서만 사용됩니다. ABS(DeltaT - RTSTime) > 1 ms일 때 참입니다. | Status2의 비트 28. |
RTSTimeInv | BOOL | RTSTime이 유효하지 않습니다. | Status2의 비트 29. |
RTSTimeStampInv | BOOL | RTSTimeStamp가 유효하지 않습니다. 현재 모드가 오버라이드 또는 핸드가 아니면 수동 모드로 설정합니다. | Status2의 비트 30. |
DeltaTInv | BOOL | DeltaT가 유효하지 않습니다. 현재 모드가 오버라이드 또는 핸드가 아니면 수동 모드로 설정합니다. | Status2의 비트 31. |
설명
다음 그림은 IMC 펑션 블록 구성을 보여줍니다.

각 실행에서 IMC 함수 블록은 실제 PV 측정을 PV 예측 값과 비교합니다. 그 결과는 모델링 부정확성과 결합된 측정되지 않은 공정 교란의 효과인 외란 추정이라고 합니다. 외란 추정은 제어 변수의 설정값에 대한 바이어스로 사용됩니다. 외란이 없고 모델링이 완벽한 이상적인 경우, 외란 추정(피드백 신호)은 0과 같아집니다.
1차 모델 | M = K/(T*s+1)*exp(-D*s) | |
모델의 역 | Inv = (T*s+1)/K | |
1차 필터 | F = 1/(e*s+1) |
PV 예측 값 = exp(-D*s)/(e*s+1) * (SP - 외란 추정)
K... | 모델 게인 |
T... | 모델 시간 상수 |
D... | 모델 데드타임 |
e... | 응답 시간 상수 |
s... | 라플라스 변수 |
그런 다음 함수 블록은 CV 값(CVHLimit, CVLLimit 및 변화율 제한이 적용됨)과 PV 예측 값을 계산합니다.
IMC 함수 블록은 데드타임이 큰 프로세스를 컨트롤하는 경우에 PID 컨트롤 변수보다 우수한 장점을 가지고 PID 함수 블록을 대체하는 데 사용할 수 있습니다.
적분 프로세스 유형(예: 레벨 컨트롤 및 위치 컨트롤)의 경우, 내부 비적분 모델을 사용하여 적분 프로세스를 근사화합니다. Factor 파라미터는 확인된 적분 프로세스 모델을 CV 계산에 사용되는 비 적분 내부 모델로 변환하는 데 사용됩니다. 이는 안정적인 IMC 실행을 제공하기 위해 필요합니다.
연산 상태 플래그에 영향
아니요
주 폴트/부 폴트
이 명령어에만 해당되는 것은 없습니다. 피연산자 관련 폴트에 대해서는 공통 속성 항목을 참조하십시오.
실행
펑션 블록
조건/상태 | 수행한 작업 |
|---|---|
사전 스캔 | EnableIn 및 EnableOut 비트가 거짓으로 해제됩니다. |
Tag.EnableIn이 거짓임 | EnableIn 및 EnableOut 비트가 거짓으로 해제됩니다. |
Tag.EnableIn이 참임 | EnableIn 및 .EnableOut 비트는 참으로 설정됩니다. 명령어가 실행됩니다. |
명령어 최초 실행 | N/A |
명령어 최초 스캔 | N/A |
사후 스캔 | EnableIn 및 EnableOut 비트가 거짓으로 해제됩니다. |
구조화된 텍스트
조건/상태 | 수행한 작업 |
사전 스캔 | 펑션 블록 표의 사전 스캔을 참조하십시오. |
정상 실행 | 펑션 블록 표에서 Tag.EnableIn이 참임을 참조하십시오. |
사후 스캔 | 펑션 블록 표에서 사후 스캔을 참조하십시오. |
예
펑션 블록

구조화된 텍스트
imcTag.PV := imcInput1;
imcTag.SPProg := imcInput2;
imcTag.CVProg := imcInput3;
IMC(imcTag);
imcOutput1 := imcTag.CVEU;
의견을 작성 부탁드립니다.