【分享】C#做的串口软件,支持二维描点和显示3D姿态
本帖最后由 天下乌鸦一般黑 于 2015-9-1 23:32 编辑第一次发帖,分享个东西吧。今年年初开始接触c#,边学边做的一个软件,环境是vs2010,自己感觉差不多凑合能用,欢迎高手多拍砖哈,对于新人,应该能在里面找到串口、chart控件和opengl在C#下的调用等,我就不过多的介绍了,分享给大家,没兴趣的下了也不看,有兴趣的下了看看也应该能看懂,我自己觉得代码有点乱,不过注释还是有的,下面是一些截图。
三维姿态可以通过鼠标左键点击界面进入控制模式,右键点击退出,和cs死亡后的自由视角一样,鼠标控制方向,wsad分别控制前进后退左移右移,q是上升,e是下降。
谢谢,学习学习 3D显示用的是WPF做的吗? 数据能保存为csv格式就好了 怪侠封沉 发表于 2015-9-2 00:14
3D显示用的是WPF做的吗?
工程是winform的,3d是调用的opengl 挺不错的,加油 {:victory:}{:victory:}{:victory:} 三维里的这个飞机本身能动吗?
我试了,目前看只能视角动 本帖最后由 天下乌鸦一般黑 于 2015-9-2 08:56 编辑
ablightstar 发表于 2015-9-2 08:43
三维里的这个飞机本身能动吗?
我试了,目前看只能视角动
可以,按照协议发送数据就可以动了,可以显示姿态,包括pitch yaw 和roll 但是不能显示位移。 赞一个不错! 学习,谢谢分享 厉害,正好看下3维是怎么做的 牛人啊。膜拜一下 下来学习下! 天下乌鸦一般黑 发表于 2015-9-2 07:52
工程是winform的,3d是调用的opengl
C#对OpenGL的支持不是很友好的样子,不知道用起来感觉怎么样,但OpenGL在其他地方用的很多。 厉害 我也正想学这一块,谢谢分享 怪侠封沉 发表于 2015-9-2 13:31
C#对OpenGL的支持不是很友好的样子,不知道用起来感觉怎么样,但OpenGL在其他地方用的很多。 ...
我水平低了点,不懂优化啥的,不过单纯的做一点简单的模型显示和姿态还好,高级点的估计要卡出翔吧。 天下乌鸦一般黑 发表于 2015-9-2 14:11
我水平低了点,不懂优化啥的,不过单纯的做一点简单的模型显示和姿态还好,高级点的估计要卡出翔吧。 ...
不太了解,我过些天准备尝试一下,到时还得请教你啦 多谢分享~赞一个。 C#入门容易不,一直想学一门上位机编程语言 596142041 发表于 2015-9-3 20:07
C#入门容易不,一直想学一门上位机编程语言
很容易上手的。试试就知道了。 很不错也想学C#但是一直没时间 不错,感谢楼主 标记,串口二维描点,谢谢楼主 牛逼,,顶顶。。。 不错!学习了。 C# 串口软件,不错 参考下!{:biggrin:} 学习!C# !!!!!!!!!! 不错,谢谢分享。。。 很好!!写的不错 感谢楼主分享 谢谢分享 应用得不错, 来给楼主顶一顶... 看了你的代码,串口应该是csdn论坛上修改的,再用你的csv控件,能说说怎么用么,我要把串口数据全部存到电脑里面,不是按一下在去弄 霸气侧漏 发表于 2015-10-25 09:59
看了你的代码,串口应该是csdn论坛上修改的,再用你的csv控件,能说说怎么用么,我要把串口数据全部存到电 ...
我是搞单片机的啊,这玩意都是西拼八凑的,要是仅仅是保存串口数据,你试试把串口数据送richbox,然后每隔一段时间保存一下richbox里的东西 天下乌鸦一般黑 发表于 2015-10-25 10:25
我是搞单片机的啊,这玩意都是西拼八凑的,要是仅仅是保存串口数据,你试试把串口数据送richbox,然后每 ...
哈哈,我也是搞单片机,看你的上位机弄得不错。richbox是什么贵,我是想把收到的数据按类存储,所以看你的csv觉得挺好的,只要用逗号就可以实现一个类存储在同一列。对了你的csv控件在什么地方看到的,有使用教程没,我看你的程序勉强可以存储数据。详细使用不清楚 霸气侧漏 发表于 2015-10-25 11:08
哈哈,我也是搞单片机,看你的上位机弄得不错。richbox是什么贵,我是想把收到的数据按类存储,所以看你 ...
richtextbox 是winform里的一个控件而已,百度搜一下。csv这个不是控件,自己写一个小程序就可以了啊,把数据从串口取出来,验证没问题就转成字符串 保存到文件中,csv的格式你看下。我这个功能太简单,就是玩玩,能给大家起个参考作用就不错了。。。 天下乌鸦一般黑 发表于 2015-10-25 11:43
richtextbox 是winform里的一个控件而已,百度搜一下。csv这个不是控件,自己写一个小程序就可以了啊, ...
不会写啊,我是看了杜洋然后就研究你的代码,后来发现你的串口部分和一个帖子内容一样,嘿嘿,我搜下richtextbox
霸气侧漏 发表于 2015-10-25 11:51
不会写啊,我是看了杜洋然后就研究你的代码,后来发现你的串口部分和一个帖子内容一样,嘿嘿,我搜下rich ...
是的 和csdn的一个帖子一样,因为串口如果接收的数据帧频率高,会导致程序窗口在关闭的时候假死,csdn的那个帖子可以避免这个问题。 棒极了~~~~~~ 哥们,你学C#多长时间写出来的 霸气侧漏 发表于 2015-10-25 13:36
哥们,你学C#多长时间写出来的
C# 的winform ,环境是vs2010上手两周吧,后面就是根据需要搜索相应的功能如何实现了 谢谢楼主分享,真不错,正在学习这个 我一直都想学习怎样描点,谢谢楼主分享 不错。谢谢分享 毛毛 发表于 2015-10-26 23:43
不错。谢谢分享
都是百度,然后攒在一起来的东西,能有点帮助就好啊{:lol:} 楼主我想把收到的数据实时存储到csv文件怎么做呢,纠结 霸气侧漏 发表于 2015-10-30 12:52
楼主我想把收到的数据实时存储到csv文件怎么做呢,纠结
csv文件就是个文本文件其实
比如你把一堆字符串按照如下格式打印到txt中
id,name,data
1,a,1001
2,b,2002
3,c,3003
然后把txt改名为csv,自然就可以用excel和matlab处理了。 beautiful & mark 天下乌鸦一般黑 发表于 2015-10-30 17:30
csv文件就是个文本文件其实
比如你把一堆字符串按照如下格式打印到txt中
id,name,data
已经搞定了,嘿嘿 霸气侧漏 发表于 2015-10-30 20:47
已经搞定了,嘿嘿
嗯啊 恭喜啊 你也可以单独开一个线程 来做这个事儿 。 天下乌鸦一般黑 发表于 2015-10-30 21:28
嗯啊 恭喜啊 你也可以单独开一个线程 来做这个事儿 。
线程?不会用,愿闻其详 霸气侧漏 发表于 2015-10-30 21:58
线程?不会用,愿闻其详
有个background控件,你搜搜怎么用,这是个线程控件,可以单独执行一个任务。
比如你用一个线程判断接收缓冲,只要缓冲区有数据,就保存到csv中。 本帖最后由 霸气侧漏 于 2015-10-31 23:22 编辑
有个问题,我做了一个按键,按下后就把combobox控件里的数据发送到串口,combobox数据是我下拉可以从1--100 中选一个数,比如我选择8 就发送AA 550108不知道怎么弄。
我定义一个byte
然后,stringdata= comboBox.Text ;
然后把date 转成byte 在发送数据,但是运行后显示值对于无字符字节太大或太小,不知道怎么弄,纠结
哈哈。搞定了 霸气侧漏 发表于 2015-11-2 08:37
哈哈。搞定了
嗯啊搞定啦就好 这几天在出差了。 天下乌鸦一般黑 发表于 2015-11-5 20:41
嗯啊搞定啦就好 这几天在出差了。
{:lol:} 哈哈哈,搞定了 真心不错,楼主加油。 可不可做成接收两路串口,以不同颜色区分呢 酷,谢谢分享。 mcujack 发表于 2015-11-26 17:16
可不可做成接收两路串口,以不同颜色区分呢
没这么试过,不过感觉用多个串口没啥问题。 蛮好的,学习了{:smile:} 学习啦 看起来很酷!
想起来当时测试用的是一个某宝买的叫10轴(带气压计的)的模块,型号是Gy-86,现在把测试程序一起贴上来吧,还是那样,有兴趣的凑合看下吧 天下乌鸦一般黑 发表于 2016-4-16 18:36
想起来当时测试用的是一个某宝买的叫10轴(带气压计的)的模块,型号是Gy-86,现在把测试程序一起贴上来吧, ...
哈哈,当时程序参考你的代码,貌似有个bug.有时候打开串口收不到数据,然后在居然还能再打开一次串口,就收到数据。不是按一次打开,再按一次关闭么? 谢谢,学习学习, 霸气侧漏 发表于 2016-4-16 19:30
哈哈,当时程序参考你的代码,貌似有个bug.有时候打开串口收不到数据,然后在居然还能再打开一次串口,就 ...
这个啊,不太清楚勒。最近重新做了个新的上位机,打印一些数据曲线啥的,很偶尔遇到个bug就卡死了~解决不了唉,凑合用了先。 天下乌鸦一般黑 发表于 2016-4-17 00:16
这个啊,不太清楚勒。最近重新做了个新的上位机,打印一些数据曲线啥的,很偶尔遇到个bug就卡死了~解决不 ...
楼主,你的波形显示部分貌似有BUG,只能放大无法缩小?试了下,感觉波形的放大缩小没有控制规律啊, oner 发表于 2017-5-27 12:03
楼主,你的波形显示部分貌似有BUG,只能放大无法缩小?试了下,感觉波形的放大缩小没有控制规律啊, ...
放大缩小后表格的左侧和下侧有拖动条,拖动条旁边有个小圆点,可以点那个小圆点恢复。 挺好的,学习一下 软硬兼通啊楼主 用来做四轴3D展示不错 学习了,谢谢楼主! 学习学习,找C#串口例子 正好最近在学C#串口+chart做上位机,万分感谢楼主的分享了,下载下来拜读一下{:lol:} 谢谢,学习学习 最近公司要做一个测试用上位机,用C#获取串口数据,然后绘制成曲线图,在做分析,看来要把你的代码在看一遍, 现在在用chart控制,能实现绘图和X轴滚动条,继续努力 天下乌鸦一般黑 发表于 2016-4-17 00:16
这个啊,不太清楚勒。最近重新做了个新的上位机,打印一些数据曲线啥的,很偶尔遇到个bug就卡死了~解决不 ...
哥们,最新的程序能不能上传, 霸气侧漏 发表于 2017-8-1 15:50
哥们,最新的程序能不能上传,
不好意思额,现在给公司做设备的软件测试工装了,集成了很多配置,不太方便发出来了。代码没啥长进,还是这个样子。{:cry:}
天下乌鸦一般黑 发表于 2017-8-1 20:20
不好意思额,现在给公司做设备的软件测试工装了,集成了很多配置,不太方便发出来了。代码没啥长进,还是 ...
恩,理解理解,话说你是怎么学的,有没有好的教程,比如入门的资料等等 天下乌鸦一般黑 发表于 2017-8-1 20:20
不好意思额,现在给公司做设备的软件测试工装了,集成了很多配置,不太方便发出来了。代码没啥长进,还是 ...
有点不太明白,怎么封装一个函数,输入XY轴的坐标,就显示处波形图来 串口通信参考的
http://blog.csdn.net/wuyazhe/article/details/5598945
chart就是瞎鼓捣的了,各种搜罗了~
顺便了解了下winform刷新界面如何和后台业务分离,委托啥的,不太会用线程,凑合用background控件做的,只要刷新曲线速度要求不高,能凑合用的。 霸气侧漏 发表于 2017-8-1 21:15
恩,理解理解,话说你是怎么学的,有没有好的教程,比如入门的资料等等 ...
对啦,下载个Virtual Serial Port,调试串口好用。 天下乌鸦一般黑 发表于 2017-8-1 21:26
对啦,下载个Virtual Serial Port,调试串口好用。
谢谢,串口通信已经搞定,能够当单片机用,虚拟串口也已使用。
现在的问题是,C#能够用,目前可以实现获取带协议的串口数据,然后保存位CSV文件,现在想做一个带波形显示的,遇到点问题,想做一个函数封装,把数组传入后,就能绘制一个波形文件出来 霸气侧漏 发表于 2017-8-1 21:29
谢谢,串口通信已经搞定,能够当单片机用,虚拟串口也已使用。
现在的问题是,C#能够用,目前可以实现获 ...
额,我攒出来的,太深的不太懂了额。感觉直接把数据添加到到chart的画板上,这个网上也不少例程,没啥好办法,一个一个添加吧,开个定时器或者用串口报文来触发刷新就看需求了。 天下乌鸦一般黑 发表于 2017-8-1 21:36
额,我攒出来的,太深的不太懂了额。感觉直接把数据添加到到chart的画板上,这个网上也不少例程,没啥好 ...
好吧,先这样来弄,
今天做了一次性绘图,感觉还行,就是想封装成一个函数来用用 我想在中断里面,不断的画曲线,用这个程序 ,提示其他信息: “SeriesCollection”中找不到名为“Series0”的图表元素。这个不清楚为什么,但是你在chart里面有定义这个啊。
代码如下
Random ran = new Random();
this.chartScope.Series["Series0"].Points.AddXY((double)Xpoints, ran.Next(100, 999));
霸气侧漏 发表于 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:05
this.chartScope.Series["Series0"].Points.AddXY((double)Xpoints, ran.Next(100, 999));
Series0需要 ...
你看上面的截图,不是已经添加了么?这个还是要自己软件代码添加?
有点不太明白,我直接用的你的代码,按理已经添加 霸气侧漏 发表于 2017-8-3 10:50
你看上面的截图,不是已经添加了么?这个还是要自己软件代码添加?
有点不太明白,我直接用的你的代码, ...
没有添加Series0 ,截图里添加的是Series1-10 对了,你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); 对了,怎样把chart里面的所有曲线数据全清空, chart2.Series.Clear();设置完后,表格就什么都没有,尴尬,如果调用我楼上的程序,数据还是一样的 霸气侧漏 发表于 2017-8-3 14:38
对了,怎样把chart里面的所有曲线数据全清空, chart2.Series.Clear();设置完后,表格就什么都没有,尴尬, ...
比如清除Series1,可以这样:
MSchart.Series["Series1"].Points.Clear(); 天下乌鸦一般黑 发表于 2017-8-3 15:10
比如清除Series1,可以这样:
MSchart.Series["Series1"].Points.Clear();
清除完,显示一片空白,什么都没有,这怎么办 霸气侧漏 发表于 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:12
啊,对了,清除了以后好像需要重新设置下,大概如下
MSchart.ChartAreas["ChartArea ...
我去试试看,嘿嘿 哥们 你好,遇到一个问题,要实现读取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-13 23:49
哥们 你好,遇到一个问题,要实现读取csv里的文件,数据的23.12345 小数点后有5位,
private ...
string str = "123.45678";
float tempfloat = float.Parse(str );
类似这样转试试。
页:
[1]
2