증설 유닛의 I/O 오프셋 계산
이 명령은 인덱스 한정자를 통해 입력/출력 또는 유닛 메모리에 액세스하기 위한 iSlot에서 지정한 슬롯 번호에 있는 증설 유닛의 관련 오프셋 값을 계산합니다.
입력
슬롯 번호
출력
시작 I/O 워드 번호
시작 I/O 워드 번호 곱하기 16
슬롯 번호 빼기 1
iSlot = 5 및 시작 워드 번호 = 16
시작 워드 번호 |
해당 어드레스 |
용도 예 |
설명 |
---|---|---|---|
diOffset_WX0_WY0 = 16 |
DIX |
DIXWX1 또는 DIXWY1 |
슬롯 5의 유닛 I/O 워드 1에 액세스 |
diOffset_X0_Y0 = 16*16=256 |
DIY |
DIYX12 또는 DIYY12 |
슬롯 5의 유닛 I/O 비트 16진수 12에 액세스 |
diOffset_S1 = 4 |
DI2 |
DI2S1:UM1A |
슬롯 5에 있는 유닛의 유닛 메모리 워드 16진수 1A에 액세스 |
이 펑션 프로그램 시 사용한 모든 입력과 출력 변수는 POU 헤더에서 선언되었습니다. 모든 프로그래밍 언어에 같은 POU 헤더를 사용합니다.
VAR
iSlot: INT:=1;
bEnable: BOOL:=FALSE;
wSlotFirstInputWord: WORD:=0;
bSlotFirstInputFlag: BOOL:=FALSE;
wSlotFirstUnitMemoryWord: WORD:=0;
bGetSlotFirstInputWord: BOOL:=FALSE;
bGetSlotFirstInputFlag: BOOL:=FALSE;
bGetSlotFirstMemoryWord: BOOL:=FALSE;
END_VAR
변수 bEnable가 TRUE로 설정되면 함수가 실행됩니다.
BODY
WORKSPACE
NETWORK_LIST_TYPE := NWTYPELD ;
ACTIVE_NETWORK := 0 ;
END_WORKSPACE
NET_WORK
NETWORK_TYPE := NWTYPELD ;
NETWORK_LABEL := ;
NETWORK_TITLE := ;
NETWORK_HEIGHT := 6 ;
NETWORK_BODY
B(B_F,FP_GET_UNIT_OFFSETS1!,,17,0,30,6,,?DEN?DiSlot?AENO?AdiOffset_WX0_WY0?AdiOffset_X0_Y0?AdiOffset_S1);
B(B_VARIN,,iSlot,15,2,17,4,);
B(B_VAROUT,,DIX,30,2,32,4,);
B(B_VAROUT,,DIY,30,3,32,5,);
B(B_VAROUT,,DI2,30,4,32,6,);
B(B_CONTACT,,bEnable,6,1,8,3,);
L(1,2,6,2);
L(8,2,17,2);
L(1,0,1,6);
END_NETWORK_BODY
END_NET_WORK
NET_WORK
NETWORK_TYPE := NWTYPELD ;
NETWORK_LABEL := ;
NETWORK_TITLE := ;
NETWORK_HEIGHT := 4 ;
NETWORK_BODY
B(B_F,E_MOVE!,,17,0,23,4,,?DEN?D?AENO?C);
B(B_VARIN,,DIXWX0,15,2,17,4,);
B(B_VAROUT,,wSlotFirstInputWord,23,2,25,4,);
B(B_CONTACT,,bGetSlotFirstInputWord,6,1,8,3,);
L(8,2,17,2);
L(1,2,6,2);
L(1,0,1,4);
END_NETWORK_BODY
END_NET_WORK
NET_WORK
NETWORK_TYPE := NWTYPELD ;
NETWORK_LABEL := ;
NETWORK_TITLE := ;
NETWORK_HEIGHT := 4 ;
NETWORK_BODY
B(B_F,E_MOVE!,,17,0,23,4,,?DEN?D?AENO?C);
B(B_VARIN,,DIYX0,15,2,17,4,);
B(B_VAROUT,,bSlotFirstInputFlag,23,2,25,4,);
B(B_CONTACT,,bGetSlotFirstInputFlag,6,1,8,3,);
L(8,2,17,2);
L(1,2,6,2);
L(1,0,1,4);
END_NETWORK_BODY
END_NET_WORK
NET_WORK
NETWORK_TYPE := NWTYPELD ;
NETWORK_LABEL := ;
NETWORK_TITLE := ;
NETWORK_HEIGHT := 4 ;
NETWORK_BODY
B(B_F,E_MOVE!,,17,0,23,4,,?DEN?D?AENO?C);
B(B_VARIN,,DI2S1:UM0,15,2,17,4,);
B(B_VAROUT,,wSlotFirstUnitMemoryWord,23,2,25,4,);
B(B_CONTACT,,bGetSlotFirstMemoryWord,6,1,8,3,);
L(8,2,17,2);
L(1,2,6,2);
L(1,0,1,4);
END_NETWORK_BODY
END_NET_WORK
END_BODY
if (bEnable) then
FP_GET_UNIT_OFFSETS1(iSlot := iSlot,
diOffset_WX0_WY0 => DIX,
diOffset_X0_Y0 => DIY,
diOffset_S1 => DI2);
end_if;
if (bGetSlotFirstInputWord) then
wSlotFirstInputWord := DIXWX0;
end_if;
if (bGetSlotFirstInputFlag) then
bSlotFirstInputFlag := DIYX0;
end_if;
if (bGetSlotFirstMemoryWord) then
wSlotFirstUnitMemoryWord := DI2S1:UM0;
end_if;