news 2026/3/9 19:23:37

开源C# Winform CAN上位机源码分享

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
开源C# Winform CAN上位机源码分享

C#Winform开源一个can上位机源码,工控试验源码,通讯源码。 can接口用的周立功的dll文件。 绘图用的zedgrah。 上位机功能是读取历史转速数据,作为控制的目标转速,通过can卡,发送给风扇控制器,复现风扇转速变化趋势。 或者自定义目标转速波形,进行相关可靠性试验。 代码实现了can通讯,excel文件读取,参数标定,曲线实时绘制等功能。 部分代码借鉴了有关大神

最近开源了一个超有意思的C# Winform CAN上位机源码,里面包含了工控试验源码和通讯源码,感觉可以给工控领域的小伙伴们带来不少便利,所以来和大家分享一下😃。

CAN接口与周立功的dll文件

这个项目里CAN接口用的是周立功的dll文件。咱在代码里引用这个dll文件后,就能轻松和CAN设备进行交互啦。就像下面这段代码:

// 假设这里是初始化CAN设备,具体的初始化函数可能会根据周立功dll的接口有所不同 using (CanDevice canDevice = new CanDevice()) { canDevice.Init(); // 后续就可以进行各种CAN通讯操作啦,比如发送和接收数据 canDevice.SendData(data); CanData receivedData = canDevice.ReceiveData(); }

分析:这里创建了一个CanDevice对象,通过调用Init方法初始化CAN设备。初始化完成后,就可以使用SendData方法发送数据,用ReceiveData方法接收数据。这样我们就能和连接到CAN总线上的设备顺畅地交流啦😎。

绘图与ZedGraph

绘图部分用的是ZedGraph,这玩意儿可好用了。它能帮我们轻松绘制各种图表,在这个项目里主要是用来展示转速变化趋势。看看下面这段简单的绘制曲线的代码:

// 创建一个ZedGraphControl对象 ZedGraphControl zgc = new ZedGraphControl(); // 添加一个曲线 GraphPane myPane = zgc.GraphPane; LineItem myCurve = myPane.AddCurve("转速曲线", xList, yList, Color.Red); // 更新图表 zgc.AxisChange(); zgc.Invalidate();

分析:首先创建了一个ZedGraphControl对象,然后获取它的GraphPane。接着在GraphPane里添加了一条曲线,设置了曲线的名称、X轴和Y轴的数据列表以及颜色。最后通过AxisChange方法更新坐标轴,用Invalidate方法刷新图表,这样就能实时看到绘制的曲线啦🧐。

上位机功能实现

上位机主要有两个很实用的功能。

读取历史转速数据作为目标转速

可以读取历史转速数据,把它作为控制的目标转速,然后通过CAN卡发送给风扇控制器,从而复现风扇转速变化趋势。实现这个功能的代码大概是这样的:

// 读取Excel文件中的历史转速数据 DataTable dataTable = ReadExcelData("历史转速数据.xlsx"); foreach (DataRow row in dataTable.Rows) { double targetSpeed = Convert.ToDouble(row["转速"]); // 通过CAN卡发送目标转速给风扇控制器 SendTargetSpeedToFanController(targetSpeed); }

分析:这里先调用ReadExcelData方法读取Excel文件里的历史转速数据,存放在DataTable中。然后遍历DataTable的每一行,获取转速数据并转换为双精度浮点数,再调用SendTargetSpeedToFanController方法把目标转速发送给风扇控制器,这样就能一步步复现风扇转速变化趋势啦😏。

自定义目标转速波形进行可靠性试验

还能自定义目标转速波形,进行相关可靠性试验。这就需要一些算法来生成自定义波形的数据,然后再发送出去。比如下面这个简单的生成正弦波形数据的示例:

List<double> xValues = new List<double>(); List<double> yValues = new List<double>(); for (double i = 0; i < 100; i += 0.1) { double x = i; double y = Math.Sin(x); xValues.Add(x); yValues.Add(y); // 发送自定义波形数据作为目标转速 SendTargetSpeedToFanController(y); }

分析:通过一个循环生成了正弦波形的X轴和Y轴数据,这里的Y轴数据就作为自定义的目标转速。然后把这些数据发送出去,就能进行可靠性试验啦。可以根据实际需求修改算法,生成各种不同的目标转速波形,来满足不同的试验要求🤓。

代码借鉴

部分代码借鉴了有关大神的,真的很感谢这些大神们的无私分享🙏。站在巨人的肩膀上才能让我们的项目进展得更快更好呀。

这个开源项目包含了CAN通讯、Excel文件读取、参数标定、曲线实时绘制等功能,对于工控领域需要进行CAN相关试验和开发的小伙伴来说,应该会有很大的帮助。希望大家能喜欢这个开源项目,也欢迎一起交流和改进😜。

C#Winform开源一个can上位机源码,工控试验源码,通讯源码。 can接口用的周立功的dll文件。 绘图用的zedgrah。 上位机功能是读取历史转速数据,作为控制的目标转速,通过can卡,发送给风扇控制器,复现风扇转速变化趋势。 或者自定义目标转速波形,进行相关可靠性试验。 代码实现了can通讯,excel文件读取,参数标定,曲线实时绘制等功能。 部分代码借鉴了有关大神

以上就是这次分享的全部内容啦,有兴趣的小伙伴可以去我的开源仓库看看具体代码哦😎。

[这里可以放上开源仓库的链接]

#CAN上位机 #工控试验 #C#代码 #开源项目

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

社会网络仿真软件:Gephi_(10).图形美化与可视化技巧

图形美化与可视化技巧 在社会网络仿真软件中&#xff0c;图形的美观性和可视化效果对于理解和分析网络结构至关重要。Gephi 提供了多种工具和方法来优化和美化网络图&#xff0c;使用户能够更直观地展示网络数据。本节将详细介绍如何使用 Gephi 进行图形美化和可视化技巧&…

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

采购背锅指南:如何用数据证明“你真的为公司省了钱”?

在企业内部&#xff0c;采购人员常常会陷入“有功的时候得不到彰显、有过失的时候却必定会被追究”的困境&#xff1a;成本降下来了&#xff0c;会被认为是理所当然的事情&#xff1b;一旦供应商出现交期延误、产品品质出问题等情况&#xff0c;采购人员却会首当其冲地被问责&a…

作者头像 李华
网站建设 2026/3/8 2:04:42

华为OD机考双机位C卷 - 字符串化繁为简(Java Python JS C/C++ GO )

最新华为OD机试 真题目录:点击查看目录 华为OD面试真题精选:点击立即查看 华为OD机考双机位C卷 - 字符串化繁为简(Java & Python& JS & C/C++ & GO ) 题目描述 给定一个输入字符串,字符串只可能由英文字母( ‘a’ ~ ‘z’、‘A’ ~ ‘Z’ )和左右小…

作者头像 李华
网站建设 2026/3/8 2:03:14

华为OD机考双机位C卷- 不含101的数(Java Python JS C/C++ GO )

最新华为上机考试 真题目录:点击查看目录 华为OD面试真题精选:点击立即查看 华为OD机考双机位C卷- 不含101的数 题目描述 小明在学习二进制时,发现了一类不含 101的数,也就是: 将数字用二进制表示,不能出现 101 。 现在给定一个整数区间 [l,r] ,请问这个区间包含了…

作者头像 李华
网站建设 2026/3/8 2:14:07

什么是MFA令牌?其工作原理是什么?

每年&#xff0c;攻击者的登录技巧都在不断升级&#xff0c;能够更隐蔽地绕过本应阻止他们的防护环境。无论是窃取密码、重放令牌、劫持会话&#xff0c;还是OAuth授权诈骗&#xff0c;他们的攻击手段持续迭代&#xff0c;足以突破曾经被认为安全的身份验证方式。这正是MFA令牌…

作者头像 李华