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
- 実行リトライ設定
- RetryCfg
- 実行リトライ設定
- Cancel
- 取り消し
- CommandCanceled
- 取り消し完了
- PutNum
- アップロードファイル数
- PutFileResult
- アップロード済みファイル結果
変数の説明
| 変数 | 内容 | データ型 | |
|---|---|---|---|
| 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
- 実行リトライ設定
- RetryCfg
- 実行リトライ設定
- Cancel
- 取り消し
- CommandCanceled
- 取り消し完了
- GetNum
- ダウンロードファイル数
- GetFileResult
- ダウンロード済みファイル結果
変数の説明
| 変数 | 内容 | データ型 | |
|---|---|---|---|
| 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
- 取り消し
- CommandCanceled
- 取り消し完了
- StoredNum
- 取得済みファイル数
- FileList
- ファイル詳細
変数の説明
| 変数 | 内容 | データ型 | |
|---|---|---|---|
| GetFileNum | 取得ファイル数 1-1000 | UINT | |
| Sortorder | ファイルリストの並び順 _NAME_ASC:名前昇順 _NAME_DESC:名前降順 | _eFILE_SORT_ORDER | |
| StoredNum | 取得済みファイル数 0-1000 | UINT | |
※ その他の変数はFTPPutFileと同じ
サンプル
PLCのSDメモリカードのdataディレクトリにあるファイルうち転送済み日付より新しいファイルをFTPサーバにアップロードするサンプル


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

