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:ActiveBOOL ASCIIMode ASCIIモード指定
TRUE:ASCII FALSE:BinaryBOOL 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]

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]

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