原文转自: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是测试用的可以不用考虑。
- using System;
- using System.Collections.Generic;
- using System.ComponentModel;
- using System.Data;
- using System.Drawing;
- using System.Text;
- using System.Windows.Forms;
- using System.Threading;
- namespace PID_Control
- {
- public partial class PID_Control : Form
- {
- private Curve Curve2D = new Curve();
- public PID_Control()
- {
- InitializeComponent();
- UpdateImage();
- }
- private void UpdateImage()
- {
- Curve2D.DrawContent();
- PicBox.Image = Curve2D.objBitmap;
- }
- private void backGroundToolStripMenuItem1_Click(object sender, EventArgs e)
- {
- Curve2D.KeyDots.Enqueue(0);
- Curve2D.KeyDots.Enqueue(100);
- Curve2D.KeyDots.Enqueue(200);
- UpdateImage();
- }
- private void dssfToolStripMenuItem_Click(object sender, EventArgs e)
- {
- Curve2D.KeyDots.Enqueue(400);
- UpdateImage();
- }
- private void openToolStripMenuItem_Click(object sender, EventArgs e)
- {
- SerialPort.ReadTimeout = 10;
- SerialPort.ReceivedBytesThreshold = 3;
- if (SerialPort.IsOpen == false)
- {
- SerialPort.Open();
- }
- }
- private void OnReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
- {
- byte i = 0, j = 0,t=0;
- UInt16 temp = 0;
- try
- {
- t = System.Convert.ToByte(SerialPort.ReadByte());
- if (t == 0x55)
- {
- i = System.Convert.ToByte(SerialPort.ReadByte());
- j = System.Convert.ToByte(SerialPort.ReadByte());
- temp = System.Convert.ToUInt16(i * 256 + j);
- Curve2D.KeyDots.Enqueue(temp*2);
- }
- }
- catch
- {
- }
- }
- private void OnTimeout(object sender, EventArgs e)
- {
- UpdateImage();
- }
- }
- }