沥青混合料马歇尔试验数据处理系统

发布于:2021-06-13 16:49:34

沥青混合料配合比数据处理系统

1.沥青混合料配合比选择简介 沥青混合料配合比的设计主要是利用马歇尔的试验方法确定沥青混合料的 材料品种及配合比、矿料级配、最佳沥青用量。其工艺流程图如下: 沥青混合料配合比设计操作框图

混合料类型

个数 击实次数 拌合温度

材料的选定和试验

矿料配合比计算

沥青用量范围

制件温度

密度

制作五组马歇尔试件
稳定度 记录数据 空隙率 流值

马歇尔试验 与标准对比
OAC1 饱和度

决定沥青用量

OAC2 OAC

这个软件设计不包括原材料的选定和试验、马歇尔试件的制作。仅仅是针对 矿料级配的计算、马歇尔试验以后的步骤。 矿料级配计算主要采用规划求解方法进行。 通过马歇尔试验得出一组数据, 然后对数据进行处理, 最终得出最佳油石比。 2.人工数据处理过程 2.1 矿料级配的计算:列 15 个方程,求解 4 个未知数,有不同的结果。

沥青混合料级配设计计算表
集料用 37.5 31.5 26.5 量 30% 22% 10% 30% 2% 6% 最小 级配要求 中值 最大 合成级配
100 100 100 100 100 100 100 100 100 91 100 100 100 100 100 95 97.5 100 61 100 100 100 100 100 79 84.5 90

集料名称

19

16

13.2

9.5 4.75 2.36 1.18 0.6 0.3 0.15 0.075 0

集料 1 集料 2 集料 3 集料 4 sa 集料 5

1.2 90 100 100 100 100 66 72 78

0 58 100 100 100 100 59 65.5 72

0 22 100 100 100 100 52

0 0 87 100 100 100 43

0 0 1.2 94 100 96 32 38.5 45

0 0 1 66 100 86 25 31.5 38

0 0 0 42 100 62 18 24 30

0 0 0 32

0 0 0 24

0 0 0 18 95 3 5 9 13

0 0 0 14 85 2 3 5 7

0 0 0 0 0 0 0 0 0

100 100 34 13 19 25 13 8 13 18

58.5 49.5 65 56

100

98

89

69

61

53

47

36

27

19

14

10

7.9

6.36

0

2.2 本数据处理系统是对马歇尔试验的数据用计算机进行处理,改变以往人 工处理效率低,准确性差的特点。 马歇尔试验得出数据汇总如下:

油石比 3.5 项目 密度 稳定度 空隙率 流值 饱和度 2.26 9 9 2.2 40 2.32 12.1 6 2.5 60 2.32 11.9 4.5 2.9 66 2.30 10.5 4.1 3.3 69 2.28 9.8 2.8 4.2 79 4.0 4.5 5.0 5.5

技术 标准

>7.5kn 3-6 20-40 70-85

然后将每种试验项目作纵坐标,油石比作横坐标绘制如下表:
混合料密度与油石比的关系

毛体积密度(g/cm3)

2.40 2.36 2.32 2.28 2.24 2.20 3.5 4.0 4.5 油石比 5.0 5.5 系列1

稳定度与油石比的关系 14.00

稳定度(KN)

12.00 10.00 8.00 6.00 3.5 4.0 4.5 油石比 5.0 5.5 系列1

流值与油石比的关系 5.00

流值(dmm)

4.00 3.00 2.00 1.00 3.5 4.0 4.5 油石比 5.0 5.5 系列1

空隙率与油石比的关系 10.00

空隙率(%)

8.00 6.00 4.00 2.00 0.00 3.5 4.0 4.5 油石比 5.0 5.5

系列1

饱和度与油石比 80 70

饱和度

60 50 40 30 3.5 4.0 4.5 油石比 5.0 5.5

系列1

1)根据上述的五个曲线图求取相应密度最大值时沥青用量 a2、稳定度最大值 时沥青用量 a1、空隙率范围中值沥青用量 a3,求取三者*均值作为最佳沥青用 量的初始值 OAC1: OAC1=(a1+a2+a3)/3 2)求出各项指标符合技术要求的沥青用量范围 OACMIN—OACmax,其中 OAC2=( OACMIN+OACmax,)/2 3)最佳沥青用量为: OAC=( OAC1+OAC2)/2 3.计算机数据处理过程 3.1 试验参数的输入

3.2 马歇尔数据处理

3.3 级配设计

