當前位置: 妍妍網 > 碼農

整合了主流工業通訊協定的開源庫,數據采集用

2024-03-03碼農

IoTClient 是一個物聯網裝置通訊協定實作客戶端,整合了主流工業通訊協定,包括主流PLC通訊讀取、ModBus協定、Bacnet協定等。該元件基於.NET Standard 2.0,適用於.NET的跨平台開發,可在Windows、Linux等系統上執行,甚至支持在樹莓派等裝置上使用。

案例展示

功能特點

1. ModBus 協定支持:

  • ModBusTcp讀寫操作

  • ModBusRtu讀寫操作

  • ModBusAscii讀寫操作

  • ModbusRtuOverTcp讀寫

  • 2. 特定廠家協定支持:

  • SiemensClient (西門子) 讀寫操作

  • MitsubishiClient (三菱) 讀寫操作

  • OmronFinsClient (歐姆龍) 讀寫操作

  • AllenBradleyClient (羅克韋爾) 讀寫操作

  • 工業視覺化計畫中使用步驟

    案例演示

    在工業視覺化計畫中,可以使用 IoTClient 軟體進行快速整合不同物聯網裝置的通訊協定,以實作數據的采集和監控。以下是使用 IoTClient 的簡單流程:

  • 1. 安裝並引入 IoTClient:

  • Install-Package IoTClient 

  • 2. 初始化和配置連線:

  • 使用 IoTClient 提供的類別庫初始化要連線的裝置,設定通訊協定和連線參數。

  • 3. 讀取/寫入數據:

  • 利用 IoTClient 提供的範例程式碼,透過相應的讀寫操作獲取裝置數據或向裝置發送指令。

  • 4. 數據處理與顯示:

  • 將獲取的數據進一步處理並在工業視覺化界面上顯示,以便使用者監控和分析裝置狀態。

  • 5. 實作即時監測和控制:

  • 透過 IoTClient 實作對裝置數據的即時監測和控制,提高工業生產效率和監控能力。

  • 透過上述步驟,可以輕松地將 IoTClient 整合到工業視覺化計畫中,實作與不同物聯網裝置的快速通訊和數據互動,為工業自動化系統的開發和最佳化提供了更廣闊的可能性。

    範例程式碼

    //1、例項化客戶端 - 輸入正確的IP和埠
    ModBusTcpClient client = new ModBusTcpClient("127.0.0.1", 502);
    //2、寫操作 - 參數依次是:地址 、值 、站號 、功能碼
    client.Write("4", (short)33, 2, 16);
    //2.1、【註意】寫入數據的時候需要明確數據型別
    client.Write("0", (short)33, 2, 16); //寫入short型別數值
    client.Write("4", (ushort)33, 2, 16); //寫入ushort型別數值
    client.Write("8", (int)33, 2, 16); //寫入int型別數值
    client.Write("12", (uint)33, 2, 16); //寫入uint型別數值
    client.Write("16", (long)33, 2, 16); //寫入long型別數值
    client.Write("20", (ulong)33, 2, 16); //寫入ulong型別數值
    client.Write("24", (float)33, 2, 16); //寫入float型別數值
    client.Write("28", (double)33, 2, 16); //寫入double型別數值
    client.Write("32"true, 2, 5); //寫入線圈型別值
    client.Write("100""orderCode", stationNumber); //寫入字串
    //3、讀操作 - 參數依次是:地址 、站號 、功能碼
    var value = client.ReadInt16("4", 2, 3).Value;
    //3.1、其他型別數據讀取
    client.ReadInt16("0", stationNumber, 3); //short型別數據讀取
    client.ReadUInt16("4", stationNumber, 3); //ushort型別數據讀取
    client.ReadInt32("8", stationNumber, 3); //int型別數據讀取
    client.ReadUInt32("12", stationNumber, 3); //uint型別數據讀取
    client.ReadInt64("16", stationNumber, 3); //long型別數據讀取
    client.ReadUInt64("20", stationNumber, 3); //ulong型別數據讀取
    client.ReadFloat("24", stationNumber, 3); //float型別數據讀取
    client.ReadDouble("28", stationNumber, 3); //double型別數據讀取
    client.ReadCoil("32", stationNumber, 1); //線圈型別數據讀取
    client.ReadDiscrete("32", stationNumber, 2);//離散型別數據讀取
    client.ReadString("100", stationNumber,10); //讀取字串
    //4、如果沒有主動Open,則會每次讀寫操作的時候自動開啟自動和關閉連線,這樣會使讀寫效率大大減低。所以建議手動Open和Close。
    client.Open();
    //5、讀寫操作都會返回操作結果物件Result
    var result = client.ReadInt16("4", 2, 3);
    //5.1 讀取是否成功(truefalse
    var isSucceed = result.IsSucceed;
    //5.2 讀取失敗的異常資訊
    var errMsg = result.Err;
    //5.3 讀取操作實際發送的請求報文
    var requst = result.Requst;
    //5.4 讀取操作伺服端響應的報文
    var response = result.Response;
    //5.5 讀取到的值
    var value3 = result.Value;
    //6、批次讀取
    var list = new List<ModBusInput>();
    list.Add(new ModBusInput()
    {
    Address = "2",
    DataType = DataTypeEnum.Int16,
    FunctionCode = 3,
    StationNumber = 1
    });
    list.Add(new ModBusInput()
    {
    Address = "2",
    DataType = DataTypeEnum.Int16,
    FunctionCode = 4,
    StationNumber = 1
    });
    list.Add(new ModBusInput()
    {
    Address = "199",
    DataType = DataTypeEnum.Int16,
    FunctionCode = 3,
    StationNumber = 1
    });
    var result = client.BatchRead(list);
    //7、建構函式其他參數
    //IP、埠、超時時間、大小端設定
    ModBusTcpClient client = new ModBusTcpClient("127.0.0.1", 502, 1500, EndianFormat.ABCD);






    近期熱文: