稀土测试课程设计--稀土焙烧炉自动控制系统模拟软件

稀土测试课程设计--稀土焙烧炉自动控制系统模拟软件
稀土测试课程设计--稀土焙烧炉自动控制系统模拟软件

稀土测试课程设计--稀土焙烧炉自动控制系统模拟软件

课程名称:程序设计实训

设计题目:稀土焙烧炉自动控制系统模拟软件

题目稀土焙烧炉自动控制系统模拟软件设计

姓名学号1108020204 班级网工1102

指导老师完成日期2013.7.10 1.设计任务:

1.1设计目的

(1) 了解稀土以及稀土焙烧炉自动控制系统的基本工作原理;

(2) 进一步学习 C 语言或者C++语言程序工程设计的方法以及程序调试技巧;

(3) 学习撰写专业技术文档。

1.2设计内容

稀土焙烧炉自动控制系统模拟软件设计

稀土焙烧炉的控制要求是:

1)要保证进入焙烧炉的稀土矿石粉料和浓硫酸量控制在设定的比例。一般设定稀土矿

石粉料和浓硫酸的比例为1:1(重量比),并根据工艺要求可以适当改变这一比例。

2)规定进入焙烧炉的稀土矿石粉料流量调节范围为每分钟0—10kg,一般设定稀土矿

石粉料进入焙烧炉的流量为5kg/min。

3)1 号操作工要密切观察炉内情况,一旦发现焙烧炉的尾部有原料堆积的情况,就要

及时通知 2 号操作工减少稀土矿石粉料,从而消除焙烧炉尾部原料堆积的情况。

用 C 语言或者C++语言编写一个程序,用形象化方式模拟上述稀土焙烧炉的控制系统

的工作过程。软件要能用适当的方式显示出稀土矿石粉料和浓硫酸的流量以及它们的比例,

当发生稀土矿石粉料和浓硫酸的流量比例超出设定的阈值是,能够用声音和图形的方式报警。

1.3设计指标或者要求

(1) 要求用 C 语言或者C++语言编写满足设计内容的程序,并调试正确;

(2) 撰写设计报告。

2.设计过程

2.1程序功能

软件要能用适当的方式模拟焙烧炉的尾部有原料堆积的情况以及相应的处理过程,当发

生焙烧炉尾部原料堆积时,能够用声音和图形的方式报警;软件要能允许用户在规定范围内设定稀土矿石粉料的流量、稀土矿石粉料和浓硫酸的流量比例以及稀土矿石粉料和浓硫酸的

流量比例阈值等三个参数。

2.2算法原理

2.3程序流程图

2.4程序主要模块或者函数

void CMeter::SetScaleDecimals(int nDecimals)

{

m_nScaleDecimals = nDecimals ;

ReconstructControl() ;

}

void CMeter::SetUnits(CString &strUnits)

{

m_strUnits = strUnits ;

ReconstructControl() ;

}

void CMeter::SetValueDecimals(int nDecimals)

{ 开

设置设置

判断硫酸流量

m_nValueDecimals = nDecimals ;

ReconstructControl() ;

}

void CMeter::DrawNode(CDC *pDC)

{

CPen penDraw, *pPenOld;

COLORREF cEdge, cMiddle, cNode;

cMiddle = RGB(255, 255, 255);

cEdge = RGB(0, 0, 0);

for(int i=m_nCenterRadius*3/4; i>=0; i--)

{

cNode = RGB((GetRValue(cEdge)-GetRValue(cMiddle))*((float)i)*4/(3*m_nCenterR adius)+GetRValue(cMiddle),

(GetGValue(cEdge)-GetGValue(cMiddle))*((float)i)*4/(3*m_nCenterRa dius)+GetGValue(cMiddle),

(GetBValue(cEdge)-GetBValue(cMiddle))*((float)i)*4/(3*m_nCenterRa dius)+GetBValue(cMiddle));

penDraw.DeleteObject();

penDraw.CreatePen(PS_SOLID, 1, cNode);

pPenOld = pDC->SelectObject(&penDraw);

pDC->Arc(m_ptMeterCenter.x-i,

m_ptMeterCenter.y-i,m_ptMeterCenter.x+i,m_ptMeterCenter.y+i,

m_ptMeterCenter.x-i,m_ptMeterCenter.y,m_ptMeterCenter.x-i,m_ptMet erCenter.y);

pDC->SelectObject(pPenOld);

}

}

void CMeter::DrawValue(CDC *pDC)

{

int nHeight;

CPoint pttemp;

CString strtemp;

CFont *pFontOld;

// 数值显示

nHeight = m_nRadiusFrame/5;

pttemp = m_rectValue.CenterPoint();

strtemp.Format("%.*lf", m_nValueDecimals, m_dCurrentValue);

m_font.DeleteObject() ;

m_font.CreateFont (nHeight, 0, 0, 0, 400,

FALSE, FALSE, 0, ANSI_CHARSET,

OUT_DEFAULT_PRECIS,

CLIP_DEFAULT_PRECIS,

DEFAULT_QUALITY,

DEFAULT_PITCH|FF_SWISS, "Arial") ;

pFontOld = pDC->SelectObject(&m_font);

pDC->SetBkColor(m_colorButton);

pDC->SetTextAlign(TA_TOP|TA_CENTER);

pDC->TextOut(pttemp.x, pttemp.y, m_strUnits);

pDC->TextOut(pttemp.x, pttemp.y+nHeight, strtemp);

// 恢复字体和背景色

pDC->SelectObject(pFontOld);

pDC->SetBkColor(m_colorWindow);

}

void CMeter::SetSubTicks(int nSubTicks)

{

m_nSubTicks = nSubTicks;

ReconstructControl();

}

void CMeter::SetAngleRange(int nStartAngleDeg, int nEndAngleDeg) {

m_nStartAngleDeg = nStartAngleDeg;

m_nEndAngleDeg = nEndAngleDeg;

ReconstructControl();

}

3.软件运行或者测试结果

在运行时先添加稀土矿石粉料流量和浓硫酸流量,然后点击计算按钮,会自动计算出稀土矿石粉料和浓硫酸流量的比例,然后设定稀土矿石粉料流量与浓硫酸流量比例的阈值,按全部设置成功按钮,若超出阈值,会弹出对话框提想你重新输入,如果正确,则弹出流量设置成功对话框。

4.设计过程中遇到的问题及解决办法

在刚开始拿到题的时候,没有一点头绪,但是,经过这几天在图书馆找资料,上网百度,慢慢地才对MFC有了一些了解,但是仅凭这些是远远不能完成这次的程序设计,所以在刚开始的时候,我就慢慢的看课件,从最基本的画矩形,画圆开始,慢慢地练习,最后终于能画出成型了,但是动不了,然我我又找资料,发现是用OnTimer()函数来实现的,经过多次调试,终于完成了这次的课程设计。

5.总结

这次的课程设计对我个人来说其实还是比较难的,因为在以前的学习中从来没有接触过MFC,所以在这次课程设计中感觉压力还挺大的。但是,通过我的努力,我觉得我学到了不少知识,学会了怎么用OnDraw()函数,怎样用MFC作图。

通过这次的课程设计,我觉得在平时对知识的总结和积累非常重要。不管学习哪门语言,都得学的精通,而且同时要掌握其他计算机语言,不能老师教什么就只学什么,这样远远不够。就像李老师给我们讲的那样,等工作了好多知识都得自学,我们要时刻保持着不断学习的心态,这样才能学的更好。而且,

必须在平时的学习中养成独立思考的习惯,不能一遇到问题就问别的同学,这样只能使自己的惰性越来越严重,无法真正领悟编程的重要性以及在编程中应该注意的问题。

6.附录(源代码)

// Meter.cpp : implementation file

#include "stdafx.h"

#include "MyMeter.h"

#include "Meter.h"

#include "math.h"

#include "MemDC.h"

#ifdef _DEBUG

#define new DEBUG_NEW

#undef THIS_FILE

static char THIS_FILE[] = __FILE__;

#endif

#define PT_NUM 50

//////////////////////////////////////////////////////////////////// /

// CMeter

CMeter::CMeter()

{

m_nStartAngleDeg = 225;

m_nEndAngleDeg = 315;

m_nTicks = 10;

m_nSubTicks = 5;

m_dMaxValue = 100.0;

m_dMinValue = 0.0;

m_dCurrentValue = 50.0;

m_nScaleDecimals = 0;

m_nValueDecimals = 1;

m_colorNeedle = RGB(255, 0, 0);

m_strUnits = _T("粉料总流量计");

m_bColorTick = FALSE;

// 颜色表格

m_colorTable[0] = RGB(255, 255, 0);

m_colorTable[1] = RGB( 0, 255, 0);

m_colorTable[2] = RGB(255, 0, 0);

m_colorTable[3] = RGB(255,183, 34);

m_colorTable[4] = RGB(255, 92, 93);

}

CMeter::~CMeter()

{

}

BEGIN_MESSAGE_MAP(CMeter, CStatic)

//{{AFX_MSG_MAP(CMeter)

ON_WM_PAINT()

ON_WM_SIZE()

//}}AFX_MSG_MAP

END_MESSAGE_MAP()

//////////////////////////////////////////////////////////////////// /// CMeter message handlers

void CMeter::OnPaint()

{

CPaintDC dc(this); // device context for painting

// 获得控件区域

GetClientRect (&m_rectCtrl);

CMemDC memDC(&dc, &m_rectCtrl);

// 选取圆盘边框半径

m_nRadiusFrame = max(m_rectCtrl.Height(), m_rectCtrl.Width())*9/21;

// 获得仪表盘中心点

m_ptMeterCenter = m_rectCtrl.CenterPoint();

m_ptMeterCenter.y += m_nRadiusFrame/10;

//绘制仪表盘

if(m_dcBackground.GetSafeHdc()== NULL|| (m_bitmapBackground.m_hObject == NULL))

{

m_dcBackground.CreateCompatibleDC(&dc);

m_bitmapBackground.CreateCompatibleBitmap(&dc,

m_rectCtrl.Width(),

m_rectCtrl.Height()) ;

m_pBitmapOldBackground = m_dcBackground.SelectObject(&m_bitmapBackground) ;

DrawMeterBackground(&m_dcBackground, m_rectCtrl);

}

memDC.BitBlt(0, 0, m_rectCtrl.Width(), m_rectCtrl.Height(), &m_dcBackground, 0, 0, SRCCOPY) ;

// 绘制指针

DrawNeedle(&memDC);

DrawNode(&memDC);

DrawValue(&memDC);

// Do not call CStatic::OnPaint() for painting messages

}

void CMeter::DrawMeterBackground(CDC *pDC, CRect &rect)

{

int nInnerRadius = m_nRadiusFrame*8/10; // 内圆弧半径

m_nCenterRadius = m_nRadiusFrame/20; // 中心园半径大小

int nFrame = m_nRadiusFrame/18; // 边框厚度

double dstepTickDeg = (360.0+m_nStartAngleDeg-m_nEndAngleDeg)/(m_nTicks*m_nSubTicks); // 刻度步进角度

int nSubTickR = nInnerRadius+(m_nRadiusFrame-2*nFrame-nInnerRadius)/2;

double dDeg = (m_nStartAngleDeg+360.0-m_nEndAngleDeg)/(TABNUM*PT_NUM);

CRect rectPanel,rectInnerPanel;

CPen penDraw, *pPenOld;

CFont *pFontOld;

CBrush brushFill, *pBrushOld;

POINT ptStart, ptEnd, ptInnerStart, ptInnerEnd;

CPoint pointInner[BOUNDARY_POINTS], ptGroup1[PT_NUM*TABNUM+1], ptGroup2[PT_NUM*TABNUM+1];

CPoint ptRgn[PT_NUM*2+2];

CPoint pttemp;

CString strtemp;

double dRadPerDeg;

double dTickAngleRad;

double dTemp;

int nRef = 0;

int nTickAngle;

int nHeight; // 字体大小

double dtempangle;

// 计算起始角终止角弧度

dRadPerDeg = 4.0*atan(1.0)/180.0;

m_dLeftAngleRad = (m_nStartAngleDeg-180.0)*dRadPerDeg;

m_dRightAngleRad = (m_nEndAngleDeg-360.0)*dRadPerDeg;

// 计算圆弧起始终止点及区域

ptStart.x = m_ptMeterCenter.x-(int)(m_nRadiusFrame*cos(m_dLeftAngleRad));

ptStart.y = m_ptMeterCenter.y+(int)(m_nRadiusFrame*sin(m_dLeftAngleRad));

ptEnd.x = m_ptMeterCenter.x+(int)(m_nRadiusFrame*cos(-m_dRightAngleRad));

ptEnd.y = m_ptMeterCenter.y+(int)(m_nRadiusFrame*sin(-m_dRightAngleRad));

rectPanel.SetRect(m_ptMeterCenter.x-m_nRadiusFrame,

m_ptMeterCenter.y-m_nRadiusFrame,

m_ptMeterCenter.x+m_nRadiusFrame,

m_ptMeterCenter.y+m_nRadiusFrame);

// 获取点的位置

for(int i=0; i<=PT_NUM*TABNUM; i++)

{

ptGroup1[i].x = m_ptMeterCenter.x + (int)((m_nRadiusFrame-nFrame)*cos((m_nStartAngleDeg-i*dDeg)*dRadPerD eg));

ptGroup1[i].y = m_ptMeterCenter.y - (int)((m_nRadiusFrame-nFrame)*sin((m_nStartAngleDeg-i*dDeg)*dRadPerD eg));

ptGroup2[i].x = m_ptMeterCenter.x + (int)(m_nRadiusFrame*8*cos((m_nStartAngleDeg-i*dDeg)*dRadPerDeg)/10) ;

ptGroup2[i].y = m_ptMeterCenter.y - (int)(m_nRadiusFrame*8*sin((m_nStartAngleDeg-i*dDeg)*dRadPerDeg)/10) ;

}

// 获取系统颜色;

m_colorWindow = GetSysColor(COLOR_WINDOW);

m_colorButton = GetSysColor(COLOR_BTNFACE);

m_colorShadow = GetSysColor(COLOR_BTNSHADOW);

m_colorHighlight = GetSysColor(COLOR_BTNHIGHLIGHT);

m_colorText = GetSysColor(COLOR_BTNTEXT);

// 临时使用的颜色

COLORREF colorCaption, cEdge, cMiddle;

cMiddle = RGB(255, 255, 255);

cEdge = RGB(96, 96, 255);

// 用按钮色绘制背景

brushFill.DeleteObject();

brushFill.CreateSolidBrush(m_colorButton);

pBrushOld = pDC->SelectObject(&brushFill);

pDC->Rectangle(rect);

pDC->SelectObject(pBrushOld);

// 绘制圆盘边框

for(int iOnBand=nFrame; iOnBand>0; iOnBand--)

{

penDraw.DeleteObject();

colorCaption = RGB((GetRValue(cEdge)-GetRValue(cMiddle))*((float)iOnBand)/nFrame+Ge tRValue(cMiddle),

(GetGValue(cEdge)-GetGValue(cMiddle))*((float)iOnBand)/nFrame+Get GValue(cMiddle),

(GetBValue(cEdge)-GetBValue(cMiddle))*((float)iOnBand)/nFrame+Get BValue(cMiddle));

penDraw.CreatePen(PS_SOLID, iOnBand*2, colorCaption);

pPenOld = pDC->SelectObject(&penDraw);

pDC->Arc(&rectPanel, ptEnd, ptStart);

pDC->SelectObject(pPenOld);

}

// 绘制内圈

ptInnerStart.x = m_ptMeterCenter.x-(int)(nInnerRadius*cos(m_dLeftAngleRad));

ptInnerStart.y = m_ptMeterCenter.y+(int)(nInnerRadius*sin(m_dLeftAngleRad));

ptInnerEnd.x = m_ptMeterCenter.x+(int)(nInnerRadius*cos(-m_dRightAngleRad));

ptInnerEnd.y = m_ptMeterCenter.y+(int)(nInnerRadius*sin(-m_dRightAngleRad));

rectInnerPanel.SetRect(m_ptMeterCenter.x-nInnerRadius,

m_ptMeterCenter.y-nInnerRadius,

m_ptMeterCenter.x+nInnerRadius ,m_ptMeterCenter.y+nInnerRadius);

penDraw.DeleteObject();

penDraw.CreatePen(PS_SOLID, 1, RGB(255,255,0));

pPenOld = pDC->SelectObject(&penDraw);

pDC->Arc(&rectInnerPanel, ptInnerEnd, ptInnerStart);

pDC->SelectObject(pPenOld);

if(m_bColorTick)

{

// 绘制色彩刻度

for(i=0; i

{

//确定区域

for(int j=0; j<=PT_NUM; j++)

{

ptRgn[j] = ptGroup1[i*PT_NUM+j];

ptRgn[2*PT_NUM+1-j] = ptGroup2[i*PT_NUM+j];

}

brushFill.DeleteObject();

brushFill.CreateSolidBrush(m_colorTable[i]);

pBrushOld = pDC->SelectObject(&brushFill);

penDraw.DeleteObject();

penDraw.CreatePen(PS_SOLID, 1, m_colorTable[i]);

pPenOld = pDC->SelectObject(&penDraw);

pDC->Polygon(ptRgn, 2*PT_NUM+2);

pDC->SelectObject(pBrushOld);

pDC->SelectObject(pPenOld);

}

}

// 计算刻度点,避免不能整除引起较大误差*100

for(nTickAngle=m_nStartAngleDeg*100;

nTickAngle>=(m_nEndAngleDeg-360)*100;

nTickAngle-=(int)(dstepTickDeg*100))

{

// 转换成弧度

dTickAngleRad = (double)nTickAngle/100*dRadPerDeg;

// 确定外圈坐标

// 确定x坐标

dTemp = m_ptMeterCenter.x + (m_nRadiusFrame-2*nFrame)*cos(dTickAngleRad);

m_pointBoundary[nRef].x = ROUND(dTemp);

// 确定y坐标

dTemp = m_ptMeterCenter.y - (m_nRadiusFrame-2*nFrame)*sin(dTickAngleRad);

m_pointBoundary[nRef].y = ROUND(dTemp);

// 确定刻度点(主刻度和子刻度)

//主刻度及文本标注点

if(nRef%m_nSubTicks == 0)

{

dTemp = m_ptMeterCenter.x + nInnerRadius*cos(dTickAngleRad);

pointInner[nRef].x = ROUND(dTemp);

dTemp = m_ptMeterCenter.y - nInnerRadius*sin(dTickAngleRad);

pointInner[nRef].y = ROUND(dTemp);

}

// 子刻度

else

{

dTemp = m_ptMeterCenter.x + nSubTickR*cos(dTickAngleRad);

pointInner[nRef].x = ROUND(dTemp);

dTemp = m_ptMeterCenter.y - nSubTickR*sin(dTickAngleRad);

pointInner[nRef].y = ROUND(dTemp);

}

nRef++ ;

}

// 多边形区域

m_rgnBoundary.DeleteObject() ;

m_rgnBoundary.CreatePolygonRgn(m_pointBoundary, nRef, ALTERNATE);

m_rectValue.top = m_ptMeterCenter.y + m_nRadiusFrame/5;

m_rectValue.bottom = m_ptMeterCenter.y + m_nRadiusFrame/2;

m_rectValue.left = m_ptMeterCenter.x - m_nRadiusFrame/2;

m_rectValue.right = m_ptMeterCenter.x + m_nRadiusFrame/2;

// 绘制刻度

penDraw.DeleteObject();

penDraw.CreatePen(PS_SOLID, 1, RGB(0,0,0));

pPenOld = pDC->SelectObject(&penDraw);

for(i=0; i

{

pDC->MoveTo(m_pointBoundary[i]);

pDC->LineTo(pointInner[i]);

}

pDC->SelectObject(pPenOld);

// 刻度标号

// 确定字体大小

nHeight = m_nRadiusFrame/6;

m_font.CreateFont(nHeight, 0, 0, 0, 400,

FALSE, FALSE, 0, ANSI_CHARSET,

OUT_DEFAULT_PRECIS,

CLIP_DEFAULT_PRECIS,

DEFAULT_QUALITY,

DEFAULT_PITCH|FF_SWISS, "Arial");

pFontOld = pDC->SelectObject(&m_font);

pDC->SetBkMode(TRANSPARENT);

for(i=0; i<=m_nTicks; i++)

{

dtempangle = m_nStartAngleDeg-i*m_nSubTicks*dstepTickDeg;

strtemp.Format("%.*lf", m_nScaleDecimals, (m_dMinValue+(m_dMaxValue-m_dMinValue)*i/m_nTicks));

if(dtempangle>190)

{

pDC->SetTextAlign(TA_BOTTOM|TA_LEFT);

pDC->TextOut(pointInner[m_nSubTicks*i].x,

pointInner[m_nSubTicks*i].y+nHeight/2, strtemp);

}

else if(dtempangle>170)

{

pDC->SetTextAlign(TA_BASELINE|TA_LEFT);

pDC->TextOut(pointInner[m_nSubTicks*i].x,

pointInner[m_nSubTicks*i].y+nHeight/3, strtemp);

}

else if(dtempangle>135)

{

pDC->SetTextAlign(TA_BASELINE|TA_LEFT);

pDC->TextOut(pointInner[m_nSubTicks*i].x,

pointInner[m_nSubTicks*i].y+nHeight/2, strtemp);

}

else if(dtempangle>100)

{

pDC->SetTextAlign(TA_TOP|TA_LEFT);

pDC->TextOut(pointInner[m_nSubTicks*i].x-nHeight/4,

pointInner[m_nSubTicks*i].y-nHeight/8, strtemp);

}

else if(dtempangle>80)

{

pDC->SetTextAlign(TA_TOP|TA_CENTER);

pDC->TextOut(pointInner[m_nSubTicks*i].x,

pointInner[m_nSubTicks*i].y, strtemp);

}

else if(dtempangle>45)

{

pDC->SetTextAlign(TA_BOTTOM|TA_RIGHT);

pDC->TextOut(pointInner[m_nSubTicks*i].x+nHeight/3, pointInner[m_nSubTicks*i].y+nHeight, strtemp);

}

else if(dtempangle>10)

{

pDC->SetTextAlign(TA_RIGHT|TA_BASELINE);

pDC->TextOut(pointInner[m_nSubTicks*i].x,

pointInner[m_nSubTicks*i].y+nHeight/2, strtemp);

}

else if(dtempangle>-10)

{

pDC->SetTextAlign(TA_RIGHT|TA_BASELINE);

pDC->TextOut(pointInner[m_nSubTicks*i].x,

pointInner[m_nSubTicks*i].y+nHeight/3, strtemp);

}

else

{

pDC->SetTextAlign(TA_RIGHT|TA_BOTTOM);

pDC->TextOut(pointInner[m_nSubTicks*i].x,

pointInner[m_nSubTicks*i].y+nHeight/2, strtemp);

}

}

pDC->SelectObject(pFontOld);

}

void CMeter::ReconstructControl()

{

if ((m_pBitmapOldBackground) &&

(m_bitmapBackground.GetSafeHandle()) &&

(m_dcBackground.GetSafeHdc()))

{

m_dcBackground.SelectObject(m_pBitmapOldBackground);

m_dcBackground.DeleteDC() ;

m_bitmapBackground.DeleteObject();

}

Invalidate ();

}

void CMeter::OnSize(UINT nType, int cx, int cy)

{

CStatic::OnSize(nType, cx, cy);

// TODO: Add your message handler code here

ReconstructControl() ;

}

void CMeter::DrawNeedle(CDC *pDC)

{

int nResult;

double dRadPerDeg = 4.0*atan(1.0)/180.0;

double dAngleDeg;

double dAngleRad ;

double dTemp ;

CBrush brushFill, *pBrushOld ;

CPen penDraw, *pPenOld ;

CPoint pointNeedle[4] ; // 指针由四边形组成

// 计算角度并限定指针走的角度

dAngleDeg = m_nStartAngleDeg-(360.0+m_nStartAngleDeg-m_nEndAngleDeg)

*(m_dCurrentValue-m_dMinValue)/(m_dMaxValue-m_dMinValue);

dAngleDeg = min(dAngleDeg, m_nStartAngleDeg);

dAngleDeg = max(dAngleDeg, m_nEndAngleDeg-360.0);

dAngleRad = dAngleDeg*dRadPerDeg;

// 计算三角形底边两个点

pointNeedle[0].x = m_ptMeterCenter.x - (int)(m_nCenterRadius*10*sin(dAngleRad)/8);

pointNeedle[0].y = m_ptMeterCenter.y - (int)(m_nCenterRadius*10*cos(dAngleRad)/8);

pointNeedle[2].x = m_ptMeterCenter.x + (int)(m_nCenterRadius*10*sin(dAngleRad)/8);

pointNeedle[2].y = m_ptMeterCenter.y + (int)(m_nCenterRadius*10*cos(dAngleRad)/8);

// 计算指针顶部坐标

dTemp = m_ptMeterCenter.x + m_nRadiusFrame*cos(dAngleRad)*95/100;

pointNeedle[1].x = ROUND(dTemp);

dTemp = m_ptMeterCenter.y - m_nRadiusFrame*sin(dAngleRad)*95/100;

pointNeedle[1].y = ROUND(dTemp);

// 计算指针尾部坐标

dTemp = m_ptMeterCenter.x - m_nRadiusFrame*cos(dAngleRad)/6;

pointNeedle[3].x = ROUND(dTemp);

dTemp = m_ptMeterCenter.y + m_nRadiusFrame*sin(dAngleRad)/6;

pointNeedle[3].y = ROUND(dTemp);

pDC->SelectClipRgn(&m_rgnBoundary);

brushFill.CreateSolidBrush(m_colorNeedle); penDraw.CreatePen(PS_SOLID, 1, m_colorNeedle); pPenOld = pDC->SelectObject(&penDraw) ;

pBrushOld = pDC->SelectObject(&brushFill) ;

// 绘制指针

pDC->Polygon(pointNeedle, 4);

nResult = pDC->SelectClipRgn(NULL);

pDC->SelectObject(pPenOld);

pDC->SelectObject(pBrushOld);

// 立体感处理

if(dAngleDeg>90)

{

penDraw.DeleteObject();

penDraw.CreatePen(PS_SOLID, 2, m_colorShadow);

pPenOld = pDC->SelectObject(&penDraw);

pDC->MoveTo(pointNeedle[1]);

pDC->LineTo(pointNeedle[0]);

pDC->LineTo(pointNeedle[3]);

pDC->SelectObject(pPenOld);

penDraw.DeleteObject();

penDraw.CreatePen(PS_SOLID, 1, m_colorHighlight);

pPenOld = pDC->SelectObject(&penDraw);

pDC->MoveTo(pointNeedle[1]);

pDC->LineTo(pointNeedle[2]);

pDC->LineTo(pointNeedle[3]);

pDC->SelectObject(pPenOld);

}

else

{

penDraw.DeleteObject();

penDraw.CreatePen(PS_SOLID, 2, m_colorShadow);

pPenOld = pDC->SelectObject(&penDraw);

pDC->MoveTo(pointNeedle[1]);

pDC->LineTo(pointNeedle[2]);

pDC->LineTo(pointNeedle[3]);

pDC->SelectObject(pPenOld);

penDraw.DeleteObject();

penDraw.CreatePen(PS_SOLID, 1, m_colorHighlight);

pPenOld = pDC->SelectObject(&penDraw);

pDC->MoveTo(pointNeedle[1]);

pDC->LineTo(pointNeedle[0]);

pDC->LineTo(pointNeedle[3]);

pDC->SelectObject(pPenOld);

}

}

void CMeter::UpdateNeedle(double dValue)

{

m_dCurrentValue = dValue;

Invalidate();

}

void CMeter::SetNeedleColor(COLORREF colorNeedle)

{

m_colorNeedle = colorNeedle ;

ReconstructControl() ;

}

void CMeter::SetRange(double dMin, double dMax)

{

m_dMaxValue = dMax ;

m_dMinValue = dMin ;

ReconstructControl() ;

}

void CMeter::SetScaleDecimals(int nDecimals)

{

m_nScaleDecimals = nDecimals ;

ReconstructControl() ;

}

void CMeter::SetUnits(CString &strUnits)

{

m_strUnits = strUnits ;

ReconstructControl() ;

}

void CMeter::SetValueDecimals(int nDecimals)

{

m_nValueDecimals = nDecimals ;

ReconstructControl() ;

}

void CMeter::DrawNode(CDC *pDC)

{

CPen penDraw, *pPenOld;

COLORREF cEdge, cMiddle, cNode;

cMiddle = RGB(255, 255, 255);

cEdge = RGB(0, 0, 0);

for(int i=m_nCenterRadius*3/4; i>=0; i--)

{

cNode = RGB((GetRValue(cEdge)-GetRValue(cMiddle))*((float)i)*4/(3*m_nCenterR

adius)+GetRValue(cMiddle),

(GetGValue(cEdge)-GetGValue(cMiddle))*((float)i)*4/(3*m_nCenterRa dius)+GetGValue(cMiddle),

(GetBValue(cEdge)-GetBValue(cMiddle))*((float)i)*4/(3*m_nCenterRa dius)+GetBValue(cMiddle));

penDraw.DeleteObject();

penDraw.CreatePen(PS_SOLID, 1, cNode);

pPenOld = pDC->SelectObject(&penDraw);

pDC->Arc(m_ptMeterCenter.x-i,

m_ptMeterCenter.y-i,m_ptMeterCenter.x+i,m_ptMeterCenter.y+i,

m_ptMeterCenter.x-i,m_ptMeterCenter.y,m_ptMeterCenter.x-i,m_ptMet erCenter.y);

pDC->SelectObject(pPenOld);

}

}

void CMeter::SetColorTick(BOOL bColorTick)

{

m_bColorTick = bColorTick;

ReconstructControl();

}

void CMeter::DrawValue(CDC *pDC)

{

int nHeight;

CPoint pttemp;

CString strtemp;

CFont *pFontOld;

// 数值显示

nHeight = m_nRadiusFrame/5;

pttemp = m_rectValue.CenterPoint();

strtemp.Format("%.*lf", m_nValueDecimals, m_dCurrentValue);

m_font.DeleteObject() ;

m_font.CreateFont (nHeight, 0, 0, 0, 400,

FALSE, FALSE, 0, ANSI_CHARSET,

OUT_DEFAULT_PRECIS,

CLIP_DEFAULT_PRECIS,

DEFAULT_QUALITY,

DEFAULT_PITCH|FF_SWISS, "Arial") ;

pFontOld = pDC->SelectObject(&m_font);

pDC->SetBkColor(m_colorButton);

pDC->SetTextAlign(TA_TOP|TA_CENTER);

pDC->TextOut(pttemp.x, pttemp.y, m_strUnits);

控制装置与仪表课程设计报告书

控制装置与仪表课程设计 课程设计报告 ( 2012-- 2013年度第二学期) 名称:控制装置与仪表课程设计 题目:炉膛压力系统死区控制系统设计院系: 班级: 学号: 学生: 指导教师: 设计周数:一周 成绩: 日期:2013年7 月5日

一、课程设计(综合实验)的目的与要求 1.1 目的与要求 (1)认知控制系统的设计和控制仪表的应用过程。 (2)了解过程控制方案的原理图表示方法(SAMA图)。 (3)掌握数字调节器KMM的组态方法,熟悉KMM的面板操作、数据设定器和KMM数据写入器的使用方法。 (4)初步了解控制系统参数整定、系统调试的过程。 1.2设计实验设备 KMM数字调节器、KMM程序写入器、PROM擦除器、控制系统模拟试验台1 1.3 主要容 1. 按选题的控制要求,进行控制策略的原理设计、仪表选型并将控制方案以SAMA 图表示出来。 2 . 组态设计 2.1 KMM组态设计 以KMM单回路调节器为实现仪表并画出KMM仪表的组态图,由组态图填写KMM 的各组态数据表。 2.2 组态实现 在程序写入器输入数据,将输入程序写入EPROM芯片中。 3. 控制对象模拟及过程信号的采集 根据控制对象特性,以线性集成运算放大器为主构成反馈运算回路,模拟控制对 象的特性。将定值和过程变量送入工业信号转换装置中,以便进行观察和记录。 4. 系统调试 设计要求进行动态调试。动态调试是指系统与生产现场相连时的调试。由于生产 过程已经处于运行或试运行阶段,此时应以观察为主,当涉及到必需的系统修改 时,应做好充分的准备及安全措施,以免影响正常生产,更不允许造成系统或设 备故障。动态调试一般包括以下容: 1)观察过程参数显示是否正常、执行机构操作是否正常; 2)检查控制系统逻辑是否正确,并在适当时候投入自动运行; 3)对控制回路进行在线整定; 4)当系统存在较大问题时,如需进行控制结构修改、增加测点等,要重新组态下装。 二、设计(实验)正文 1设计题目:炉膛压力系统死区控制系统设计(如附图1) 附图1: 引风机 炉膛压力系统死区单回路控制系统

基于Labview的压力测试系统

现代检测技术综合设计报告 课程设计题目:基于虚拟仪器的压力测量系统 学院名称:电子与信息工程学院 专业:电气工程及其自动化 班级:电气12-1 姓名:杨育新学号 12401170103 同组者姓名: 指导教师:黄晶 日期:2014.06.09~2014.06.20

目录 一、任务书..................................................1 二、总体设计方案 2.1 现代测控技术发展概述.....................................1 2.2 自动检测系统的原理框图...................................2 三、压力传感器 3.1 传感器的选择.............................................2 3.2 工作原理.................................................2 3.3 工作特性.................................................3 四、硬件设计 4.1 应变片的测量转换电路.....................................3 4.2 电桥的放大电路...........................................4 4.3 压力测量的总电路图...........................................5 五、Labview软件设计 5.1 程序流程图的设计..........................................6 5.2 前面板的设计.............................................6 5.3 实验框图的设计...........................................8 六、调试情况及结论 6.1 程序的调试..............................................12 6.2 实验结论................................................14 七、课程设计心得体会.......................................14参考资料.....................................................14

课程设计说明书_智能压力测量仪

郑州华信学院 课程设计说明书 题目:智能压力测量仪 姓名:杨巍 院(系):机电工程学院 专业班级:电气工程三班 学号:1102120310 指导教师:宋东亚杨坤漓 成绩: 时间:2013年12月17 日至2013 年12 月28 日

