Глава 85. Система компьютерного проектирования техпроцессов

Листинг 85.1. Код кнопки OK для передачи данныхс Form1 на Form3.

//Объявляем локальные переменные:

double d, H, Rn, s, s_sheet, C, L, rho,

nu, El, sig_ys, sig_u, e_u, e_tot;

//Считываем исходные данные из окон TextBox формы Form1:

d = Convert.ToDouble(textBox1.Text);

H = Convert.ToDouble(textBox2.Text);

Rn = Convert.ToDouble(textBox3.Text);

s = Convert.ToDouble(textBox4.Text);

s_sheet = Convert.ToDouble(textBox5.Text);

C = Convert.ToDouble(textBox6.Text);

L = Convert.ToDouble(textBox7.Text);

rho = Convert.ToDouble(textBox8.Text);

nu = Convert.ToDouble(textBox9.Text);

El = Convert.ToDouble(textBox10.Text);

sig_ys = Convert.ToDouble(textBox11.Text);

sig_u = Convert.ToDouble(textBox12.Text);

e_u = Convert.ToDouble(textBox13.Text);

e_tot = Convert.ToDouble(textBox14.Text);

//Присваиваем исходные данные другим переменным

//класса для формы Form3, но с такими же именами:

Form3 myForm3 = new Form3();

myForm3.d = d;

myForm3.H = H;

myForm3.Rn = Rn;

myForm3.s = s;

myForm3.Radio = Radio;

myForm3.s_sheet = s_sheet;

myForm3.C = C;

myForm3.L = L;

myForm3.rho = rho;

myForm3.nu = nu;

myForm3.El = El;

myForm3.sig_ys = sig_ys;

myForm3.sig_u = sig_u;

myForm3.e_u = e_u;

myForm3.e_tot = e_tot;

//Выводим следующую диалоговую форму Form3:

myForm3.Show();

Листинг 85.2. Код для выполнения анимации.

//Объявляем булеву переменную myColor со значением false:

bool myColor = false;

private void timer1_Tick(object sender, EventArgs e)

{

//Вводим анимацию:

if (myColor == false)

{

//Выводим белый цвет элемента управления:

this.button1.BackColor = Color.White;

//Изменяем значение myColor на противоположное:

myColor = true;

}

else

{

//Выводим желтый цвет элемента управления: this.button1.BackColor = Color.Yellow;

//Изменяем значение myColor на противоположное:

myColor = false;

}

}

Применительно к нашим типичным деталям типа стакана (рис. 85.1) технологический процесс их изготовления включает следующие типичные операции:

Операция 1. Разрезка листа на полосы.

Операция 2. Вырезка заготовок из полосы.

Операция 3. Изготовление полуфабриката из заготовки.

Операция 4. Обрезка технологического припуска на полуфабрикате.

После выполнения этих операций получается деталь, которая далее может или поступать на последующие операции (например, кастрюля поступает на эмалирование, а колпак поступает на сборку-сварку кузова автомобиля), или использоваться по своему назначению. Мы закончили разработку типичного технологического процесса изготовления детали и теперь приступаем к программной реализации проектирования этого процесса (с использованием эффектов анимации).

Глава 86. Проектирование заготовительных операций подготовки материала

Листинг 86.1. Расчет оптимальных параметров разрезки листа на полосы.

//Объявляем глобальные переменные:

public double d, H, Rn, s, s_sheet, C, L, rho,

nu, El, sig_ys, sig_u, e_u, e_tot;

public int Radio;

double dH, Ha, D;

double B, a, b, t, W, F, Nbl, W_F;

double pi = Math.PI;

// Расчетные функции:

//Функции класса объектов "Полуфабрикаты":

double Allowance()

{

//Определение техн-го припуска, например, по таблице:

dH=5;

//Если включен переключатель 2,

// то обрезка припуска не нужна; при этом Radio=1:

if (Radio==1) dH=0;

return dH;

}

double Semiproduct()

{

dH=Allowance();

//Расчет размеров полуфабриката:

Ha = H + dH;

return Ha;

}

//Функции класса объектов "Заготовки":

double Area1_Semiproduct()

{

double A1 = pi*(d-2*Rn)*(d-2*Rn)/4;

return A1; //mm*mm

}

double Area2_Semiproduct()

{

double A2 = pi*(Rn-s/2)*(2*(Rn-s/2)+pi*(d-2*Rn)/2);

return A2; //mm*mm

}

double Area3_Semiproduct()

{

Ha=Semiproduct();

double A3 = pi*(d-s)*(Ha-Rn);

return A3; //mm*mm

}

double Area_Semiproduct()

{

double A, A1, A2, A3;

A1=Area1_Semiproduct();

A2=Area2_Semiproduct();

A3=Area3_Semiproduct(); A=A1+A2+A3;

return A;

}

