2차 컨트롤러(Second-Order Controller, SOC)
이 정보
CompactLogix
5370, ControlLogix
5570, Compact GuardLogix
5370, GuardLogix
5570, CompactLogix
5380, ControlLogix
5580 및 ControlLogix 5590 컨트롤러에 적용됩니다.SOC 명령어는 PI 명령어와 유사한 방식으로 폐쇄 루프 제어 시스템에 사용하도록 고안되었습니다. SOC 명령어는 게인 항, 1차 래그 및 2차 리드를 제공합니다.
사용 가능한 언어
래더 다이어그램
이 명령어는 래더 다이어그램에 사용할 수 없습니다.
펑션 블록

구조화된 텍스트
SOC(SOC_tag);
피연산자
펑션 블록
피연산자 | 유형 | 형식 | 설명 |
|---|---|---|---|
SOC tag | SEC_ORDER_CONTROLLER | 구조 | SOC 구조 |
SEC_ORDER_CONTROLLER 구조
입력 매개 변수 | 데이터 유형 | 설명 |
|---|---|---|
EnableIn | BOOL | 활성화 입력. 선택하지 않으면 명령이 실행되지 않고 출력이 업데이트되지 않습니다. 기본값은 설정 상태입니다. |
In | REAL | 명령어의 아날로그 신호 입력. 유효값 = 모든 부동 소수점 수 기본값 = 0.0 |
Initialize | BOOL | 명령어 초기화 명령. 설정되면 Out과 내부 적분기는 InitialValue의 값과 같게 설정됩니다. 기본값은 해제 상태입니다. |
InitialValue | REAL | 초기값 입력. Initialize가 설정되면 Out과 적분기는 InitialValue의 값으로 설정됩니다. InitialValue 값은 HighLimit 및 LowLimit을 사용하여 제한합니다. 유효값 = 모든 부동 소수점 수 기본값 = 0.0 |
Gain | REAL | 명령어의 비례 게인. 값이 범위를 벗어나면 명령어가 값을 제한하고 Status에 적절한 비트를 설정합니다. 유효값 = 0.0보다 큰 모든 부동 소수점 수. 기본값 = 최소 양의 부동 소수점 수. |
WLag | REAL | 1차 래그 모서리 진동수(라디안/초 단위). 값이 범위를 벗어나면 명령어가 값을 제한하고 Status에 적절한 비트를 설정합니다. 유효 = 유효 범위는 아래의 설명 섹션을 참조하십시오. 기본값 = 0.0 |
WLead | REAL | 2차 리드 모서리 진동수(라디안/초 단위). 값이 범위를 벗어나면 명령어가 값을 제한하고 Status에 적절한 비트를 설정합니다. 유효 = 유효 범위는 아래의 설명 섹션을 참조하십시오. 기본값 = 0.0 |
ZetaLead | REAL | 2차 리드 댐핑 계수. 값이 범위를 벗어나면 명령어가 값을 제한하고 Status에 적절한 비트를 설정합니다. 유효값 = 0.0~10.0 기본값 = 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 | 낮게 유지 명령. 설정되면 내부 적분기의 값은 줄일 수 없습니다. 기본값은 해제 상태입니다. |
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이 오버플로되는 경우 거짓으로 해제됩니다. |
Out | REAL | 알고리즘의 계산된 출력. |
HighAlarm | BOOL | 알람 표시기의 최대 한도. Out의 계산된 값 HighLimit이고 출력이 HighLimit에 클램핑되면 설정됩니다. |
LowAlarm | BOOL | 알람 표시기의 최소 한도. Out의 계산된 값 LowLimit이고 출력이 LowLimit에 클램핑되면 설정됩니다. |
DeltaT | REAL | 업데이트 간 경과 시간. 컨트롤 알고리즘에서 프로세스 출력 계산에 사용되는 경과 시간(초)입니다. |
Status | DINT | 펑션 블록의 상태. |
InstructFault (Status.0) | BOOL | 명령어에서 다음 실행 에러 중 하나가 감지됩니다. 마이너 또는 메이저 컨트롤러 에러가 아닙니다. 나머지 상태 비트를 확인하여 발생한 에러를 판단합니다. |
GainInv (Status.1) | BOOL | 게인 < 최소 양의 부동 소수점. |
WLagInv (Status.2) | BOOL | WLag > 최대 또는 WLag < 최소. |
WLeadInv (Status.3) | BOOL | WLead > 최대 또는 WLead < 최소. |
ZetaLeadInv (Status.4) | BOOL | ZetaLead > 최대 또는 ZetaLead < 최소. |
HighLowLimsInv (Status.5) | BOOL | HighLimit LowLimit. |
TimingModeInv (Status.27) | BOOL | 유효하지 않은 타이밍 모드입니다. 타이밍 모드에 대한 자세한 내용은 함수 블록 속성을 참조하세요. |
RTSMissed (Status.28) | BOOL | 실시간 샘플링 모드에서만 사용. ABS | DeltaT - RTSTime | > 1 (.001 초)일 때 설정. |
RTSTimeInv (Satus.29) | BOOL | 유효하지 않은 RTSTime 값. |
RTSTimeStampInv (Status.30) | BOOL | 유효하지 않은 RTSTimeStamp 값. |
DeltaT (Status.31) | BOOL | 유효하지 않은 DeltaT 값. |
구조화된 텍스트
피연산자 | 유형 | 형식 | 설명 |
|---|---|---|---|
SOC tag | SEC_ORDER_CONTROLLER | 구조 | SOC 구조 |
스트럭쳐드 텍스트 내에서 식의 구문에 대한 자세한 내용은 스트럭쳐드 텍스트 구문을 참조하십시오.
설명
SOC 명령어는 게인 항, 1차 래그 및 2차 리드를 제공합니다. 래그의 진동수는 조정 가능하며 리드의 진동수와 댐핑도 조정 가능합니다. 2차 리드의 제로 쌍은 복소수(댐핑이 1 미만) 또는 실수(댐핑
1)일 수 있습니다. SOC 명령어는 스캔 비율이 일정하게 유지되는 태스크에서 실행하도록 고안되었습니다.
1)일 수 있습니다. SOC 명령어는 스캔 비율이 일정하게 유지되는 태스크에서 실행하도록 고안되었습니다.SOC 명령어는 다음 라플라스 전달 수식을 사용합니다.

파라미터 제한
다음 SOC 파라미터에는 다음과 같은 유효값 제한이 있습니다.
매개 변수 | 제한 |
|---|---|
WLead | ![]() 여기서 DeltaT는 초 단위 |
WLag | ![]() 여기서 DeltaT는 초 단위 |
ZetaLead | LowLimit = 0.0 HighLimit = 10.0 |
출력에 대해 계산된 값이 유효하지 않음 또는 NAN일 때마다 명령어가 Out = 유효하지 않은 값으로 설정합니다. 내부 파라미터는 업데이트되지 않습니다. 각 후속 스캔에서는 마지막으로 출력이 유효했던 스캔의 내부 파라미터를 사용하여 출력을 계산합니다.
제한
명령어가 Hold 입력의 상태에 따라 와인드업을 중지합니다.
다음의 경우: | 그러면: |
|---|---|
HoldHigh 설정 및 Integrator > Integrator n-1 | Integrator = Integrator n-1 |
HoldLow가 설정되고 Integrator < Integrator n-1 | Integrator = Integrator n-1 |
이 명령어는 또 HighLimit와 LowLimit 값을 기준으로 적분기 와인드업도 멈춥니다.
다음의 경우: | 그러면: |
|---|---|
Integrator > IntegratorHighLimit | Integrator = IntegratorHighLimit |
Integrator < IntegratorLowLimit | Integrator = IntegratorLowLimit |
여기에서:

명령어가 HighLimit 및 LowLimit 값에 따라 Out의 값도 제합니다.
다음의 경우: | 그러면: |
|---|---|
HighLimit LowLimit | Out = LowLimit Integrator = IntegratorLowLimit HighLowLimsInv가 설정됨 HighAlarm 설정됨 LowAlarm 설정됨 |
Out HighLimit | Out = HighLimit IntegratorLowLimit n-1 HighAlarm 설정됨 |
Out LowLimit | Out = LowLimit Integrator = Integrator n-1 LowAlarm 설정됨 |
연산 상태 플래그에 영향
아니요
주 폴트/부 폴트
부 폴트 발생 조건 | 폴트 유형 | 폴트 코드 |
|---|---|---|
기능이 활성화되고 오버플로가 감지됨 | 4 | 4 |
피연산자 관련 폴트에 대해서는 공통 속성 항목을 참조하십시오.
실행
노트:
구조화된 텍스트에서 정상 스캔 중에 EnableIn은 항상 참입니다. 따라서 명령어가 로직에서 활성화한 컨트롤 경로에 있는 경우 해당 명령어가 실행됩니다. 모든 함수 블록 명령어의 정의와 일반 동작을 포함한 자세한 내용은 발행 번호 1756-RM006G-EN-P, 고급 공정 제어 및 구동 장치 지침을 참조하십시오.
조건/상태 | 수행한 작업 |
|---|---|
사전 스캔 | 취해진 조치가 없습니다. |
사후 스캔 | 취해진 조치가 없습니다. |
정상 스캔 모드에서만 발생하는 조건
조건/상태 | 수행한 작업 |
|---|---|
명령어 최초 실행 | 내부 파라미터와 Out은 0으로 설정됩니다. 수식 계수를 강제로 재계산합니다. 기본 알고리즘이 실행되지 않지만 입력 파라미터를 검증합니다. |
명령어 최초 스캔 | 내부 파라미터와 Out은 0으로 설정됩니다. 수식 계수를 강제로 재계산합니다. 기본 알고리즘이 실행되지 않지만 입력 파라미터를 검증합니다. |
EnableIn이 거짓임 | .EnableOut 비트가 거짓으로 해제됩니다. |
EnableIn이 참임 | .EnableOut 비트가 참으로 설정됩니다. 이 명령어의 주된 알고리즘이 실행되고 출력이 업데이트됩니다. |
구조화된 텍스트
조건/상태 | 수행한 작업 |
|---|---|
사전 스캔 | 펑션 블록 표의 사전 스캔을 참조하십시오. |
정상 실행 | 펑션 블록 표에서 Tag.EnableIn이 참임을 참조하십시오. |
사후 스캔 | 펑션 블록 표에서 사후 스캔을 참조하십시오. |
예
SOC 명령어는 스프링 질량계를 통해 두 섹션 사이에서 에너지가 전달되는 응용 프로그램에 사용되는 특수 펑션 블록입니다. 일반적으로 이러한 유형의 응용 프로그램에서는 프로세스 자체의 진동수 응답이 아래의 보드 선도에 표시된 것과 같은 특징을 가질 수 있습니다.

