您好,欢迎来到三六零分类信息网!老站,搜索引擎当天收录,欢迎发信息
免费发信息
三六零分类信息网 > 宜春分类信息网,免费分类信息发布

零基础小白如何快速入门编写CAN报文监控上位机

2019/10/27 7:06:43发布150次查看
在整车上截取、分析can报文时经常要用到上位机,而这上位机是怎么写出来的呢这篇文章将基于已有例程从0开始讲解用c#语言编写上位机的方法及过程。
本文适用于常与can报文打交道,同时想编写上位机但不知从何下手的同仁们。也适合想学习编程但不知如何入门的同袍。篇幅所限,本文只讲解与can报文上位机相关的编程方法及知识,以实现目的为主,对于不相关的代码及知识点仅作简述或略过。学好本文内容,再研究细节或去看其他入门教材就轻松多啦~~(本文基于c#语言,所用到的功能用法跟c语言差不多。)
注:本文是根据周立功官网的例程和微软visual studio编程软件来讲解上位机的编写,can报文的收发需要基于例程中对应的设备。(本文提到的例程支持十多种设备,具体可查看例程中kerneldlls文件夹的.dll文件。同时也可根据本文讲解的内容来编写其他用途的电脑软件。)
两天时间可作如下分配:
0.5天准备(下载、安装工具软件)
0.5天依照本文练习
1天自由回味练习,学习充分的话可自行依照相应知识点自行深入探索
文章结构如下:
我们想要上位机实现哪些功能
编写前的准备工作
初步介绍上位机代码的结构和基础知识
编写告警、数据显示界面
上位机编写常用控件介绍
上位机功能编写之前想一下,我们需要这个上位机实现哪些功能呢常用的不外乎以下几个,本文将重点讲解解析显示报文信息的编写方法。
连接can盒,截取报文
解析显示报文信息(如显示告警状态、数据变化等)
使用上位机模拟对应工况,向can网络发送报文
准备工作首先呢要站在巨人的肩膀上,本文的编写要先引用两位巨人的成果。(下载软件、资料请认准官网)
第一位巨人:周立功。首先进入其官网点开搜索界面,搜索"usbcan"关键字。这时出现了五十多项资料供下载,咱们直接找到"【应用软件】usbcan-8e-u上位机例程"下载。(官网还有很多有用的资料、书籍、软件供免费下载哈,感兴趣的可以详细看下~)下载好后将其中的"c#例子(vs2005)"文件夹解压下来放好,这个是周立功官网上的上位机例程,本文将基此进行讲解。
当然,一起下载的例程里面还有基于其他语言(如matlab、labview、vb等等)的,有兴趣的可以尝试,本文只基于c#例程。
第二位巨人:微软。到官网下载编程工具软件visual studio,然后安装在电脑上。目前最新版是2019版,其实用2005版或更高即可。本文用2017版作讲解,编写上位机只用到了visual studio的皮毛功能,用哪个版本都差不多。
visual studio被人号称宇宙最强ide,支持多种编程语言及功能,但其体积也超大,下载、安装比较费时,这也是准备工作需要0.5天的原因。
o(︶︿︶)o 准备好零食,一边安装一边吃着~
(友情提示:visual studio功能强大、模块众多,安装好后若想卸载,可能有少数模块不能完全被从电脑上移除,这不影响电脑本身的使用,不特地去看它就行了。但若只是准备浅尝辄止看看就走,且自带强迫症的各位需慎重哦~)
上位机例程结构介绍准备工作做好后,到解压的"c#例子(vs2005)"文件夹下找到"windowsapplication1.sln",双击打开。
打开后右侧是此工程所包含的文件,鼠标双击"form1.cs",此时左边会显示例程上位机的界面。点击上方的"启动"按钮,即可运行上位机软件。上位机界面从上到下主要包含三大块:设备参数、发送数据帧、信息。
设备参数。这里可以忽略。其中定时器0、定时器1里填的参数对应的是can网络波特率,也可将这两个定时器框格去掉,改用选择波特率的模式会更方便顺手。不过这不影响功能使用,此处略过。
发送数据帧。可以向can网络发送对应的报文。
信息。这里会显示所有接收到的报文,本文对应的报文解析功能就是基于这里,接下来会重点讲述。
鼠标双击此上位机界面的最上方("can通用测试例子"几字所在行),此时会进入代码编辑界面。代码左边有一列竖线,线上有很多"-"号,点击该符号即可将对应段落的代码隐缩起来。竖线左边的数字时代码的行数。
今天我们就在"form1.cs"和"form1.cs[设计]"这两处操作编写。
编写报文解析显示功能首先先定个小目标吧,不用赚一个亿,把国标直流充电网的ccs报文实时动态显示出来就行。
在直流充电过程中,上位机接到ccs报文后,界面上需要显示充电机输出电压值、电流值、累计充电时间,还要显示充电允许状态。
初步设想用以下这样的图标界面显示出来。电压、电流、时间的数值随接收到的报文实时更新,充电允许状态的文字、颜色也随报文变化。
调整界面先在界面上画出对应的框格用于显示。
不过目前这界面太满了,可以将鼠标放在界面边沿,将界面拖动拉大。也可以选中"form1"界面,然后在右下角的属性栏,找到"size"处,原始尺寸是"856 * 1094",咱们把它改成"1280 * 768"这种常用的尺寸大小(可以随意改,看着顺眼就行),此时可在界面空余的地方添加新的框体。
调完尺寸后发现原先有部分界面被挡住了怎么办没事,还是在属性这里,把鼠标往上滑,找到"autoscroll"处,将"false"改为"true"就可以了。另外更重要的一点是界面内元素的排列布置,将鼠标选中对应的框体,然后就可以将其拖到合适的位置。这个不影响今天讲的功能,此处略过。
添加元素对应上方的设想,需要往界面上方添加四个文字标签,然后文字标签右边添加四个对应的实时显示框格。
点击最左边上方那里的"工具箱",点开"所有windows窗体",往下滑动选中"label",然后在界面上空白地方点一下,该出就出现了一个名称为"label25"的标签(为什么是25呢因为原始例程里面已有了24个label)。
此时右下角的显示的就是这个"label25"的属性了。在属性里面选中"text",将后方的文字"label25"改成"输出电压:"。
再在工具箱中选好一个label,放在界面上"输出电压:"的右侧,然后在这个label26的属性中做如下修改:到"autosize"处将"ture"改为"false"(这样就可以手动修改label标签的尺寸了)、到"backcolor"处,将颜色换成喜欢的、到"text"处,将后方文字"label26"全删掉(初始文字可以不要,等接到报文后再显示)、到"textalign"处,改为"middlecenter"(使label中的文字居中显示)。
然后依照同样的步骤,继续在下方添加设想的剩余三行内容(也可选中这已有的两个label,然后按住ctrl键,同时拖动鼠标即可复制)。(label属性中的"(name)"处可将名称修改为喜欢的,此处略过,均用默认名称)
提取报文上位机界面调整好后,现进入代码编辑界面。
找到第374行代码,这个for循环里面即是上位机从can盒中提取的报文(定时从can盒中提取,一次可能会有多条,res是提取到的条数,因此用一个for循环来挨条报文处理。具体过程略过。),将这些报文一条一条地在界面中"信息"框体显示出来。这个不管,我们直接在此处加上咱们想要的ccs报文解析代码。
在第337行加入如下代码
此处对所添加的代码中的字符作如下解释(改不了字体颜色,这段文字得耐心看下哈~)
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——图标,可将对应数据用曲线形式展示
总结当然,对大神来说,这些都不是事,什么例程、什么工具箱都可以无视,直接用代码写好想要显示的界面、按键、图标的尺寸、颜色、形状等等,然后让其按想法自动显示、变化。不过咱们不是大神,还是哪个方便用哪个吧。
本文只是简单描述了上位机接收显示部分,对于不直接影响功能的部分均略过,若有还需详细描述的地方欢迎提出来。
有兴趣的也可以自己继续摸索更多待挖掘的地方~
对于本文提到的例程软件官网下载地址、下载到的上位机例程以及文中编写的代码有疑问或需要资源的,欢迎到交流^_^

宜春分类信息网,免费分类信息发布

VIP推荐

免费发布信息,免费发布B2B信息网站平台 - 三六零分类信息网 沪ICP备09012988号-2
企业名录