Разработка программного обеспечения автоматизированной системы проектирования операций сверления отверстий
Изучение и разработка алгоритмов сверления. Выбор языка и среды программирования. Исследование структуры системы компьютерного моделирования. Ввод данных о материале инструмента и детали, методе обработки. Визуальная проверка и корректировка данных.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | отчет по практике |
Язык | русский |
Дата добавления | 22.05.2013 |
Размер файла | 295,9 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://allbest.ru/
СОДЕРЖАНИЕ
ВВЕДЕНИЕ
1. АНАЛИЗ ПОСТАВЛЕННОЙ ЗАДАЧИ
1.1 Постановка задачи
1.2 Данные для реализации
1.3 Выбор языка и среды программирования
2. РЕАЛИЗАЦИЯ ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ
2.1 Структура автоматизированной системы
2.2 Разработка алгоритма подготовки и ввода данных
2.2.1 Ввод данных метода обработки и инструмента
2.2.2 Ввод данных о материале инструмента
2.2.3 Ввод данных о материале детали
2.2.4 Проверка и корректировка данных
ЗАКЛЮЧЕНИЕ
БИБЛИОГРАФИЧЕСКИЙ СПИСОК
ПРИЛОЖЕНИЕ
ВВЕДЕНИЕ
Местом прохождения практики студента пятого курса металлургического факультета группы ЗлМ-507 Бейцешвили Г.С. являлась кафедра “Технологии машиностроения, станки и инструменты” (ТМСИ) Южно-Уральского государственного университета (ЮУрГУ).
Производственная практика проходила с 28.01.2012 по 28.02.2012.
Руководитель-преподаватель - доктор технических наук, профессор Дерябин Игорь Петрович.
Цель практики: разработка программного обеспечения автоматизированной системы проектирования операций сверления отверстий.
1. АНАЛИЗ ПОСТАВЛЕННОЙ ЗАДАЧИ
1.1 Постановка задачи
В ходе прохождения практики руководителем практики были поставлены следующие задачи:
- Изучение и разработка алгоритмов сверления.
- Разработка программного обеспечения автоматизированной системы проектирования операций сверления отверстий.
1.2 Данные для реализации
Для реализации поставленных задач была выдана программа, написанная на языке Turbo Basic.
1.3 Выбор языка и среды программирования
Для реализации программного обеспечения выбор был сделан в пользу объектно-ориентированного языка C#, так как язык прост в обращении и достаточно гибок. Среда разработки - Visual Studio 2010, Net Framework 3.5.
2. РЕАЛИЗАЦИЯ ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ
2.1 Структура автоматизированной системы
Для компьютерных исследований была разработана программа моделирования обработки отверстий с расчетами параметров точности. Основные этапы структурной схемы обработки данных (рисунок 1.) рассмотрены ниже.
Рисунок 1. Структура системы компьютерного моделирования
Этап 1. Ввод исходных данных о материале детали и режущей части инструмента; геометрии, погрешности заточки и размерах инструмента; об условиях обработки (осевая подача, точность оборудования, размеры и погрешность заготовки и др.).
Этап 2. Выбор компьютерной модели расчета параметров точности. Сначала рассчитывается положение на режущих лезвиях точки М. В зависимости от положения точки М и наличия отверстия в заготовке (D0 = 0 или D00) выбирается соответствующая компьютерная модель. После выбора модели рассчитываются коэффициенты.
Этап 3. Расчет параметров точности. Поскольку в процессе обработки отверстия происходит накопление погрешностей, определяющих параметры точности, то расчет производится на последнем обороте инструмента.
Этап 4. Вывод результатов моделирования, сравнение расчетных параметров с заданными значениями. При несовпадении каких-либо параметров в режиме отладки на экран дисплея выдаются причины данной погрешности и даются рекомендации по их устранению или снижению, после чего необходимо внести коррективы в некоторые исходные данные.
2.2 Разработка алгоритма подготовки и ввода данных
Для реализации программы был разработан алгоритм, представленный на рисунке 2, из которого видно, что ввод данных в программу происходит в несколько этапов.
Рисунок 2. Структура системы компьютерного моделирования
2.2.1 Ввод данных метода обработки и инструмента
При запуске программы выводится диалоговое окно (рисунок 3.) типа обработки, по умолчанию сразу загружается окно выбора сверления:
Рисунок 3. Выбор перехода
в котором можно выбрать режим сверления "в сплошном материале" или "по предварительно просверленному отверстию". На вкладке "сверление" можно выбрать тип сверла:
спиральные
перовые
шнековые
ружейные
Также можно выбрать, будет ли применяться для сверла двойная заточка. После того, как все параметры выбраны, нажимается кнопка "далее".
2.2.2 Ввод данных о материале инструмента
При вводе данных о материале инструмента и детали для пользователя открывается диалоговое окно выбора материалов (рисунок 4.), на котором в вкладке "инструмент" вначале выбирается группа материала, затем марка используемой стали. Используемая в программе база данных формата .xml может быть с легкостью отредактирована в любом текстовом редакторе, т.е. можно добавить новые группы и марки сталей, либо удалить ненужные.
Рисунок 4. Выбор материала инструмента
2.2.3 Ввод данных о материале детали
Ввод данных о материале детали (рисунок 5.) происходит после выбора материала инструмента. Далее также выбирается группа материала детали и марка стали. База данных также реализована в формате .xml.
Рисунок 5. Выбор материала детали
2.3 Проверка и корректировка данных
Для безошибочного ввода данных параметров обработки был разработан алгоритм подготовки ввода данных и проверки введенных данных, который представлен на рисунке 2.
Из этого алгоритма видно, что соблюдение правильности всех введенных данных обеспечивается в несколько этапов.
На первом этапе происходит интерактивная проверка и корректировка всех вводимых данных. На этом этапе предусмотрено, что нельзя ввести "." вместо "," для разделения целой и дробной части числа ( программа сама исправит точку на запятую). При вводе символов проверяется каждый символ и при этом блокируется возможность ввести букву или другой нечисловой символ.
На втором этапе ввода данных по нажатию кнопки "ОК" происходит проверка на согласованность данных, например: при сверлении по предварительно просверленному отверстию нельзя ввести диаметр инструмента < диаметра отверстия, или допуски инструмента = 0. Если параметры модели нереальны, программа выдает сообщение об ошибке с указанием рекомендаций по исправлению ошибки (рисунок 6.).
Рисунок 6. Сообщение об ошибке.
На третьем этапе введенные и проверенные программой данные выводятся в результирующую форму. Пользователь может визуально проверить параметры обработки, которые будут в дальнейшем использованы программой для отладки. При необходимости данные можно откорректировать в соответствии с требованиями пользователя (рисунок 7.).
Рисунок 7. Визуальная проверка данных
алгоритм программирование сверление компьютерный
ЗАКЛЮЧЕНИЕ
Я проходил практику в течение 6-и недель на кафедре ТМСИ Южно-Уральского Государственного Университета. В ходе прохождения практики я достиг поставленной цели - изучил различные типы сверления, разработал алгоритмы для их реализации и написал программу, рассчитывающую параметры точности и позволяющую скорректировать исходные данные для наиболее приемлемых параметров точности.
БИБЛИОГРАФИЧЕСКИЙ СПИСОК
1. Джейсон, Прайс; Майк, Гандэрлой - Visual C# .NET. Полное руководство; КОРОНА принт, 2004. - 960 c.
2. Рихтер, Джефри - Программирование на платформе Microsoft .NET Framework 3.5 на языке C#; Питер, 2007. - 656 c.
3. Робинсон, С.; Корнес, О.; Глинн, Д. и др. C# для профессионалов; М.: Лори, 2005. - 306 c.
ПРИЛОЖЕНИЕ
Пример исходного кода главного меню программы
using System;
using System.Collections.Generic;
using System.Globalization;
using System.Drawing;
using System.Linq;
using System.Windows.Forms;
using System.Reflection;
using System.IO;
using System.Threading;
using System.Text.RegularExpressions;
namespace HoleMachining {
public partial class MainForm : Form {
public enum EnMode {
ModeMainMenu,
ModeID1,
ModeID9,
ModeID10,
ModeID23,
ModeIDS568,
ModeID578,
ModeID41,
ModeTAB1K,
ModeOTV01,
ModeOTV02,
ModeOTV03,
ModeOTV04,
ModeOTV05,
ModeOTV06,
ModeOTV07,
ModeOTV08,
ModeOTV09,
ModeOTV10,
ModeUU
}
private Thread ThreadMain;
public bool ExitEvent;
// Строка с версией программы.
public string VersionString = Assembly.GetExecutingAssembly().GetName().Version.ToString();
public double Input;
public EnMode Mode;
public Keys Inkey;
public ManualResetEvent mreInkey;
public ManualResetEvent mreInput;
public Logger Log;
public Terminal terminal;
public MainMenu mainMenu;
public ID41 id41;
public ID1 id1;
public ID9 id9;
public ID10 id10;
public ID23 id23;
public ID578 id578;
public IDS568 ids568;
public TAB1K tab1k;
public OTV01 otv01;
public OTV02 otv02;
public OTV03 otv03;
public OTV04 otv04;
public OTV05 otv05;
public OTV06 otv06;
public OTV07 otv07;
public OTV08 otv08;
public OTV09 otv09;
public OTV10 otv10;
public UU uu;
/// <summary>
/// Чтение заголовка сборки.
/// </summary>
/// <value>Заголовок сборки.</value>
public string AssemblyTitle {
get {
// Get all Title attributes on this assembly
object[] attributes = Assembly.GetExecutingAssembly().GetCustomAttributes( typeof( AssemblyTitleAttribute ), false );
// If there is at least one Title attribute
if ( attributes.Length > 0 ) {
// Select the first one
AssemblyTitleAttribute titleAttribute = ( AssemblyTitleAttribute ) attributes[ 0 ];
// If it is not an empty string, return it
if ( titleAttribute.Title != "" )
return titleAttribute.Title;
}
// If there was no Title attribute, or if the Title attribute was the empty string, return the .exe name
return Path.GetFileNameWithoutExtension( Assembly.GetExecutingAssembly().CodeBase );
}
}
public MainForm() {
InitializeComponent();
// Создаём экземпляр класса, передавая в качестве параметра компонент,
// на котором будем отображать данные.
terminal = new Terminal( pictureBox1, 80, 25 );
// Экземпляры модулей программы.
mainMenu = new MainMenu( this );
id1 = new ID1( this );
id9 = new ID9( this );
id10 = new ID10( this );
id23 = new ID23( this );
id41 = new ID41( this );
id578 = new ID578( this );
ids568 = new IDS568( this );
tab1k = new TAB1K( this );
otv01 = new OTV01( this );
otv02 = new OTV02( this );
otv03 = new OTV03( this );
otv04 = new OTV04( this );
otv05 = new OTV05( this );
otv06 = new OTV06( this );
otv07 = new OTV07( this );
otv08 = new OTV08( this );
otv09 = new OTV09( this );
otv10 = new OTV10( this );
uu = new UU( this );
}
private void ExitToolStripMenuItem_Click( object sender, EventArgs e ) {
// Завершаем работу потока.
ExitEvent = true;
Inkey = Keys.Q;
mreInkey.Set();
mreInput.Set();
// Ожидаем завершения потока.
if ( ThreadMain != null ) {
ThreadMain.Abort();
ThreadMain.Join();
}
// Выходим из программы.
Close();
}
private void MainForm_Load( object sender, EventArgs e ) {
// Третья цифра сборки (build) будет равна числу дней начиная с 1 января 2000 года по местному времени.
// Четвертая цифра ревизии (revision) будет установлена в количество секунд от полуночи по местному времени,
// делёное пополам.
int build = Assembly.GetExecutingAssembly().GetName().Version.Build;
int revision = Assembly.GetExecutingAssembly().GetName().Version.Revision;
DateTime bdate = new DateTime( 2000, 1, 1 );
bdate = bdate.AddDays( build );
bdate = bdate.AddSeconds( 2 * revision );
// Создаём экземпляр журнала ошибок.
Log = new Logger( String.Format( "{0}\\{1}.log", Application.StartupPath, AssemblyTitle ), true );
Log.StartLogging( Logger.EnLogMode.lmLogToFile );
Log.info( String.Format( "{0}, версия {1} от {2} {3}", AssemblyTitle, VersionString, bdate.ToLongDateString(), bdate.ToLongTimeString() ) );
// Первоначальные настройки.
Mode = EnMode.ModeMainMenu;
// Событие для выхода из потока.
ExitEvent = false;
// Событие для работы с клавиатурой в потоке.
mreInkey = new ManualResetEvent( false );
mreInput = new ManualResetEvent( false );
// Выводим текст в заголовке формы.
Text = String.Format( "{0}, версия {1} от {2}", AssemblyTitle, VersionString, bdate.ToLongDateString() );
// Выводим текст с описанием работы.
terminal.SetColor( Color.Black, Color.LightGray );
terminal.ClearScreen();
terminal.Print( "ЭМУЛЯТОР КОНСОЛИ (РЕЖИМ ОТЛАДКИ)", 4, 22 );
terminal.Print( "1. Выход из программы: Alt + X (если зависло, то через Диспетчер задач)", 6, 2 );
terminal.Print( "2. Работу меню, списков, базы, ввода проверять при помощи пути:", 8, 2 );
terminal.Print( " Сверление\\в сплошном материале\\Спиральные", 9, 2 );
terminal.Print( "3. Клавиша Q завершает работу эмулируемой программы. Клавиша ESC позволяет", 11, 2 );
terminal.Print( " вернуться по иерархическому меню или закрыть текущее окно выбора.", 12, 2 );
terminal.Print( "4. Файл data.xml обязательно должен присутствовать в текущей папке.", 14, 2 );
}
private void pictureBox1_Paint( object sender, PaintEventArgs e ) {
// Перерисвываем окно терминала.
Image img = new Bitmap( pictureBox1.ClientRectangle.Width, pictureBox1.ClientRectangle.Height );
Graphics g = Graphics.FromImage( img );
terminal.DrawScreen(g);
e.Graphics.DrawImage( img, pictureBox1.ClientRectangle );
}
public void SetInput( string Text, int Y, int X, int Length, bool Visible ) {
// Вычисление координат для поля редактирования.
Graphics g = pictureBox1.CreateGraphics();
// Узнаём размеры символа для выбранного шрифта.
StringFormat strfmt = StringFormat.GenericTypographic;
strfmt.FormatFlags |= StringFormatFlags.MeasureTrailingSpaces;
SizeF sz = g.MeasureString( "A", new Font( "Consolas", 10 ), Point.Empty, strfmt );
g.Dispose();
textBoxInput.Left = ( int ) ( ( X - 1 ) * sz.Width );
textBoxInput.Top = pictureBox1.Top + ( int ) ( ( Y - 1 ) * sz.Height );
textBoxInput.Width = ( int ) ( Length * sz.Width );
textBoxInput.Text = Text;
textBoxInput.Visible = Visible;
ActiveControl = textBoxInput;
}
public void NotImplemented() {
Invoke( new Action<int>( terminal.Screen ), 0 );
Invoke( new Action<Color, Color>( terminal.SetColor ), Color.Black, Color.LightGray );
Invoke( new Action( terminal.ClearScreen ) );
terminal.Print( " ", 10, 30, Color.Black, Color.Red );
for ( int i = 11; i < 14; i++ ) {
terminal.Print( " ", i, 30 );
terminal.Print( " ", i, 47 );
}
terminal.Print( " ", 14, 30 );
terminal.Print( " НЕ РЕАЛИЗОВАНО ", 12, 31, Color.Red, Color.LightGray );
}
// Симуляция Inkey$.
private void MainForm_KeyDown( object sender, KeyEventArgs e ) {
// Запоминаем нажатую клавишу.
Inkey = e.KeyCode;
// Устанавливаем состояние триггера.
mreInkey.Set();
}
private void textBoxInput_KeyDown( object sender, KeyEventArgs e ) {
if ( e.KeyCode == Keys.Return ) {
e.SuppressKeyPress = true;
NumberFormatInfo provider = new NumberFormatInfo() { NumberDecimalSeparator = "." };
Input = 0;
// Проверяем, является ли введённое число типом double.
if ( ( new Regex( @"^[-+]?[0-9]*\.?[0-9]+([eE][-+]?[0-9]+)?$" ) ).IsMatch( textBoxInput.Text ) ) {
Input = Convert.ToDouble( textBoxInput.Text, provider );
if ( Input == 0 ) {
MessageBox.Show( "Число должно быть отличным от 0." );
} else {
textBoxInput.Visible = false;
ActiveControl = pictureBox1;
// Устанавливаем состояние триггера.
mreInput.Set();
}
} else {
MessageBox.Show( "Число должно иметь тип double." );
}
}
}
private void textBoxInput_Leave( object sender, EventArgs e ) {
// Возвращаем фокус обратно на поле ввода.
this.ActiveControl = textBoxInput;
}
private void Scheduler() {
try {
// Переключение программ.
do {
switch ( Mode ) {
case EnMode.ModeMainMenu: { mainMenu.MainThreadProcedure(); break; }
case EnMode.ModeID1: { id1.MainThreadProcedure(); break; }
case EnMode.ModeID9: { id9.MainThreadProcedure(); break; }
case EnMode.ModeID10: { id10.MainThreadProcedure(); break; }
case EnMode.ModeID23: { id23.MainThreadProcedure(); break; }
case EnMode.ModeID41: { id41.MainThreadProcedure(); break; }
case EnMode.ModeIDS568: { ids568.MainThreadProcedure(); break; }
case EnMode.ModeOTV01: { otv01.MainThreadProcedure(); break; }
case EnMode.ModeOTV02: { otv02.MainThreadProcedure(); break; }
case EnMode.ModeOTV03: { otv03.MainThreadProcedure(); break; }
case EnMode.ModeOTV04: { otv04.MainThreadProcedure(); break; }
case EnMode.ModeOTV05: { otv05.MainThreadProcedure(); break; }
case EnMode.ModeOTV06: { otv06.MainThreadProcedure(); break; }
case EnMode.ModeOTV07: { otv07.MainThreadProcedure(); break; }
case EnMode.ModeOTV08: { otv08.MainThreadProcedure(); break; }
case EnMode.ModeOTV09: { otv09.MainThreadProcedure(); break; }
case EnMode.ModeOTV10: { otv10.MainThreadProcedure(); break; }
} while ( !ExitEvent );
Invoke( new Action<int>( terminal.Screen ), 0 );
Invoke( new Action<Color, Color>( terminal.SetColor ), Color.Black, Color.LightGray );
Invoke( new Action( terminal.ClearScreen ) );
Invoke( new Action<string, int, int, Color, Color>( terminal.Print ),
" ", 10, 30, Color.Black, Color.Blue );
for ( int i = 11; i < 14; i++ ) {
Invoke( new Action<string, int, int>( terminal.Print ), " ", i, 30 );
Invoke( new Action<string, int, int>( terminal.Print ), " ", i, 47 );
}
Invoke( new Action<string, int, int>( terminal.Print ),
" ", 14, 30 );
Invoke( new Action<string, int, int, Color, Color>( terminal.Print ),
" ЗАВЕРШЕНО ", 12, 33, Color.Blue, Color.LightGray );
Thread.Sleep( 2000 );
} catch ( ThreadAbortException ) { }
}
private void MainMenuItem_Click( object sender, EventArgs e ) {
Graphics g = pictureBox1.CreateGraphics();
// Узнаём размеры символа для выбранного шрифта.
StringFormat strfmt = StringFormat.GenericTypographic;
strfmt.FormatFlags |= StringFormatFlags.MeasureTrailingSpaces;
SizeF sz = g.MeasureString( "A", new Font( "Consolas", 10 ), Point.Empty, strfmt );
g.Dispose();
Size = new Size( ( int ) ( 80 * sz.Width ) + panel1.Padding.Horizontal,
( int ) ( 25 * sz.Height ) + pictureBox1.Location.Y + panel1.Padding.Top );
// Запускаем основной поток программы.
MainMenuItem.Enabled = false;
ExitEvent = false;
Inkey = Keys.None;
Input = 0;
mreInkey.Reset();
mreInput.Reset();
// Режим главного меню.
Mode = EnMode.ModeMainMenu;
if ( ThreadMain != null ) {
ThreadMain.Abort();
ThreadMain.Join();
ThreadMain = null;
}
ThreadMain = new Thread( Scheduler );
ThreadMain.Start();
MainMenuItem.Enabled = true;
}
}
Размещено на Allbest.ru
Подобные документы
Анализ информационных потоков. Разработка структуры таблиц базы данных. Выбор CASE-средства для проектирования информационной системы и среды программирования. Разработка программных модулей (программного обеспечения). Подготовка справочных баз данных.
дипломная работа [6,8 M], добавлен 19.11.2013Порядок автоматизации расчетов себестоимости и длительности программного обеспечения производственного предприятия. Выбор языка программирования и системы управления базами данных. Разработка алгоритмов расчета себестоимости программного обеспечения.
дипломная работа [1,7 M], добавлен 13.06.2017Разработка вычислительной структуры, реализующей заданный набор операций для обработки запросов в реляционной базе данных (БД). Описание общей структуры системы с машиной баз данных. Разработка схем исполнительных процессоров и алгоритмов их операций.
реферат [140,3 K], добавлен 27.10.2010Трехмерное моделирование: улучшение алгоритмов рендеринга и просчета трехмерных изображений. Обоснование выбора алгоритмов. Выбор языка программирования и среды разработки. Структура данных и программного комплекса. Системные требования для работы.
курсовая работа [263,8 K], добавлен 24.06.2009Выбор технологии, языка и среды программирования. Анализ процесса обработки информации и выбор структур данных для ее хранения, разработка основных алгоритмов. Проектирование интерфейса пользователя. Выбор стратегии тестирования и разработка тестов.
курсовая работа [332,3 K], добавлен 09.12.2014Построение информационно-логической модели базы данных. Корректировка данных средствами запросов. Проектирование алгоритмов обработки данных. Реализация пользовательского интерфейса средствами форм. Разработка запросов для корректировки и выборки данных.
курсовая работа [680,9 K], добавлен 19.10.2010Автоматизация учета складских операций с целью организации компьютеризации документооборота и учетных операций с помощью Microsoft Visual FoxPro 6.0. Описание структуры базы данных. Этапы проектирования БД. Выбор программного и технического обеспечения.
курсовая работа [1,1 M], добавлен 26.12.2011Выбор технологии, языка и среды программирования. Анализ процесса обработки информации и оценка структур данных для ее хранения. Разработка основных алгоритмов решения и структурной схемы программного продукта. Проектирование интерфейса пользователя.
курсовая работа [449,8 K], добавлен 14.01.2011Разработка концептуальной (инфологической) модели, выбор языка и среды программирования. Разработка блок-схемы алгоритмов для отдельных подпрограмм. Пользовательский интерфейс автоматизированной системы. Требования к клиентскому программному обеспечению.
дипломная работа [2,4 M], добавлен 10.07.2017Автоматизация учёта поступления и обучения детей в "Доме детского творчества". Проектирование программного продукта ИС; выбор системы управления базы данных, языка программирования. Разработка концептуальной, логической и физической моделей данных.
дипломная работа [1,5 M], добавлен 10.10.2015