天下乌鸦一般黑 发表于 2015-9-1 23:28:32

【分享】C#做的串口软件,支持二维描点和显示3D姿态

本帖最后由 天下乌鸦一般黑 于 2015-9-1 23:32 编辑

第一次发帖,分享个东西吧。今年年初开始接触c#,边学边做的一个软件,环境是vs2010,自己感觉差不多凑合能用,欢迎高手多拍砖哈,对于新人,应该能在里面找到串口、chart控件和opengl在C#下的调用等,我就不过多的介绍了,分享给大家,没兴趣的下了也不看,有兴趣的下了看看也应该能看懂,我自己觉得代码有点乱,不过注释还是有的,下面是一些截图。




三维姿态可以通过鼠标左键点击界面进入控制模式,右键点击退出,和cs死亡后的自由视角一样,鼠标控制方向,wsad分别控制前进后退左移右移,q是上升,e是下降。



luhuaneda 发表于 2015-9-1 23:46:12

谢谢,学习学习

怪侠封沉 发表于 2015-9-2 00:14:18

3D显示用的是WPF做的吗?

霸气侧漏 发表于 2015-9-2 00:37:12

数据能保存为csv格式就好了

天下乌鸦一般黑 发表于 2015-9-2 07:52:06

怪侠封沉 发表于 2015-9-2 00:14
3D显示用的是WPF做的吗?

工程是winform的,3d是调用的opengl

gy810986741 发表于 2015-9-2 08:29:19

挺不错的,加油

Excellence 发表于 2015-9-2 08:32:03

{:victory:}{:victory:}{:victory:}

ablightstar 发表于 2015-9-2 08:43:53

三维里的这个飞机本身能动吗?
我试了,目前看只能视角动

天下乌鸦一般黑 发表于 2015-9-2 08:48:36

本帖最后由 天下乌鸦一般黑 于 2015-9-2 08:56 编辑

ablightstar 发表于 2015-9-2 08:43
三维里的这个飞机本身能动吗?
我试了,目前看只能视角动

可以,按照协议发送数据就可以动了,可以显示姿态,包括pitch yaw 和roll 但是不能显示位移。

leiyin 发表于 2015-9-2 08:49:46

赞一个不错!

u123321 发表于 2015-9-2 09:04:49

学习,谢谢分享

dalarang 发表于 2015-9-2 09:39:48

厉害,正好看下3维是怎么做的

xingjianpeng 发表于 2015-9-2 09:49:16

牛人啊。膜拜一下

venus5712 发表于 2015-9-2 10:00:23

下来学习下!

怪侠封沉 发表于 2015-9-2 13:31:18

天下乌鸦一般黑 发表于 2015-9-2 07:52
工程是winform的,3d是调用的opengl

C#对OpenGL的支持不是很友好的样子,不知道用起来感觉怎么样,但OpenGL在其他地方用的很多。

睿翼1992 发表于 2015-9-2 13:47:02

厉害      我也正想学这一块,谢谢分享

天下乌鸦一般黑 发表于 2015-9-2 14:11:35

怪侠封沉 发表于 2015-9-2 13:31
C#对OpenGL的支持不是很友好的样子,不知道用起来感觉怎么样,但OpenGL在其他地方用的很多。 ...

我水平低了点,不懂优化啥的,不过单纯的做一点简单的模型显示和姿态还好,高级点的估计要卡出翔吧。

怪侠封沉 发表于 2015-9-2 16:13:55

天下乌鸦一般黑 发表于 2015-9-2 14:11
我水平低了点,不懂优化啥的,不过单纯的做一点简单的模型显示和姿态还好,高级点的估计要卡出翔吧。 ...

不太了解,我过些天准备尝试一下,到时还得请教你啦

acchkr 发表于 2015-9-2 18:30:49

多谢分享~赞一个。

596142041 发表于 2015-9-3 20:07:18

C#入门容易不,一直想学一门上位机编程语言

天下乌鸦一般黑 发表于 2015-9-3 21:23:00

596142041 发表于 2015-9-3 20:07
C#入门容易不,一直想学一门上位机编程语言

很容易上手的。试试就知道了。

请叫我中路杀神 发表于 2015-9-3 21:53:42

很不错也想学C#但是一直没时间

wmm20031015 发表于 2015-9-5 00:19:04

不错,感谢楼主

夏筱雨 发表于 2015-9-5 00:37:56

标记,串口二维描点,谢谢楼主

haoyurenzhu 发表于 2015-9-6 10:46:03

牛逼,,顶顶。。。

stely 发表于 2015-9-6 13:39:02

不错!学习了。

bad_fpga 发表于 2015-9-6 15:14:31

C# 串口软件,不错

embeddev_1 发表于 2015-9-6 15:15:33

参考下!{:biggrin:}

cyc6125 发表于 2015-9-11 13:12:52

学习!C#      !!!!!!!!!!

markdif 发表于 2015-9-11 15:00:16

不错,谢谢分享。。。

zhanyanqiang 发表于 2015-9-11 16:03:03

很好!!写的不错

GZZXB 发表于 2015-9-11 16:29:03

感谢楼主分享

talkingbeast 发表于 2015-9-11 17:18:55

谢谢分享

foxpro2005 发表于 2015-9-11 19:04:29

应用得不错, 来给楼主顶一顶...

霸气侧漏 发表于 2015-10-25 09:59:15

看了你的代码,串口应该是csdn论坛上修改的,再用你的csv控件,能说说怎么用么,我要把串口数据全部存到电脑里面,不是按一下在去弄

天下乌鸦一般黑 发表于 2015-10-25 10:25:52

霸气侧漏 发表于 2015-10-25 09:59
看了你的代码,串口应该是csdn论坛上修改的,再用你的csv控件,能说说怎么用么,我要把串口数据全部存到电 ...

我是搞单片机的啊,这玩意都是西拼八凑的,要是仅仅是保存串口数据,你试试把串口数据送richbox,然后每隔一段时间保存一下richbox里的东西

霸气侧漏 发表于 2015-10-25 11:08:38

天下乌鸦一般黑 发表于 2015-10-25 10:25
我是搞单片机的啊,这玩意都是西拼八凑的,要是仅仅是保存串口数据,你试试把串口数据送richbox,然后每 ...

哈哈,我也是搞单片机,看你的上位机弄得不错。richbox是什么贵,我是想把收到的数据按类存储,所以看你的csv觉得挺好的,只要用逗号就可以实现一个类存储在同一列。对了你的csv控件在什么地方看到的,有使用教程没,我看你的程序勉强可以存储数据。详细使用不清楚

天下乌鸦一般黑 发表于 2015-10-25 11:43:18

霸气侧漏 发表于 2015-10-25 11:08
哈哈,我也是搞单片机,看你的上位机弄得不错。richbox是什么贵,我是想把收到的数据按类存储,所以看你 ...


richtextbox 是winform里的一个控件而已,百度搜一下。csv这个不是控件,自己写一个小程序就可以了啊,把数据从串口取出来,验证没问题就转成字符串 保存到文件中,csv的格式你看下。我这个功能太简单,就是玩玩,能给大家起个参考作用就不错了。。。

霸气侧漏 发表于 2015-10-25 11:51:50

天下乌鸦一般黑 发表于 2015-10-25 11:43
richtextbox 是winform里的一个控件而已,百度搜一下。csv这个不是控件,自己写一个小程序就可以了啊, ...

不会写啊,我是看了杜洋然后就研究你的代码,后来发现你的串口部分和一个帖子内容一样,嘿嘿,我搜下richtextbox

天下乌鸦一般黑 发表于 2015-10-25 11:56:49

霸气侧漏 发表于 2015-10-25 11:51
不会写啊,我是看了杜洋然后就研究你的代码,后来发现你的串口部分和一个帖子内容一样,嘿嘿,我搜下rich ...

是的 和csdn的一个帖子一样,因为串口如果接收的数据帧频率高,会导致程序窗口在关闭的时候假死,csdn的那个帖子可以避免这个问题。

jxyctwt 发表于 2015-10-25 12:58:25

棒极了~~~~~~

霸气侧漏 发表于 2015-10-25 13:36:00

哥们,你学C#多长时间写出来的

天下乌鸦一般黑 发表于 2015-10-25 14:12:53

霸气侧漏 发表于 2015-10-25 13:36
哥们,你学C#多长时间写出来的

C# 的winform ,环境是vs2010上手两周吧,后面就是根据需要搜索相应的功能如何实现了

杨遥 发表于 2015-10-25 14:13:30

谢谢楼主分享,真不错,正在学习这个

mandzy 发表于 2015-10-26 20:29:01

我一直都想学习怎样描点,谢谢楼主分享

毛毛 发表于 2015-10-26 23:43:10

不错。谢谢分享

天下乌鸦一般黑 发表于 2015-10-27 19:49:31

毛毛 发表于 2015-10-26 23:43
不错。谢谢分享

都是百度,然后攒在一起来的东西,能有点帮助就好啊{:lol:}

霸气侧漏 发表于 2015-10-30 12:52:50

楼主我想把收到的数据实时存储到csv文件怎么做呢,纠结

天下乌鸦一般黑 发表于 2015-10-30 17:30:17

霸气侧漏 发表于 2015-10-30 12:52
楼主我想把收到的数据实时存储到csv文件怎么做呢,纠结


csv文件就是个文本文件其实
比如你把一堆字符串按照如下格式打印到txt中
id,name,data
1,a,1001
2,b,2002
3,c,3003
然后把txt改名为csv,自然就可以用excel和matlab处理了。

897152237 发表于 2015-10-30 17:33:47

beautiful & mark

霸气侧漏 发表于 2015-10-30 20:47:21

天下乌鸦一般黑 发表于 2015-10-30 17:30
csv文件就是个文本文件其实
比如你把一堆字符串按照如下格式打印到txt中
id,name,data


已经搞定了,嘿嘿

天下乌鸦一般黑 发表于 2015-10-30 21:28:48

霸气侧漏 发表于 2015-10-30 20:47
已经搞定了,嘿嘿

嗯啊 恭喜啊 你也可以单独开一个线程 来做这个事儿 。

霸气侧漏 发表于 2015-10-30 21:58:18

天下乌鸦一般黑 发表于 2015-10-30 21:28
嗯啊 恭喜啊 你也可以单独开一个线程 来做这个事儿 。

线程?不会用,愿闻其详

天下乌鸦一般黑 发表于 2015-10-31 12:30:04

霸气侧漏 发表于 2015-10-30 21:58
线程?不会用,愿闻其详

有个background控件,你搜搜怎么用,这是个线程控件,可以单独执行一个任务。
比如你用一个线程判断接收缓冲,只要缓冲区有数据,就保存到csv中。

霸气侧漏 发表于 2015-10-31 23:02:29

本帖最后由 霸气侧漏 于 2015-10-31 23:22 编辑

有个问题,我做了一个按键,按下后就把combobox控件里的数据发送到串口,combobox数据是我下拉可以从1--100 中选一个数,比如我选择8   就发送AA 550108不知道怎么弄。

我定义一个byte
然后,stringdata= comboBox.Text ;

然后把date 转成byte 在发送数据,但是运行后显示值对于无字符字节太大或太小,不知道怎么弄,纠结

霸气侧漏 发表于 2015-11-2 08:37:34

哈哈。搞定了

天下乌鸦一般黑 发表于 2015-11-5 20:41:00

霸气侧漏 发表于 2015-11-2 08:37
哈哈。搞定了

嗯啊搞定啦就好 这几天在出差了。

霸气侧漏 发表于 2015-11-5 20:55:20

天下乌鸦一般黑 发表于 2015-11-5 20:41
嗯啊搞定啦就好 这几天在出差了。

{:lol:}    哈哈哈,搞定了

sixdof 发表于 2015-11-23 23:01:35

真心不错,楼主加油。

mcujack 发表于 2015-11-26 17:16:35

可不可做成接收两路串口,以不同颜色区分呢

talkingbeast 发表于 2015-11-26 18:47:16

酷,谢谢分享。

天下乌鸦一般黑 发表于 2015-11-26 19:05:47

mcujack 发表于 2015-11-26 17:16
可不可做成接收两路串口,以不同颜色区分呢

没这么试过,不过感觉用多个串口没啥问题。

aki168 发表于 2015-12-2 01:00:01

蛮好的,学习了{:smile:}

wsh 发表于 2016-2-2 22:17:59

学习啦      

fengyunyu 发表于 2016-2-2 22:24:14

看起来很酷!

