编辑
2025-09-28
C#
00

目录

安装IoTClient
创建OmronFinsClient实例
连接到PLC
读取PLC数据
读取布尔值
读取短整型
读取整型
写入PLC数据
写入布尔值
写入短整型
写入整型
批量读取
批量写入
错误处理
关闭连接
结论

IoTClient是一个功能强大的物联网通信库,支持多种工业协议,包括欧姆龙PLC的Fins协议。本文将详细介绍如何使用IoTClient与欧姆龙PLC进行通信,实现数据读写操作。

安装IoTClient

首先,我们需要在项目中安装IoTClient库。可以通过NuGet包管理器安装:

C#
Install-Package IoTClient

或者在Visual Studio的NuGet包管理器中搜索"IoTClient"并安装。

以下例子中,为直接下载IotClient源代码项目引用,方向代码测试。

创建OmronFinsClient实例

要与欧姆龙PLC通信,我们需要创建一个OmronFinsClient实例:

C#
using IoTClient.Clients.PLC; // 创建OmronFinsClient实例,参数为PLC的IP地址和端口号 OmronFinsClient client = new OmronFinsClient("127.0.0.1", 9600);

连接到PLC

虽然OmronFinsClient会在每次读写操作时自动连接和断开,但为了提高效率,建议手动打开连接:

C#
// 创建OmronFinsClient实例,参数为PLC的IP地址和端口号 OmronFinsClient client = new OmronFinsClient("127.0.0.1", 9600); client.Open(); if (client.Connected) { Console.WriteLine("连接成功!"); } else { Console.WriteLine("连接失败!"); }

读取PLC数据

读取布尔值

C#
var result = client.ReadBoolean("D100"); if (result.IsSucceed) { bool value = result.Value; Console.WriteLine($"D100的值为: {value}"); } else { Console.WriteLine($"读取失败: {result.Err}"); }

image.png

读取短整型

C#
var result = client.ReadInt16("D200"); if (result.IsSucceed) { short value = result.Value; Console.WriteLine($"D200的值为: {value}"); } else { Console.WriteLine($"读取失败: {result.Err}"); }

读取整型

C#
var result = client.ReadInt32("D210"); if (result.IsSucceed) { int value = result.Value; Console.WriteLine($"D210的值为: {value}"); } else { Console.WriteLine($"读取失败: {result.Err}"); }

image.png

写入PLC数据

写入布尔值

C#
var result = client.Write("D100", true); if (result.IsSucceed) { Console.WriteLine("成功写入D100"); } else { Console.WriteLine($"写入失败: {result.Err}"); }

写入短整型

C#
var result = client.Write("D200", (short)123); if (result.IsSucceed) { Console.WriteLine("成功写入D200"); } else { Console.WriteLine($"写入失败: {result.Err}"); }

image.png

写入整型

C#
var result = client.Write("D210", 12345); if (result.IsSucceed) { Console.WriteLine("成功写入D210-D211"); } else { Console.WriteLine($"写入失败: {result.Err}"); }

批量读取

IoTClient支持批量读取多个地址的数据,这可以显著提高效率:

C#
Dictionary<string, DataTypeEnum> addresses = new Dictionary<string, DataTypeEnum> { { "D100", DataTypeEnum.Bool }, { "D200", DataTypeEnum.Int16 }, { "D210", DataTypeEnum.Int32 } }; var result = client.BatchRead(addresses); if (result.IsSucceed) { foreach (var item in result.Value) { Console.WriteLine($"地址: {item.Key}, 值: {item.Value}"); } } else { Console.WriteLine($"批量读取失败: {result.Err}"); }

image.png

批量写入

同样,IoTClient也支持批量写入操作:

这个BatchWrite在开源代码中同样没有实现,需要自己修改一下,按我写三菱的方式改一下也就可以用了。

C#
Dictionary<string, object> writeValues = new Dictionary<string, object> { { "D100", (true,DataTypeEnum.Bool) }, { "D200", (12345,DataTypeEnum.Int16) }, { "D210", (98.34,DataTypeEnum.Float) } }; var batchWriteResult = client.BatchWrite(writeValues, 10); if (batchWriteResult.IsSucceed) { Console.WriteLine("批量写入成功"); } else { Console.WriteLine($"批量写入失败:{batchWriteResult.Err}"); }

image.png

错误处理

在进行读写操作时,我们应该始终检查操作是否成功,并适当处理错误:

C#
var result = client.ReadInt16("D200"); if (result.IsSucceed) { short value = result.Value; Console.WriteLine($"D200的值为: {value}"); } else { Console.WriteLine($"读取失败: {result.Err}");//Requst,Response // 这里可以添加更多的错误处理逻辑 }

关闭连接

当不再需要与PLC通信时,应该关闭连接:

C#
client.Close();

结论

通过IoTClient库,我们可以轻松地与欧姆龙PLC进行通信,实现数据的读写操作。该库提供了简单易用的API,支持单个和批量的读写操作,并具有良好的错误处理机制。在实际应用中,我们应该注意正确处理连接和错误,以确保程序的稳定性和可靠性。

本文作者:技术老小子

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!