C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[6]: C# PLC 接続


(過去ログ 173 を表示中)

[トピック内 10 記事 (1 - 10 表示)]  << 0 >>

■99702 / inTopicNo.1)  C# PLC 接続
  
□投稿者/ おじさん (1回)-(2022/05/15(Sun) 23:43:19)

分類:[C#] 

宜しくお願い致します
ネット上にありましたPCとPLCの接続のソースをコピーして
コンソールアプリにはりつけましたらエラーが出ます
下記以外に何かしないと使えないと思うのですが
わかりますでしょうか
宜しくお願い致します

記事は
https://7iro.net/plc-csharp-host-link/
です



static void Main(string[] args)
{
    // PLCのIPアドレス
    string host = "192.168.2.35";
    // 上位リンクのデフォルト設定は8501
    int port = 8501;

    //TcpClientを作成し、サーバーと接続する
    TcpClient tcp = new TcpClient();
    tcp.Connect(host, port);
    if (tcp.Connected)
    {
        Console.WriteLine("サーバー({0}:{1})と接続しました({2}:{3})",
            ((IPEndPoint)tcp.Client.RemoteEndPoint).Address,
            ((IPEndPoint)tcp.Client.RemoteEndPoint).Port,
            ((IPEndPoint)tcp.Client.LocalEndPoint).Address,
            ((IPEndPoint)tcp.Client.LocalEndPoint).Port);
    }

    // Timeoutを設定する
    NetworkStream ns = tcp.GetStream();
    ns.ReadTimeout = 10000;
    ns.WriteTimeout = 10000;

    // MR001のデバイス値を1に書き込み
    string sendMsg = "WR MR001 1";
    Encoding enc = Encoding.ASCII;
    byte[] sendBytes = enc.GetBytes(sendMsg + '\r');

    //データを送信する
    ns.Write(sendBytes, 0, sendBytes.Length);
    Console.WriteLine(sendMsg);

    System.IO.MemoryStream ms = new System.IO.MemoryStream();
    byte[] resBytes = new byte[256];
    int resSize = 0;
    do
    {
        //データの一部を受信する
        resSize = ns.Read(resBytes, 0, resBytes.Length);
        //Readが0を返した時はサーバーが切断したと判断
        if (resSize == 0)
        {
            Console.WriteLine("サーバーが切断しました。");
            break;
        }
        //受信したデータを蓄積する
        ms.Write(resBytes, 0, resSize);
        //まだ読み取れるデータがあるか、データの最後が\nでない時は、
        // 受信を続ける
    } while (ns.DataAvailable || resBytes[resSize - 1] != '\n');

    //受信したデータを文字列に変換
    string resMsg = enc.GetString(ms.GetBuffer(), 0, (int)ms.Length);
    ms.Close();

    //末尾の\nを削除
    resMsg = resMsg.TrimEnd('\n');
    Console.WriteLine(resMsg);

    //閉じる
    ns.Close();
    tcp.Close();
    Console.WriteLine("切断しました。");
}

引用返信 編集キー/
■99703 / inTopicNo.2)  Re[1]: C# PLC 接続
□投稿者/ KOZ (234回)-(2022/05/16(Mon) 00:54:23)
2022/05/16(Mon) 01:03:49 編集(投稿者)

No99702 (おじさん さん) に返信
> ネット上にありましたPCとPLCの接続のソースをコピーして
> コンソールアプリにはりつけましたらエラーが出ます

エラーがある場合は、エラーの内容も書きましょう。
コンパイルエラーですか?

using System.Net;
using System.Net.Sockets;

を追記していますか?

引用返信 編集キー/
■99704 / inTopicNo.3)  Re[1]: C# PLC 接続
□投稿者/ kiku (263回)-(2022/05/16(Mon) 09:07:03)
No99702 (おじさん さん) に返信
> 宜しくお願い致します
> ネット上にありましたPCとPLCの接続のソースをコピーして
> コンソールアプリにはりつけましたらエラーが出ます
> 下記以外に何かしないと使えないと思うのですが
> わかりますでしょうか
> 宜しくお願い致します
> // MR001のデバイス値を1に書き込み
> string sendMsg = "WR MR001 1";

PLCは多分キーエンス製のPLCなのかな?
利用しているPLCのマニュアルを入手しましょう。
上位リンク通信というところがあると思うので
それを読めば、どういうコマンドを送信すると、
どういう応答が返ってくるか記述があります。
そのコマンドとプログラムが合っているか
比較していくことからではないでしょうか?
機種によってはコマンドが微妙に違っている可能性もあります。

> string sendMsg = "WR MR001 1";
上記の001の部分ですが、3桁であっているのでしょうか?
最近のPLCは5桁が多いと思いますが、
00001にしてみてはどうでしょう。

引用返信 編集キー/
■99708 / inTopicNo.4)  Re[2]: C# PLC 接続
□投稿者/ おじさん (2回)-(2022/05/16(Mon) 12:11:35)
分かりにくくてすみません


using System.Net;
using System.Net.Sockets;
追記させて頂きました
そのうえでコンパイルしましたら
下記のエラーが出てしまいました
宜しくお願い致します

>
C:\Users\MA\source\repos\ConsoleApp19\ConsoleApp19.csproj を復元しました (2 ms)。
1>C:\Users\MA\source\repos\ConsoleApp19\Program.cs(31,5,31,13): error CS0246: 型または名前空間の名前 'Encoding' が見つかりませんでした (using ディレクティブまたはアセンブリ参照が指定されていることを確認してください)

1>C:\Users\MA\source\repos\ConsoleApp19\Program.cs(31,20,31,28): error CS0103: 現在のコンテキストに 'Encoding' という名前は存在しません

