当前位置: 欣欣网 > 码农

集成了主流工业通讯协议的开源库,数据采集用

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);






    近期热文: