펄스 승수(Pulse Multiplier, PMUL)
이 정보
CompactLogix
5370, ControlLogix
5570, Compact GuardLogix
5370, GuardLogix
5570, CompactLogix
5380, ControlLogix
5580 및 ControlLogix 5590 컨트롤러에 적용됩니다.PMUL 명령어는 한 스캔에서 다음 스캔으로 입력의 변화를 계산하여 위치 입력 모듈에서 디지털 시스템으로 리졸버나 인코더 피드백 모듈 같은 인터페이스를 제공합니다. 특정 워드 크기를 선택해 PMUL 명령어를 구성, 롤오버 경계를 통해 연속 선형 미분합니다.
사용 가능한 언어
래더 다이어그램
이 명령어는 래더 다이어그램에 사용할 수 없습니다.
펑션 블록

구조화된 텍스트
PMUL(PMUL_tag);
피연산자
펑션 블록
피연산자 | 유형 | 형식 | 설명 |
|---|---|---|---|
PMUL tag | PULSE_MULTIPLIER | 구조 | PMUL 구조 |
구조화된 텍스트
피연산자 | 유형 | 형식 | 설명 |
|---|---|---|---|
PMUL tag | PULSE_MULTIPLIER | 구조 | PMUL 구조 |
스트럭쳐드 텍스트 내 식의 구문에 대한 자세한 내용은 스트럭쳐드 텍스트 구문을 참조하십시오.
PULSE_MULTIPLIER 구조
입력 매개 변수 | 데이터 유형 | 설명 |
|---|---|---|
EnableIn | BOOL | 활성화 입력. 선택하지 않으면 명령이 실행되지 않고 출력이 업데이트되지 않습니다. 기본값은 설정 상태입니다. |
In | DINT | 명령어에 대한 아날로그 입력 신호. 유효값 = 임의의 DINT 기본값 = 0 |
Initialize | BOOL | 초기화 입력. 설정되면 Out은 0.0으로 유지되고 내부 레지스터는 모두 0으로 설정됩니다. 해제된 초기화의 전환 설정에서, In n-1 = InitialValue (절대 모드에서는 유효하지 않음) 해제되면 명령어는 정상 실행됩니다. |
InitialValue | DINT | 초기값 입력. 해제된 초기화의 전환 설정에서, In n-1 = InitialValue유효값= DINT 기본값 = 0. |
Mode | BOOL | 모드 입력. 설정하면 상대 모드가 켜집니다. 절대 모드를 활성화하려면 해제합니다. 기본값은 설정 상태입니다. |
WordSize | DINT | 워드 크기는 비트입니다. 상대 모드에서 (In n -Inn-1 )를 계산할 때 사용할 비트의 수를 지정합니다.WordSize는 절대 모드에서 사용하지 않습니다. In의 변화량이 1/2 * 2 (Wordsize-1) 보다 크면 Out는 부호가 변합니다.WordSize가 유효하지 않으면 Out은 유지되고 명령어는 Status에 적절한 비트를 설정합니다. 유효값 = 2~32 기본값 = 14 |
Multiplier | DINT | 승수. 이 값을 100,000으로 나누면 Out에 대한 In의 비를 제어할 수 있습니다. 유효하지 않으면 명령어는 값을 제한하고 Status에 적절한 비트를 설정합니다. 유효값 = -1,000,000~1,000,000까지 기본값 = 100,000 |
출력 매개 변수 | 데이터 유형 | 설명 |
|---|---|---|
EnableOut | BOOL | 활성화 출력. |
Out | REAL | 명령어는 Out입니다. Out 계산에 오버플로가 발생하면 Out은 + /- 가 되고 Status에 적절한 비트가 설정됩니다. 이 출력에 대해 연산 상태 플래그가 설정됩니다. |
Status | DINT | 펑션 블록의 상태. |
InstructFault (Status.0) | BOOL | 명령어에서 다음 실행 에러 중 하나가 감지됩니다. 마이너 또는 메이저 컨트롤러 에러가 아닙니다. 나머지 상태 비트를 확인하여 발생한 에러를 판단합니다. |
WordSizeInv (Status.1) | BOOL | 유효하지 않은 WordSize 값 |
OutOverflow (Status.2) | BOOL | 내부 출력 계산에 오버플로우가 발생했습니다. |
LostPrecision (Status.3) | BOOL | Out < -2 24 또는 Out > 224 . 명령어가 Out을 정수에서 실수 값으로 변환할 때 결과가 |224 |보다 큰 경우 데이터가 손실됩니다. REAL 데이터 유형이 224 으로 제한되기 때문입니다. |
MultiplierInv (Status.4) | BOOL | 유효하지 않은 Multiplier 값. |
설명
PMUL 명령어는 상대 또는 절대 모드로 작동합니다.
상대 모드에서 명령어의 출력은 스캔 간 입력의 미분에 (Multiplier/100,000)를 곱한 것입니다. 상대 모드에서 명령어는 스캔에서 나누기 연산 후 나머지를 저장하고 다음 스캔 시 그것을 다시 더합니다. 이렇게 하면 연산 중에 위치 정보를 잃어버리지 않습니다.

