- •А.А.Стопакевич автоматизация проектирования программного обеспечения асутп технологическим участком
- •Содержание цель лабораторных работ 2
- •1 Лабораторная работа. Создание скелета программного проекта
- •2 Лабораторная работа. Создание файлов с описанием матричных операций
- •3 Лабораторная работа. Создание технологической схемы участка
- •4 Лабораторная работа. Создание форм для вывода журнала аварийных сообщений и графика, добавление схемы участка в ресурсы
- •5 Лабораторная работа. Создание файла с матрицами математической модели объекта и регулятора
- •6 Лабораторная работа. Создание файла главной программы main.Cpp
- •7 Лабораторная работа. Описание класса главного окна
- •8 Лабораторная работа. Запуск программы и комплексная отладка программного комплекса
1 Лабораторная работа. Создание скелета программного проекта
Для создания скелета программного проекта следует в меню File/new выбрать проект типа win32 application (в следующем окне – empty project).
Затем в меню File/new следует создать С++ Source File с именем main.
Еще нужно подключить библиотеку MFC. Для этого в меню Project/Settings во вкладке General измените “Not using MFC” на “Use MFC in shared DLL” или “Use MFC in static library”.
Файл main.cpp будет содержать основной код программы. В нем должны быть описаны загрузка всех окон, кнопок, рисунка, матриц и т.д. В других файлах будут описаны вспомогательные функции.
Отчет по лабораторной работе должен содержать текст документа «Описание применения» в соответствии с требованиями Единой системы программной документации ЕСПД
Документ Описание применения разрабатывается в расчете на то, что читать его должен специалист по АСУТП с целью первоначального ознакомления с функциями программы. Текст документа оюязательно должен состоять из следующих пунктов:
-
назначение программы (указывают назначение, возможности программы, ей основные характеристики, ограничения, накладываемые на область применения- программы);
-
условия применения (указывают условия, необходимые для выполнения программы - требования к техническим средствам, другим программам, общие характеристики входной и выходной информации, а также требования и условия организационного, технического и технологического характера);
-
описание задачи (должно быть указано определения задачи и методы её решения -описывается содержательная и математическая формулировка задачи, общая методика решения задачи)
-
входные и выходные данные (должны быть указаны общие сведения о.входных и выходных данных).
2 Лабораторная работа. Создание файлов с описанием матричных операций
В файлах s_matrix.h, s_matrix.cpp создадим новый тип данных - класс матрицы. Класс имеет свои функции или переменные, доступ к которым может быть открытым или закрытым. В классе сначала объявляются какие-нибудь функции и переменные, а после объявления класса идет описание функций класса.
Нажмите File/New, “C++ Source File” и создайте файл с именем s_matrix. Затем повторите операцию, но только уже выберите тип “C/C++ Header File” и создайте файл с таким же именем s_matrix.
В файле s_matrix.h описываются заголовки создаваемых матричных операций
#ifndef S_MATRIX_H
#define S_MATRIX_H
#include <math.h>
#include <stdio.h>
typedef unsigned int UINT;
class CMatrix
{
public:
CMatrix();
double*pData;
UINT m_columns;
UINT m_rows;
void SetSize (UINT row, UINT cols);
void SetValue (UINT row, UINT cols, double val);
double GetValue (UINT row, UINT cols);
void SaveMatrix (FILE*file);
void LoadMatrix (FILE*file);
};
CMatrix operator+(CMatrix A,CMatrix B);
CMatrix operator-(CMatrix A,CMatrix B);
CMatrix operator*(CMatrix A,CMatrix B);
CMatrix operator-(CMatrix A);
CMatrix operator*(double val, CMatrix A);
CMatrix operator*(CMatrix A,double val);
CMatrix _matrix (UINT columns, UINT rows, double value=0.0);
CMatrix _onematrix (UINT num);
#endif
Затем в файле s_matrix.cpp (для перехода – левая панель, File/View, развернуть файлы) описываются собственно матричные операции.
#include "s_matrix.h"
CMatrix operator*(CMatrix A,CMatrix B)
{
CMatrix C;
C.SetSize(A.m_rows,B.m_columns);
for(UINT j=0;j<C.m_rows;j++)
{
for(UINT i=0;i<C.m_columns;i++)
{
double tmp=0.0;
for(UINT k=0;k<B.m_rows;k++)
{
tmp+=B.GetValue(k,i)*A.GetValue(j,k);
}
C.SetValue(j,i,tmp);
}
}
return C;
}
CMatrix operator+(CMatrix A,CMatrix B)
{
CMatrix C;
C.SetSize(A.m_rows,A.m_columns);
for(UINT i=0;i<A.m_columns*A.m_rows;i++)
{
C.pData[i]=A.pData[i]+B.pData[i];
}
return C;
}
CMatrix operator-(CMatrix A,CMatrix B)
{
CMatrix C;
C.SetSize(A.m_rows,A.m_columns);
for(UINT i=0;i<A.m_columns*A.m_rows;i++)
{
C.pData[i]=A.pData[i]-B.pData[i];
}
return C;
}
CMatrix operator-(CMatrix A)
{
CMatrix C;
C.SetSize(A.m_rows,A.m_columns);
for(UINT i=0;i<A.m_columns*A.m_rows;i++)
{
C.pData[i]=-A.pData[i];
}
return C;
}
CMatrix operator*(double val,CMatrix A)
{
CMatrix C;
C.SetSize(A.m_columns,A.m_rows);
for(UINT i=0;i<A.m_columns*A.m_rows;i++)
{
C.pData[i]=val*A.pData[i];
}
return C;
}
CMatrix operator*(CMatrix A,double val)
{
CMatrix C;
C=val*A;
return C;
}
CMatrix _matrix(UINT rows,UINT columns,double value)
{
CMatrix m;
m.SetSize(rows,columns);
for(UINT i=0;i<m.m_columns*m.m_rows;i++)
{
m.pData[i]=value;
}
return m;
}
CMatrix _onematrix(UINT num)
{
CMatrix m;
m.SetSize(num,num);
for(UINT j=0;j<num;j++)
{
for(UINT i=0;i<num;i++)
{
if(i!=j) m.SetValue(i,j,0.0);
else m.SetValue(i,j,1.0);
}
}
return m;
}
CMatrix::CMatrix()
{
m_columns=0;
m_rows=0;
}
void CMatrix::SetSize(UINT row,UINT col)
{
pData=new double[col*row];
m_columns=col;
m_rows=row;
}
void CMatrix::SetValue(UINT row,UINT col,double val)
{
pData[row*m_columns+col]=val;
}
double CMatrix::GetValue(UINT row,UINT col)
{
return pData[row*m_columns+col];
}
void CMatrix::SaveMatrix(FILE*file)
{
fprintf(file,"%d %d\n",m_rows,m_columns);
for(UINT i=0;i<m_columns*m_rows;i++)
{
fprintf(file,"%f",pData[i]);
}
}
void CMatrix::LoadMatrix(FILE*file)
{
int col,row;
fscanf(file,"%d %d",&row,&col);
SetSize(row,col);
for(UINT i=0;i<m_columns*m_rows;i++)
{
float t;
fscanf(file,"%f",&t);
pData[i]=(double)t;
}
}
Таким образом, модуль для обработки матриц спроектирован. Матричные операции из него будут использоваться далее для расчета управляющих воздействий.
Отчет по лабораторной работе должен содержать распечатку текста введенного модуля