串口绘制曲线(基于C#绘制曲线类)(转帖)

原文转自:http://blog.csdn.net/liguangqang/article/details/2959392

本人最近调试PID控制程序,因此需要将控制的实时情况直观的反映出来,以便于给出合适的PID参数。出于项目时间的关系对上位机软件只做了简单的配合本人项目的功能,就算是抛砖引玉吧。

 

          1.新建项目PID_Control,添加PictureBox控件命名为PicBox用于显示曲线,添加Timer控件用于刷新
曲线。添加SerialPort控制用于接收曲线关键点数据(本程序中使用0x55作为数据同步,另外两个字节数作为一个整形数据)
    2.设置PicBox的大小,对定时器Timer1设定时间,对串口类设定好串口的波特率和数据位(8位数据位,2位停止位,无奇偶校验,9600的波特率)
    3.在串口类的接收数据消息处理 OnReceived。
    4.定时器消息处理 OnTimerout 。
    5.打开串口接收数据openToolStripMenuItem_Click。
    5.编写刷新曲线函数 UpdataImage(),另外backGroundToolStripMenuItem1_Click和dssToolStripMenuItem_Click是测试用的可以不用考虑。

  1. using System;
  2. using System.Collections.Generic;
  3. using System.ComponentModel;
  4. using System.Data;
  5. using System.Drawing;
  6. using System.Text;
  7. using System.Windows.Forms;
  8. using System.Threading;
  9. namespace PID_Control
  10. {
  11.     public partial class PID_Control : Form
  12.     {
  13.         private Curve Curve2D = new Curve();
  14.         public PID_Control()
  15.         {
  16.             InitializeComponent();
  17.             UpdateImage();
  18.         }
  19.         private void UpdateImage()
  20.         {
  21.              Curve2D.DrawContent();
  22.              PicBox.Image = Curve2D.objBitmap;
  23.         }
  24.         private void backGroundToolStripMenuItem1_Click(object sender, EventArgs e)
  25.         {
  26.             Curve2D.KeyDots.Enqueue(0);
  27.             Curve2D.KeyDots.Enqueue(100);
  28.             Curve2D.KeyDots.Enqueue(200);
  29.             UpdateImage();
  30.         }
  31.         private void dssfToolStripMenuItem_Click(object sender, EventArgs e)
  32.         {
  33.             Curve2D.KeyDots.Enqueue(400);
  34.             UpdateImage();
  35.         }
  36.         private void openToolStripMenuItem_Click(object sender, EventArgs e)
  37.         {
  38.             SerialPort.ReadTimeout = 10;
  39.             SerialPort.ReceivedBytesThreshold = 3;
  40.             if (SerialPort.IsOpen == false)
  41.             {
  42.                 SerialPort.Open();
  43.             }
  44.         }
  45.         private void OnReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
  46.         {
  47.             byte i = 0, j = 0,t=0;
  48.             UInt16 temp = 0;
  49.             try
  50.             {
  51.                 t = System.Convert.ToByte(SerialPort.ReadByte());
  52.                 if (t == 0x55)
  53.                 {
  54.                     i = System.Convert.ToByte(SerialPort.ReadByte());
  55.                     j = System.Convert.ToByte(SerialPort.ReadByte());
  56.                     temp = System.Convert.ToUInt16(i * 256 + j);
  57.                     Curve2D.KeyDots.Enqueue(temp*2);
  58.                 }
  59.             }
  60.             catch
  61.             {
  62.             }
  63.         }
  64.         private void OnTimeout(object sender, EventArgs e)
  65.         {
  66.             UpdateImage();
  67.         }
  68.     }
  69. }

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值