最近有越来越多做电气的小伙伴开始学习C#来做上位机开发,很多人在学习一段时间后,都有这种感觉,似乎学到了很多知识,但是不知道怎么应用,因此我找了一个真实的上位机小项目,让大家来练练手。这篇文章主要对这个项目案例及开发过程做个整体介绍。

1. 项目案例介绍【新阁在线教育 服务号:thinger_as】

很多人对单片机有一种特殊的情怀,总是感觉单片机很神秘或很复杂。单片机简称MCU,即Micro Control Unit,是将CPU、存储器(RAM和ROM)、多种IO接口等集成在一块芯片上,形成一个芯片级计算机,可以这么说,在我们的生活和工作中,单片机无处不在。

单片机MCU的使用分为两种,一种是单片机开发,就是嵌入式开发,一般采用C语言编程,另一种是单片机应用,比如和单片机进行通信控制,而作为上位机开发人员,我们更多偏向于后者,上位机按照既定的协议对单片机实现控制。控制系统的使用者是操作人员,他们不可能去直接操作单片机,因此上位机的职责是将单片机和操作人员联系起来,通过UI界面给操作人员提供展示和控制,再将指令传递给单片机来执行动作,最终形成一套完整的控制系统。

本案例是一个基于单片机的串口通信案例,主要是通过上位机来实现对电机的速度控制,并显示电机实时速度。调速模式会有多种,包括电机正转、电机反转、电机正反转、双向混沌、单向混沌五种模式。

2. MCU协议分析

针对五种调速模式的描述如下所示:

从上面的描述,我们可以看出,调速的本质都是发送报文给单片机,不同的调速模式影响的是发送的数值和发送的频率,因此上位机和单片机之间必须要约定协议,协议如下所示:

协议规定:单片机与上位机之间的通信格式为:波特率9600,数据位8,停止位1,校验位无,设定速度范围为10-300rpm,反馈速度范围为0-1000rpm,换算时间范围为1-10秒,通信编码格式为ASCII。新阁在线教育 服务号:thinger_as】

上位机开发功能要求:

  • 与单片机之间的连接提示及断开提示
  • 可以自由选择通讯端口
  • 调试模式可以随时调整
  • 混沌模式随机数支持自动生成和人为输入/复制粘贴
  • 支持换速时间快速设置
  • 支持实时速度显示并可控
  • 支持实时数据写入并可控
  • 支持发送命令可存储、可追溯
  • 软件打开时保持上次关闭时的状态

3. 上位机界面设计

根据开发功能要求,整体设计界面如下图所示:

当选择双向混沌或者单向混沌时,会弹出混沌值设置界面,支持自动生成及手动输入,如下图所示:

4. 上位机功能实现

  • 首先创建一个Windows窗体应用项目,项目名称为thinger.com.MCUPro。
  • 将单片机的协议封装成一个类MCULib,便于后续直接调用,该类应该具备建立连接、断开连接、设定速度、接收速度的功能。
  • 日志显示功能:日志显示采用ListView进行显示,绑定一个ImageList用来区分信息、报警、错误,添加日志方法的参数包含日志等级及日志内容。
  • 建立连接和断开连接:这里通过单按钮实现建立连接和断开连接2个功能。
  • 设置目标转速:设置目标转速仅对电机正转、电机反转及电机正反转这三种模式有效。
  • 速度清零:速度清零时要判断当前模式是否处于混沌模式,如果处于混沌模式,要先将定时器停止,否则直接发送速度为0的命令就行了。
  • 混沌模式:当调速方式切换到混沌模式时,将启用一个定时器,该定时器周期与换速时间一致,定时向MCU中发送速度指令,速度值来源于一个集合,该集合将通过一个子窗体获取,因此单向混沌与双向混沌的区别在于集合的不同。
  • 混沌速度设置:混沌值设置在一个独立的窗体中实现,可以通过手动添加、随机添加或手动输入的方式,速度值之间通过空格分割,如果手动输入时,需要注意速度范围。
  • 混沌模式定时发送:混沌模式下如果定时器开启,将从集合中逐个取出数据发送到MCU中,取完之后停止定时器。
  • 数据接收处理:数据接收处理方法也是委托的原型方法,将读取的字节数组转换成字符串进行解析,解析获取到实际转速后,判断是否进行速度显示,如果需要进行速度显示,则将数据添加到Chart控件中,再判断是否需要写入文件,如果需要写入文件,将实时数据写入到CSV文件中。
  • 实时数据写入:本案例的实时数据存储采用CSV的方式,第一次写入时,会自动创建时间及标题栏,后面不断地追加数据。软件会在每次开启或者重启写入文件时,自动按照当前时间创建一个新的文件,因此需要编写一个写入CSV的通用方法。

新阁在线教育 服务号:thinger_as】

  • 软件打开时保持上次关闭时的状态:这个功能的实现的思路是通过配置文件来实现,在每次软件关闭时,将相关信息以配置文件的形式存储起来,当软件运行时,再次从配置文件中进行读取,由于参数较多,因此采用实体类的方式,也是便于后续扩展。

5. 写在最后

这个项目整体来说难度不是很大,但是很具有代表性,非常适合上位机初学者来练手。很多初学者学习最大的问题就是手头没有实际项目,大家可以把这个当做一个实际项目来练手。

