FTP

概要

PLCのFTPサーバ機能の説明とFTPクライアント通信命令の使い方を紹介します

FTPサーバ機能
PLCの内臓EthernetポートにFTPサーバ機能が備わっています
FTPクライアント通信命令
PLCからFTPサーバに対してFTPコマンドを使ってファイル転送をする命令が用意されいます

FTPサーバ機能

外部PCなどからPLCの内臓EthernetポートにFTPコマンドを発行することでSDカードのファイルを読み書きすることができます
FTPクライアントのみ使用する場合はこの設定は必要ありません

PLCのFTPサーバを有効にする
FTPサーバを有効にするには[内臓EtherNet/IPポート]の[FTP]の項目の[FTPサーバ]のラジオボタンで[使用する]を選択します
ポート番号は一般的に21番を使います
ログイン名とパスワードを設定します FTPServer

FTPクライアント通信命令

FTPサーバとの間でファイルをアップロード/ダウンロードしたりファイルリストの取得やファイルの削除をする命令が用意されています

FTPPutFile PLCのSDカードにあるファイルをFTPサーバにアップロードします
FTPGetFile FTPサーバにあるファイルをPLCのSDカードにダウンロードします
FTPGetFileList FTPサーバにあるファイルのリストを取得します
FTPRemoveDir FTPサーバにあるディレクトリを削除します
FTPRemoveFile FTPサーバにあるファイルを削除します

NOTE
自身のSDカードにFTPGetFileList, FTPRemoveDir, FTPRemoveFile を実行することもできます
その際はFTPサーバ機能を有効にしてください

FTPPutFileサンプル

FTPPutFileファンクションブロック
FTPPutFileFB

変数 名称
入力 ConnectSvr 接続先FTPサーバ設定
SvrDirName FTPサーバディレクトリ
LocalDirName ローカルディレクトリ
FileName ファイル名
ExecOption FTP実行オプション
RetryCfg 実行リトライ設定
Cancel 取り消し
入出力 PutFileResult アップロード済みファイル結果
出力 CommandCanceled 取り消し完了
PutNum アップロードファイル数

変数の説明
変数 内容 データ型
ConnectSvr 接続先FTPサーバ設定パラメータ _sFTP_CONNECT_SVR
Adr IPアドレスまたはホスト名 STRING[200]
PortNo FTPサーバのポート番号 UINT
UserName FTPサーバのユーザ名 STRING[33]
Password パスワード STRING[33]
SvrDirName FTPサーバのルートディレクトリ
初期値=''
STRING[256]
LocalDirName SDカードのディレクトリ
初期値='/'
STRING[256]
FileName ファイル名
(ワイルドカード使用可)
STRING[256]
ExecOption FTP実行オプション _sFTP_CONNECT_SVR
PassiveMode パッシブモード指定
TRUE:Passive FALSE:Active
BOOL
ASCIIMode ASCIIモード指定
TRUE:ASCII FALSE:Binary
BOOL
FileRemove 転送後ファイル削除指定 BOOL
OverWrite 転送先のファイルを上書き BOOL
Reserved 予約 BOOL[0..7]
RetryCfg 命令リトライ設定 _sFTP_RETRY_CFG
TimeOut タイムアウト時間 0-60s 初期値:20s UINT
RetryNum リトライ回数 初期値:0 UINT
RetryInterval リトライ間隔 初期値:1s UINT
PutFileResult アップロード済みファイルの結果 _sFTP_FILE_RESULT
Name ファイル名 STRING[256]
TxError 転送異常 BOOL
RemoveError RemoveError BOOL
Reserved 予約 Byte[0..3]

サンプル
PLCのSDメモリカードのdataディレクトリにあるファイルを全てFTPサーバにアップロードするサンプル

FTPPutFile

FTPGetFileサンプル

FTPGetFileファンクションブロック
FTPGetFileFB

変数 名称
入力 ConnectSvr 接続先FTPサーバ設定
SvrDirName FTPサーバディレクトリ
LocalDirName ローカルディレクトリ
FileName ファイル名
ExecOption FTP実行オプション
RetryCfg 実行リトライ設定
Cancel 取り消し
入出力 PutFileResult アップロード済みファイル結果
出力 CommandCanceled 取り消し完了
PutNum アップロードファイル数

変数の説明
変数 内容 データ型
GetFileResult ダウンロード済みファイルの結果 _sFTP_FILE_RESULT
Name ファイル名 STRING[256]
TxError 転送異常 BOOL
RemoveError RemoveError BOOL
Reserved 予約 Byte[0..3]
※ その他の変数はFTPPutFileと同じ

サンプル
FTPサーバにある全てのファイルをPLCのSDメモリカードのdataフォルダにダウンロードするサンプル

FTPGetFile

GetFileListを使ってファイルを選別してアップロードするサンプル

FTPPutFileファンクションブロック
FTPGetFileListFB

変数 名称
入力 ConnectSvr 接続先FTPサーバ設定
SvrDirName FTPサーバディレクトリ
GetFileNum 取得ファイル数
SortOrder 並び替え順序
ExecOption FTP実行オプション
RetryCfg 実行リトライ設定
Cancel 取り消し
入出力 FileList ファイル詳細
出力 CommandCanceled 取り消し完了
StoredNum 取得済みファイル数

変数の説明
変数 内容 データ型
GetFileNum 取得ファイル数 1-1000 UINT
Sortorder ファイルリストの並び順
_NAME_ASC:名前昇順
_NAME_DESC:名前降順
_DATE_ASC:更新日時昇順
_DATE_DESC:更新日時降順
_eFILE_SORT_ORDER
StoredNum 取得済みファイル数 0-1000 UINT
※ その他の変数はFTPPutFileと同じ

サンプル
PLCのSDメモリカードのdataディレクトリにあるファイルうち転送済み日付より新しいファイルをFTPサーバにアップロードするサンプル

FTPGetFileList
FTPGetFileList

2ブロック目:
FTPGetFileList命令でPLCのSDメモリカードに入っているファイルのリストを日付昇順で取得します

6-8ブロック目:
取得済みファイル数(StoredNum)のうちファイルのタイムスタンプをチェックしながらループします
  1. ファイル数(StoredNum)分をループ
  2. フォルダならパス
  3. 転送済み日時(LastTimeStamp) <= ファイルのタイムスタンプ
  4. FTPPutFileでファイルをアップロード
  5. 1へ戻る
全てのファイルの処理を終えるとDataExistがOFFのままループを抜けるのでDataExistがOFFなら処理を終了します

NOTE
転送済み日付とタイムスタンプを比較する時にイコールを付けるのはFTPの仕様上タイムスタンプの精度が制限されているために秒が0秒固定になってしまうことあります
そのため同じタイムスタンプのファイルが複数できることが多いので上書きするようにしています

ST部分


ダウンロード

SampleFTP.zip

ダウンロードされたときは利用規約に同意したものとみなします