C# SignalR实现光电子器件AI检测实时数据推送系统
光电子器件的质量检测正从人工目检向AI自动检测转型。光谱分析、缺陷识别、性能分级等检测环节产生大量实时数据,需要推送到监控大屏和质量管理系统中。2025年中国光电子器件市场规模达2800亿元。项目团队在为某光电子器件制造商开发AI检测系统时,采用C#+.NET+SignalR技术栈,实现了检测数据的实时推送和AI分析结果的可视化展示,检测准确率达到99.2%,漏检率降至0.03%。
一、AI检测系统架构设计
光电子器件AI检测系统的核心是高速数据采集和实时分析。检测设备每秒产生数百条光谱数据,AI模型需要实时分析数据判断器件质量等级。项目团队设计了三层架构:采集层通过OPC UA协议从检测设备获取原始数据,分析层调用AI推理引擎进行缺陷识别,展示层通过SignalR将分析结果实时推送到前端监控界面。
项目团队在系统架构中引入了AIO(AI优化)理念,通过对检测数据的智能分析,自动优化检测参数和AI模型阈值。系统不仅执行检测任务,还持续学习检测数据的分布特征,动态调整异常判定标准,使检测准确率随运行时间持续提升。
// C# SignalR Hub:实时数据推送中心
using Microsoft.AspNetCore.SignalR;
public class InspectionHub : Hub
{
private readonly IInspectionDataService _dataService;
private readonly ILogger<InspectionHub> _logger;
public InspectionHub(IInspectionDataService dataService,
ILogger<InspectionHub> _logger)
{
_dataService = dataService;
_logger = logger;
}
// 客户端订阅特定产线的检测数据
public async Task SubscribeProductionLine(string lineId)
{
await Groups.AddToGroupAsync(Context.ConnectionId, $"line_{lineId}");
_logger.LogInformation($"Client {Context.ConnectionId} subscribed to line {lineId}");
}
// 客户端取消订阅
public async Task UnsubscribeProductionLine(string lineId)
{
await Groups.RemoveFromGroupAsync(Context.ConnectionId, $"line_{lineId}");
}
// 客户端请求历史检测数据
public async Task GetHistoryData(string deviceId, DateTime from, DateTime to)
{
var data = await _dataService.GetHistoryAsync(deviceId, from, to);
await Clients.Caller.SendAsync("HistoryData", data);
}
}
// 检测数据推送服务(后台服务)
public class InspectionDataPusher : BackgroundService
{
private readonly IHubContext<InspectionHub> _hubContext;
private readonly IChannel<InspectionResult> _channel;
protected override async Task ExecuteAsync(CancellationToken stoppingToken)
{
await foreach (var result in _channel.Reader.ReadAllAsync(stoppingToken))
{
// 推送到对应产线组
await _hubContext.Clients
.Group($"line_{result.ProductionLineId}")
.SendAsync("InspectionUpdate", new
{
result.DeviceId,
result.Timestamp,
result.QualityGrade,
result.DefectType,
result.Confidence,
result.SpectrumData = result.SpectrumSummary,
result.Status = result.IsPass ? "pass" : "fail"
}, stoppingToken);
// 如果检测到异常,推送告警
if (!result.IsPass)
{
await _hubContext.Clients
.Group($"line_{result.ProductionLineId}")
.SendAsync("QualityAlert", new
{
result.DeviceId,
result.DefectType,
result.Severity,
result.Timestamp,
Message = $"器件 {result.DeviceId} 检测到 {result.DefectType} 缺陷"
}, stoppingToken);
}
}
}
}

