news 2026/3/25 2:12:18

车间主任老张最近盯着监控屏直挠头,设备数据像脱缰野马抓不住。我递给他一杯枸杞茶:“要不试试用C#搞个数据抓取系统?“ 他眼镜片突然反光:“细说

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
车间主任老张最近盯着监控屏直挠头,设备数据像脱缰野马抓不住。我递给他一杯枸杞茶:“要不试试用C#搞个数据抓取系统?“ 他眼镜片突然反光:“细说

C#上位机与西门子PLC通讯,读取数据,存储数据库,形成报表可查询,报警历史查询,变量自定义配置。 每一步都有视频讲解(详细视频教程) 案例:涉及多线程,数据库存储,与PLC通讯等技术

通讯连接才是硬道理

Sharp7库的DLL扔进项目,连PLC跟找对象似的得先对上暗号:

var plc = new S7Client(); int result = plc.ConnectTo("192.168.0.1", 0, 1); //IP,机架,槽号 if (result == 0) { Console.WriteLine("握手成功!PLC型号:" + plc.GetCpuType()); }

遇到过最邪门的bug是网线水晶头氧化导致随机掉线,后来加了个心跳检测线程:

Task.Run(() => { while (true) { if (!plc.GetPlcStatus()) { _logger.Warning("PLC失联!尝试重连..."); plc.ForceReconnect(); } Thread.Sleep(3000); } });

数据入库要玩出花

用EF Core搞批量插入比单条写入快20倍不止:

var buffer = new ConcurrentQueue<PlcData>(); //多线程缓冲队列 using var context = new DataContext(); context.ChangeTracker.AutoDetectChangesEnabled = false; while (!token.IsCancellationRequested) { if (buffer.TryDequeue(out var data)) { context.Add(data); if (++count % 500 == 0) //每500条提交 { context.SaveChanges(); context.Dispose(); context = new DataContext(); } } }

注意这个坑:DbContext实例不是线程安全的,每个写入线程得单独实例化。

报警处理得像急诊室

C#上位机与西门子PLC通讯,读取数据,存储数据库,形成报表可查询,报警历史查询,变量自定义配置。 每一步都有视频讲解(详细视频教程) 案例:涉及多线程,数据库存储,与PLC通讯等技术

报警触发时除了写库,还得实时弹窗:

public class AlarmDispatcher { private readonly BlockingCollection<Alarm> _alarms = new(); public void RaiseAlarm(string msg) { _alarms.Add(new Alarm(msg)); PlaySound("alert.wav"); //蜂鸣器模拟 } void ProcessAlarms() { foreach (var alarm in _alarms.GetConsumingEnumerable()) { using var popup = new AlarmWindow(alarm); popup.ShowDialog(); } } }

用BlockingCollection实现生产者-消费者模型,比手动lock省心多了。

报表生成别当老实人

别傻乎乎自己写SQL统计,用LINQ分组查询真香:

var dailyReport = context.HistoricalData .Where(d => d.Time.Date == DateTime.Today) .GroupBy(d => d.TagName) .Select(g => new { Tag = g.Key, Avg = g.Average(d => d.Value), Max = g.Max(d => d.Value), Min = g.Min(d => d.Value) }).ToList();

搭配ClosedXML导出Excel,比Interop方式快还不依赖Office:

using var workbook = new XLWorkbook(); var ws = workbook.AddWorksheet("日报"); ws.Cell(1, 1).Value = "今日设备心跳全记录"; ws.Range("A1:D1").Merge().Style.Font.Bold = true;

变量配置得会七十二变

用JSON动态配置点位表才是王道:

{ "DataPoints": [ { "Name": "烘箱温度", "DB": 10, "Offset": 12, "DataType": "Real" }, { "Name": "传送带速度", "DB": 12, "Offset": 8, "DataType": "Int" } ] }

解析时上反射大法:

var config = JsonConvert.DeserializeObject<PlcConfig>(File.ReadAllText("points.json")); foreach (var point in config.DataPoints) { var reader = typeof(S7Client).GetMethod($"Read{point.DataType}"); object value = reader.Invoke(plc, new object[] { point.DB, point.Offset }); }

这套系统上线三个月后,老张的枸杞茶终于凉透了——他现在有更多时间盯着大盘指数而不是设备屏了。想看PLC通讯时如何处理字节序问题?数据库连接池怎么优化?点我主页找完整视频教程,连异常处理时的祖传代码都给你瞅瞅。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/3/21 17:36:40

基于STM32的频率计设计

基于stm32的频率计设计本文深入剖析一款基于STM32F10x系列微控制器的数字频率计系统。该系统旨在对外部输入信号进行高精度、实时的频率测量&#xff0c;并通过仿真环境验证其功能。整个设计充分利用了STM32丰富的片上外设资源&#xff0c;构建了一个结构清晰、性能可靠的嵌入式…

作者头像 李华
网站建设 2026/3/24 8:01:36

健康科技的新突破点:提示工程的重要贡献方向

健康科技的AI拐点&#xff1a;提示工程如何重构医疗数据的“对话”能力&#xff1f; 引言&#xff1a;健康科技的“数据哑巴”困境&#xff0c;该用提示工程破局了&#xff01; 你有没有见过这样的场景&#xff1f; 医院的电子病历系统里堆着几十万份非结构化文本&#xff1a;医…

作者头像 李华
网站建设 2026/3/15 16:19:51

SSM毕设项目推荐-基于高校毕业生求职与企业招聘信息管理基于ssm的就业招聘查询系统【附源码+文档,调试定制服务】

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

作者头像 李华
网站建设 2026/3/24 23:06:38

计算机SSM毕设实战-基于SSM的英语四六级在线考试系统基于ssm的英语四六级学习系统【完整源码+LW+部署说明+演示视频,全bao一条龙等】

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

作者头像 李华
网站建设 2026/3/15 14:08:51

上下文工程的六大核心组件(可视化解析)

大家好&#xff0c;我是玄姐。以下是决定 AI 应用输出质量的大致占比&#xff1a;模型选择&#xff1a;15%提示词设计&#xff1a;10%其他所有因素&#xff08;检索、记忆、工具、查询处理&#xff09;&#xff1a;75%很多团队都在纠结那无关紧要的 25%&#xff0c;却忽视了真正…

作者头像 李华
网站建设 2026/3/24 19:13:55

Si83402BAA-IF,具有低导通电阻的2通道隔离智能开关

型号介绍今天我要向大家介绍的是 skyworks 的智能隔离开关——Si83402BAA-IF。该器件具有低导通电阻 (RON)&#xff0c;能够在提供高连续电流的同时&#xff0c;对感性负载进行无限量的消磁。采用紧凑的 DFN 封装&#xff0c;并集成了安全等级的隔离功能。其逻辑接口为两个低功…

作者头像 李华