天下乌鸦一般黑 发表于 2016-4-16 18:36:54


想起来当时测试用的是一个某宝买的叫10轴(带气压计的)的模块,型号是Gy-86,现在把测试程序一起贴上来吧,还是那样,有兴趣的凑合看下吧

霸气侧漏 发表于 2016-4-16 19:30:38

天下乌鸦一般黑 发表于 2016-4-16 18:36
想起来当时测试用的是一个某宝买的叫10轴(带气压计的)的模块,型号是Gy-86,现在把测试程序一起贴上来吧, ...

哈哈,当时程序参考你的代码,貌似有个bug.有时候打开串口收不到数据,然后在居然还能再打开一次串口,就收到数据。不是按一次打开,再按一次关闭么?

weshare 发表于 2016-4-16 19:31:22

谢谢,学习学习,

天下乌鸦一般黑 发表于 2016-4-17 00:16:15

霸气侧漏 发表于 2016-4-16 19:30
哈哈,当时程序参考你的代码,貌似有个bug.有时候打开串口收不到数据,然后在居然还能再打开一次串口,就 ...

这个啊,不太清楚勒。最近重新做了个新的上位机,打印一些数据曲线啥的,很偶尔遇到个bug就卡死了~解决不了唉,凑合用了先。

oner 发表于 2017-5-27 12:03:29

天下乌鸦一般黑 发表于 2016-4-17 00:16
这个啊,不太清楚勒。最近重新做了个新的上位机,打印一些数据曲线啥的,很偶尔遇到个bug就卡死了~解决不 ...

楼主,你的波形显示部分貌似有BUG,只能放大无法缩小?试了下,感觉波形的放大缩小没有控制规律啊,

天下乌鸦一般黑 发表于 2017-5-27 12:41:43

oner 发表于 2017-5-27 12:03
楼主,你的波形显示部分貌似有BUG,只能放大无法缩小?试了下,感觉波形的放大缩小没有控制规律啊, ...

放大缩小后表格的左侧和下侧有拖动条,拖动条旁边有个小圆点,可以点那个小圆点恢复。

altim_li 发表于 2017-5-27 13:06:06

挺好的,学习一下

zhongsandaoren 发表于 2017-5-31 13:41:44

软硬兼通啊楼主

fengyunyu 发表于 2017-5-31 14:32:49

用来做四轴3D展示不错

超鸿蒙 发表于 2017-6-10 20:01:25

学习了,谢谢楼主!

yongke 发表于 2017-6-14 11:21:00

学习学习,找C#串口例子

natty0715 发表于 2017-7-6 11:14:27

正好最近在学C#串口+chart做上位机,万分感谢楼主的分享了,下载下来拜读一下{:lol:}

jimgx 发表于 2017-7-12 17:35:24

谢谢,学习学习

霸气侧漏 发表于 2017-8-1 15:18:56

最近公司要做一个测试用上位机,用C#获取串口数据,然后绘制成曲线图,在做分析,看来要把你的代码在看一遍, 现在在用chart控制,能实现绘图和X轴滚动条,继续努力

霸气侧漏 发表于 2017-8-1 15:50:00

天下乌鸦一般黑 发表于 2016-4-17 00:16
这个啊,不太清楚勒。最近重新做了个新的上位机,打印一些数据曲线啥的,很偶尔遇到个bug就卡死了~解决不 ...

哥们,最新的程序能不能上传,

天下乌鸦一般黑 发表于 2017-8-1 20:20:44

霸气侧漏 发表于 2017-8-1 15:50
哥们,最新的程序能不能上传,

不好意思额,现在给公司做设备的软件测试工装了,集成了很多配置,不太方便发出来了。代码没啥长进,还是这个样子。{:cry:}

霸气侧漏 发表于 2017-8-1 21:15:19

天下乌鸦一般黑 发表于 2017-8-1 20:20
不好意思额,现在给公司做设备的软件测试工装了,集成了很多配置,不太方便发出来了。代码没啥长进,还是 ...

恩,理解理解,话说你是怎么学的,有没有好的教程,比如入门的资料等等

霸气侧漏 发表于 2017-8-1 21:21:18

天下乌鸦一般黑 发表于 2017-8-1 20:20
不好意思额,现在给公司做设备的软件测试工装了,集成了很多配置,不太方便发出来了。代码没啥长进,还是 ...