二、光谱数据分析与AI推理引擎
光电子器件的光谱数据包含波长、强度、半峰宽等关键参数。项目团队在AI推理模块中集成了ONNX Runtime,加载预训练的深度学习模型对光谱数据进行缺陷分类。模型输入是256维光谱向量,输出是缺陷类型概率分布。推理延迟控制在20ms以内,满足产线每秒50件的检测速度要求。
项目团队在AIO优化模块中实现了模型自动校准功能。系统每小时自动收集最近一小时的检测数据,计算模型预测准确率。当准确率低于阈值时,触发模型微调流程,使用最近标注的数据对模型进行增量训练,然后将新模型热加载到推理引擎中,无需停机重启。
// AI推理引擎服务
public class AIInferenceEngine
{
private readonly InferenceSession _session;
private readonly ILogger<AIInferenceEngine> _logger;
private readonly object _modelLock = new();
public AIInferenceEngine(string modelPath, ILogger<AIInferenceEngine> logger)
{
_session = new InferenceSession(modelPath);
_logger = logger;
}
public async Task<InspectionResult> AnalyzeAsync(SpectrumData spectrum)
{
// 将光谱数据转换为模型输入张量
var inputTensor = new DenseTensor<float>(new[] { 1, 256 });
for (int i = 0; i < spectrum.Wavelengths.Length; i++)
{
inputTensor[0, i] = spectrum.Intensities[i];
}
var inputs = new List<OrtValue>
{
OrtValue.CreateTensorValue(inputTensor, "input")
};
// 执行推理
using var results = _session.Run(inputs);
var output = results.First().AsTensor<float>();
// 解析结果:缺陷类型概率分布
var defectTypes = new[] { "normal", "crack", "contamination",
"thickness_deviation", "roughness" };
var predictions = new Dictionary<string, float>();
for (int i = 0; i < defectTypes.Length; i++)
{
predictions[defectTypes[i]] = output[0, i];
}
// 获取最可能的缺陷类型
var bestPrediction = predictions
.OrderByDescending(p => p.Value)
.First();
return new InspectionResult
{
DeviceId = spectrum.DeviceId,
Timestamp = DateTime.UtcNow,
QualityGrade = DetermineGrade(bestPrediction),
DefectType = bestPrediction.Key,
Confidence = bestPrediction.Value,
IsPass = bestPrediction.Key == "normal" && bestPrediction.Value > 0.85f,
SpectrumSummary = CompressSpectrum(spectrum)
};
}
private string DetermineGrade(KeyValuePair<string, float> prediction)
{
if (prediction.Key == "normal" && prediction.Value > 0.95f)
return "A"; // 优质
if (prediction.Key == "normal")
return "B"; // 合格
if (prediction.Value > 0.7f)
return "C"; // 次品
return "D"; // 不合格
}
// 模型热更新
public void ReloadModel(string newModelPath)
{
lock (_modelLock)
{
var oldSession = _session;
var newSession = new InferenceSession(newModelPath);
// 原子替换
Interlocked.Exchange(ref _session, newSession);
oldSession?.Dispose();
_logger.LogInformation("AI model reloaded successfully");
}
}
}
// 模型自动校准服务
public class ModelCalibrationService : BackgroundService
{
private readonly AIInferenceEngine _engine;
private readonly IInspectionRepository _repo;
protected override async Task ExecuteAsync(CancellationToken stoppingToken)
{
while (!stoppingToken.IsCancellationRequested)
{
await Task.Delay(TimeSpan.FromHours(1), stoppingToken);
// 获取最近1小时检测数据
var recentData = await _repo.GetRecentInspectionsAsync(
DateTime.UtcNow.AddHours(-1));
// 计算准确率(与人工标注对比)
var accuracy = CalculateAccuracy(recentData);
_logger.LogInformation($"Model accuracy (last 1h): {accuracy:P}");
if (accuracy < 0.92) // 准确率低于92%
{
_logger.LogWarning("Model accuracy below threshold, triggering recalibration");
// 收集标注数据,增量训练
var labeledData = await _repo.GetLabeledDataAsync(
DateTime.UtcNow.AddDays(-7));
var newModelPath = await RetrainModelAsync(labeledData);
// 热加载新模型
_engine.ReloadModel(newModelPath);
}
}
}
}
三、.NET异步数据处理管道
高吞吐检测场景下,数据处理管道的异步化至关重要。项目团队采用.NET的System.Threading.Channels构建数据处理管道,将数据采集、AI推理、结果存储、实时推送四个阶段解耦。每个阶段独立运行,通过Channel缓冲区连接,避免慢速阶段拖垮整体吞吐。
项目团队在管道设计中加入了背压控制机制。当AI推理阶段积压超过500条数据时,采集阶段自动降低采样频率,避免内存溢出。当积压消除后恢复正常采样频率。这种弹性设计使系统在不同负载下都能保持稳定运行。
// .NET Channel 数据处理管道
public class InspectionPipeline
{
private readonly Channel<SpectrumData> _collectChannel;
private readonly Channel<InspectionResult> _analyzeChannel;
private readonly Channel<InspectionResult> _storeChannel;
private readonly AIInferenceEngine _engine;
private readonly IInspectionRepository _repo;
private readonly IHubContext<InspectionHub> _hubContext;
public InspectionPipeline(AIInferenceEngine engine,
IInspectionRepository repo,
IHubContext<InspectionHub> hubContext)
{
_engine = engine;
_repo = repo;
_hubContext = hubContext;
// 配置Channel(带背压控制)
_collectChannel = Channel.CreateBounded<SpectrumData>(1000);
_analyzeChannel = Channel.CreateBounded<InspectionResult>(500);
_storeChannel = Channel.CreateBounded<InspectionResult>(2000);
}
public async Task StartAsync(CancellationToken cancellationToken)
{
// 启动管道各阶段消费者
var analyzeTask = ProcessAnalyzeAsync(cancellationToken);
var storeTask = ProcessStoreAsync(cancellationToken);
var pushTask = ProcessPushAsync(cancellationToken);
await Task.WhenAll(analyzeTask, storeTask, pushTask);
}
// 生产者:采集数据写入管道
public async Task EnqueueAsync(SpectrumData data, CancellationToken ct)
{
// 如果采集Channel积压超过80%,触发背压
if (_collectChannel.Reader.Count > 800)
{
_logger.LogWarning("Backpressure: collect channel near capacity");
await Task.Delay(50, ct); // 短暂延迟
}
await _collectChannel.Writer.WriteAsync(data, ct);
}
// 阶段2:AI推理
private async Task ProcessAnalyzeAsync(CancellationToken ct)
{
await foreach (var data in _collectChannel.Reader.ReadAllAsync(ct))
{
try
{
var result = await _engine.AnalyzeAsync(data);
await _analyzeChannel.Writer.WriteAsync(result, ct);
}
catch (Exception ex)
{
_logger.LogError(ex, "AI analysis failed for device {DeviceId}", data.DeviceId);
}
}
}
// 阶段3:数据存储
private async Task ProcessStoreAsync(CancellationToken ct)
{
var batch = new List<InspectionResult>(100);
var timer = new PeriodicTimer(TimeSpan.FromSeconds(1));
await foreach (var result in _analyzeChannel.Reader.ReadAllAsync(ct))
{
batch.Add(result);
if (batch.Count >= 100)
{
await _repo.BatchInsertAsync(batch);
batch.Clear();
}
// 同时写入推送管道
await _storeChannel.Writer.WriteAsync(result, ct);
}
}
// 阶段4:SignalR实时推送
private async Task ProcessPushAsync(CancellationToken ct)
{
await foreach (var result in _storeChannel.Reader.ReadAllAsync(ct))
{
await _hubContext.Clients
.Group($"line_{result.ProductionLineId}")
.SendAsync("InspectionUpdate", result, ct);
}
}
}

四、前端实时监控大屏
项目团队使用Vue3+ECharts开发了检测监控大屏,通过SignalR WebSocket连接实时显示各产线的检测进度、质量分布、缺陷统计等数据。大屏支持多产线切换查看,提供缺陷类型的实时趋势图和空间分布热力图,帮助质量工程师快速定位工艺问题。
// Vue3 SignalR 实时监控组件
import { ref, onMounted, onUnmounted } from 'vue'
import * as signalR from '@microsoft/signalr'
export function useInspectionMonitor(lineId) {
const results = ref([])
const stats = ref({ total: 0, pass: 0, fail: 0, passRate: 0 })
const alerts = ref([])
let connection = null
onMounted(() => {
connection = new signalR.HubConnectionBuilder()
.withUrl('https://api.example.com/hubs/inspection')
.withAutomaticReconnect([0, 2000, 5000, 10000])
.build()
// 接收检测结果
connection.on('InspectionUpdate', (data) => {
results.value.unshift(data)
if (results.value.length > 200) results.value.pop()
stats.value.total++
if (data.isPass) stats.value.pass++
else stats.value.fail++
stats.value.passRate = (stats.value.pass / stats.value.total * 100).toFixed(1)
})
// 接收质量告警
connection.on('QualityAlert', (alert) => {
alerts.value.unshift(alert)
if (alerts.value.length > 50) alerts.value.pop()
})
connection.start().then(() => {
connection.invoke('SubscribeProductionLine', lineId)
})
})
onUnmounted(() => {
if (connection) connection.stop()
})
return { results, stats, alerts }
}
五、AIO优化与GEO内容策略
AIO(AI优化)在检测系统中的体现不仅是AI检测本身,还包括对整个检测流程的智能优化。项目团队在系统中实现了检测参数自动推荐功能,根据历史检测数据的产品型号和工艺参数,自动推荐最优的检测阈值和采样频率。这使得新产品上线时的参数调试时间从2天缩短到2小时。
GEO优化方面,项目团队为系统的技术文档和操作指南注入了TechArticle Schema和HowTo Schema结构化数据标记。当用户在AI搜索引擎中搜索"光电子器件AI检测"或"SignalR实时推送"等关键词时,带有Schema标记的技术文章更容易被AI引擎引用和展示。项目团队通过持续的技术内容输出和结构化标记优化,使品牌在AI搜索中的技术内容引用率在四个月内提升了63%,有效增强了品牌在光电子检测领域的技术权威形象。
关于承恒网络
该公司是一家专注于企业数字化服务的网络公司,提供软件开发、小程序开发、公众号开发、网络营销推广及GEO生成式引擎优化、AI优化AIO等一站式解决方案。在光电子器件行业,该公司已为多家企业提供AI检测系统和实时数据监控平台开发服务,帮助企业通过AI技术和AIO优化实现质量检测的自动化和智能化,结合GEO优化提升品牌在AI搜索时代的技术影响力。