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番を使います
ログイン名とパスワードを設定します
FTPクライアント通信命令
-
FTPサーバとの間でファイルをアップロード/ダウンロードしたりファイルリストの取得やファイルの削除をする命令が用意されています
| FTPPutFile |
PLCのSDカードにあるファイルをFTPサーバにアップロードします |
| FTPGetFile |
FTPサーバにあるファイルをPLCのSDカードにダウンロードします |
| FTPGetFileList |
FTPサーバにあるファイルのリストを取得します |
| FTPRemoveDir |
FTPサーバにあるディレクトリを削除します |
| FTPRemoveFile |
FTPサーバにあるファイルを削除します |
NOTE
自身のSDカードにFTPGetFileList, FTPRemoveDir, FTPRemoveFile を実行することもできます
その際はFTPサーバ機能を有効にしてください
FTPPutFileサンプル
- FTPPutFileファンクションブロック
-

-
|
変数 |
名称 |
| 入力 |
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サーバにアップロードするサンプル

FTPGetFileサンプル
- FTPGetFileファンクションブロック
-

-
|
変数 |
名称 |
| 入力 |
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フォルダにダウンロードするサンプル

GetFileListを使ってファイルを選別してアップロードするサンプル
- FTPPutFileファンクションブロック
-

-
|
変数 |
名称 |
| 入力 |
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サーバにアップロードするサンプル


2ブロック目:
FTPGetFileList命令でPLCのSDメモリカードに入っているファイルのリストを日付昇順で取得します
6-8ブロック目:
取得済みファイル数(StoredNum)のうちファイルのタイムスタンプをチェックしながらループします
- ファイル数(StoredNum)分をループ
⇩
- フォルダならパス
⇩
- 転送済み日時(LastTimeStamp) <= ファイルのタイムスタンプ
⇩
- FTPPutFileでファイルをアップロード
⇩
- 1へ戻る
全てのファイルの処理を終えるとDataExistがOFFのままループを抜けるのでDataExistがOFFなら処理を終了します
NOTE
転送済み日付とタイムスタンプを比較する時にイコールを付けるのはFTPの仕様上タイムスタンプの精度が制限されているために秒が0秒固定になってしまうことあります
そのため同じタイムスタンプのファイルが複数できることが多いので上書きするようにしています
ST部分
ダウンロード
SampleFTP.zip
ダウンロードされたときは利用規約に同意したものとみなします