SOC 명령어는 1차 래그 필터를 구현한 다음 PID 컨트롤러를 사용하여 적분, 2차 제로(리드), 1차 극(래그)을 포함한 전달 함수를 구현합니다. 이 명령어를 사용하면 Kp, Ki, Kd 값이 아닌 WLead 및 ZLead를 SOC 명령어에 대한 입력으로 사용할 수 있도록 조정 항이 배열되므로 PID 튜닝이 간소화됩니다. SOC 명령어의 전달 함수는 다음과 같습니다.

해당 보드 선도가 아래의 다이어그램 B에 표시되어 있습니다.

SOC 명령어는 로드셀 또는 힘 트랜스듀서가 피드백으로 사용되고 조정 스키마의 출력이 드라이브의 토크(전류) 마이너 루프에서 직접 작동하는 토크 또는 전압 조정 응용 프로그램에서 사용할 수 있습니다. 그러한 여러 응용 프로그램에서는 제어된 시스템이 기계적으로 과소 댐핑 상태가 되고, 피드백 장치 자체를 통해 반영되므로 안정화되기 어려운 고유 진동수가 있을 수 있습니다.

SOC 명령어를 사용하면 Kp, Ki, Kd 값이 아닌 WLead 및 ZLead를 SOC 명령어에 대한 입력으로 사용할 수 있도록 조정 항이 배열될 수 있으므로 PID 튜닝이 간소화됩니다. 따라서 실제 프로세스를 기준으로 컨트롤러/조절기의 코너 주파수를 조정하고 설정하기가 더 쉬워집니다. 시작 시 경험적으로 또는 현장에서 시스템의 고유 진동수와 댐핑 계수를 측정할 수 있습니다. 그런 후에 프로세스의 특성에 맞춰 조절기의 파라미터를 조정할 수 있으므로 게인을 더 높이고 최종 프로세스를 더 안정적으로 컨트롤할 수 있습니다.

위의 시스템에서 Wlead가 시스템 고유 진동수와 동일하게 설정되고 Wlag가 원하는 크로스오버 주파수보다 훨씬 더 높게 설정된 경우(크로스오버 주파수의 5배 초과) 시스템 응답은 다음과 같을 수 있습니다.

실제 응용 프로그램에서는 이 명령어를 사용하고 설정하는 단계에 다음이 포함됩니다.
제어되는 프로세스의 유형을 인식합니다. 시스템의 계단 함수 응답이 높은 수준의 링잉으로 이어지거나 위에 표시된 프로세스 곡선의 특성을 가질 경우 이 블록이 안정적인 제어에 필요한 조정 특성을 제공할 수 있습니다.
시스템/프로세스의 고유 진동수를 결정합니다. 고유 진동수는 경험적으로 터득하거나 현장에서 측정할 수 있습니다. 프로세스 자체의 고유 진동수와 동일하거나 그보다 약간 더 높게 WLead를 조정합니다.
시스템의 오버슈트를 상쇄하도록 댐핑 계수 Zlead를 튜닝합니다.
WLag를 시스템 크로스오버 주파수보다 충분히 높게 설정하고(5배 초과) 전체 Gain을 원하는 수준까지 높이기 시작합니다.
펑션 블록

구조화된 텍스트
SOC_01.In := Process_Error;
SOC_01.Initialize := Regulator_Enable_Not;
SOC_01.Gain := Gain;
SOC_01.WLag := Lag_Radians_per_sec;
SOC_01.WLead := Lead_radians_per_sec;
SOC_01.ZetaLead := Damping_Factor;
SOC_01.HighLimit := Max_Out;
SOC_01.LowLimit := Min_Out;
SOC(SOC_01);
SOC_Out := SOC_01.Out;
의견을 작성 부탁드립니다.
LowLimit이면 명령어가 HighAlarm과 LowAlarm을 설정하고, Status에 적절한 비트를 설정하며, Out = LowLimit를 설정합니다.
