前提・実現したいこと
三菱電機製のシーケンサ(Q03UDVCPU)とC#にてソケット通信を行っていますが
うまくいきません。
内臓イーサネットではうまく開通もできなかったのでQJ71E71-100を使用しています。
通信は開通しているのですが、コマンドを送ってもよくわからないのが返ってきてしまいます。
例として
• バイナリコード,3Eフレーム
• アクセス先: 接続局(自局)のQCPU
• コマンド: ワード単位の一括読出し(コマンド: 0401)
• デバイス: M100~M131(2ワード分)
を設定しています
発生している問題・エラーメッセージ
B5-5B-80-C0-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
該当のソースコード
C#
1using System; 2using System.Text; 3using System.Net.Sockets; 4using System.Net; 5 6namespace PLCConnect 7{ 8 class Program 9 { 10 static void Main(string[] args) 11 { 12 Console.WriteLine("キーを押下で送信処理"); 13 Console.WriteLine("サーバーがすでに待機していることが条件"); 14 Console.ReadLine(); 15 16 17 try 18 { 19 //IPアドレスとポート番号を指定 20 IPAddress ipAddress = IPAddress.Parse("192.168.100.4"); 21 int port = 2000; 22 23 //シーケンサと接続 24 TcpClient client = new TcpClient(); 25 client.Connect(ipAddress, port); 26 27 if (client.Connected) Console.WriteLine("Connented"); 28 29 //接続完了確認 30 Console.WriteLine("接続完了"); 31 32 //ストリームを作成 33 NetworkStream stream = client.GetStream(); 34 35 string str; 36 //データレジスタM0の内容を読みだすコマンド 37 str = "5000" // サブヘッダ(固定値) 38 + "00FF" // ネットワーク番号(自局なので固定) 39 + "FF" // PC番号(自局なので固定) 40 + "FF03" // 要求先ユニットI/O番号(固定値) 41 + "00" // 要求先ユニット局番号(固定値) 42 + "0C00" // 要求データ長 43 + "1000" // CPU監視タイマ 44 + "0104" // コマンド(データレジスタをワード単位で一括読み出しするコマンド:0401) 45 + "0000" // サブコマンド 46 + "640000" // 先頭デバイス(0) 47 + "90" // デバイスコード(M) 48 + "0200"; // デバイス点数 49 50 Console.WriteLine("str=" + str); 51 52 //byte型に変換 53 byte[] tmp = Encoding.UTF8.GetBytes(str); 54 55 //送信 56 stream.Write(tmp, 0, tmp.Length); 57 Console.WriteLine("送信しました"); 58 59 //応答電文の受け取り配列 60 byte[] res = new byte[30]; 61 Console.WriteLine("受信します"); 62 63 64 stream.Read(res, 0, res.Length); 65 //受け取り完了確認 66 Console.WriteLine("受信完了"); 67 68 //受け取ったものの表示 69 foreach (int i in res) 70 { 71 Console.WriteLine("res=" + i); 72 } 73 74 string s = string.Empty; 75 76 s = BitConverter.ToString(res); 77 Console.WriteLine("s="+s); 78 79 } 80 catch (Exception e) 81 { 82 Console.WriteLine(e.Message); 83 84 } 85 finally 86 { 87 Console.WriteLine("キーを押下で終了"); 88 Console.ReadLine(); 89 } 90 91 } 92 } 93} 94

バッドをするには、ログインかつ
こちらの条件を満たす必要があります。