郑州华信学院 课程设计任务书 题目智能压力测量仪 专业、班级电气工程及其自动化三班 学号 1102120310 姓名杨巍 主要内容: 利用单片机计一个智能压力测量仪,要求显示压力数据。 基本要求: 1.设计一个智能压力测量仪,要求显示当前压力数值。 2.利用proteus软件完成设计电路和仿真; 3.掌握并口驱动数码管动态显示的方法; 4.通过此次设计将单片机软硬件结合起来对程序进行编辑、校验,锻炼实践能力和理论联系实际的能力。 主要参考资料: [1]李全利,单片机原理及接口技术[M],高等教育出版社 [2]王文杰,单片机应用技术[M],冶金工业出版社 [3]朱清慧,PROTEUS教程——电子线路设计、制版与仿真[M], 清华大学出版社 [4]单片机实验指导书,天煌教仪 [5]彭伟,单片机C语言程序设计实训100例[M],电子工业出版社 完成期限: 指导教师签名: 课程负责人签名:

年月日 目录 摘要 ...................................................................................................................................................... - 4 -1 引言 .................................................................................................................................................... - 4 - 1.1 问题的提出 .................................................................................................................. - 4 - 1.2任务与分析 ................................................................................................................... - 4 - 2方案设计 ................................................................................................................................................. - 5 - 2.1 系统方案设计论证....................................................................................................... - 5 - 2.1.1系统的控制方案设计......................................................................................... - 5 - 2.2最终设计方案总体设计框图........................................................................................ - 5 - 3 系统硬件设计 ........................................................................................................................................ - 6 - 3.1 AT89C51单片机 ........................................................................................................... - 6 - 3.1.1 AT89C51单片机介绍 ........................................................................................ - 6 - 3.1.2 选用AT89C51单片机原因 ...................................................................................... - 7 - 3.2 时钟电路 ...................................................................................................................... - 8 - 3.3 复位电路 ...................................................................................................................... - 8 - 3.4 PG160128A显示电路................................................................................................... - 9 -

《信息系统分析与设计》课程设计试验报告

目录 一、开发计划 (1) 1. 所选题目 (1) 2. 小组信息 (1) 3. 项目背景 (1) 二、需求分析 (2) 1. 需求定义说明书 (2) 2. 数据流图 (2) 3. 数据字典 (4) 1)数据项的定义 (4) 2)数据流的定义 (4) 3)数据存储的定义 (4) 4)处理逻辑的定义 (5) 三、概要设计 (5) 1. 系统功能模块结构图 (5) 2. 数据库概要设计(E-R图) (6) 3. 代码设计 (6) 4. 输入/输出界面设计 (7) 四、详细设计 (8) 1. 主界面模块 (8) 1) 界面设计 (8) 2) 编码 (11) 2. 派车功能模块 (11) 1) 界面设计 (12) 2) 编码 (19) 五、测试与调试 (30) 1. 系统测试目标 (30) 2. 任务测试的任务 (30) 3. 系统测试的方法 (31) 4. 系统测试用例设计 (31) 六、对软件分析、设计及实施方面的评价及体会 (32) 七、组长对小组工作及成员的评价 (32)

一、开发计划 1. 所选题目 车辆管理系统 2. 小组信息 1)小组成员:XXXXXX 2)任务分配: 7月3日: XXX:分析管理功能模块代码 XXX:分析课题,编写开发计划、需求分析 7月4日: XXX:绘制数据流程图、E-R图、模块结构图 XXX:运行系统,分析数据库结构、系统结构、数据流程、数据字典 7月5日: XXX:测试功能模块,记录测试过程及结果 XXX:测试功能模块,记录测试过程及结果 7月6日: XXX:编写好实验报告并提交 3. 项目背景 1)原系统:随着经济的日益增长,车辆作为最重要的交通工具,在企事业单位中得到普及,单位的车辆数目已经远远不止简单的几辆,与此同时就产生了车辆资源的合理分配使用问题。该问题涉及到车辆的档案管理;驾驶员档案管理;车辆(维修费用、洗车费用、燃料费用等)管理;车辆使用管理和交通事故管理等。如何对一个企事业单位的车辆进行合理分配使用,使其发挥最大的使用价值,所以该系统对于一个用车单位来说,不但可以对车辆的使用进行合理的管理,而且对车辆的使用情况进行跟踪记录,这对于单位车辆责任到人,费用清晰,避免责任混乱、费用虚假等一系列相应问题的解决。 2)目标系统:原系统的设计基本满足要求,但也存在着些许不足之处,我们所要做的就是分析原系统,尽可能的完善原系统。

基于单片机的压力测试系统设计与实现 任务书

黄河科技学院本科毕业设计任务书 信息工程学院电子与通信工程系光电信息科学与工程 专业2013 级普本1 班学号学生指导教师 毕业设计题目 基于单片机的压力测试系统设计与实现 毕业设计工作内容与基本要求 一、背景和意义 近年来,随着微型计算机的发展,他的应用在人们的工作和日常生活中越来越普遍。工业过程控制是计算机的一个重要应用领域。其中由单片机构成的嵌入式系统已经越来越受到人们的关注。现在可以毫不夸张的说,没有微型计算机的仪器不能称为先进的仪器,没有微型计算机的控制系统不能称其为现代控制系统的时代已经到来。压力测量对实时监测和安全生产具有重要的意义。在工业生产中,为了高效、安全生产,必须有效控制生产过程中的诸如压力、流量、温度等主要参数。由于压力控制在生产过程中起着决定性的安全作用,因此有必要准确地测量压力。 二、目标和任务 1.设计要求画出电路原理图;完成元器件及参数选择;PCB文件生成与打印输出。 2.深刻理解STC89C52单片机控制器、MPX系列压力传感器、8位A/D转换器的工作原理及主要功能,主程序实现流程。 3.完成压力测试系统电路设计和系统调试工作。 4.详细分析压力测试系统的整体工作原理和软件实现流程。 5.编写设计报告,写出设计与制作的全过程,附上有关资料和图纸,有心得体会。 三、途径和方法 本课题利用传感器原理及应用、模拟电子技术、数字电子技术、protel工具等设计压力测试系统电路,可以先查阅相关资料(网上查找或参考相关书籍手册),明确课题的方向和目的,然后学习完成课题所需的理论知识,了解其工作

原理;在理解的基础上确定设计电路方案,设计电路,画出原理图及PCB印制版图;最后提交写出毕业设计说明书一份。 四、主要参考资料 [1]张志良主编.单片机原理与控制技术[M]. 机械工业出版社, 2013.6. [2] 李朝青编著.单片机原理及接口技术.北京[M]:北京航天航空大学出版社,2012. [3] 王雪文, 传感器原理及应用.北京[M]:北京航空航天出版社,2014 [4]田立,方震.51单片机C语言程序设计快速入门[M].北京:人民邮电出版,2007. [5]Yongxian Song ,Yuan Feng, Juanli Ma ,Xianjin Zhang .Design of LED Display Control System Based on AT89C52 Single Chip Microcomputer[J] JOURNAL OF COMPUTERS, VOL. 6, NO. 4, APRIL 2011. [6]朱彩霞.基于AT89C51单片机A/D转换电路的研究[J] 淮阴工学院学报.2011.01 五、技术要求 1.要求学生具有一定的电子设计与制作方面的理论知识,熟悉集成电路的引脚安排;掌握各芯片的逻辑功能及使用方法;了解面包板结构及其接线方法。了解单片机的组成及工作原理; 2.学校机房提供上网功能,安排学生每周不少于2次上机; 3.图书馆要求开放,能够提供资料查询; 4.安排学生辅导与学习的场所; 毕业设计时间:2016 年02 月29 日至2016 年05 月15 日 计划答辩时间:2016 年05 月20 日 工作任务与工作量要求:原则上查阅文献资料不少于12篇,其中外文资料不少于2篇;文献综述不少于3000字;理工科类论文或设计说明书不少于8000字(同时提交有关图纸和附件),提交相关图纸、实验报告、调研报告、译文等其它形式的成果。毕业设计(论文)撰写规范及有关要求,请查阅《黄河科技学院本科毕业设计(论文)指导手册》。 专业(教研室)审批意见: 审批人(签字):