double DBlank()

{

double A = Area_Semiproduct();

D=Math.Sqrt(4*A/pi);

return D;

}

//Функции класса объектов "Материалы":

double Bstrip()

{

//Определение параметров раскроя:

double del_st, del1, z_b;

a=1.2; b=1.6; del_st=0.7; del1=0.4; z_b=1;

//Шаг вырезки заготовок:

D = DBlank(); t = D + a;

//Расчет ширины полосы:

B = D + 2*(b + del_st) + z_b + del1;

return B;

}

void Cutting()

{

//Определение параметров раскроя:

double N_strip_1, N_strip_2, N_bl_st_1, N_bl_st_2,

N_bl_1, N_bl_2;

B = Bstrip();

//Число полос из листа при продольной разрезке:

N_strip_1 = Math.Floor(C/B);

//Число полос из листа при поперечной разрезке:

N_strip_2 = Math.Floor(L/B);

//Шаг вырезки заготовок:

D = DBlank(); t = D + a;

//Число заготовок из полосы при продольной разрезке:

N_bl_st_1 = Math.Floor((L - a)/t);

//Число заготовок из полосы при поперечной разрезке:

N_bl_st_2 = Math.Floor((C - a)/t);

//Число заготовок из листа при продольной разрезке:

N_bl_1 = N_bl_st_1 * N_strip_1;

//Число заготовок из листа при поперечной разрезке:

N_bl_2 = N_bl_st_2 * N_strip_2;

//Проверка, при каком варианте разрезки

// заготовок больше:

if (N_bl_1 >= N_bl_2)

{

//Передача рассчитанных значений в окна TextBox:

textBox5.Text = N_strip_1.ToString();

W = N_strip_1 * B;

textBox6.Text = W.ToString();

F = C - W;

textBox7.Text = F.ToString();

textBox8.Text = C.ToString(); W_F = C;

textBox9.Text = (W/W_F).ToString();

Nbl=N_bl_1;

}

else

{

//Передача рассчитанных значений в окна TextBox:

textBox5.Text = N_strip_2.ToString();

W = N_strip_2 * B;

textBox6.Text = W.ToString();

F = L - W;

textBox7.Text = F.ToString();

textBox8.Text = L.ToString(); W_F = L;

textBox9.Text = (W/W_F).ToString();

Nbl=N_bl_2;

}

}

Теперь для выполнения расчета и вывода результатов расчета в окна TextBox на Form3 (при помощи кнопки со знаком равенства “=”) дважды щелкаем эту кнопку. Появляется файл Form3.cs с шаблоном, в который записываем следующий код.

Листинг 86.2. Код кнопки “=” на Form3 для расчета первой операции.

//Передача размеров листа s, C, L

//из окон TextBox на Form1 в окна TextBox на Form3:

textBox1.Text = s_sheet.ToString();

textBox2.Text = C.ToString();

textBox3.Text = L.ToString();

//Расчет и передача значения ширины полосы "B"

//в окно TextBox4 на Form3:

textBox4.Text = Bstrip().ToString();

//Расчет и передача рациональных параметров

//разрезки листа на полосы в окна TextBox на Form3:

Cutting();

Листинг 86.3. Код для выполнения анимации.

bool myColor = false;

private void timer1_Tick(object sender, EventArgs e)

{

//Вводим анимацию:

if (myColor == false)

{

//Выводим красный цвет надписи элемента упр-я:

this.button1.ForeColor = Color.Red;

//Изменяем значение myColor на противоположное:

myColor = true;

}

else

{

//Выводим зеленый цвет надписи элемента упр-я: this.button1.ForeColor = Color.Green;

//Изменяем значение myColor на противоположное:

myColor = false;

}

}

Щелчок по значку “x” (Close), который уже был на Form1 после создания проекта, или по кнопке Cancel, которую ввели мы (для удобства), закрывает не только данный активный вид панели, но и все последующие виды панели, которые мы вызвали после данного вида (т.е. закрываем приложение). После щелчка значка “x” (Close) или кнопки Cancel на Form3 закрывается только один этот вид панели, а все остальные панели остаются открытыми, и мы можем их анализировать или читать справку (если щелкнуть кнопку Help). Методика печати на принтере информации с панели (после щелчка кнопки Print, рис. 86.1) описана выше.

Как уже отмечалось, на практике часто ограничиваются только первой операцией разрезки листа на полосы; в этом случае следующая операция не нужна, и, соответственно, не нужна и кнопка Next>> на Form3. В нашем общем случае требуется, чтобы после щелчка кнопки Next>> выходила следующая форма (со следующим эффектом анимации), к разработке которой мы и приступаем.


Наши рекомендации