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 ,里面有例子,,,也发给你了