c# 火狐浏览器怎么嵌入窗体中_「C#上位机必看」你们想要的练手项目来了相关推荐

  1. c# 火狐浏览器怎么嵌入窗体中_正在学c# winform,问各位前辈一下 能调用火狐或者其他的浏览器吗?...

    你的位置: 问答吧 -> .NET -> 问题详情 正在学c# winform,问各位前辈一下 能调用火狐或者其他的浏览器吗? 主要是用来做自动浏览刷新网页的, 有的网站只能用火狐打开 很 ...

  2. c# 火狐浏览器怎么嵌入窗体中_C#WinForm窗体内Panel容器中嵌入子窗体、程序主窗体设计例子...

    C#WinForm父级窗体内Panel容器中嵌入子窗体.程序主窗体设计例子 在项目开发中经常遇到父级窗体嵌入子窗体所以写了一个例子程序,顺便大概划分了下界面模块和配色,不足之处还望指点 主窗体窗体采用 ...

  3. C#工控上位机实例_「C#上位机」西门子1200PLC实用定位控制程序案例

    ​1. 引言 本文是一篇综合性非常强的文章,从PLC输入输出及步进电机接线开始,到PLC运动控制程序编写,再到后续的ModbusTCP通信协议及上位机编程实现最终控制,涉及知识面比较广,能够让我们很好 ...

  4. oppo手机工程模式清除数据需要密码_「MIUI玩机技巧27」如何快速查询和清除电池信息...

    作为安卓手机的用户,不知道你现在的手机的电量使用如何?是不是感觉到手机电量掉的很快?现在智能手机耗电量确实很大,在正常时间的情况下,好像都是不到一天就没电了?好一点的情况一天一充,我基本上都是一天充电 ...

  5. miui通知栏要点两下_「MIUI玩机技巧56」小米应用商店 新增 通知栏快捷入口

    在2019年底,小米应用商店伴随大家度过了新的一年,而在年末小米应用商店 新增了一项功能--"通知栏快捷入口".其实这个功能主要是方便用户更快查询新的App,以及捷触达" ...

  6. python快速编程入门课本中的名片管理器_python打造名片管理系统,小白入门最佳练手项目!...

    名片管理小系统 名片信息包含姓名.电话.QQ; 系统功能:增加用户信息.修改信息.删除信息.查询信息.退出系统.打印名片: 操作为:用户每次都可以进行选择,直到用户选择退出系统为止: 学习Python ...

  7. miui通知栏要点两下_「MIUI玩机技巧84」MIUI12状态栏如何切旧版控制中心

    大家好,我是Flashcer,MIUI玩机爱好者.萌新小米粉. 有人问我,MIUI 12内测版的状态栏如何切换到之前旧版的控制中心的样子? 毕竟在MIUI 12里面通知栏和控制中心是分开的,有些米粉用 ...

  8. 上位机多个下位机modbustcp通讯_【C#上位机】西门子1200PLC实用定位控制程序案例...

    1. 引言 新阁教育这篇文章是一篇综合性非常强的文章,从PLC输入输出及步进电机接线开始,到PLC运动控制程序编写,再到后续的ModbusTCP通信协议及上位机编程实现最终控制,涉及知识面比较广,能够 ...

  9. python新手程序_推荐:一个适合于Python新手的入门练手项目

    随着人工智能的兴起,国内掀起了一股Python学习热潮,入门级编程语言,大多选择Python,有经验的程序员,也开始学习Python,正所谓是人生苦短,我用Python 有个Python入门练手项目, ...

最新文章

  1. 路过的朋友们,最后一天投票,感谢
  2. Java新手问题 02 面向对象基本功
  3. C++ open 打开文件(含打开模式一览表)
  4. 【排序算法】——图解双轴快排(建议收藏)
  5. 用计算机写作文的好处,《用计算机写作文》教案
  6. 安卓机更新系统会卡吗_安卓机可以用AirPods Pro吗?告诉你真实体验
  7. java多线程的安全_java-多线程的安全问题
  8. 用FadingActionBar实现有头图的ActionBar
  9. 具体数学第二版第四章习题(4)
  10. 常用的C#方法【Format.CS】
  11. SD-WAN平台ActiveCore推出,领域新亮点精彩丰呈
  12. vue-cli 打包出来的文件缺少_Vue cli构建 及 项目打包以及出现的问题 (update 2020-05)...
  13. 收尾过程组-项目管理
  14. 查找主机信息的两个协议:DHCP协议+NBNS协议
  15. 无人机拉力测试台研制测试过程中的9个关键技术点
  16. Hibernate Serach 5.9全文检索快速入门
  17. CodeForces 592B
  18. 我们为什么要进行时间管理?
  19. IT 生涯初探与工作经验分享【计算机、软件工程相关专业毕业生应该知道的事】---- 来自2008级学长的掏心窝分享
  20. 紫川猜想--第二十二卷第六章

热门文章

  1. ICPC程序设计题解书籍系列之九:罗勇军《算法竞赛入门到进阶》
  2. UVA11233 POJ3366 HDU1804 Deli Deli【水题】
  3. 强悍的命令 —— 命令参数的理解
  4. 面向对象——意图与逻辑(五)
  5. C/C++基础——inline 与 宏
  6. C 语言基础——程序运行时间的计算
  7. mysql my.ini设置root密码_mysql 5.7设置root密码 windows
  8. rocketmq 消息指定_rocketmq-常见问题总结(消息的顺序、重复、消费模式)
  9. 开课吧python小课学了有用吗-Python学得好,升职加薪下班早
  10. python使用-Python的使用方法