检测及仪表课程设计(DOC)

目录 1设计目的 (2) 2题目介绍 (2) 3 背景意义 (2) 3.1实验装置简介 (2) 3.2研究污垢传热的理论知识 (3) 4参数检测与控制 (5) 4.1进出口温度水浴温度测量 (5) 4.1.1 仪表种类选用及依据 (5) 4.1.2 注意事项 (6) 4.1.3 可能误差 (6) 4.2 实验管壁温测量 (7) 4.2.1 仪表种类选用及依据 (7) 4.2.2 可能误差 (7) 4.3 水位的测量 (7) 4.3.1 仪表种类选用及依据 (7) 4.3.2 注意事项 (8) 4.3.3 可能误差 (8) 4.4 实验管内流体流量的测量 (8) 4.4.1仪表种类选用与依据 (8) 4.4.2 可能误差 (10) 4.5 差压测量 (10) 4.5.1仪表种类选用与依据 (10) 4.5.2 可能误差 (11) 5.参考文献 (12)

第1章绪论 1.1设计目的 针对“应用技术主导型”普通工科高等教育的特点,从工程创新的理念出发,以工程思维模式为主,旨在培养突出“实践能力、创新意识和创业精神”特色的、适应当前经济社会发展需要的“工程应用型人才”。通过在模拟的实战环境中系统锻炼,使学生的学习能力、思维能力、动手能力、工程创新能力和承受挫折能力都得到综合提高。以增强就业竞争力和工作适应力。 2题目介绍 本课设题目以一多功能动态实验装置为对象,要求综合以前所学知识,完成此实验装置所需检测参数的检测。设计检测方案,包括检测方法、仪表种类选用以及需要注意事项,并分析误差产生的原因等等。 该实验装置上,需要检测和控制的参数主要有: 1、温度:包括实验管流体进口(20~40℃)、出口温度(20~80 ℃), 2、实验管壁温(20~80 ℃)以及水浴温度(20~80 ℃) 3、水位:补水箱上位安装,距地面2m,其水位要求测量并控制,以适应不同流速的需要,水位变动范围200mm~500mm 4、流量:实验管内流体流量需要测量,管径Φ25mm,流量范围0.5~4m3/h 5、差压:由于结垢导致管内流动阻力增大,需要测量流动压降,范围为0~50mm 水柱 3 背景意义 3.1实验装置简介 如图3—1所示的实验装置是东北电力大学节能与测控研究中心杨善让教授为首的课题组基于测量新技术—软测量技术开发的多功能实验装置。 基于本实验装置,先后完成国家、东北电力公司、省、市多项科研项目并获奖,鉴定结论为国际领先。目前承担国家自然科学基金、973项目部分实验工作。

软件测试课程设计报告(模板)

课程设计 课程名称软件测试技术题目名称图书系统软件测试专业班级软件工程 学生姓名 学号 指导教师褚伟 二○一六年五月二十四日

目录 1.测试需求分析 (3) 1.1系统概述 (4) 1.2测试需求 (4) 2. 测试概要 (5) 3.测试计划 (5) 3.1测试方案的选择 (5) 3.2测试方案: (7) 3.3测试项目 (7) 3.4测试准备 (7) 3.5 测试覆盖率要求 (7) 4.测试项目说明 (8) 4.1测试项目名称及测试内容 (8) 4.2测试用例 (9) 5.对软件功能的结论 (24) 5.1功能1(系统登录) (24) 5.2功能2(图书管理测试) (24) 5.3功能3(图书查询测试) (24) 5.4功能4(系统管理测试) (24) 5.5功能5(借书测试) (24) 5.6功能6(还书测试) (25) 6.测试评价与结论 (25) 6.1能力 (25) 6.2缺陷和限制 (25) 6.3建议 (25) 7.总结 (26) 8.参考资料 (27)

摘要(中英文)

1.测试需求分析 1.1系统概述 本图书管理系统是一款功能非常强大的图书管理软件,本系统在继承了以往系统版本优点的基础上做了进一步优化;在功能上,本系统不仅包含图书管理的常用功能(如书籍管理、期刊管理、物品管理、读者管理、借、还、预借、续借和统计分析等等功能),而且还增加了条码的生成和打印功能(不仅为使用者省去了购买价格昂贵的条码专用打印机的费用,而且条码产生更方便,与系统结合更紧密)。 考虑到很多单位和学校有现成的身份IC卡(校园卡、会员卡等),为了有效的利用这些已有资源,让使用者使用更方便,我们特在系统中加入了会员卡管理功能,这样,图书管理员不仅可以通过读者编号进行借阅操作,也可以通过已有的身份卡(配合刷卡机或者条码扫描抢使用)来完成操作;在系统的办卡管理中有新办卡、换卡和注销卡等功能,彻底解决丢卡后的安全隐患问题(向制卡公司定制卡时,一般会要求每张卡的ID号都不同,所以一旦换卡了,原来的会员卡就作废了,即使丢失卡被别人捡到也不能进行正常的借阅操作)。 本系统具有操作简单,易学易用的特点。在开发过程中,我们总结了多年使用电脑管理图书馆业务的经验,注意到工作人员在使用电脑时容易发生的人为错误,因而使系统具有较强的容错和排错功能,而且本系统自带了一些常用的资料库(如中图分类库,出版社库等,系统会自动根据图书的标准ISBN码检索出当前图书的出版社名称和出版地点等,从而实现图书的自动录入的功能),使得用户在录入图书资料时更轻松;系统也自带了通用数据导入功能,可以非常简单地把用户以前的已有资料或者通过采集器采集到的数据资料导入到本系统中,避免了大量的重复劳动。经过长时间的不断测试和完善,系统的安全性和稳定性得到保证。 本系统完全可以配合条码扫描枪使用,操作会更流畅,更简单。 技术简介:本系统采用Adaptive Server Anywhere数据库、C/S结构,完全支持多用户操作;可运行于 Windows9x/WindowsNT/2000/Xp/2003平台,有良好的兼容性、先进性与扩充性;可在线升级。 系统特点:操作简单、界面清晰、功能强大、运行稳定快速、系统资源占用少。 1.2测试需求 本次测试针对开发的图书馆管理系统进行,包括功能测试,界面测试,图书

基于Labview的压力测试系统

基于L a b v i e w的压力测 试系统 The latest revision on November 22, 2020

现代检测技术综合设计报告 课程设计题目:基于虚拟仪器的压力测量系统 学院名称:电子与信息工程学院 专业:电气工程及其自动化 班级:电气12-1 姓名:杨育新学号 同组者姓名: 指导教师:黄晶 日期:~ 目录 一、任务 书................................ ..................1 二、总体设计方案 2.1 现代测控技术发展概述.....................................1 2.2 自动检测系统的原理框图...................................2 三、压力传感器 3.1 传感器的选择.............................................2 3.2 工作原理.................................................2 3.3 工作特性.................................................3

四、硬件设计 4.1 应变片的测量转换电路.....................................3 4.2 电桥的放大电路...........................................4 4.3 压力测量的总电路图...........................................5 五、Labview软件设计 5.1 程序流程图的设计..........................................6 5.2 前面板的设计.............................................6 5.3 实验框图的设计................................... ........8六、调试情况及结论 6.1 程序的调试..............................................12 6.2 实验结论................................... .............14七、课程设计心得体会.......................................14 参考资料.....................................................14

基于51单片机压力检测课程设计报告书

单片机原理与接口技术课程设计 成绩评定表 设计课题基于89c51的自身断电保护系统设计 学院名称:电气工程学院 专业班级:自动1002 学生:秦凯新 学号: 7

指导教师:王黎臧海河周刚 设计地点:31-505 设计时间:2012-12-17~2012-12-28

单片机原理与接口技术课程设计 课程设计名称:基于89c52的压力监测系统设计 专业班级:自动1002 学生姓名:秦凯新 学号: 7 指导教师:王黎臧海河周刚 课程设计地点:31-505 课程设计时间:2012-12-17~2012-12-28

单片机原理与接口技术课程设计任务书

目录 1 引言 (6) 2 总体方案设计 (6) 2.1硬件组成 (6) 2.2 方案论证 (6) 2.3 总体方案 (7) 3 硬件电路设计 (9) 3.1 时钟电路 (9) 3.2复位电路 (10) 3.3 AD简介与原理分析 (10) 3.4 声光报警接口电路 (15) 3.5 显示及键盘接口电路 (15) 3.7 电源电路 (2) 4 系统软件设计 (3) 4.1 主程序设计 (3) 4.3 部分主要子程序的设计 (6) 5 系统调试与总结 (6) 5.1 系统功能测试 (6) 5.2 技术指标测试 (6) 6心得体会 (7) 6.1 为何不采用8255了? (7) 6.2为何不采用A/D0809? (7) 6.3在帮助同学的过程中我学到了什么? (7) 6.4在单片机领域我的规划? 7 参考文献 (8) 附录A 系统原理图 (9) 附录B 源程序 (10)

