바이트 스왑(SWPB)
이 정보는
CompactLogix
5370, ControlLogix
5570, Compact GuardLogix
5370, GuardLogix
5570, Compact GuardLogix
5380, CompactLogix
5380, ControlLogix
5580, GuardLogix
5580 및 ControlLogix 5590 컨트롤러에 적용됩니다.SWPB 명령어는 Source의 바이트 순서를 다시 배열합니다. 결과를 Destination에 저장합니다.
사용 가능한 언어
래더 다이어그램

펑션 블록
이 명령어는 함수 블록에서 사용할 수 없습니다.
구조화된 텍스트
SWPB(Source, Order Mode, Dest);
피연산자
중요:
다음과 같은 경우 작업 시 예외가 발생할 수 있습니다.
- 출력 태그 피연산자가 덮어써집니다.
- 구조 피연산자의 구성원이 덮어써집니다.
- 지정된 경우를 제외하고 여러 명령어에서 구조 피연산자를 공유합니다.
명령어 내에서 숫자 데이터 유형을 혼합하기 위한 데이터 변환 규칙이 있습니다.
데이터 변환
을 참조하세요.래더 다이어그램과 스트럭쳐드 텍스트
피연산자 | 데이터 유형 | 형식 | 설명 |
|---|---|---|---|
Source | INT DINT | 태그 | 다시 배열할 비트를 포함한 태그. |
Order Mode | 목록 항목 | 이 피연산자는 다시 정렬할 방법을 지정합니다. 순서 모드 테이블을 참조하세요. | |
Dest | INT DINT | 태그 | 바이트를 새로운 순서로 저장하는 태그. Dest 테이블을 참조하세요. |
HIGH/LOW 순서 모드를 선택한 경우 HIGHLOW(슬래시 없음)로 입력하세요. 스트럭쳐드 텍스트 내 식의 구문에 대한 자세한 내용은 스트럭쳐드 텍스트 구문을 참조하십시오.
Order Mode
Source가 다음인 경우 | 바이트 변경할 패턴(각 문자는 다른 유형을 나타냄) | 다음을 선택함 |
|---|---|---|
INT | AB => BA | 모든 옵션 |
DINT | ABCD => DCBA | REVERSE |
ABCD => CDAB | WORD | |
ABCD => BADC | HIGH/LOW |
Dest
Source가 다음인 경우 | Destination이 다음임 |
|---|---|
INT | INT, DINT 대상이 DINT이면 바이트 스왑 후에 결과가 부호 확장됩니다. |
DINT | DINT |
연산 상태 플래그에 영향
아니요
주 폴트/부 폴트
이 명령어에만 해당되는 것은 없습니다. 배열 인덱스 오류의 경우 배열을 통한 인덱스를 참조하세요.
실행
래더 다이어그램
조건/상태 | 수행한 작업 |
|---|---|
사전 스캔 | N/A |
렁-입력-조건이 거짓임 | N/A |
렁-입력-조건이 참임 | 명령어가 지정된 바이트를 다시 배열합니다. |
사후 스캔 | N/A |
구조화된 텍스트
조건/상태 | 수행한 작업 |
|---|---|
사전 스캔 | 래더 다이어그램 표의 사전 스캔을 참조하십시오. |
정상 실행 | 래더 다이어그램 표의 렁-입력-조건이 참인 경우를 참조하십시오. |
사후 스캔 | 래더 다이어그램 표에서 사후 스캔 섹션을 참조하십시오. |
예
예 1 - DINT 태그의 바이트 스왑
3개의 SWPB 명령어가 다른 순서 모드에 따라 DINT_1의 바이트를 다시 정렬합니다. 디스플레이 스타일은 ASCII이며 각 문자는 1바이트를 나타냅니다. 모든 명령어가 바이트를 새로운 순서로 다른 Destination에 저장합니다.
래더 다이어그램

예 2 - 배열의 모든 요소의 바이트 스왑
래더 다이어그램

![SWPB_LD_ex2_#2_[index]_v31](/content/dam/dita/ko/studio-5000-logix-designer/38-00/help/clinset/move-logical/graphics/l5k_swpb_ld_ex2_2_v31.png/_jcr_content/renditions/original)

예 3: 스트럭쳐드 텍스트의 SWPB
구조화된 텍스트
index := 0;
SIZE (array[0],0,array_length);
REPEAT
SWPB(array[index],REVERSE,array_bytes_reverse[index]);
index := index + 1;
UNTIL(index >= array_length)END_REPEAT;
의견을 작성 부탁드립니다.