PLCのFTPサーバ機能の説明とFTPクライアント通信命令の使い方を紹介します
PLCの内臓EthernetポートにFTPサーバ機能が備わっています
PLCからFTPサーバに対してFTPコマンドを使ってファイル転送をする命令が用意されいます
外部PCなどからPLCの内臓EthernetポートにFTPコマンドを発行することでSDカードのファイルを読み書きすることができます
FTPクライアントのみ使用する場合はこの設定は必要ありません
FTPサーバを有効にするには[内臓EtherNet/IPポート]の[FTP]の項目の[FTPサーバ]のラジオボタンで[使用する]を選択します
ポート番号は一般的に21番を使います
ログイン名とパスワードを設定します
FTPサーバとの間でファイルをアップロード/ダウンロードしたりファイルリストの取得やファイルの削除をする命令が用意されています
| FTPPutFile | PLCのSDカードにあるファイルをFTPサーバにアップロードします |
| FTPGetFile | FTPサーバにあるファイルをPLCのSDカードにダウンロードします |
| FTPGetFileList | FTPサーバにあるファイルのリストを取得します |
| FTPRemoveDir | FTPサーバにあるディレクトリを削除します |
| FTPRemoveFile | FTPサーバにあるファイルを削除します |
NOTE
自身のSDカードにFTPGetFileList, FTPRemoveDir, FTPRemoveFile を実行することもできます
その際はFTPサーバ機能を有効にしてください

| 変数 | 内容 | データ型 | |
|---|---|---|---|
| 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サーバにアップロードするサンプル


| 変数 | 内容 | データ型 | |
|---|---|---|---|
| GetFileResult | ダウンロード済みファイルの結果 | _sFTP_FILE_RESULT | |
| Name | ファイル名 | STRING[256] | |
| TxError | 転送異常 | BOOL | |
| RemoveError | RemoveError | BOOL | |
| Reserved | 予約 | Byte[0..3] | |
※ その他の変数はFTPPutFileと同じ
FTPサーバにある全てのファイルをPLCのSDメモリカードのdataフォルダにダウンロードするサンプル

| 変数 | 内容 | データ型 | |
|---|---|---|---|
| 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)のうちファイルのタイムスタンプをチェックしながらループします
NOTE
転送済み日付とタイムスタンプを比較する時にイコールを付けるのはFTPの仕様上タイムスタンプの精度が制限されているために秒が0秒固定になってしまうことあります
そのため同じタイムスタンプのファイルが複数できることが多いので上書きするようにしています
ST部分
ダウンロードされたときは利用規約に同意したものとみなします