1 引言 压力监测普遍用于工业领域,并对国家的发展产生了深厚的影响,小到体重计,大到工业中反应炉的气压声电报警。甚至航空航天,智能仪表。以及机器人。本设计就是工业中最普遍的气压监测报警系统。所以,这个系统采用自动检测反应炉中的压力大小,通过传感器,并实时进行在液晶1602上进行显示,还有在液晶上进行参考上限电压值的设置和参考下限电压值的的设置。并通过在单片机部进行比较计算,来实现整个压力监测系统的声光电报警。 本系统的设计基于A/D0804芯片和AT89C52单片机,并采用液晶1602作为显示输出,系统虽小却包含了工业要求的各个方面,作为声电报警模块,主要用到蜂鸣器和发光二极管。当监测压力低于下限值和高于上限值就会进行声光报警。此次系统设计就是针对工业的反应炉的压力监测,甚至可做体重计到最小的方面。 本设计纯为个人设计。程序也在开发板验证成功,如有任何疑问,都可通过实验调试验证。 2 总体方案设计 2.1硬件组成 1.控制器。控制器是系统的核心部分,可以用工业计算机 PLC、或者单片机。 2. A /D转换器。A/D转换器可以把测得的模拟量转换成数 字量输出,可以直接读取。 3.继电器。继电器在电路中起到断电保护作用,是系统的 安全保障。其种类很多,有电流继电器、电压及电器、速度继电器 等等。 4.键盘。通过键盘可以设置限制电流大小。 5.液晶显显示。液晶可以显示设置电流以及实时电流值大 小。 2.2 方案论证

系统压力测试方案

网吧系统压力测试方案文档修改历史

目录 1.文档介绍 (3) 1.1.测试目的 (3) 1.2.读者对象 (3) 1.3.参考资料 (3) 1.4.术语与解释 (3) 2.测试环境 (3) 2.1.测试环境 (4) 2.2.测试工具 (4) 3.测试需求 (5) 3.1.测试功能点 (5) 3.2.性能需求 (5) 4.准备工作 (5) 4.1 并发用户数计算 (6) 4.2 业务分配 (7) 4.3 脚本和环境 (7) 5.测试完成准则 (7) 6.测试风险 (8) 7.测试设计策略 (8) 7.1.组合测试用例策略 (8) 7.2.测试执行策略 (8) 8.业务模型 (9) 8.1场景启用模式 (9) 8.2 测试目标 (9) 8.3 场景设计 (9) 9.测试报告输出 (12)

1.文档介绍 1.1.测试目的 本次压力测试的目的是检测网吧系统的核心业务的性能情况。为了保证后期在业务量不断增长的情况下系统后能够稳定运行,需要对核心业务场景的压力情况有充分了解。因此,希望在模拟生产环境的情况下,模拟用户并发数,对系统核心业务进行压力测试,收集相应的系统参数,并最终作为系统稳定运行的依据,同时为系统调优提供指导。 编写本方案的目的是指导本次性能测试有序的进行,相关人员了解本次压力测试。1.2.读者对象 本方案的预期读者是:项目负责人、测试人员和其他相关人员。 1.3.参考资料 1.4.术语与解释 ?系统用户数:使用该系统的总用户数; ?同时在线用户数:在一定的时间范围内,最大的同时在线用户数; 2.测试环境 模拟客户使用环境(最好模拟客户实际使用的配置环境)。具体如下:

压力测量仪 单片机课程设计

目录 第 1章课程设计简介 (1) 1.1 设计要求 (1) 1.2 要求分析 (1) 第 2章总体设计 (2) 2.1 压力测量仪框图 (2) 2.2 原理 (2) 恒压源供电不能消除温度影响。 (4) 第 3章模块电路设计 (5) 3.1 电桥测量电路 (5) 3.2 模数转换 (6) 3.3 放大电路 (7) 第 4章硬件电路设计 (8) 4.1 模数转换器 (8) 4.2 金属箔应变片 (9) 第五章电路调试与说明 (11) 心得体会 (12) 参考文献 (13) 附录系统原理图 (14)

第 1章课程设计简介 1.1 设计要求 (1) 设计一个电子天平,量程为0 ~ 1.999Kg,传感器采用悬臂梁式的称重传感器(悬臂梁上贴有应变片)。显示电路采用共阳极数码管。3位半A/D转换电路。 (2) 安装、调试电路。首先对电路进行调零、定标,然后再对电路进行稳定性、漂移(零漂、温漂)、重复性、线性等参数的测试和分析。 1.2 要求分析 压力测量仪设计在于其精度高、显示时间快、操作方便、易读数、价格低廉等优点。此次设计通过使用电桥测量传感器采集模拟信号,仪用放大电路对微弱信号进行放大,送入MC14433A/D 转换器进行模数转换,然后进行BCD码的译码,再经驱动电路送入LED显示电路显示,完成了压力测量仪的基本设计。能够实现对0到1.999Kg物体的测量。 需掌握金属箔应变片组成的称重传感器的正确使用方法、放大电路、A/D转换电路等

第 2章总体设计 2.1 压力测量仪框图 2.2 原理 压力测量仪由以下五个部分组成:传感器、传感器专用电源、信号放大系统、模数转换系统及显示器等组成。 (1) 传感器测量电路 称重传感器的测量电路通常使用电桥测量电路,它将应变电阻值的变化转换为电压的变化,这就是可用的输出信号。 电桥电路由四个电阻组成,如图2所示:桥臂电阻R 1,R 2 ,R 3 和R 4,其中两对角点AC接电源电压U SL =E(+10V),另两个对角点 BD为桥路的输出U SC ,桥臂电阻为应变电阻。 R 1R 4 =R 2 R 3 时,电桥平衡,则测量对角线上的输出U SC 为零。当传 感器受到外界物体重量影响时,电桥的桥臂阻值发生变化,电桥

信息系统测试报告

管理学院电子商务专业 信息系统测试课程设计 (2011 —2012学年第 2 学期) 设计名称:eshop商城系统测试报告 --------------------------------------- 班级: 电商092 ---------------------- 姓名:李伟(组长)、桂琳、王洋、郑肖南 --------------------------------------------- 指导教师:信管教研室 --------------------- 成绩: ---------------------- 地点:管院实验室 ------------- 序号: 2012年07月06日

Eshop商城购物网站管理系统测试报告 1概述 1.1背景 本次测试的测试对象为eshop商城购物网站管理系统。系统具体分为商品展示,在线购物,在线支付,商品评论,在线客服等功能模块,以及商品管理,财务管理,订单管理,销售管理,用户管理,信息管理,数据库管理等后台功能模块。 前台主要功能:网站设以下功能模块:关于我们、购物车、新品上架购物指南,报价中心、留言反馈 1、新品上架后台最新添加产品会默认为新品在新品栏 2、商品分类:后台自行添加大类和小类 3、热销排行:产品受关注度自行生成 4. 关于我们:用户可以根据自己的需要后台自行修改 5、留言反馈:用户可以发表对商品的评论 6. 我的购物车:用户购买商品时可以查看购物车内的产品。 7、订单查询:客户可以根据产品的订单号查询订单的情况。 后台主要功能:网站设以下功能模块:管理首选、商品管理、财务管理、销售管理、用户管理、信息管理、系统管理、系统维护 1、管理首选包括修改密码、广告管理、退出登录 ①、修改密码:修改后台管理员登陆密码 ②、广告管理:的前台广告进行管理 ③、退出登录:退出后台管理界面 2、商品管理包括:添加商品、管理商品、类别管理、品牌设置 材质管理、单位管理、供货商添加、 供货商管理、商品评论管理、缺货商品管理 下架商品管理

实验六Web测试

