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

 

Листинг 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>> выходила следующая форма (со следующим эффектом анимации), к разработке которой мы и приступаем.

Предлагаю ознакомиться с аналогичными статьями: