【C#上位机必看】你们想要的练手项目来了

摘要:
最近,越来越多的电气合作伙伴开始学习C#来进行主机开发。很多人在学习一段时间后都有这种感觉。他们似乎学到了很多知识,但不知道如何应用。因此,我找到了一个真正的主机项目,让大家庭练习。本文主要介绍了项目案例和整个开发过程。1.项目案例介绍很多人对SCM有一种特殊的感觉,总是觉得SCM很神秘或复杂。单片机简称MCU,

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

1. 项目案例介绍

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

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

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

2. MCU协议分析

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

【新阁在线教育 服务号:thinger_as】
调速模式调速说明
电机正转发送一个大于0的速度给单片机
电机反转发送一个小于0的速度给单片机
电机正反转发送一个速度正负值及换速时间给单片机
单向混沌随机或手动生成N个的随机正数,定时发送给单片机
双向混沌随机或手动生成N个随机自然数,定时发送给单片机

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

功能命令协议格式备注
电机正转S+速度值+;速度值必须为正数,如S+40;
电机正转S+速度值+;速度值必须为负数,如S-40;
电机正反转T+时间+S+速度值+;时间为换速时间,如T5+-40;
单向混沌S+速度值+;速度值为正数,生成随机数,定时发送
双向混沌S+速度值+;速度值为自然数,生成随机数,定时发送
速度反馈V+速度值+;返回的速度值,如V+40;
速度清零S+速度值+;速度值设为0,即S+0;或者S-0;

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

上位机开发功能要求:

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

3. 上位机界面设计

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

【C#上位机必看】你们想要的练手项目来了第1张

 

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

【C#上位机必看】你们想要的练手项目来了第2张

 

 

 

 

 

 

 

 

 

 

 

 

4. 上位机功能实现

  • 首先创建一个Windows窗体应用项目,项目名称为thinger.com.MCUPro。

  • 将单片机的协议封装成一个类MCULib,便于后续直接调用,该类应该具备建立连接、断开连接、设定速度、接收速度的功能。

  • 日志显示功能:日志显示采用ListView进行显示,绑定一个ImageList用来区分信息、报警、错误,添加日志方法的参数包含日志等级及日志内容。

  • 建立连接和断开连接:这里通过单按钮实现建立连接和断开连接2个功能。

  • 设置目标转速:设置目标转速仅对电机正转、电机反转及电机正反转这三种模式有效。

  • 速度清零:速度清零时要判断当前模式是否处于混沌模式,如果处于混沌模式,要先将定时器停止,否则直接发送速度为0的命令就行了。

  • 混沌模式:当调速方式切换到混沌模式时,将启用一个定时器,该定时器周期与换速时间一致,定时向MCU中发送速度指令,速度值来源于一个集合,该集合将通过一个子窗体获取,因此单向混沌与双向混沌的区别在于集合的不同。

  • 混沌速度设置:混沌值设置在一个独立的窗体中实现,可以通过手动添加、随机添加或手动输入的方式,速度值之间通过空格分割,如果手动输入时,需要注意速度范围。

  • 混沌模式定时发送:混沌模式下如果定时器开启,将从集合中逐个取出数据发送到MCU中,取完之后停止定时器。

  • 数据接收处理:数据接收处理方法也是委托的原型方法,将读取的字节数组转换成字符串进行解析,解析获取到实际转速后,判断是否进行速度显示,如果需要进行速度显示,则将数据添加到Chart控件中,再判断是否需要写入文件,如果需要写入文件,将实时数据写入到CSV文件中。

  • 实时数据写入:本案例的实时数据存储采用CSV的方式,第一次写入时,会自动创建时间及标题栏,后面不断地追加数据。软件会在每次开启或者重启写入文件时,自动按照当前时间创建一个新的文件,因此需要编写一个写入CSV的通用方法。

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

5. 写在最后

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

【新阁在线教育 服务号:thinger_as,回复 抽奖,获取精美】

【C#上位机必看】你们想要的练手项目来了第3张

 

免责声明:文章转载自《【C#上位机必看】你们想要的练手项目来了》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Echarts学习之路3(在react中使用)windows下的shellcode剖析浅谈[转自看雪]下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

FM收音机模块单片机实现

FM收音机模块例程说明 设计思路和方法: TEA5767集成电路芯片是Philips公司推出的针对低电压应用的数字调谐FM立体声收音机芯片。它采用创新的收音机架构和小尺寸封装,外围电路简单,功能强大,可用单片机通过I2C总线或3-Wire总线对芯片内部寄存器进行控制。 本实验采用I2C总线对芯片内部寄存器进行控制,结合功能键、数码管、按键1、按键2等模块,...

【STM32】MDK中寄存器地址名称映射分析

对于MCU,一切底层配置,最终都是在配置寄存器 51单片机访问地址 51单片机经常会引用一个reg51.h的头文件。下面看看它是怎么把名字和寄存器联系在一起的: 1 sfr p0=0x80; 2 p0=0x00; sfr是一种扩充数据类型,使用一个内存单位,值域为0-255.利用它可以访问51单片机内部所有的特殊功能寄存器。前一句“sfr p0=0x80”...

AVR单片机教程——UART进阶

本文隶属于AVR单片机教程系列。   在第一期中,我们已经开始使用UART来实现单片机开发板与计算机之间的通信,但只是简单地讲了讲一些概念和库函数的使用。在这一篇教程中,我们将从硬件与软件等各方面更深入地了解UART。 USART组件 一直在讲的UART其实是USART组件的一部分,USART比UART多了同步的一部分,但这一部分用得太少(我从来没用过),而...

锂电池充电电路、锂电池充电保护电路

        通过锂电池向电路系统提供3.3V电压,并具备USB充电功能及过充保护功能.         USB充电采用TP4056芯片电路实现.TP4056为单节锂离子电池恒定电流/恒定电压线性充电器,内部采用PMOSFET架构并结合防倒充电路,因此不需要外部隔离二极管.热反馈可对充电电流进行自动调节,以便在大功率操作或高温环境温度条件下对芯片温度加以...

「雕爷学编程」Arduino动手做(29)——DS1302时钟模块

37款传感器与模块的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止37种的。鉴于本人手头积累了一些传感器和模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的,这里准备逐一动手试试做实验,不管成功与否,都会记录下来---小小的进步或是搞不定的问题,希望能够抛砖引玉。 【Arduino】108种传感器模块系列实验(资料+代...

Arduino通过L9110进行电机控制

L9110S是为控制和驱动电机设计的两通道推挽式功率放大专用集成电路器件,将分立电路集成在单片IC之中,使外围器件成本降低,整机可靠性提高。 该芯片有两个TTL/CMOS兼容电平的输入,具有良好的抗干扰性;两个输出端能直接驱动电机的正反向运动,它具有较大的电流驱动能力,每通道能通过750~800mA的持续电流,峰值电流能力可达1.5~2.0A;同时它具有较...