Помощь в написании студенческих работ
Антистрессовый сервис

Разработка программного обеспечения автоматизированной системы проектирования операций сверления отверстий

ОтчётПомощь в написанииУзнать стоимостьмоей работы

Местом прохождения практики студента пятого курса металлургического факультета группы ЗлМ-507 Бейцешвили Г. С. являлась кафедра «Технологии машиностроения, станки и инструменты» (ТМСИ) Южно-Уральского государственного университета (ЮУрГУ). Выбор языка и среды программирования Для реализации программного обеспечения выбор был сделан в пользу объектно-ориентированного языка C#, так как язык прост… Читать ещё >

Разработка программного обеспечения автоматизированной системы проектирования операций сверления отверстий (реферат, курсовая, диплом, контрольная)

СОДЕРЖАНИЕ ВВЕДЕНИЕ

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;

/// Чтение заголовка сборки.

/// Заголовок сборки.

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) = 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 (terminal.Screen), 0);

Invoke (new Action (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 (terminal.Screen), 0);

Invoke (new Action (terminal.SetColor), Color. Black, Color. LightGray);

Invoke (new Action (terminal.ClearScreen));

Invoke (new Action (terminal.Print),

" «, 10, 30, Color. Black, Color. Blue);

for (int i = 11; i < 14; i++) {

Invoke (new Action (terminal.Print), ««, i, 30);

Invoke (new Action (terminal.Print), ««, i, 47);

}

Invoke (new Action (terminal.Print),

" «, 14, 30);

Invoke (new Action (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;

}

}

Показать весь текст
Заполнить форму текущей работой