SD 카드의 데이터 읽기
이 FP 명령은 SD 카드의 s1_FullFileName에서 지정한 파일로부터 n_NumberOfDataToRead에서 지정한 데이터 수를 읽습니다. s2_dutRead의 DUT FP_SD_READ_DUT는 읽기 파라미터를 지정합니다. 결과는 d_Start에서 지정한 영역에 저장됩니다. 1 BCD 문자를 표현하려면 ASCII 코드에 8비트(1바이트)가 필요합니다. 따라서 ASCII로 변환하면 데이터 길이는 소스 데이터 길이의 두 배가 됩니다.
입력
파일 이름
읽을 데이터 수
값:
0–65535(16비트 데이터)
0–32767(32비트 데이터)
0–1999(문자열)
입력/출력
읽기 형식, 읽기 모드, 포인터 위치 등
출력
시작 어드레스
s2_dutRead의 FP_SD_READ_DUT에서 포인터 모드를 선택한 경우(wMode=2 또는 wMode=3), 포인터가 있는 위치에서 읽기가 시작됩니다.읽기 후 포인터는 읽기가 완료된 위치로 이동합니다. 다음 읽기 연산은 이 위치에서 시작합니다.포인터 위치는 DUT의 udiBytePosition에서도 지정될 수 있습니다. 아래 예에서 화살표는 유효한 포인터 위치를 나타냅니다.
16비트 INT 데이터(BIN 형식 파일): |
ASCII 데이터(CSV 형식 파일): |
---|---|
CSV 파일에서 포인터는 항상 스페이스, 콤마 또는 줄바꿈 다음 위치로 이동합니다. 데이터 끝에 있는 스페이스, 콤마 또는 줄바꿈을 건너뜁니다.
SD 카드 메모리 사전 주의사항도 참조해 주십시오.
SD 메모리 카드 명령의 트리거 EN이 TRUE로 전환된 후 SD 메모리 액세스 활성 플래그(sys_bIsSDMemoryAccessActive)는 TRUE로 전환되고 실행이 완료될 때까지 TRUE로 유지됩니다. 이 시간 동안에는 다른 SD 메모리 카드 명령을 실행할 수 없습니다.
SD 메모리 액세스 완료 플래그(sys_blsSDMemoryAccessDone)가FALSE이고 TRUE가 되며, 명령이 완료되면 TRUE를 유지합니다.
명령 실행이 완료될 때까지 출력 영역의 데이터를 읽지 마십시오.
문자열의 연속 큰 따옴표 두 개("")는 한 문자(")로 읽힙니다. 큰 따옴표 하나만 있으면 무시됩니다.
CSV 파일에서 Null 필드(예: 콤마가 연속으로 있는 부분)은 읽을 데이터 수의 부분으로 계산되지만 데이터는 저장되지 않습니다.
FALSE: 명령이 에러 없이 완료된 경우
TRUE: 에러가 발생하여 명령이 완료된 경우
sys_iSDMemoryAccessErrorCode를 사용하여 에러 코드를 평가합니다.
인덱스 한정자를 사용하여 지정한 영역이 제한을 초과하는 경우.
인덱스 한정자를 사용하여 지정한 영역이 제한을 초과하는 경우.
이 펑션 프로그램 시 사용한 모든 입력과 출력 변수는 POU 헤더에서 선언되었습니다. 모든 프로그래밍 언어에 같은 POU 헤더를 사용합니다.
VAR
bStart: BOOL:=FALSE;
(*activates the instruction*)
sFile_Test_Csv: STRING[32]:='\Test.csv';
dutFpReadTest_csv: FP_SD_READ_DUT;
sStringRead: STRING[32]:='';
iStringLengthRead: INT:=0;
END_VAR
변수 bStart가 FALSE에서 TRUE로 변경되고 시스템 변수 sys_bIsSDMemoryAccessActive가 TRUE가 아니면 함수가 실행됩니다.
BODY
WORKSPACE
NETWORK_LIST_TYPE := NWTYPELD ;
ACTIVE_NETWORK := 0 ;
END_WORKSPACE
NET_WORK
NETWORK_TYPE := NWTYPELD ;
NETWORK_LABEL := ;
NETWORK_TITLE := ;
NETWORK_HEIGHT := 3 ;
NETWORK_BODY
B(B_COMMENT,,ø^Read string ASCII data from SD card memory - ASCII value,3,0,58,3,);
L(1,0,1,3);
END_NETWORK_BODY
END_NET_WORK
NET_WORK
NETWORK_TYPE := NWTYPELD ;
NETWORK_LABEL := ;
NETWORK_TITLE := ;
NETWORK_HEIGHT := 4 ;
NETWORK_BODY
B(B_CONTACT,,bStart,2,1,4,3,R);
B(B_CONTACT,,sys_bIsSDMemoryAccessActive,10,1,12,3,N);
B(B_F,E_MOVE!,,17,0,23,4,,?DEN?D?AENO?C);
B(B_VARIN,,10,15,2,17,4,);
B(B_VAROUT,,dutFpReadTest_csv.wFormat,23,2,25,4,);
L(1,2,2,2);
L(4,2,10,2);
L(12,2,17,2);
L(1,0,1,4);
END_NETWORK_BODY
END_NET_WORK
NET_WORK
NETWORK_TYPE := NWTYPELD ;
NETWORK_LABEL := ;
NETWORK_TITLE := ;
NETWORK_HEIGHT := 7 ;
NETWORK_BODY
B(B_VARIN,,sFile_Test_Csv,15,3,17,5,);
B(B_VAROUT,,sStringRead,30,3,32,5,);
B(B_VARIN,,dutFpReadTest_csv,15,5,17,7,);
B(B_CONTACT,,bStart,2,1,4,3,R);
B(B_CONTACT,,sys_bIsSDMemoryAccessActive,10,1,12,3,N);
B(B_F,FP_SD_READ!,,17,1,30,7,,?DEN?Ds1_FullFileName?Dn_NumberOfDataToRead?Ds2_dutRead?As2_dutRead?AENO?Cd_Start);
B(B_VARIN,,iStringLengthRead,15,4,17,6,);
L(1,2,2,2);
L(4,2,10,2);
L(12,2,12,3);
L(12,3,17,3);
L(1,0,1,7);
END_NETWORK_BODY
END_NET_WORK
END_BODY
eneral">(* Read string ASCII data from SD card memory - ASCII value *)
IF DF(bStart)And not sys_bIsSDMemoryAccessActive then
dutFpReadTest_csv.wFormat:=10;
FP_SD_READ(s1_FullFileName := sFile_Test_Csv,
n_NumberOfDataToRead := iStringLengthRead,
s2_dutRead := dutFpReadTest_csv,
d_Start => sStringRead);
END_IF;