절대 모드에서 명령어는 한 스캔에서 다른 스캔으로 정보를 잃지 않고 위치 같은 입력을 위로 조정할 수 있습니다.

출력과 나머지 계산
PMUL 명령어는 이 등식을 이용해 상대 또는 절대 모드에서 Out을 계산합니다.
Ans = ((DiffInput x Multiplier) + INT_Remainder)
INT_Out = Ans / 100,000
INT_Remainder= Ans - (INT_Out * 100,000)
Out = INT_Out
연산 상태 플래그에 영향
아니요
폴트 조건
부 폴트 발생 조건 | 폴트 유형 | 폴트 코드 |
|---|---|---|
기능이 활성화되고 오버플로가 감지됨 | 4 | 4 |
피연산자 관련 폴트에 대해서는 공통 속성 항목을 참조하십시오.
실행
펑션 블록
조건 | 펑션 블록 조치 |
|---|---|
사전 스캔 | EnableIn 및 EnableOut 비트가 거짓으로 해제됩니다. |
Tag.EnableIn이 거짓임 | EnableIn 및 EnableOut 비트가 거짓으로 해제됩니다. |
Tag.EnableIn이 참임 | EnableIn 및 EnableOut 비트가 참으로 설정됩니다. 명령어가 실행됩니다. |
명령어 최초 실행 | N/A |
명령어 최초 스캔 | In n-1 = In. Outn-1 =0. 나머지 = 0. |
사후 스캔 | EnableIn 및 EnableOut 비트가 거짓으로 해제됩니다. |
구조화된 텍스트
조건/상태 | 수행한 작업 |
|---|---|
사전 스캔 | 펑션 블록 표의 사전 스캔을 참조하십시오. |
정상 실행 | 펑션 블록 표에서 Tag.EnableIn이 참임을 참조하십시오. |
사후 스캔 | 펑션 블록 표에서 사후 스캔을 참조하십시오. |
예
예 1
PMUL 명령어의 보편적인 용도는 연산의 상대 모드에 있습니다. 이 모드에서는 PMUL 명령어가 몇 가지 역할을 합니다. 먼저 상대 모드에서는 PMUL 명령어가 입력에서 수신된 정보를 한 스캔에서 다른 스캔으로 미분합니다. 데이터가 수신되면 명령어는 입력의 차를 한 스캔에서 다른 스캔으로 출력합니다. 이는 스캔 "n"에서 In = 500이고 스캔 "n+1"에서 In = 600이면, 스캔 "n+1"에서 Out = 100이라는 의미입니다.
둘째, PMUL 명령어는 이 연산 모드에 있을 때 피드백 모듈에서 유래하는 2진 데이터의 "롤오버" 값도 보상합니다. 예컨대, 리졸버 피드백 모듈은 2진값으로 표시된 분해능 12비트와 -2048 ~ 2047 범위의 부호를 가질 수 있습니다. 피드백 모듈에서 오는 원시 데이터의 측면에서 피드백 장치의 회전은 다음과 같이 표시될 수도 있습니다.

이 예에서 피드백 데이터가 2047에서 -2048로 움직일 때 위치의 실제 변화는 위치가 4095 카운트 수만큼 점프하는 것에 해당합니다. 하지만 실제로 이 같은 위치의 변화는 리졸버 피드백 장치의 회전 측면에서 4096 중 한 부품에 불과합니다. PMUL 명령어는 피드백 모듈에서 입력되고 있는 데이터의 실제 워드 크기를 파악해 아래 다이어그램과 같이 데이터를 회전하며 봅니다.