4.使用说明 本软件采用 VC6.0 编写,可在 windows 环境下运行。 软件采用基于文档的方式来实现,通过处理输入的数据,在文档区显示 数据处理的结果,同时可以通过本地或者网络打印机打印显示的文档。 按数据处理功能来说分为两部分,一部分是沥青混合料最佳用量确定试 验,一部分是沥青混合料集料级配设计试验。

1、 沥青混合料最佳用量确定试验使用说明 1) 打开程序; 2) 点击 对话框; 3) 在对话框里分别填写实验信息, 选择道路类型、混凝土类型。 然后点击“确定”按钮; 4) 此时 菜单——〉参数输入——〉Mashall 参数 激活,点击 菜 菜单——〉参数输入——〉试验参数, 出现参数输入的

单——〉参数输入——〉Mashall 参数,出现 Mashall 参数的对话框; 5) 选择试验数据组数(5~8) ,缺省值为 5;然后填入实验数据,如 果填错,则会报错。 测试时请选择组数为 5,然后点击载入测试数据,则程序自动将一组 设定好的数据填入,供测试软件之用。 数据填完则点击“确定”按钮; 6) 点击 菜单——〉结果输出——〉数据分析, 则在文档区出现

两页的文档,分别记录着实验信息、试验数据、最佳用量的确定、图表 等。 7) 预览:此时可以通过 菜单——〉文件——〉打印预览 观察要

打印的文档。可同时在屏幕中显示一页或两页,也可以放大缩小文档来 观看。 8) 打印:可以在预览窗口点击“打印” ,也可以通过 文件——〉打印 菜单——〉

来完成。 (注意:请在打印之前,检查打印机是否装

好,或者是否有网络打印机; 打印纸张大小为 A4, 方向为纵向,可以在 打印设置中检查。 ) 9) 保存:点击工具栏或者菜单上的“保存”按钮,可以将文档保存 下来。 10) 另存为: 点击菜单上的 “另存为” 按钮, 可以将文档另保存下来。 11) 打开:点击工具栏或者菜单上的“打开”按钮,可以打开保存过 的文档。 2、沥青混合料集料级配设计试验使用说明 1) 打开程序; 2) 点击 菜单——〉参数输入——〉集配设计, 出现级配试验参

数输入的对话框; 3) 在对话框中按照筛孔尺寸分别填入 4~6 种集料的通过百分率, 双 击表格第一行的单元可以选择或者去除基准列, 然后点击“确定”按钮; 也可以通过点击“载入测试数据”来填入测试数据。 4) 点击 菜单——〉结果输出——〉数据分析, 则在文档区出现

一页的文档,分别记录试验结果及级配图等信息。 5) 打印、打印预览、保存、另存为、打开同上; 5.下步计划 本软件未设及原材料试验等步骤,下次改进时将进行补充,使软件更加丰富, 使用更加方便简洁。

毕业设计论文

沥青混合料配合比数据处理系统



生:吴志祥

指导老师:

石家庄铁道学院成教分院 2002 级计算机专业

部份代码
MICROSOFT FOUNDATION CLASS LIBRARY : Concrete2 ======================================================================== AppWizard has created this Concrete2 application for you. This application not only demonstrates the basics of using the Microsoft Foundation classes but is also a starting point for writing your application. This file contains a summary of what you will find in each of the files that make up your Concrete2 application. Concrete2.dsp This file (the project file) contains information at the project level and is used to build a single project or subproject. Other users can share the project (.dsp) file, but they should export the makefiles locally. Concrete2.h This is the main header file for the application. It includes other project specific headers (including Resource.h) and declares the CConcrete2App application class. Concrete2.cpp This is the main application source file that contains the application class CConcrete2App. Concrete2.rc This is a listing of all of the Microsoft Windows resources that the program uses. It includes the icons, bitmaps, and cursors that are stored in the RES subdirectory. This file can be directly edited in Microsoft Visual C++. Concrete2.clw This file contains information used by ClassWizard to edit existing classes or add new classes. ClassWizard also uses this file to store information needed to create and edit message maps and dialog data maps and to create prototype member functions. res\Concrete2.ico This is an icon file, which is used as the application's icon. This icon is included by the main resource file Concrete2.rc. res\Concrete2.rc2 This file contains resources that are not edited by Microsoft Visual C++. You should place all resources not editable by the resource editor in this file. ///////////////////////////////////////////////////////////////////////////// For the main frame window: MainFrm.h, MainFrm.cpp These files contain the frame class CMainFrame, which is derived from CFrameWnd and controls all SDI frame features. res\Toolbar.bmp This bitmap file is used to create tiled images for the toolbar. The initial toolbar and status bar are constructed in the CMainFrame class. Edit this toolbar bitmap using the resource editor, and

update the IDR_MAINFRAME TOOLBAR array in Concrete2.rc to add toolbar buttons. ///////////////////////////////////////////////////////////////////////////// AppWizard creates one document type and one view: Concrete2Doc.h, Concrete2Doc.cpp - the document These files contain your CConcrete2Doc class. Edit these files to add your special document data and to implement file saving and loading (via CConcrete2Doc::Serialize). Concrete2View.h, Concrete2View.cpp - the view of the document These files contain your CConcrete2View class. CConcrete2View objects are used to view CConcrete2Doc objects. ///////////////////////////////////////////////////////////////////////////// Other standard files: StdAfx.h, StdAfx.cpp These files are used to build a precompiled header (PCH) file named Concrete2.pch and a precompiled types file named StdAfx.obj. Resource.h This is the standard header file, which defines new resource IDs. Microsoft Visual C++ reads and updates this file. ///////////////////////////////////////////////////////////////////////////// Other notes: AppWizard uses "TODO:" to indicate parts of the source code you should add to or customize. If your application uses MFC in a shared DLL, and your application is in a language other than the operating system's current language, you will need to copy the corresponding localized resources MFC42XXX.DLL from the Microsoft Visual C++ CD-ROM onto the system or system32 directory, and rename it to be MFCLOC.DLL. ("XXX" stands for the language abbreviation. For example, MFC42DEU.DLL contains resources translated to German.) If you don't do this, some of the UI elements of your application will remain in the language of the operating system. ///////////////////////////////////////////////////////////////////////////// DlgparaJipei(cpp) // DlgParaJipei.cpp : implementation file // #include "stdafx.h" #include "concrete2.h" #include "DlgParaJipei.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif ///////////////////////////////////////////////////////////////////////////// // CDlgParaJipei dialog CDlgParaJipei::CDlgParaJipei(CWnd* pParent /*=NULL*/)

: CDialog(CDlgParaJipei::IDD, pParent) { //{{AFX_DATA_INIT(CDlgParaJipei) m_bCheck = FALSE; m_nRows = 4; //}}AFX_DATA_INIT } void CDlgParaJipei::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(CDlgParaJipei) DDX_Control(pDX, IDC_SPIN_ROW, m_SpinRow); DDX_GridControl(pDX, IDC_GRID1, m_Grid); DDX_Text(pDX, IDC_EDIT_ROWS, m_nRows); DDV_MinMaxInt(pDX, m_nRows, 4, 6); //}}AFX_DATA_MAP } BEGIN_MESSAGE_MAP(CDlgParaJipei, CDialog) //{{AFX_MSG_MAP(CDlgParaJipei) ON_BN_CLICKED(IDC_BUTTON1, OnButton1) ON_EN_UPDATE(IDC_EDIT_ROWS, OnUpdateEditRows) //}}AFX_MSG_MAP ON_NOTIFY(NM_DBLCLK, IDC_GRID1, OnGridDblClick) END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CDlgParaJipei message handlers BOOL CDlgParaJipei::OnInitDialog() { CDialog::OnInitDialog(); // TODO: Add extra initialization here int i; CString str; m_SpinRow.SetRange(4,6); m_Grid.SetRowCount(6); m_Grid.SetColumnCount(14); m_Grid.SetFixedRowCount(2); m_Grid.SetFixedColumnCount(1); m_Grid.SetEditable(TRUE); //设置选择列的参数 m_nSelectCols[0] = 0; //个数 m_nSelectCols[1] = -1; //列 m_nSelectCols[2] = -1; //列 m_Grid.SetColumnWidth(0, 70); for(i = 0; i < 6; i++) {

m_Grid.SetRowHeight(i, 25); } for( i = 1; i < 14; i++) { m_Grid.SetColumnWidth(i, 50); } GV_ITEM item; item.mask = GVIF_TEXT; //设置第一列的单位 for(i = 2; i < 6; i++) { item.col = 0; item.row = i; str.Format("%d", i-1); str = "集料" + str; item.strText = str; m_Grid.SetItem(&item); } //设置第一排的单位 item.row = 0; item.col = 0; item.strText = "筛孔尺寸"; m_Grid.SetItem(&item); item.col = 1; item.strText = "31.5"; m_Grid.SetItem(&item); item.col = 2; item.strText = "26.5"; m_Grid.SetItem(&item); item.col = 3; item.strText = "19"; m_Grid.SetItem(&item); item.col = 4; item.strText = "16"; m_Grid.SetItem(&item); item.col = 5; item.strText = "13.2"; m_Grid.SetItem(&item); item.col = 6; item.strText = "9.5"; m_Grid.SetItem(&item); item.col = 7; item.strText = "*4.75"; m_Grid.SetItem(&item); item.col = 8; item.strText = "*2.36";

