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