PMUL 명령어는 이 블록에 입력되는 데이터의 워드 크기를 알아내 수학적으로 계산된 4095가 아니라 블록에 대한 입력이 2047에서 -2048로 이동할 때 1 카운트의 출력을 미분합니다.
팁:
이 블록을 적용할 때, 회전 방향을 제대로 미분하려면 피드백 데이터가 스캔과 스캔 사이에서 워드 크기의 ½을 초과해 변하면 안 된다는 사실을 기억해야 합니다.
위 예에서, 피드백 장치가 시계방향으로 움직여 스캔 'A'에서 0이고 스캔 'B'에서 -2000이라면 위치의 실제 변화는 시계 방향으로 +2096 카운트와 같습니다. 그러나, 이 두 값이 워드 크기의 ½을 초과하므로(실제 장치의 1/2 회전 초과), PMUL 명령어는 피드백 장치가 반대 방향으로 회전했다고 계산하고 +2096이 아니라 -2000이라는 값을 반환합니다.
펄스 승수 블록의 세 번째 속성은 Multiplier/100,000 스케일링 계수의 결과로 존재하는 나머지가 있다면 한 스캔에서 다른 스캔으로 갈 때 그 분수 부분을 간직한다는 것입니다. 블록의 각 실행이 완료되면, 이전 스캔의 나머지는 현재 값의 합에 다시 더해집니다. 이로써 모든 카운트 수 또는 "펄스"의 소재가 확인되고 시스템에서 사라지는 데이터는 없게 됩니다. 블록의 출력인 Out은 항상 부동 소수점 데이터 유형으로 정수를 생성합니다.
펑션 블록

Initial_Position = 0, Multiplier = 2500이라고 가정 => (25,000/100,000)
스캔 | Position_Feedback | PMUL_02.Out | Total_Position |
|---|---|---|---|
n | 0 | 0 | 0 |
n + 1 | 1 | 0 | 0 |
n + 2 | 2 | 0 | 0 |
n + 3 | 3 | 0 | 0 |
n + 4 | 4 | 1 | 1 |
n + 5 | 5 | 0 | 1 |
구조화된 텍스트
MUL_02.In := Position_feedback;
PMUL_02.Initalize := Initialize_Position;
PMUL_02.WordSize := 12;
PMUL_02.Multiplier := 25000;
PMUL(PMUL_02);
UPDN_02.Initialize := Initialize_Position;
UPDN_02.InPlus := PMUL_02.Out;
UPDN(UPDN_02);
Total_Position := UPDN_02.Out;
예 2
이 전자 라인 샤프트 응용 프로그램에서 모터 A의 피드백은 모터 B가 따라야 하는 마스터 참조 역할을 합니다. 모터 A의 피드백은 "Position_feedback"로 명명됩니다. 모터 B의 피드백은 "Follower_Position"로 명명됩니다. 두 명령어의 승수가 1/4이므로, 모터 B는 모터 A가 네 번 회전할 때마다 한 번 회전해야 UPDN 누적기의 누산 값을 0으로 유지할 수 있습니다. UPDN 명령어의 출력에 0이 아닌 값이 있다면 그것은 Position_error로 간주되며 다시 모터 B로 돌려보내 두 모터 간 위상 고정을 유지할 수 있습니다.
펑션 블록

구조화된 텍스트
PMUL_02.In := Position_feedback;
PMUL_02.Initalize := Initialize_Position;
PMUL_02.WordSize := 12;
PMUL_02.Multiplier := 25000;
PMUL(PMUL_02);
PMUL_03.In := Follower_Position;
PMUL_03.Initalize := Initialize_Position;
PMUL_03.WordSize := 12;
PMUL_03.Multiplier := 100000;
PMUL(PMUL_03);
UPDN_02.Initialize := Initialize_Position;
UPDN_02.InPlus := PMUL_02.Out;
UPDN_02.InMinus := PMUL_03.Out;
UPDN(UPDN_02);
Position_error := UPDN_02.Out;
의견을 작성 부탁드립니다.
가 되고 Status에 적절한 비트가 설정됩니다. 이 출력에 대해 연산 상태 플래그가 설정됩니다.