有点不太明白,怎么封装一个函数,输入XY轴的坐标,就显示处波形图来

天下乌鸦一般黑 发表于 2017-8-1 21:24:44

串口通信参考的
http://blog.csdn.net/wuyazhe/article/details/5598945
chart就是瞎鼓捣的了,各种搜罗了~
顺便了解了下winform刷新界面如何和后台业务分离,委托啥的,不太会用线程,凑合用background控件做的,只要刷新曲线速度要求不高,能凑合用的。

天下乌鸦一般黑 发表于 2017-8-1 21:26:39

霸气侧漏 发表于 2017-8-1 21:15
恩,理解理解,话说你是怎么学的,有没有好的教程,比如入门的资料等等 ...

对啦,下载个Virtual Serial Port,调试串口好用。

霸气侧漏 发表于 2017-8-1 21:29:31

天下乌鸦一般黑 发表于 2017-8-1 21:26
对啦,下载个Virtual Serial Port,调试串口好用。

谢谢,串口通信已经搞定,能够当单片机用,虚拟串口也已使用。

现在的问题是,C#能够用,目前可以实现获取带协议的串口数据,然后保存位CSV文件,现在想做一个带波形显示的,遇到点问题,想做一个函数封装,把数组传入后,就能绘制一个波形文件出来

天下乌鸦一般黑 发表于 2017-8-1 21:36:47

霸气侧漏 发表于 2017-8-1 21:29
谢谢,串口通信已经搞定,能够当单片机用,虚拟串口也已使用。

现在的问题是,C#能够用,目前可以实现获 ...

额,我攒出来的,太深的不太懂了额。感觉直接把数据添加到到chart的画板上,这个网上也不少例程,没啥好办法,一个一个添加吧,开个定时器或者用串口报文来触发刷新就看需求了。

霸气侧漏 发表于 2017-8-1 21:43:38

天下乌鸦一般黑 发表于 2017-8-1 21:36
额,我攒出来的,太深的不太懂了额。感觉直接把数据添加到到chart的画板上,这个网上也不少例程,没啥好 ...

好吧,先这样来弄,
今天做了一次性绘图,感觉还行,就是想封装成一个函数来用用

霸气侧漏 发表于 2017-8-3 09:14:21

我想在中断里面,不断的画曲线,用这个程序 ,提示其他信息: “SeriesCollection”中找不到名为“Series0”的图表元素。这个不清楚为什么,但是你在chart里面有定义这个啊。



代码如下
Random ran = new Random();
this.chartScope.Series["Series0"].Points.AddXY((double)Xpoints, ran.Next(100, 999));

天下乌鸦一般黑 发表于 2017-8-3 10:05:31

霸气侧漏 发表于 2017-8-3 09:14
我想在中断里面,不断的画曲线,用这个程序 ,提示其他信息: “SeriesCollection”中找不到名为“Series0 ...

this.chartScope.Series["Series0"].Points.AddXY((double)Xpoints, ran.Next(100, 999));
Series0需要在界面设计中添加到Series的成员列表中,没有添加的话当然找不到了。

霸气侧漏 发表于 2017-8-3 10:50:35

天下乌鸦一般黑 发表于 2017-8-3 10:05
this.chartScope.Series["Series0"].Points.AddXY((double)Xpoints, ran.Next(100, 999));
Series0需要 ...

你看上面的截图,不是已经添加了么?这个还是要自己软件代码添加?

有点不太明白,我直接用的你的代码,按理已经添加

天下乌鸦一般黑 发表于 2017-8-3 11:25:10

霸气侧漏 发表于 2017-8-3 10:50
你看上面的截图,不是已经添加了么?这个还是要自己软件代码添加?

有点不太明白,我直接用的你的代码, ...

没有添加Series0 ,截图里添加的是Series1-10

霸气侧漏 发表于 2017-8-3 14:29:16

