1. 程式人生 > 其它 >C# OpenProtocol 開放乙太網協議 讀寫資料 訂閱資料

C# OpenProtocol 開放乙太網協議 讀寫資料 訂閱資料

主要使用的軟體是 HslCommunication 關於這個軟體的本身,詳細可以參考下面的地址:

github地址:https://github.com/dathlin/HslCommunication

官網:http://www.hslcommunication.cn

加群諮詢學習資訊:http://www.hslcommunication.cn/Cooperation 

在Visual Studio 中的NuGet管理器中可以下載安裝,也可以直接在NuGet控制檯輸入下面的指令安裝:

Install-Package HslCommunication

  

如果需要教程:Nuget安裝教程:http://www.cnblogs.com/dathlin/p/7705014.html

元件的api地址:http://api.hslcommunication.cn

使用手冊:http://www.hsltechnology.cn/Doc/HslCommunication

Demo下載地址:http://www.hsltechnology.cn/Home/Download

在開始之前,我們先來看看HslCommunication能幹什麼?

我們使用這個庫來實現 OpenProtocol 協議

1. 引用庫


using HslCommunication;
using HslCommunication.Profinet.OpenProtocol;

  

2. 演示簡單的連線讀取


            // 例項化物件,指定open協議的ip地址
            OpenProtocolNet openProtocol = new OpenProtocolNet( "192.168.1.110", 4545 );

            // 連線
            OperateResult connect = openProtocol.ConnectServer( );
            if (connect.IsSuccess)
            {
                // connect success!
            }
            else
            {
                // connect failed 連線失敗,應該提醒或是返回
                Console.WriteLine( "connect failed: " + connect.Message );
                return;
            }

            // 舉例自定義讀取資料
            // 以下例子使用 MID0010 例子讀取引數ID的集合,具體參見手冊
            // Send: 00200010            NUL
            // Rece: 00290011            002001002NUL
            OperateResult<string> read = openProtocol.ReadCustomer( 10, 1, -1, -1, null );
            if (read.IsSuccess)
            {
                List<int> list = new List<int>();
                int count = Convert.ToInt32( read.Content.Substring( 20, 3 ) );

                for (int i = 0; i < count; i++)
                {
                    list.Add( Convert.ToInt32( read.Content.Substring( 23 + i * 3, 3 ) ) );
                }

                // list 就是所有引數ID的集合,其他命令也是類似的解析

            }
            else
            {
                Console.WriteLine( "read failed: " + read.Message );
            }


            // 系統退出的時候關閉連線
            openProtocol.ConnectClose( );

  

3. 封裝的高階讀取


            // 當然hslcommunication裡也提供了幾個更加便捷的資料互動的方法
            // 以下例子使用 MID0010 例子讀取引數ID的集合
            OperateResult<int[]> read = openProtocol.ParameterSetMessages.ParameterSetIDUpload( );
            if (read.IsSuccess)
            {
                // read.Content 就是讀取的結果;
            }
            else
            {
                Console.WriteLine( "read failed: " + read.Message );
            }

            // 比如訂閱,取消訂閱操作
            OperateResult sub = openProtocol.ParameterSetMessages.ParameterSetSelectedSubscribe( );
            if (sub.IsSuccess)
            {
                Console.WriteLine( "sub success" );
            }
            else
            {
                Console.WriteLine( "sub faield: " + sub.Message );
            }

            OperateResult unsub = openProtocol.ParameterSetMessages.ParameterSetSelectedUnsubscribe( );
            if (unsub.IsSuccess)
            {
                Console.WriteLine( "unsub success" );
            }
            else
            {
                Console.WriteLine( "unsub faield: " + unsub.Message );
            }

  

4. 訂閱操作


            // 例項化物件,指定open協議的ip地址
            OpenProtocolNet openProtocol = new OpenProtocolNet( "192.168.1.110", 4545 );
            // 繫結事件即可支援訂閱操作
            openProtocol.OnReceivedOpenMessage += ( object sender, OpenEventArgs e ) =>
            {
                string mid = e.Content.Substring( 4, 4 );
                if (mid == "0015")
                {
                    // 如果訂閱了 0014 的功能碼

                }
                else if (mid == "0035")
                {
                    // 如果訂閱了 Job Message的0034 功能碼

                }
                // 等等
            };

            // 連線
            OperateResult connect = openProtocol.ConnectServer( );
            if (connect.IsSuccess)
            {
                // connect success!
            }
            else
            {
                // connect failed 連線失敗,應該提醒或是返回
                Console.WriteLine( "connect failed: " + connect.Message );
                return;
            }

            // 訂閱 0014
            OperateResult sub = openProtocol.ParameterSetMessages.ParameterSetSelectedSubscribe( );
            if (sub.IsSuccess)
            {
                Console.WriteLine( "sub success" );
            }
            else
            {
                Console.WriteLine( "sub faield: " + sub.Message );
            }