問題タブ [fins]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c# - C#からPLCにFINSコマンドを送信します
PC(C#.NET)からPLCイーサネットモジュール(Omron)にUDPを介してFINSコマンドを送信しようとしましたが、PLCから応答がなく、トラブルシューティングを開始できる手がかりがありません。
PLCには、次のような非常に単純なラダーロジックがあります。DM100
の値がの場合#0001
、出力でトリガーします101.00
。(ここで、「トリガー」はメモリ領域の単なるシンボル名でD100
あり、「出力」は出力のシンボルです101.00
)
次に、コマンドコードが「MemoryArea Write」のFINSコマンドを実行するC#を作成し01 02
、その後に開始アドレス、書き込み項目数、データを記述しました。C#コードは、オンをトリガーする0001
ためにPLCの領域に#の値を書き込む必要があります。D100
101.00
[機能しない削除されたコード]..
出力101.00
がトリガーされず、例外も発生しませんでした。私は次のことを確認しました:
- ポート、ノード、およびアドレスは、CX-Programmerの「WorkOnline」で確認されたとおりに正しく構成されています。また、ノードが接続されていることを確認するために、各IPにpingを実行しました。
UdpClient
パケットを正常に送受信する非常に単純なサーバー/クライアントコードを記述したので、コードは有効です 。- ラダーロジックは問題ありません。ラダーをPLCに転送し、モニターモードでWork Onlineを使用してテストし、
D100
手動で値を設定しました。
配列に間違いがあるのではないかfins_cmnd
と思いますが、私のコードに見られるように、各値について可能な限り詳細にコメントしています。私はおそらく自分が何かを逃しているのを見つけることができません。16進数を正しく解析していない可能性があると思いますが、繰り返しになりますが、私をガイドする例外はありません。
どこでどのようにトラブルシューティングできるかわかりません。FINS
プログラミングまたはPLCの経験を持つ誰かが私に助けを提供してくれることを願っています。
[回答] リンクを提供してくれたPorge
に
感謝します-それで問題が見つかりました。いくつかのトレイルの後、最終的にそれを機能させます。動作するコードについては、以下を参照してください。
c# - 例外なく Socket.Receive でハングアップする
FINS コマンド/フレームを使用してイーサネット (UDP パケット) 経由で PLC と通信する (つまり、オムロン PLC のメモリ アドレスの書き込み/読み取り) WPF C# アプリケーションがあります。
コマンドをWRITE PLC アドレスに正常に送信できますが、 READコマンド中に PLC から応答を取得しようとすると、アプリケーションがハングまたはクラッシュします。
PC から PLC に送信される FINS パケット フレーム:
次のコードは、ソケットの送受信です。
Try-Catchも使用しようとしましたが、アプリケーションのハング中に例外はキャッチされません。私は言うeventvwrをチェックしました:
ソース: Application Hangs - "...stopped interacting with Windows and was closed"
詳細:(screenshot below)
vb.net - VB.net から PLC への FINS コマンドの送信
FINSコマンドを送信し、UDPを使用して応答を受信しようとしている単純なvb.netプログラムがあります。私は次の質問を参照点FINS Commands C#として使用してきましたが、私のパケットに何か問題があると思います。
現在のプログラムには 4 つのテキスト ボックス ( TBIP
、TBPORT
、TBSEND
、TBReceive
) があります。プログラムを実行すると、送信する IP、ポート、パケット情報を入力し、ボタンをクリックします。私がしたいのは、受け取った情報が に送信されることTBReceive
です。
私の Form Load コードは次のようになります。
マイボタンクリック:
マイタイマー:
Omron PLC で、CIO 100 を読み取ろうとしています。私の IP アドレスは 10.0.1.91 なので、私の文字列は以下のとおりです。(5B は最後のオクテットです):
読みやすいように、HEX ビットの間にスペースを追加しました。
最初の問題は、情報を ASCII に変換または送信しようとしている可能性がありますか? どんな助けでも大歓迎です。
tcp - CP1L (オムロン) FINS/TCP をスイッチ経由で (キーエンス) DL-EP1 に接続する方法
これは不可能かもしれませんし、私がばかかもしれませんが、ここにあります。Omron CP1L PLC をスイッチを介して Keyence DL-EP1 に接続しようとしています。これまでのところ、PC をスイッチに接続し、PLC をスイッチに接続し、Keyence 通信 DL-EP1 もスイッチに接続しています。問題なく、PC を介してこれらの両方に個別に ping を実行できます。しかし、CXProgrammer を介して PLC と DL-EP1 を通信させるのに問題があります。
どんな助けでも大歓迎です。
ありがとうございました