m_Grid.SetItem(&item); item.col = 9; item.strText = "1.18"; m_Grid.SetItem(&item); item.col = 10; item.strText = "0.6"; m_Grid.SetItem(&item); item.col = 11; item.strText = "0.3"; m_Grid.SetItem(&item); item.col = 12; item.strText = "0.15"; m_Grid.SetItem(&item); item.col = 13; item.strText = "*0.075"; m_Grid.SetItem(&item); //设置第二排的单位 item.row = 1; item.col = 0; item.strText = "序号"; m_Grid.SetItem(&item); for(i = 1; i < 14; i ++) { item.col = i; str.Format("%d", i); item.strText = str; m_Grid.SetItem(&item); } return TRUE; // return TRUE unless you set the focus to a control // EXCEPTION: OCX Property Pages should return FALSE } void CDlgParaJipei::OnGridDblClick(NMHDR *pNotifyStruct, LRESULT *) { NM_GRIDVIEW* pItem = (NM_GRIDVIEW*) pNotifyStruct; CString strTemp; int i; if(pItem->iRow == 0) { BOOL CoreCol;//特殊列 i = pItem->iColumn; CoreCol = (i == 7) || (i == 8) || (i == 13); //特殊列 if(CoreCol) { AfxMessageBox("不能改动原定基准列");

return; } //前 4 列 else if(pItem->iColumn < 5) { AfxMessageBox("不能选择前 4 列作为基准列"); return; } //选择的不是基准列 else if(pItem->iColumn != m_nSelectCols[1] && pItem->iColumn m_nSelectCols[2]) { //列数已经够了 if((m_nSelectCols[0] + 4) == m_nRows) { AfxMessageBox("选择的列数已经达到要求"); return; } //还不够 else if((m_nSelectCols[0] + 4) < m_nRows) { //纪录 m_nSelectCols[0] ++; m_nSelectCols[m_nSelectCols[0]] = pItem->iColumn; //显示 strTemp = m_Grid.GetItemText(0, pItem->iColumn); strTemp = "*" + strTemp; m_Grid.SetItemText(0, pItem->iColumn, strTemp); m_Grid.Refresh(); return; } } //选择的是基准列 else if(pItem->iColumn == m_nSelectCols[1] || pItem->iColumn m_nSelectCols[2]) { //纪录 m_nSelectCols[0] --; if(pItem->iColumn == m_nSelectCols[1]) { m_nSelectCols[1] = -1; } else { m_nSelectCols[2] = -1; }

!=

==

//显示 strTemp = m_Grid.GetItemText(0, pItem->iColumn); strTemp.TrimLeft("*"); m_Grid.SetItemText(0, pItem->iColumn, strTemp); m_Grid.Refresh(); return; /* } //删除信息 strTemp = "确实要删除第" + m_Grid.GetItemText(1, pItem->iColumn) + "列"; int i; BOOL CoreCol;//特殊列 i = atoi(m_Grid.GetItemText(1, pItem->iColumn)); CoreCol = (i == 7) || (i == 8) || (i == 13); //特殊列 if(CoreCol) { AfxMessageBox("不能删除特殊列"); } //小于 8 列 else if(m_Grid.GetColumnCount() <= 8) { AfxMessageBox("不能再删除列了!"); } else if(AfxMessageBox(strTemp, MB_OKCANCEL) == IDOK) { //删除 m_Grid.DeleteColumn(pItem->iColumn); m_Grid.Refresh(); } } } void CDlgParaJipei::GetInput() { int i,j; CString str; //取得数据 for(i = 2; i < m_Grid.GetRowCount(); i++) { for(j = 1; j < m_Grid.GetColumnCount(); j++) { str = m_Grid.GetItemText(i, j); m_fPassPercent[i-2][j-1] = (float)atof(str); } }

*/

