FTP 전송 모드 설정
이 FP 명령은 nTransferID로 지정된 전송 설정 영역에 sOperation, sPLCFullFileNameOrDataFormat 및 sFTPServerFullFileName의 HTTP 클라이언트 전송 설정을 저장합니다.
입력
전송 설정 ID를 설정합니다.
값: 0–15(값은 오름차순으로 입력해야 함)
전송 방법 파라미터를 설정합니다.
서버 어드레스(필수 파라미터)
키워드: SV
구문: 'SVx'
값: SV0–SV3 (Server 0–Server 3)
전송 대상 및 방법(필수 파라미터)
파라미터 문자열 |
타겟 |
전송 방법 |
---|---|---|
|
파일 |
서버로 전송(덮어쓰기 방식) |
|
서버로 전송(덮어쓰기 방식) |
|
|
서버로 전송(이름 변경 방식) |
|
|
서버에서 가져오기 |
|
|
메모리 영역 |
서버로 전송(덮어쓰기 방식) |
|
서버로 전송(덮어쓰기 방식) |
|
|
서버로 전송(이름 변경 방식) |
|
|
서버에서 가져오기 |
전송 후 파일 처리(필수 파라미터)
DEL
: 파일 삭제
NON
: 파일을 삭제하지 말 것
덮어쓰기 방식을 사용하여 FTP 서버 1로 파일 전송, 전송 후 파일 삭제하지 않음: 'SV1,PUTFILE-OVW,NON'
이름 바꾸기 방법을 사용하여 FTP 서버 0으로 파일 전송, 전송 후 파일 삭제: 'SV0,PUTFILE-REN,DEL'
FTP 서버 2에서 파일 가져오기, 전송 후 파일 삭제: 'SV2,GETFILE,DEL'
전송 대상(메모리 영역의 파일 또는 데이터) 및 전송 방법(PUT 또는 GET)에 따라 설정을 지정합니다.
변수 데이터는 FP_FTP_GET_DATA_FORMAT을 사용하여 전송할 수 있습니다. 명령의 출력이 sPLCFullFileNameOrDataFormat에 연결되어 변수의 데이터 형식 문자열(메모리 영역, 크기 및 데이터 유형)을 지정하는 문자열을 읽습니다. 전송된 데이터는 변수의 데이터 유형에 따라 CSV 파일에 쓰거나 CSV 파일에서 읽습니다.
전송 대상: 파일
소스 파일 이름을 설정합니다.
PUTFILE
의 경우: 상대 경로로 SD 카드에 저장된 파일의 이름을 지정합니다. 예: '\LOG\MyData.csv'
GETFILE
의 경우: 상대 경로를 사용하여 FTP 서버에 로깅한 사용자의 홈 디렉토리에서 파일 이름을 지정합니다. 예: '\LOG\MyData.csv'
전송 대상: 메모리 영역의 데이터
PUTDATA
의 경우: FP_FTP_GET_DATA_FORMAT의 입력에 연결된 변수에 저장된 데이터는 sFTPServerFullFileName에 의해 지정된 csv 파일에 기록됩니다. 이 전송 방법의 경우 파일 이름에 yymmdd_hhmmss 형식의 타임 스탬프를 추가할 수 있습니다. 키워드 'TOP'
및 'END'
를 사용하여 파일 이름 앞뒤에 타임 스탬프를 추가할지 여부를 지정합니다.
GETDATA
의 경우: sFTPServerFullFileName에 의해 지정된 csv 파일의 데이터는 FP_FTP_GET_DATA_FORMAT의 Var 입력에 연결된 변수에 기록됩니다
전송 대상(메모리 영역의 파일 또는 데이터) 및 전송 방법(PUT 또는 GET)에 따라 설정을 지정합니다.
전송 대상: 파일
PUTFILE
의 경우: FTP 서버에 로그인하는 사용자의 홈 디렉토리에서 상대 경로를 사용하여 폴더 이름을 지정합니다. 홈 디렉토리 지정 시 "/" 또는 "\"만 지정합니다.
GETFILE
의 경우: 상대 경로를 사용하여 SD 카드에 저장소 폴더 이름을 지정합니다.
전송 대상: 메모리 영역의 데이터
PUTDATA
의 경우: 데이터를 쓸 대상 csv 파일 이름을 지정합니다. 이 전송 방법의 경우 파일 이름에 yymmdd_hhmmss 형식의 타임 스탬프를 추가할 수 있습니다. 키워드 'TOP'
및 'END'
를 사용하여 파일 이름 앞뒤에 타임 스탬프를 추가할지 여부를 지정합니다.
예:
디렉토리 "\FTP"에 있는 대상 파일 "PutData1.bin"으로 데이터 전송합니다. 타임 스탬프를 추가하지 마십시오. '\FTP\PutData1.bin'
디렉토리 "\FTP"에 있는 대상 파일 "PutData2.bin"으로 데이터를 전송합니다. 파일 이름 시작 부분에 타임 스탬프를 추가합니다. '\FTP\PutData2.bin,TOP'
디렉토리 "\FTP"에 있는 대상 파일 "PutData3.bin"으로 데이터를 전송합니다. 파일 이름 끝에 타임 스탬프를 추가합니다. '\FTP\PutData3.bin,END'
GETDATA
의 경우: 데이터를 읽을 소스 csv 파일 이름을 지정합니다. FTP 서버에 로그인하는 사용자의 홈 디렉토리에서 상대 경로를 사용하여 파일 이름과 폴더 이름을 지정합니다.
출력
다음 조건에서 TRUE로 전환:
연결 타임아웃 시간을 초과한 경우
IP 어드레스가 유효하지 않을 경우
에러가 발생하면 시스템 변수 sys_iEthernetConnectionErrorCode에서 에러 코드 번호를 확인하십시오.
문자 데이터의 문자수는 256을 초과하지 않아야 합니다.
인터럽트 프로그램에서는 이 명령을 사용할 수 없습니다.
명령을 실행하기 전에 FP_FTP_SET_CONNECTION을 사용하거나 FTP 클라이언트의 설정 다이얼로그를 사용하여 FTP 서버를 지정해야 합니다.
명령을 실행하기 전에 sys_bIsEthernetInitializing이 FALSE인지 확인하십시오. 명령이 실행되면 sys_bIsEthernetInitializing이 TRUE로 전환됩니다. sys_bIsEthernetInitializing이 TRUE일 때 명령을 실행하면 에러가 발생합니다.
지정된 전송 설정 또는 지정된 nLogID 번호에 대한 전송 요청 플래그가 FALSE인 경우에만 명령을 실행할 수 있습니다. 전송 요청 플래그가 TRUE인 경우 연산 에러가 발생합니다.
이 명령이 성공적으로 실행되면 시스템 변수 sys_bIsCarry 및 sys_iEthernetConnectionErrorCode가 초기화됩니다.
FTP 클라이언트 전송 설정이 완료되면 FP_FTP_TRANSFER_REQUEST 가 실행될 때 데이터가 파일로 전송되거나 파일에서 얻어집니다.
에러가 발생하면 시스템 변수 sys_iEthernetConnectionErrorCode에서 에러 코드 번호를 확인하십시오.
파라미터에 지정된 값이 허용 범위를 벗어난 경우.
전송 ID가 오름차순으로 지정되지 않은 경우.
명령을 인터럽트 프로그램에서 실행한 경우.
문자열 데이터의 문자 수가 256자 이상인 경우.
FP_FTP_SET_CONNECTION 명령 또는 FTP 클라이언트의 설정 다이얼로그로 정의되지 않은 FTP 서버가 지정된 경우.
명령이 실행될 때 지정된 전송 설정에 대한 전송 요청 플래그가 "TRUE: 전송 요청됨"인 경우
지정된 nLogID 번호에 대한 전송 요청 플래그가 TRUE인 경우(예: sys_blsLog0DataRecordingActive가 TRUE인 경우)
파라미터에 지정된 값이 허용 범위를 벗어난 경우.
전송 ID가 오름차순으로 지정되지 않은 경우.
명령을 인터럽트 프로그램에서 실행한 경우.
문자열 데이터의 문자 수가 256자 이상인 경우.
FP_FTP_SET_CONNECTION 명령 또는 FTP 클라이언트의 설정 다이얼로그로 정의되지 않은 FTP 서버가 지정된 경우.
명령이 실행될 때 지정된 전송 설정에 대한 전송 요청 플래그가 "TRUE: 전송 요청됨"인 경우
지정된 nLogID 번호에 대한 전송 요청 플래그가 TRUE인 경우(예: sys_blsLog0DataRecordingActive가 TRUE인 경우)
이더넷 초기화 중에 명령이 실행되면 sys_iEthernetConnectionErrorCode가 "11: 이더넷이 초기화 중입니다"
이 펑션 프로그램 시 사용한 모든 입력과 출력 변수는 POU 헤더에서 선언되었습니다. 모든 프로그래밍 언어에 같은 POU 헤더를 사용합니다.
VAR
bSetModeFileError: BOOL:=FALSE;
bSetModeFileOK: BOOL:=FALSE;
iID10: INT:=10;
bSetModeFile: BOOL:=FALSE;
wErrorCode: WORD:=0;
END_VAR
bSetModeFile이 FALSE에서 TRUE로 변경되고 sys_bIsEthernetInitializing이 FALSE면 이 명령이 실행됩니다.
BODY
WORKSPACE
NETWORK_LIST_TYPE := NWTYPELD ;
ACTIVE_NETWORK := 0 ;
END_WORKSPACE
NET_WORK
NETWORK_TYPE := NWTYPELD ;
NETWORK_LABEL := ;
NETWORK_TITLE := ;
NETWORK_HEIGHT := 5 ;
NETWORK_BODY
B(B_COMMENT,, ^Set mode to transfer file located on SD card of FP7 PLC,4,1,34,4,);
L(1,0,1,5);
END_NETWORK_BODY
END_NET_WORK
NET_WORK
NETWORK_TYPE := NWTYPELD ;
NETWORK_LABEL := ;
NETWORK_TITLE := ;
NETWORK_HEIGHT := 7 ;
NETWORK_BODY
B(B_CONTACT,,bSetModeFile,5,1,7,3,R);
B(B_VARIN,,'SV0~PUTDATA-OVW~NON',23,3,25,5,);
B(B_VARIN,,'\CSV_FILES\Data1.csv',23,4,25,6,);
B(B_VAROUT,,bSetModeFileError,43,2,45,4,);
B(B_VARIN,,'\B:\LOG\MyData.csv~END',23,5,25,7,);
B(B_VARIN,,iID10,23,2,25,4,);
B(B_CONTACT,,sys_bIsEthernetInitializing,16,1,18,3,N);
B(B_F,FP_FTP_SET_MODE!,,25,0,41,7,,?DEN?DnTransferID?DsOperation?DsPLCFullFileNameOrDataFormat?DsFTPServerFullFileName?AENO?CbError);
L(1,2,5,2);
L(7,2,16,2);
L(18,2,25,2);
L(1,0,1,7);
L(41,3,43,3);
END_NETWORK_BODY
END_NET_WORK
NET_WORK
NETWORK_TYPE := NWTYPELD ;
NETWORK_LABEL := ;
NETWORK_TITLE := ;
NETWORK_HEIGHT := 4 ;
NETWORK_BODY
B(B_CONTACT,,bSetModeFileError,5,1,7,3,);
B(B_F,E_MOVE!,,25,0,31,4,,?DEN?D?AENO?C);
B(B_VARIN,,sys_iEthernetConnectionErrorCode,23,2,25,4,);
B(B_VAROUT,,wErrorCode,31,2,33,4,);
L(7,2,25,2);
L(1,2,5,2);
L(1,0,1,4);
END_NETWORK_BODY
END_NET_WORK
NET_WORK
NETWORK_TYPE := NWTYPELD ;
NETWORK_LABEL := ;
NETWORK_TITLE := ;
NETWORK_HEIGHT := 3 ;
NETWORK_BODY
B(B_CONTACT,,bSetModeFileError,5,1,7,3,N);
B(B_COIL,,bSetModeFileOK,28,1,30,3,);
L(7,2,28,2);
L(1,2,5,2);
L(1,0,1,3);
END_NETWORK_BODY
END_NET_WORK
END_BODY
If DF(bSetModeFile) AND NOT sys_bIsEthernetInitializing then
FP_FTP_SET_MODE(nTransferID := iID10,
sOperation := 'SV0,PUTDATA-OVW,NON',
sPLCFullFileNameOrDataFormat := FP_FTP_GET_DATA_FORMAT(Var := arrayValues,
nSize := Size_Of_Var(arrayValues),
nColumns := 8),
sFTPServerFullFileName := '\B:\LOG\MyData.csv,END',
bError => bSetModePlcDataError);
End_if;
If (bSetModePlcDataError) then
wErrorCode := sys_iEthernetConnectionErrorCode;
Else
bSetModePlcDataOK := True;
End_If;