오프셋으로 입력 또는 출력의 DT 어드레스 반환
이 함수는 입력/출력 Offs의 값으로부터 입력/출력 AdrDT의 DT 영역에서 16비트 어드레스를 생성합니다. 이 입력은 기본 함수의 16비트 입력/출력에 직접 연결되어야 합니다. 입력/출력 Offs 값은 DT 데이터 영역 내 어드레스 오프셋을 나타내고, GetPointer를 사용하면 메모리 영역 값과 함께 유저 함수 또는 펑션블록으로 전송될 수 있습니다.
입력
16비트 DT 오프셋 어드레스 일시 중단
이 핀은 데이터 형식 INT, WORD이 허용되는 기본 함수의 입력/출력에 연결되어야 합니다.
출력
어드레스 DT0의 오프셋
DT에서 생성된 어드레스를 사용하는 기본 함수 실행은 EN 입력에서의 변수 메모리 영역의 값과 함께 함수 Is_AreaDT를 할당하여 결정됩니다.
이 명령은 내부적으로 배열 계산에도 사용되는 인덱스 레지스터 중 하나에 액세스합니다.
LD 및 FBD 에디터에만 해당: 명령 창의 [입력 명령] 또는 [출력 명령]을 사용하여 프로그래밍 윈도우에 필요한 [명령]을 삽입합니다.
이 펑션 프로그램 시 사용한 모든 입력과 출력 변수는 POU 헤더에서 선언되었습니다. 모든 프로그래밍 언어에 같은 POU 헤더를 사용합니다.
VAR
start: BOOL:=FALSE;
(*activation of the function*)
DutNonBoolean: @'Dut_NonBoolean';
(*structured data type*)
ActualPosition: DINT:=0;
(*beginning position from which the data should be read to the IC card*)
END_VAR
여기에서 위 DUT에서 할당된 데이터 형식의 DutNonBoolean 변수가 선언됩니다. POU 헤더 또는 본문에서 값과 함께 DutNonBoolean 변수의 요소 할당은 수행되지 않았습니다. 함수 ReadFromIcCard 실행 후 DutNonBoolean 변수 값을 덮어 썼기 때문입니다.
변수 start가 FALSE에서 TRUE로 변경되면 함수 ReadFromIcCard가 실행됩니다. 이 함수는 ActualPosition 어드레스를 시작하는 IC 카드의 값을 읽고 정보를 DutNonBoolean 변수에 씁니다. IC 카드 형식은 에서 올바르게 지정되어야 하며, 필요한 경우 어드레스 ActualPosition으로 시작하는 값을 IC 카드에서 사용할 수 있어야 합니다.
BODY
WORKSPACE
NETWORK_LIST_TYPE := NWTYPELD ;
ACTIVE_NETWORK := 0 ;
END_WORKSPACE
NET_WORK
NETWORK_TYPE := NWTYPELD ;
NETWORK_LABEL := ;
NETWORK_TITLE := ;
NETWORK_HEIGHT := 8 ;
NETWORK_BODY
B(B_CONTACT,,start,6,1,8,3,);
B(B_F,ReadFromIcCard!,Instance,18,1,27,8,,?DEN?DArea?DOffset?DSize?DPosition?AENO?C);
B(B_VARIN,,2,16,4,18,6,);
B(B_VARIN,,ActualPosition,16,6,18,8,);
B(B_VAROUT,,ActualPosition,27,3,29,5,);
B(B_F,GetPointer!,Instance,11,3,18,5,,?D?C);
B(B_VARIN,,Dut_NonBoolean,7,3,9,5,);
B(B_F,Size_Of_Var!,Instance,9,5,16,7,,?D?C);
L(18,2,18,3);
L(8,2,18,2);
L(1,2,6,2);
L(9,4,11,4);
L(9,4,9,6);
L(16,6,18,6);
L(1,0,1,8);
END_NETWORK_BODY
END_NET_WORK
END_BODY
이 펑션 프로그램 시 사용한 모든 입력과 출력 변수는 POU 헤더에서 선언되었습니다.모든 프로그래밍 언어에 같은 POU 헤더를 사용합니다.
VAR_INPUT
p32Pointer: POINTER32;
(*area, offset and size of data values*)
diPosition: DINT:=0;
(*beginning position from which the data should be read from the IC card*)
END_VAR
VAR_OUTPUT
p32ActualPosition: POINTER32;
(*shows the area, offset and size where the data of the IC card is stored*)
END_VAR
VAR
END_VAR
호출된 프로그램을 통해 Area 및 Offset 값을 전달하는 변수가 DT 또는 FL 영역에 있으면(컴파일러를 통해 p32Pointer 변수의 어드레스가 DT 또는 FL 영역에 할당되기 때문) 데이터는 p32ActualPosition로 시작하는 IC 카드에서 읽힙니다. 이 변수의 크기를 통해 위치가 상승하고 반환됩니다.
BODY
WORKSPACE
NETWORK_LIST_TYPE := NWTYPELD ;
ACTIVE_NETWORK := 0 ;
END_WORKSPACE
NET_WORK
NETWORK_TYPE := NWTYPELD ;
NETWORK_LABEL := ;
NETWORK_TITLE := ;
NETWORK_HEIGHT := 9 ;
NETWORK_BODY
B(B_VARIN,,2,20,3,22,5,);
B(B_VARIN,,1000,20,4,22,6,);
B(B_VARIN,,awProcessDataToGet[0],10,5,12,7,);
B(B_CONTACT,,bGetData,5,2,7,4,R);
B(B_F,Size_Of_Var!,Instance,12,5,19,7,,?D?C);
B(B_F,E_ReadFromIcCard!,Instance,22,1,37,7,,?DEN?DBankNumber?DBankOffset?DDataNumberOfWords?AENO?CDataStartAddress);
B(B_F,Adr_Of_Var_O!,Instance,37,3,45,5,,?D?C);
B(B_VAROUT,,awProcessDataToGet,45,3,47,5,);
L(1,3,5,3);
L(19,6,22,6);
L(1,0,1,9);
L(7,3,22,3);
END_NETWORK_BODY
END_NET_WORK
END_BODY
추가 예 프로젝트(FPWIN Pro 설치의 "Samples" 디렉토리):