1>C:\Users\MA\source\repos\ConsoleApp19\Program.cs(5,13,5,17): warning CS7022: プログラムのエントリ ポイントは、グローバル コードです。エントリ ポイント 'Main(string[])' を無視します。

1>C:\Users\MA\source\repos\ConsoleApp19\Program.cs(18,14,18,51): warning CS8600: Null リテラルまたは Null の可能性がある値を Null 非許容型に変換しています。

1>C:\Users\MA\source\repos\ConsoleApp19\Program.cs(18,14,18,51): warning CS8602: null 参照の可能性があるものの逆参照です。

1>C:\Users\MA\source\repos\ConsoleApp19\Program.cs(20,14,20,50): warning CS8600: Null リテラルまたは Null の可能性がある値を Null 非許容型に変換しています。

1>C:\Users\MA\source\repos\ConsoleApp19\Program.cs(20,14,20,50): warning CS8602: null 参照の可能性があるものの逆参照です。

1>C:\Users\MA\source\repos\ConsoleApp19\Program.cs(5,13,5,17): warning CS8321: ローカル関数 'Main' は宣言されていますが、一度も使用されていません

1>プロジェクト "ConsoleApp19.csproj" のビルドが終了しました -- 失敗。
引用返信 編集キー/
■99709 / inTopicNo.5)  Re[3]: C# PLC 接続
□投稿者/ kiku (264回)-(2022/05/16(Mon) 12:22:33)
No99708 (おじさん さん) に返信
> 分かりにくくてすみません
> 
> 
> using System.Net;
> using System.Net.Sockets;
> 追記させて頂きました
> そのうえでコンパイルしましたら
> 下記のエラーが出てしまいました
> 宜しくお願い致します

下記のようになっていますか?

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

using System.Net.Sockets;
using System.Net;

namespace ConsoleApp1
{
    class Program
    {
        static void Main(string[] args)
        {
            //省略
        }
    }
}

引用返信 編集キー/
■99710 / inTopicNo.6)  Re[3]: C# PLC 接続
□投稿者/ WebSurfer (2481回)-(2022/05/16(Mon) 12:22:37)
No99708 (おじさん さん) に返信

Visual Studio 2022 のテンプレートでフレームワークを .NET 6.0 にしてコンソールアプリを
作って、それにどこかからそのテンプレートで作ったプロジェクトに合わないコードをコピペ
しているようですが、そういうのダメです。

何故ダメかを説明すると長くなるし、聞く気もないと思いますので、まずは最初に戻ってテン
プレートに .NET Framework 用のコンソールアプリを使って、それを使うことをお勧めします。

引用返信 編集キー/
■99711 / inTopicNo.7)  Re[4]: C# PLC 接続
□投稿者/ おじさん (3回)-(2022/05/16(Mon) 13:11:18)
ありがとうございます
以後気を付けたいと思います

通信できました
皆さんありがとうございます
引用返信 編集キー/
■99712 / inTopicNo.8)  Re[5]: C# PLC 接続
□投稿者/ おじさん (4回)-(2022/05/16(Mon) 16:02:44)
すみません
追加で教えて下さい
上記のprogram.csをフォーム画面form1.csのボタンを
クリックしたら動くようにするには
form1.csはどのように書けばいいでしょうか
宜しくお願い致します
引用返信 編集キー/
■99713 / inTopicNo.9)  Re[6]: C# PLC 接続
□投稿者/ KOZ (235回)-(2022/05/16(Mon) 16:42:26)
2022/05/16(Mon) 16:53:56 編集(投稿者)

No99712 (おじさん さん) に返信
> すみません
> 追加で教えて下さい
> 上記のprogram.csをフォーム画面form1.csのボタンを
> クリックしたら動くようにするには
> form1.csはどのように書けばいいでしょうか
> 宜しくお願い致します

C# の基礎から勉強したほうがよさそうですね。

https://docs.microsoft.com/ja-jp/learn/paths/csharp-first-steps/
https://docs.microsoft.com/ja-jp/visualstudio/ide/create-csharp-winform-visual-studio?toc=%2Fvisualstudio%2Fget-started%2Fcsharp%2Ftoc.json&bc=%2Fvisualstudio%2Fget-started%2Fcsharp%2Fbreadcrumb%2Ftoc.json&view=vs-2022
https://dobon.net/
引用返信 編集キー/
■99714 / inTopicNo.10)  Re[6]: C# PLC 接続
□投稿者/ Azulean (1240回)-(2022/05/17(Tue) 07:12:10)
No99712 (おじさん さん) に返信
> 上記のprogram.csをフォーム画面form1.csのボタンを
> クリックしたら動くようにするには
> form1.csはどのように書けばいいでしょうか

プログラムとはコピペで作るものではなく、考えて作るものです。
現状、「どのように書けば良いでしょうか?」と「質問」と認識されているかもしれませんが、実質的には「(仕様不十分の)プログラム作成依頼」と言えます。
自分が当事者として取り組んで努力し、その結果でのご質問であれば助言や回答を得られるかもしれませんが、丸投げでは敬遠され、あなたがやりたいことは実現できないでしょう。

まったく以て手段がわからない(一歩も進めない)なら、大きな課題(PLC の制御)をいったん諦めて、少しずつ Windows Forms のプログラムの書き方を学ぶことを考えてください。
それが時間的に許されないなら、業務として請け負う会社に発注するなど、別の手段も考えてみてください。


-----
単に Button1_Click などに移植しても、ループがあるせいで、GUI アプリとしては失格と言えるのでダメでしょうね。
それを理解し、乗り越えるにはそれなりの知識・経験が必要なので、「コピペ」ベースではたどり着けません…。
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -