以下是C#采集设备数据的几种常见方式及实现方案,综合工业自动化领域的最佳实践:
一、串口通信采集(RS-232/RS-485)
using System.IO.Ports;
var port = new SerialPort("COM3", 9600, Parity.None, 8, StopBits.One);
port.DataReceived += (s, e) => {
string data = port.ReadExisting();
Console.WriteLine($"收到数据: {data}");
};
port.Open();
特点:适用于PLC、传感器等传统设备,需配置波特率/校验位等参数。
二、Modbus协议通信
TCP模式(工业以太网):
using Modbus.Device;
var master = ModbusIpMaster.CreateIp(new TcpClient("192.168.1.100", 502));
ushort[] registers = master.ReadHoldingRegisters(0, 10); // 读取10个寄存器
RTU模式(串口):
var master = ModbusSerialMaster.CreateRtu(serialPort);
bool[] coils = master.ReadCoils(1, 0, 5); // 从站地址1,读取5个线圈
优势:标准化协议,支持寄存器/线圈读写,NModbus4库提供完整实现。
三、OPC UA采集
using Opc.Ua.Client;
var endpoint = new EndpointDescription("opc.tcp://localhost:48010");
var session = Session.Create(config, endpoint).GetAwaiter().GetResult();
DataValue value = session.ReadValue("ns=2;s=Device1/Temperature");
适用场景:跨平台工业数据交换,支持复杂数据类型和安全认证。
四、TCP/IP原生套接字
using (var client = new TcpClient("10.0.0.5", 2000))
{
NetworkStream stream = client.GetStream();
byte[] buffer = new byte[1024];
int bytesRead = stream.Read(buffer, 0, buffer.Length);
}
用途:自定义协议设备通信,需处理字节级数据解析。
五、数据库中间件采集
// 从数据库读取设备缓存数据
using (var conn = new SqlConnection(connectionString))
{
var cmd = new SqlCommand("SELECT * FROM DeviceLog", conn);
SqlDataReader reader = cmd.ExecuteReader();
while (reader.Read()) {
// 处理数据
}
}
典型架构:设备→数据库→C#应用,适合已有数据中台场景。
六、WebAPI/物联网平台接入
using HttpClient client = new HttpClient();
string json = await client.GetStringAsync("http://iot-platform/api/v1/sensors");
var data = JsonSerializer.Deserialize<SensorData>(json);
现代方案:通过RESTful API对接云平台数据。
选型建议对比表
方式 延迟 适用设备 开发复杂度 典型库/协议
串口通信 低 PLC/传感器 ★★☆☆☆ SerialPort类
Modbus 中 工业控制器 ★★★☆☆ NModbus4
OPC UA 中高 智能工厂设备 ★★★★☆ OPCFoundation库
TCP套接字 极低 自定义协议设备 ★★★★☆ System.Net.Sockets
数据库中间件 高 已有数据系统 ★★☆☆☆ Entity Framework
C#采集设备数据的几种常见方式
最新推荐文章于 2025-10-07 06:41:04 发布

1655

被折叠的 条评论
为什么被折叠?



