读取串口数据画图

本文介绍了使用C#进行串口通信,读取FPGA卡器的8096bytes回复数据,并基于这些数据在Winform中进行画图的过程。作者遇到的挑战包括串口配置、数据接收延迟、数据存储为乱码以及在Winform中无闪烁画图。通过解决这些问题,实现了串口数据的正确接收和显示。
摘要由CSDN通过智能技术生成

同学在用FPGA做读卡器,上位机准备用labview做,因为不熟悉所以让我用C#做个备份,备不时之需。

菜鸟级别就跑去给人家帮忙,越帮越忙。他的要求是自定义串口属性,上位机发送命令,然后读取每次8096bytes的回复数据,然后利用接收到的数据画图,做一些统计和计算。自己做的过程中将问题分解了下:

1、串口读取数据

2、读取的串口数据存储到txt中

3、在winform中画图

从实习开始就有接触到串口,控制GSM模块的时候有用过,自以为比较有点认识。首先是发现原来串口的可选择的波特率是与电脑的配置有关的。我的直接使用主机自带的串口最大支持的波特率为115200;然后通过USB转串口可以支持最高的256000。接着直接将ReceivedBytesThreshold设置成了8096,准备坐等其成。貌似需要加大ReadBufferSize。

直到sleep 2秒才能保证正确的数据接收,而且还会出现完成数据接收后还会触发接收事件的现象,接收到的明显是0,搞不清楚。去查各种C#书,想要看明白串口操作,结果发现C#貌似对网络支持的很强大的样子,串口几乎没有提及,发帖,qq群 有的也就是之言片语。有说是开个线程专门去接收的,但是接收事件不是本身就是一个单独的线程吗。最后通过一直读知道收到足够的数据的方式加快了点速度。 但是同学的labview做出来的没有什么明显的需要接收时间的问题,看来串口操作还是没设置好啊

当还在读数据的时候关闭串口,会报错,添加了个标志。


将接收数据存储下来,网上抄袭各种代码,结果总是得到乱码。不解啊,看了下之前的一个人家的代码,原来少了码制转换。总算可以存储了。

画图,折腾了好久才知道是用graphics来做的,panel上面做图片问题老是会有闪烁的很厉害的问题。picturebox的绘制不是说画上去马上就表现出来的。

顺便贴上自己粗略的代码,记忆一下。

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO;
using System.IO.Ports;
using System.Threading;


namespace UpperConputer
{
    public partial class Form1 : Form
    {
        private SerialPort m_serialport = new SerialPort();
        //private string fullData = "";
        private byte[] fulldata = new byte[8005];
        private List<byte> buffer = new List<byte>(8005);
        private uint[] intData = new uint[2001];
        private bool serialPortMark=false;
        private string xmark;
        public Graphics graphicsObject;
        private Thread threadshow;
        private bool portclosing = false;
        private bool localPortListening = false;
        private delegate void showdelegate();
        private DateTime begin, end;
        
        
        //private string selectedFrequency;
        public Form1()
        {
            InitializeComponent();
        }
        private void Form1_Load(object sender, EventArgs e)
        {
            
            comboBoxSerialPortN.SelectedIndex = 3;
            comboBoxStopBit.SelectedIndex = 0;
            comboBoxDataBit.SelectedIndex = 3;
            comboBoxBuadRate.SelectedIndex = 6;
            comboBoxSelF.SelectedIndex = 7;
            //设置双缓冲
            this.SetStyle(ControlStyles.UserPaint, true);
            this.SetStyle(ControlStyles.AllPaintingInWmPaint, true);
            this.SetStyle(ControlStyles.OptimizedDoubleBuffer, true);
            //newthread=new Thread(new ThreadStart(rec));
            //newthread.Start();
            CreateImage();        
            
        }
        private void showtext(string str)
        {
            textBox1.Text = str;
        }
   
        private

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值