日期:2014-05-18  浏览次数:21361 次

C#通过串口读取数据(时间间隔为3秒),使用gdi+绘制实时曲线
请问各位,如果使用此种方法能否将串口中读取出的数据实时绘制出来(不丢数)?刚实习就遇上这么个难题,小弟表示压力很大、、、、、、、有老各位给小弟讲讲实现思路,或者给小弟发个demo,小弟邮箱121056759@qq.com。。。小弟在此谢过了

------解决方案--------------------
这个不难,串口通讯资料很多,读取数据不难,

读取到的数据用picturebox创建Graphics对象,然后上面画上x(时间),y(数据)轴,把数据用Graphics里面的DrawLines画上就可以了。

读取到的数据变成Point保存到数组,在DrawLines中可以指定数组,直接就画出来了。




------解决方案--------------------
将数据保存到内存,然后搞个线程从内存中读取数据,根据你画图区域的长宽和实际数据折算成一个坐标,然后就在OnPaint事件中画就是了
------解决方案--------------------
设置个Timer每通过3秒发送读取数据指令,在串口接收数据事件中接收数据并绘制出来即可
------解决方案--------------------
串口读数据 可以用串口自带的DataReceived事件
bytes[] bb=port1.Read(bb,0,port1.BytesToRead);
也可以写死循环 过一段时间
string xxx=port1.ReadLine();
totalBuffer+=xxx;
string xxx=prot1.ReadExisting();等等
很多方法都可以读的 关键看你串口进来的数据是什么样子
读完以后 存起来 放在画面上 就哦了
------解决方案--------------------
读串口数据可以用serilport对象的,mychart没有用过,如果有用过的可以解答一下,但是用picturebox肯定是可以的。

你可以写个线程,一直监听串口,有数据的话你就解析出来,你读到的数据肯定都是ascii码,你需要根据你实际接收协议的格式处理后得到实时数据的value,这需要你自己分析了。

给个建议,为了展示方便,你可以把曲线部分做成一个组件,其它程序调用的时候只需要传递坐标轴的value就行了,这样省事。 楼上的哪位写到的port1应该就是serilport对象,你可以从网上搜个例子,一堆一堆的,呵呵


---------------------------
可以用串口自带的DataReceived事件
bytes[] bb=port1.Read(bb,0,port1.BytesToRead);
也可以写死循环 过一段时间
string xxx=port1.ReadLine();
totalBuffer+=xxx;
string xxx=prot1.ReadExisting();等等
很多方法都可以读的 关键看你串口进来的数据是什么样子
读完以后 存起来 放在画面上 就哦了

------解决方案--------------------
加这个群 8345950 ,里面有例子,,,也发给你了