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 讀取是否成功(true或false)
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);
近期熱文: