零基础小白如何快速学会编写CAN报文监控上位机(can上位机是怎么开发的)

在整车上截取、分析CAN报文时经常要用到上位机,而这上位机是怎么写出来的呢?这篇文章将基于已有例程从0开始讲解用C#语言编写上位机的方法及过程。

本文适用于常与CAN报文打交道,同时想编写上位机但不知从何下手的同仁们。也适合想学习编程但不知如何入门的同袍。篇幅所限,本文只讲解与CAN报文上位机相关的编程方法及知识,以实现目的为主,对于不相关的代码及知识点仅作简述或略过。学好本文内容,再研究细节或去看其他入门教材就轻松多啦~~(本文基于C#语言,所用到的功能用法跟C语言差不多。)

注:本文是根据周立功官网的例程和微软Visual Studio编程软件来讲解上位机的编写,CAN报文的收发需要基于例程中对应的设备。(本文提到的例程支持十多种设备,具体可查看例程中kerneldlls文件夹的.dll文件。同时也可根据本文讲解的内容来编写其他用途的电脑软件。)

两天时间可作如下分配:

  • 0.5天准备(下载、安装工具软件)
  • 0.5天依照本文练习
  • 1天自由回味练习,学习充分的话可自行依照相应知识点自行深入探索

文章结构如下:

  1. 我们想要上位机实现哪些功能
  2. 编写前的准备工作
  3. 初步介绍上位机代码的结构和基础知识
  4. 编写告警、数据显示界面
  5. 上位机编写常用控件介绍

上位机功能

编写之前想一下,我们需要这个上位机实现哪些功能呢?常用的不外乎以下几个,本文将重点讲解解析显示报文信息的编写方法。

  • 连接CAN盒,截取报文
  • 解析显示报文信息(如显示告警状态、数据变化等)
  • 使用上位机模拟对应工况,向CAN网络发送报文

准备工作

首先呢要站在巨人的肩膀上,本文的编写要先引用两位巨人的成果。(下载软件、资料请认准官网)

第一位巨人:周立功。首先进入其官网点开搜索界面,搜索\”USBCAN\”关键字。这时出现了五十多项资料供下载,咱们直接找到\”【应用软件】USBCAN-8E-U上位机例程\”下载。(官网还有很多有用的资料、书籍、软件供免费下载哈,感兴趣的可以详细看下~)下载好后将其中的\”c#例子(vs2005)\”文件夹解压下来放好,这个是周立功官网上的上位机例程,本文将基此进行讲解。

当然,一起下载的例程里面还有基于其他语言(如MATLAB、LabView、VB等等)的,有兴趣的可以尝试,本文只基于C#例程。

零基础小白如何快速学会编写CAN报文监控上位机(can上位机是怎么开发的)

搜索下载例程

零基础小白如何快速学会编写CAN报文监控上位机(can上位机是怎么开发的)

下载文件内包含的例程

第二位巨人:微软。到官网下载编程工具软件Visual Studio,然后安装在电脑上。目前最新版是2019版,其实用2005版或更高即可。本文用2017版作讲解,编写上位机只用到了Visual Studio的皮毛功能,用哪个版本都差不多。

Visual Studio被人号称宇宙最强IDE,支持多种编程语言及功能,但其体积也超大,下载、安装比较费时,这也是准备工作需要0.5天的原因。

o(︶︿︶)o 准备好零食,一边安装一边吃着~

(友情提示:Visual Studio功能强大、模块众多,安装好后若想卸载,可能有少数模块不能完全被从电脑上移除,这不影响电脑本身的使用,不特地去看它就行了。但若只是准备浅尝辄止看看就走,且自带强迫症的各位需慎重哦~)

上位机例程结构介绍

准备工作做好后,到解压的\”c#例子(vs2005)\”文件夹下找到\”WindowsApplication1.sln\”,双击打开。

打开后右侧是此工程所包含的文件,鼠标双击\”Form1.cs\”,此时左边会显示例程上位机的界面。点击上方的\”启动\”按钮,即可运行上位机软件。上位机界面从上到下主要包含三大块:设备参数、发送数据帧、信息。

零基础小白如何快速学会编写CAN报文监控上位机(can上位机是怎么开发的)

初次打开上位机

零基础小白如何快速学会编写CAN报文监控上位机(can上位机是怎么开发的)

上位机界面

  1. 设备参数。这里可以忽略。其中定时器0、定时器1里填的参数对应的是CAN网络波特率,也可将这两个定时器框格去掉,改用选择波特率的模式会更方便顺手。不过这不影响功能使用,此处略过。
  2. 发送数据帧。可以向CAN网络发送对应的报文。
  3. 信息。这里会显示所有接收到的报文,本文对应的报文解析功能就是基于这里,接下来会重点讲述。

零基础小白如何快速学会编写CAN报文监控上位机(can上位机是怎么开发的)

运行上位机

鼠标双击此上位机界面的最上方(\”CAN通用测试例子\”几字所在行),此时会进入代码编辑界面。代码左边有一列竖线,线上有很多\”-\”号,点击该符号即可将对应段落的代码隐缩起来。竖线左边的数字时代码的行数。

今天我们就在\”Form1.cs\”和\”Form1.cs[设计]\”这两处操作编写。

零基础小白如何快速学会编写CAN报文监控上位机(can上位机是怎么开发的)

编写报文解析显示功能

首先先定个小目标吧,不用赚一个亿,把国标直流充电网的CCS报文实时动态显示出来就行。

在直流充电过程中,上位机接到CCS报文后,界面上需要显示充电机输出电压值、电流值、累计充电时间,还要显示充电允许状态。

零基础小白如何快速学会编写CAN报文监控上位机(can上位机是怎么开发的)

初步设想用以下这样的图标界面显示出来。电压、电流、时间的数值随接收到的报文实时更新,充电允许状态的文字、颜色也随报文变化。

零基础小白如何快速学会编写CAN报文监控上位机(can上位机是怎么开发的)

调整界面

先在界面上画出对应的框格用于显示。

不过目前这界面太满了,可以将鼠标放在界面边沿,将界面拖动拉大。也可以选中\”Form1\”界面,然后在右下角的属性栏,找到\”size\”处,原始尺寸是\”856 * 1094\”,咱们把它改成\”1280 * 768\”这种常用的尺寸大小(可以随意改,看着顺眼就行),此时可在界面空余的地方添加新的框体。

零基础小白如何快速学会编写CAN报文监控上位机(can上位机是怎么开发的)

调完尺寸后发现原先有部分界面被挡住了怎么办?没事,还是在属性这里,把鼠标往上滑,找到\”AutoScroll\”处,将\”FALSE\”改为\”TRUE\”就可以了。另外更重要的一点是界面内元素的排列布置,将鼠标选中对应的框体,然后就可以将其拖到合适的位置。这个不影响今天讲的功能,此处略过。

零基础小白如何快速学会编写CAN报文监控上位机(can上位机是怎么开发的)

添加元素

对应上方的设想,需要往界面上方添加四个文字标签,然后文字标签右边添加四个对应的实时显示框格。

点击最左边上方那里的\”工具箱\”,点开\”所有Windows窗体\”,往下滑动选中\”label\”,然后在界面上空白地方点一下,该出就出现了一个名称为\”label25\”的标签(为什么是25呢?因为原始例程里面已有了24个label)。

此时右下角的显示的就是这个\”label25\”的属性了。在属性里面选中\”Text\”,将后方的文字\”label25\”改成\”输出电压:\”。

零基础小白如何快速学会编写CAN报文监控上位机(can上位机是怎么开发的)

再在工具箱中选好一个label,放在界面上\”输出电压:\”的右侧,然后在这个label26的属性中做如下修改:到\”AutoSize\”处将\”TURE\”改为\”FALSE\”(这样就可以手动修改label标签的尺寸了)、到\”BackColor\”处,将颜色换成喜欢的、到\”Text\”处,将后方文字\”label26\”全删掉(初始文字可以不要,等接到报文后再显示)、到\”TextAlign\”处,改为\”MiddleCenter\”(使label中的文字居中显示)。

然后依照同样的步骤,继续在下方添加设想的剩余三行内容(也可选中这已有的两个label,然后按住Ctrl键,同时拖动鼠标即可复制)。(label属性中的\”(NAME)\”处可将名称修改为喜欢的,此处略过,均用默认名称)

零基础小白如何快速学会编写CAN报文监控上位机(can上位机是怎么开发的)

提取报文

上位机界面调整好后,现进入代码编辑界面。

找到第374行代码,这个for循环里面即是上位机从CAN盒中提取的报文(定时从CAN盒中提取,一次可能会有多条,res是提取到的条数,因此用一个for循环来挨条报文处理。具体过程略过。),将这些报文一条一条地在界面中\”信息\”框体显示出来。这个不管,我们直接在此处加上咱们想要的CCS报文解析代码。

在第337行加入如下代码

零基础小白如何快速学会编写CAN报文监控上位机(can上位机是怎么开发的)

此处对所添加的代码中的字符作如下解释(改不了字体颜色,这段文字得耐心看下哈~)

  • obj.ID为接收到的此条报文的ID,若是CCS则进入if内CCS报文解析代码的处理,若不是,则跳过if内这段代码
  • Double Volt_ou.这个与C语言不同,C#的参数在使用前定义即可,不用都在函数最开始处(C#全局变量不能放在现在的这个位置,得放在前面,此处略过)。这里的\”Double\”为C#C语言的数据类型关键字,该关键字将新创建的Volt_out这个变量定义为浮点型(就是可以带小数点的数字)
  • obj.Data[0]为此条报文的第一字节中的数据,由此往后obj.Data[1]、obj.Data[2]等依次为第二、第三字节中的数据。这里将十六进制换算为十进制,算法也可改为Double Volt_out = obj.Data[0] obj.Data[1]*256,此处略过。
  • Volt_out = Volt_out / 10,是为了保留小数点后一位,因为obj.Data[0]都是整数型,如果在上一条解析完后若直接÷10,则小数点后一位就被舍去了,具体原理不再叙述,此处略过。
  • label26.Text,\”label26\”表示此处要对(NAME)为label26的标签进行操作,后面的.Text表示这个标签中的文字将按照\”=\”后方的内容来显示
  • Convert.ToString(Volt_out),Convert表示此处要用到转换功能,后面的.ToString(Volt_out)表示要将括号内的\”Volt_out\”转换成字符串(即文本),具体原理不再叙述,此处略过。
  • \”V\”,上面将Volt_out转换成文本后只显示数字(如\”580.0\”),而没有单位,此处可在该数字后面添加一个字母\”V\”
  • label32.ForeColor,表示此处要对label32中文本的字体颜色进行操作,改为\”=\”后方的颜色
  • Color.Black,表示此处要用到颜色,什么颜色呢?是Black(黑色)。当然也可以改成其他颜色了(如Red、Yellow等等)
  • label32.BackColor表示此处要对label32标签的背景颜色进行操作。

编译运行

点击上方的\”启动\”按钮,上位机就编译运行了。

路径\”c#例子(vs2005)WindowsApplication1WindowsApplication1binDebug\”内即是生成的上位机可执行程序。将这个文件夹内所有文件拷到其他电脑上,可以直接打开\”WindowsApplication1.exe\”使用,无需安装。

这段操作、代码虽不复杂,界面也很简单,但由此扩展,可将其他需要的报文都进行进行解析显示,并对界面布置、颜色、功能等进行相应优化,到时就组合成一个能用好看的上位机啦~

上位机编写常用控件

此处仅简单介绍常用组件的简单功能,具体可在使用时网上查询其属性。

Button——按钮,用鼠标点击后会触发对应操作

ComboBox——选择,如例程中选择索引号的那个,可预提供多项用于选择

Label——标签,显示文字

TextBox——文本框,用于输入文本,程序可根据输入内容执行对应操作

Timer——定时器,设定好周期、开启定时器,即可按周期定时执行内部代码

ToolTip——提示,鼠标悬停在对应位置时,会自动浮出相应的文字

GroupBox、Panel——二者作用差不多,相当于一个容器,可将其他组件放在里面

Chart——图标,可将对应数据用曲线形式展示

总结

​当然,对大神来说,这些都不是事,什么例程、什么工具箱都可以无视,直接用代码写好想要显示的界面、按键、图标的尺寸、颜色、形状等等,然后让其按想法自动显示、变化。不过咱们不是大神,还是哪个方便用哪个吧。

本文只是简单描述了上位机接收显示部分,对于不直接影响功能的部分均略过,若有还需详细描述的地方欢迎提出来。

有兴趣的也可以自己继续摸索更多待挖掘的地方~

对于本文提到的例程软件官网下载地址、下载到的上位机例程以及文中编写的代码有疑问或需要资源的,欢迎到评论区交流^_^

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。