//存储使用的列信息 for(j = 1; j < m_Grid.GetColumnCount(); j++) { str = m_Grid.GetItemText(1, j); m_nNum[j-1] = atoi(str); } //存储筛孔尺寸 for(j = 1; j < m_Grid.GetColumnCount(); j++) { str = m_Grid.GetItemText(0, j); str.TrimLeft("*"); m_fHoleSize[j-1] = atof(str); } } BOOL CDlgParaJipei::CheckData() { int i,j,n; CString str, msg; //列数不够 if((m_nSelectCols[0] + 4) < m_nRows) { msg.Format("请再选择%d 个基准列,双击第一行的单元进行选取!", m_nRows (m_nSelectCols[0] + 4)); AfxMessageBox(msg); return FALSE; } //列数多 if((m_nSelectCols[0] + 4) > m_nRows) { msg.Format(" 多 选 择 了 %d 个 基 准 列 , 双 击 第 一 行 的 单 元 去 掉 基 准 列 ! ", (m_nSelectCols[0] + 4) - m_nRows); AfxMessageBox(msg); return FALSE; } for(i = 2; i < m_Grid.GetRowCount(); i++) { for(j = 1; j < m_Grid.GetColumnCount(); j++) { str = m_Grid.GetItemText(i, j); //数据不能为空 if(str.IsEmpty()) { msg.Format("第%d 排、第%d 列数据为空!", i-1, j); AfxMessageBox(msg); return FALSE; }

//数据不能包含非法字符 CString strComp = "+0123456789."; for(n = 0; n < str.GetLength(); n++) { if( strComp.Find(str.Mid(n,1)) == -1) { msg.Format("第%d 排、第%d 列数据包含非法字符!", i-1, j); AfxMessageBox(msg); return FALSE; } } //大于一个小数点 int dotcount = 0; for(n = 0; n < str.GetLength(); n++) { if(str.GetAt(n) == '.') dotcount ++; } if(dotcount > 1) { msg.Format("第%d 排、第%d 列数据多于两个小数点!", i-1, j); AfxMessageBox(msg); return FALSE; } //中间有加号 for(n = 1; n < str.GetLength(); n++) { if(str.GetAt(n) == '+') { msg.Format("第%d 排、第%d 列数据格式错误!", i-1, j); AfxMessageBox(msg); return FALSE; } } //第一个字符为'.' if(str.GetAt(0) == '.') { msg.Format("第%d 排、第%d 列数据格式错误!", i-1, j); AfxMessageBox(msg); return FALSE; } //第一个字符为'+', 第二个字符为'.' if(str.GetAt(0) == '+' && str.GetAt(1) == '.') { msg.Format("第%d 排、第%d 列数据格式错误!", i-1, j); AfxMessageBox(msg);

return FALSE; } } } return TRUE; } void CDlgParaJipei::OnOK() { // TODO: Add extra validation here if(!CheckData()) { m_bCheck = FALSE; return; } m_bCheck = TRUE; GetInput(); CDialog::OnOK(); } void CDlgParaJipei::OnButton1() { // TODO: Add your control notification handler code here int i,j; int num; //列数 CString str; //测试数据 float m_fTestData[4][13] = { 100, 100, 100, 100, 98.58, 53.2, 11.4, 2.42, 1.68, 1.56, 0, 0, 0, 100, 100, 100, 100, 99, 82.2, 38.9, 17, 8.73, 6.61, 3.87, 2.69, 1.67, 100, 100, 100, 100, 100, 100, 94, 74.8, 53, 42.8, 24, 6.7, 1.1, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 99.3, 87.2 }; GV_ITEM item; item.mask = GVIF_TEXT; //第一列数值 item.col = 1; item.row = 2; item.strText = "5"; m_Grid.SetItem(&item); //存储使用的列信息 for(i = 1; i < m_Grid.GetColumnCount(); i++) { str = m_Grid.GetItemText(1, i); num = atoi(str); item.col = i;

for(j = 2; j < 6; j++) { item.row = j; str.Format("%.1f", m_fTestData[j-2][num-1]); item.strText = str; m_Grid.SetItem(&item); } } m_Grid.Refresh(); } void CDlgParaJipei::OnUpdateEditRows() { // TODO: If this is a RICHEDIT control, the control will not // send this notification unless you override the CDialog::OnInitDialog() // function to send the EM_SETEVENTMASK message to the control // with the ENM_UPDATE flag ORed into the lParam mask. // TODO: Add your control notification handler code here if (!::IsWindow(m_Grid.m_hWnd)) return; UpdateData(TRUE); if(m_nRows < 4) { m_nRows = 4; UpdateData(FALSE); } else if(m_nRows > 6) { m_nRows = 6; UpdateData(FALSE); } m_Grid.SetRowCount(m_nRows+2); m_Grid.SetRowHeight(m_nRows+1, 25); int i; CString str; GV_ITEM item; item.mask = GVIF_TEXT; for(i = 2; i < m_Grid.GetRowCount(); i++) { item.col = 0; item.row = i; str.Format("%d", i-1); item.strText = str; m_Grid.SetItem(&item); } }


相关推荐

最新更新

猜你喜欢