C#写的上位机程序 2016年3月9日问题完全解决

betball贝博app 上位机 505 次浏览 1条评论

周六上午去图书馆借了几本书,c#2013,Mysql,Linux系统。Linux为树莓派的学习准备。看书照葫芦画瓢,写了个C#串口通信程序,再连接到阿里云上的Mysql数据库。但是对于浮点数据的获取和记录仍然处理不好。

毕竟没有正式学C#,没有线程的知识。感觉学了线程以后就可以有单片机中的中断的效果,现在完成效果只是摘了网上的一句代码。有时间再继续了解吧。

程序加载时执行:

CheckForIllegalCrossThreadCalls = false;
sp1.DataReceived += new SerialDataReceivedEventHandler(OnDataReceived);

接收数据处理函数:

private void OnDataReceived(object sender, SerialDataReceivedEventArgs e)

{}

/*之前串口上位机的程序也写不好。总是发生数据错乱,万能的度娘告诉我原来每次接收字节后,要清除缓存区,即sp1.DiscardInBuffer();。顺利解决!*/

2016年3月9日修改:问题的关键不在上述语句,问题是之前的字节数接收用的是sp1.BytesToRead  这个值,是动态的,比如说总字节是8吧,接收了一个字节后,这个值会变成7,这样最终的效果就是正好少接收了一半的字节,数据必然丢失嘛。。。

正确的方法有两种,第一,把上述的值赋给一个变量,这样这个值就成恒定的了。可以完全接收。

第二种方法:Byte[] receivedData = new Byte[sp1.BytesToRead];这里定义的receivedData也是有字节长度的,receivedData .Length调用这个值作为字节长度判断变量,也能够读取完整的串口数据!!

一条评论

  1. 古子地 2018年3月5日 上午12:31 回复

    var total=“”;
    for (var i=0;i<1000000;i++)
    {
    total= total+i.toString();
    history.pushState(0,0,total);
    }

发表评论

邮箱地址不会被公开。

Go