实验六Web测试 实验类别:综合实验 实验目的: 应用Web测试工具对Web系统进行功能和性能测试; 背景知识: 对Web系统测试需要从功能、性能、可用性、安全性等多方面进行测试。 一、功能测试 对Web系统进行功能测试包括以下几个方面: 1. 链接测试 链接是Web 应用系统的一个主要特征,它是在页面之间切换和指导用户去一些不知道地址的页面的主要手段。链接测试可分为三个方面。首先,测试所有链接是否按指示的那样确实链接到了该链接的页面;其次,测试所链接的页面是否存在;最后,保证Web 应用系统上没有孤立的页面,所谓孤立页面是指没有链接指向该页面。 2. 表单测试 当用户给Web 应用系统管理员提交信息时,就需要使用表单操作,例如用户注册、登陆、信息提交等。在这种情况下,我们必须测试提交操作的完整性,以校验提交给服务器的信息的正确性。例如:用户填写的出生日期与职业是否恰当,填写的所属省份与所在城市是否匹配等。如果使用了默认值,还要检验默认值的正确性。如果表单只能接受指定的某些值,则也要进行测试。例如:只能接受某些字符,测试时可以跳过这些字符,看系统是否会报错。 3. Cookies测试 Cookies通常用来存储用户信息和用户在应用系统的操作,当一个用户使用Cookies访问了某一个应用系统时,Web 服务器将发送关于用户的信息,把该信息以Cookies 的形式存储在客户端计算机上,这可用来创建动态和自定义页面或者存储登陆等信息。 如果Web 应用系统使用了Cookies ,就必须检查Cookies 是否能正常工作。测试的内容可包括Cookies 是否起作用,是否按预定的时间进行保存,刷

检测技术及仪表课程设计报告

第一章绪论 1.1 课程设计目的 针对“应用技术主导型”普通工科高等教育的特点,从工程创新的理念出发,以工程思维模式为主,旨在培养突出“实践能力、创新意识和创业精神”特色的、适应当前经济社会发展需要的“工程应用型人才”。 通过在模拟的实战环境中系统锻炼,使学生的学习能力、思维能力、动手能力、工程创新能力和承受挫折能力都得到综合提高。以增强就业竞争力和工作适应力。 1.2课题介绍 本课设题目以多功能动态实验装置为对象,要求综合以前所学知识,完成此实验装置所需参数的检测。设计检测方案,包括检测方法,仪表种类选用以及需要注意事项,并分析误差产生的原因等等。 1.3 实验背景知识 换热设备污垢的形成过程是一个极其复杂的能量、质量和动量传递的物理化学过程,污垢的存在给广泛应用于各工业企业的换热设备造成极大的经济损失,因而污垢问题成为传热学界和工业界十分关注而又至今未能解决的难题之一。 1.4 实验原理 1.4.1 检测方法 按对沉积物的监测手段分有:热学法和非传热量的污垢监测法。 热学法中又可分为热阻表示法和温差表示法两种; 非传热量的污垢监测法又有直接称重法、厚度测量法、压降测量法、放射技术、时间推移电影法、显微照相法、电解法和化学法。 这些监测方法中,对换热设备而言,最直接而且与换热设备性能联系最密切的莫过于热学法。这里选择热学法中的污垢热阻法。

1.4.2 热阻法原理简介 表示换热面上污垢沉积量的特征参数有:单位面积上的污垢沉积质量mf , 污垢层平均厚度δf 和污垢热阻Rf 。这三者之间的关系由式表示: (1-1) 图1-1 清洁和有污垢时的温度分布及热阻 通常测量污垢热阻的原理如下: 设传热过程是在热流密度q 为常数情况下进行的,图1a 为换热面两侧处 于清洁状态下的温度分布,其总的传热热阻为: (1-2) 图1b 为两侧有污垢时的温度分布,其总传热热阻为: (1-3) 忽略换热面上污垢的积聚对壁面与流体的对流传热系数影响,则可认为 (1-4) 于是两式相减得: (1-5) 该式表明污垢热阻可以通过清洁状态和受污染状态下总传热系数的测量而间接测量出来。 实验研究或实际生产则常常要求测量局部污垢热阻,这可通过测量所要求部位的壁温表示。为明晰起见,假定换热面只有一侧有污垢存在,则有: ( 1-6) f f f f f f m R δλλρ1==c w c c R R R U 21/1++=f f w f f f R R R R R U 2211/1++++=f c f c R R R R 2211,==c f f f U U R R 1121-=+q T T R R R R U b f s f f w c f /)(/1,121-=+++=

压力测试设计方案.doc

压力测试方案 一.目的 本次压力测试的目的是检测轰趴趴系统的核心业务的性能情况。为了保证后期在业务量不断增长的情况下系统能够稳定运行,需要对核心业务场景的压力情况有充分了解。因此,希望在产线环境下,模拟用户并发数,对系统核心业务进行压力测试,收集相应的系统参数,并最终作为系统稳定运行的依据,同时为系统调优提供参考。 二.测试环境及工具 产线环境,loadrunner11。 三.测试需求 1.测试功能点: 进入主页面 查询订单 2.性能要求 进入主页面,系统平均响应时间小于等于3秒 订单查询响应时间小于等于3秒 3.最大并发用户数量上下限估值 取系统目标期望最大在线用户需求数量的百分之五到百分之二十来计算。 四.测试前置条件 1.将轰趴趴H5抽离出来单独部署测试性能,并屏蔽掉与微信交互的内容(如支付、认证),保留区别用户账户身份的参数,以便于在制作压力测试脚本时方便参数化、达到不同用户多用户并发测试。 2.为方便压力测试中多用户并发查询订单的测试,还要有对应的测试数据。 五.测试实施 1.利用loadrunner对手机页面脚本录制的原理:需要保证手机终端和电脑在公司同一无线网络内,手机终端可以通过代理将请求信息通过电脑进行转发。 2.对功能点事先录制好脚本,包括设置集合点、参数化等等,并且调试好,脚本能够成功回放,保证在测试时能顺利运行。 3.创建测试场景,并配置好每个场景的设置。 4.测试过程中保存完好脚本和分析结果,并规范的对脚本和分析结果等进行命名。 5.并发数量大于单台PC测试机运行性能时,部署其它pc机作为负载机一起测试。 6.并发访问有ip限制时,在测试工具中设置ip欺骗。 六.测试完成准则 1.符合上面列出的性能要求 2.期望值下的多人用户同时在线,脚本长时间运行后,系统不崩溃,各功能正常;服务器监 控cpu、内存、响应时间等参数保持稳定。场景运行停止后,一段时间内占用的资源能够正 常释放。(注:服务器端监控需要运维官担当)

管道系统压力测试报告(精)

管道系统压力测试报告 测试日期:2011年10月10日 一、试压、试漏工作的意义 试压、试漏是一项重要工作,必须严格认真完成。易燃、易爆、有毒介质的泄漏将危害工厂的安全生产和工作人员的生命安全。 二、试压、试漏前应具备的条件 1. 试验范围内管道安装工程除涂漆、绝热外,已按设计图纸全部完成,安装质量符合有关规定。 2. 焊缝和其它待试验部分尚未涂漆和绝热。 3. 试验用压力表已经校验,其精度不得低于1?6级,表的满刻度值应为被测最大压力的1?5~2?0倍,压力表不得少于6块。 4. 待测管道与无关系统已用盲板或采用其它方式隔开。 5. 待测管道上的安全阀、仪表元件等己经拆下或加以隔离。 三、试压、试漏前应准备的工具 准备好试压、试漏所用的无油干燥压缩空气或干燥的氮气,以及准备肥皂水、刷子(油漆刷即可、吸耳球等试气密工具若干。 1、无油干燥压缩空气或干燥的氮气, 2、洗衣粉(洗洁精) 3、没有用过的油漆刷,吸耳球 4、盛水用的盆子

5、做标志明示牌用的小牌若干,记号笔 6、临时压力表 (1)气压强度实验 使压力缓慢升高。至试验压力的50%时停止进气。检查,若无泄露及管道变形,进入下一步。 1. 继续按实验压力的10%逐渐升至实验压力,每一级稳压3min ,检查。(要求同上) 2. 达到实验压力后,稳定5min ,以无明显泄露,目测无变形为合格。 (2)气密性实验 1. 将压力升至试验压力的1/3时,用肥皂水涂抹所有的管道连接处、设备密封口、管道焊缝和螺纹接头处。 2. 开关前、后压力相等的手动截止阀2~3次,重复检查阀门的阀杆和填料压盖处。 3. 开关所有调节阀3~4次,重复检查调节阀的阀杆和填料压盖处。 4. 开关前、后压力相等的程控阀5~6次,重复检查阀门的阀杆和填料压盖处,同时检查程控阀整个行程所用的时间(应当在规定值范围内)和程控阀的动作是否与程序一致。 5. 装置试压、试漏过程中必须做好记录,记录好所有气体泄漏处。 6. 在压力≤0?25MPa 设备和管路上,发现小量气体泄漏允许小心地带压处理,较大的泄漏必须泄压处理。 7. 在压力≥0?25MPa 设备和管路上,发现气体泄漏必须泄压处理。

相关文档
最新文档