对了,你chartScope,曲线分析那个,里面可以绘制十个曲线。是不是只要在控件里设置好,就能直接用。 我是这样用的,但是感觉用的有些地方不对劲

            //清除默认的series
            chart2.Series.Clear();
          Series Strength5 = new Series("设定速度");
            Series Strength6 = new Series("流速");
            //设置chart的类型,这里为柱状图
            Strength5.ChartType = SeriesChartType.Spline;
            Strength6.ChartType = SeriesChartType.Spline;
            byte iTimeInterval = 1;
            chart2.ChartAreas["ChartArea1"].CursorX.AutoScroll = true;
            chart2.ChartAreas["ChartArea1"].AxisX.ScrollBar.Enabled = true;
            chart2.ChartAreas["ChartArea1"].CursorX.IsUserEnabled = true;
            chart2.ChartAreas["ChartArea1"].CursorX.IsUserSelectionEnabled = true;
            chart2.ChartAreas["ChartArea1"].AxisX.Interval = iTimeInterval;
            chart2.ChartAreas["ChartArea1"].AxisX.ScaleView.Zoomable = true;
            chart2.ChartAreas["ChartArea1"].AxisX.ScaleView.Position = 0;
            chart2.ChartAreas["ChartArea1"].AxisX.ScaleView.Size = iTimeInterval;
            //水平滚动条始终居于最右边            
            chart2.ChartAreas["ChartArea1"].AxisX.ScaleView.Scroll(ScrollType.Last);

            //把series添加到chart上
            chart2.Series.Add(Strength5);
            chart2.Series.Add(Strength6);

霸气侧漏 发表于 2017-8-3 14:38:40

对了,怎样把chart里面的所有曲线数据全清空, chart2.Series.Clear();设置完后,表格就什么都没有,尴尬,如果调用我楼上的程序,数据还是一样的

天下乌鸦一般黑 发表于 2017-8-3 15:10:48

霸气侧漏 发表于 2017-8-3 14:38
对了,怎样把chart里面的所有曲线数据全清空, chart2.Series.Clear();设置完后,表格就什么都没有,尴尬, ...

比如清除Series1,可以这样:

MSchart.Series["Series1"].Points.Clear();

霸气侧漏 发表于 2017-8-3 15:51:04

天下乌鸦一般黑 发表于 2017-8-3 15:10
比如清除Series1,可以这样:

MSchart.Series["Series1"].Points.Clear();

清除完,显示一片空白,什么都没有,这怎么办

天下乌鸦一般黑 发表于 2017-8-3 17:12:26

霸气侧漏 发表于 2017-8-3 15:51
清除完,显示一片空白,什么都没有,这怎么办

啊,对了,清除了以后好像需要重新设置下,大概如下
                  MSchart.ChartAreas["ChartArea1"].AxisX.Maximum = 300;
                  MSchart.ChartAreas["ChartArea1"].AxisX.Minimum = 0;
                  MSchart.ChartAreas["ChartArea1"].AxisX.Interval = 60;
                  MSchart.ChartAreas["ChartArea1"].AxisX.LabelStyle.Interval = 60;

霸气侧漏 发表于 2017-8-3 17:49:19

天下乌鸦一般黑 发表于 2017-8-3 17:12
啊,对了,清除了以后好像需要重新设置下,大概如下
                  MSchart.ChartAreas["ChartArea ...

我去试试看,嘿嘿

霸气侧漏 发表于 2017-8-13 23:49:27

哥们 你好,遇到一个问题,要实现读取csv里的文件,数据的23.12345   小数点后有5位,
            private int g_r_set_speed = 0;
            string[] lines = File.ReadAllLines(dataAnalyseFilePath);
            string[] columns = lines.Split(',');
            columns = lines.Split(',');
            g_r_set_speed = Convert.ToInt32(columns, 10);   // 读取23.12345过后,会提示数据类型不对,但是不知道怎么处理,我要读取小数点后5位的数字,怎样做才比较好。

我想读取csv里的数据,但是数据都是小数点后面5位的数字,整数位最大是999.放入一个变量用,用来做运算

天下乌鸦一般黑 发表于 2017-8-14 14:00:22

霸气侧漏 发表于 2017-8-13 23:49
哥们 你好,遇到一个问题,要实现读取csv里的文件,数据的23.12345   小数点后有5位,
            private ...

string str = "123.45678";
float tempfloat = float.Parse(str );
类似这样转试试。
页: [1] 2
查看完整版本: 【分享】C#做的串口软件,支持二维描点和显示3D姿态