PLC無しで通信チェックが可能なツールを作ってみた

今回も作ったツールを公開してみます。
今回のツールはPLCと通信してどうこうではなく、逆にPLCの代わりに通信応答を返すツールです。
なんちゃってPLC、ダミー通信ツール、と表現するのが妥当と思います。少しかっこつけて言えば「PLC通信エミュレータ」でしょうか。

とりあえずココからダウンロードできます。
ソースコードが気になる方はこちらを参照ください。

目次

開発環境

以前に作成したデバイスモニタチャートモニタと同様にVisual Studio2022のC#、ターゲットフレームワークは.NET6.0です。
※ランタイムはココからダウンロードできます。必要なものは「.NET デスクトップ ランタイム 6.*.* 」のランタイムです。

対応しているプロトコルはEthernet通信のみで、
・三菱(MCプロトコル/SLMP)
・OMRON(FINS)
・KEYENCE(上位リンク/MCプロトコル)
・横河(パソコンリンク)
で使える、、予定です。

注意事項

多分動くと思いますが、、サクッとデバッグのみでたいしたテストをしていないため予期せぬ不具合が発生する可能性が多分にあります。また本ツールを使用したことによる如何なる損害についても一切責任を負いません。ご使用については全て自己責任でお願いします。

心の声

もはやテンプレという名の言い訳。。。
まあ今回のツールはPLCに対してアクセスするものではないので、何かあってもモノを壊すことは無くパソコン上で何か発生するだけ。

主な機能

  • 最大4台のPLC通信を模擬
  • デバイスのRead/Writeにのみ対応(ラベル・変数には未対応)
    ⇒対応コマンドの詳細は下記参照
  • 対象デバイスの値は共有メモリを使用してツール側で保持
    ⇒Writeした値の保持およびツール側でデバイス値の任意操作も可能
    (当然ながら同じデバイスに対しての書込は後操作が優先)
  • デバイス値はファイルにて保存&復元
  • 通信ログの表示および保存

MCプロトコルの対応コマンド (三菱 or KEYENCE)

種別コマンドサブコマンド
ワード単位の一括読出し04010000
ビット単位の一括読出し04010001
ワード単位の一括書込み14010000
ビット単位の一括書込み14010001
ワード単位のランダム読出し04030000
ワード単位のランダム書込み14020000
ビット単位のランダム書込み14020001

※複数ブロックの一括読み書き(0406/1406)やモニタ・モニタ登録(0801/0802)には未対応
※サブコマンドの0002/0003には未対応(SLMP側で対応)
※内部デバイスのみに対応(バッファメモリ(U*\G****)やリンクダイレクトデバイス(J*\B****など)には未対応)
※KEYENCEでのMCプロトコルも対応コマンドは同じ

SLMPの対応コマンド (三菱)

種別コマンドサブコマンド
ワード単位の一括読出し04010002
ビット単位の一括読出し04010003
ワード単位の一括書込み14010002
ビット単位の一括書込み14010003
ワード単位のランダム読出し04030002
ワード単位のランダム書込み14020002
ビット単位のランダム書込み14020003

※複数ブロックの一括読み書き(0406/1406)やモニタ・モニタ登録(0801/0802)には未対応
※サブコマンドの0000/0001には未対応(MCプロトコル側で対応)
※通常内部デバイスのみに対応(バッファメモリ(U*\G****)やリンクダイレクトデバイス(J*\B****など)には未対応)

FINSの対応コマンド (OMRON)

種別コマンドコード
I/Oメモリエリアの読出01 01
I/Oメモリエリアの書込01 02
I/Oメモリエリアの複合読出01 04

※I/Oメモリエリアの一括書込(01 03)やI/Oメモリエリアの転送(01 05)には未対応
※タスクフラグ(TK)やインデックスレジスタ(IR/DR)、クロックやコンディションフラグには未対応

上位リンクの対応コマンド (KEYENCE)

種別コマンド
データ読み出しRD
連続データ読み出しRDS or RDE
データ書き込みWR
連続データ書き込みWRS or WRE

※強制セット/リセット(ST/RS)やモニタ登録/読み出し(MBS/MWS/MBR/MWR)には未対応

パソコンリンクの対応コマンド (横河)

種別コマンド(Ascii)コマンド(Binary)
ビット単位の読出しBRD01
ビット単位の書込みBWR02
ビット単位のランダム読出しBRR04
ビット単位のランダム書込みBRW05
ワード単位の読出しWRD11
ワード単位の書込みWWR12
ワード単位のランダム読出しWRR14
ワード単位のランダム書込みWRW15

※同一データの書込み(BFL/WFL/03/13)やモニタ指定/モニタリング(BRS/BRM/WRS/WRM/06/07/16/17)には未対応
※特殊モジュールアクセスコマンド(アナログユニットや高速カウンタユニット等へのアクセス)には未対応

使い方

通信設定

設定は
①通信プロトコル選択
②TCP or UDP選択
③ポート番号入力(1024~65535)
④Binary or Ascii選択
⑤通信ログ保存 *常時変更可
⑥エラー応答 *常時変更可
⑦共有メモリIndex入力(0~3)
です。(それぞれ回線No.0~3の4台分)

共有メモリIndexはこのツール内でのデバイス値を共有メモリで保持(0~3の4台分)しており、この共有メモリ≒デバイス値のアクセス先を指定するものになります。基本的にはPLC4台分を別々に想定していますが実際には場合によって複数の通信回線を使用して1台のPLCにアクセスすることもあり得るため、このような経路にも対応できるようにしています。

設定後は開始・停止ボタンで通信処理の開始・停止が可能となります。
一番下側にある”デバイス値のリセット”のボタンはデバイス値≒共有メモリの値をすべて0にクリアします。

PLCとの通信アプリケーション(デバイスモニタチャートモニタなど)から本ツールへアクセスするには別のPCを用意してIPアドレスを適切に設定することで使えるワケですが、、
わざわざ複数のPCを準備するのは面倒なので同一のPC内で確認するのがオススメです。というよりPLC無しでサクッと通信をチェックするためのツールなので同じPC内で使うことがほとんどだと思います。
方法は特に難しいことはなく、PLCにアクセスする側の設定でIPアドレスを“127.0.0.1”(いわゆるループバックlocalhostと呼ばれるもの)に設定すればOKです。

当然ですが
①サーバ側=本ツール側の通信を開始
②クライアント側(デバイスモニタなど)の通信を開始
の順に操作しないとエラーが発生するのでご注意ください。。

終了する場合は逆に
①クライアント側の通信を停止
②サーバ側=本ツール側の通信を停止
とするのがベターです。(どちらから停止しても問題はないハズですが)

通信ログ

通信を開始するとログを表示します。画面上部のラジオボタンで表示回線を切り替えます。
(読出か書込かがすぐに分かる程度のログですが。。)
※ログをファイルに保存するとこのテキストがそのまま出力されます。

デバイス値

デバイス値≒共有メモリの値を確認・操作出来ます。
デバイスと点数を指定すると右側のグリッド表示が変わり、左側で表示するデータ型を選択できます。ビット表示(● or 〇)部分をダブルクリックすると反転、ワード値表示部分はクリックすると入力ダイアログが表示されるので値を入力すると操作可能です。
このあたりはデバイスモニタと同様です。

クライアント側(デバイスモニタなど)から書込要求があれば共有メモリの値が書き換わります。

注意事項 その2

TCPで通信する場合ですが、、
動作自体は確認できましたが切断に問題アリです。。。
クライアント側で回線切断(ソケットを閉じる)をするとサーバ側で切断を検出できるかと思っていたのですが予想どおりには動作せず。。。同一PCだからなのかどうかは不明です。(複数PCで試していないので)
極稀に回線切断を検出できることもあったのですが基本ダメです。TCPで使用する場合はクライアント側の回線切断に合わせて、本ツール側で通信停止→開始としないと次の通信が出来ませんのであしからず。。(私の力不足orz)

UDPの場合はTCPと違ってConnectという概念がないので上記のような切断の問題は発生しません。

感想?

今回のツールは、、、かなり使う人を選ぶツールと思います。
大半の人には「ふ~ん、あーそう」的なものですが極々限られた人にはそれなりに有用なもの、、と思いたい。
(PLCとの通信ツールを”作る側の人”にはちょっと需要あるかも)

ちなみに今回作成したツールの原型といいますか、簡易版のツールは以前から使っていたのですがイマイチ使えなかったのでリニューアルした感じです。(たぶん1カ月くらいかかった)
ちなみに以前公開したデバイスモニタチャートモニタの作成時は実機PLCとの接続テストはゼロです。。が、何のテストも無しでいきなり公開する勇気はないので、最低限の通信テストはダミーの通信ツールを使っていたワケです。
(実際にPLCと接続してもいないのに多分使える、、として公開したのはこういうカラクリがあります。いくら個人のサイトとはいえ、何の根拠もなくホイホイと無責任に公開はムリ。バグはあるけどw)
今後また何かツールを作る場合はデバッグ・動作確認が楽になる、、ハズ。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメントする

CAPTCHA

目次