Text: |
ФІО = 7
Запитання:using System;
using System.Collections.Generic;
using System.Text;
namespace EXP
{
partial class Form1
//class user
{
static void UserStendInit()
{
//---------Students code----------------BEGIN
C.SetStend3(); //підключаємо стенд №3 (хімічний реактор)
//---------Students code----------------END
}
//++++++++++++++++++++++++++++++++++++++++++++++++++++++
static void UserCrateInit()
{
// C.SetDAC(3); //example
//---------Students code----------------BEGIN
C.SetStep(1);//встановлюємо блок керування кроковими двигунами у позицію №1
C.SetDAC(2); //встановлюємо ЦАП у позицію №2
C.SetADC(3); //встановлюємо АЦП у позицію №3
C.SetDAC(4); //встановлюємо ЦАП у позицію №4
C.SetADC(5); //встановлюємо АЦП у позицію №5
//---------Students code----------------END
}
//++++++++++++++++++++++++++++++++++++++++++++++++++++++
static void UserConnect()
{
// Connect.Set(3, 1, 0, 3); //example
//---------Students code----------------BEGIN
Connect.Set(1, 1, 0, 10); //встановлюємо кроковий двигун на керування водою (х)
Connect.Set(1, 2, 0, 11); //встановлюємо кроковий двигун на керування кислотою (у)
//концентрація (верх)
Connect.Set(2, 1, 0, 1); //встановлюємо ЦАП на верхній резисторний дільник
Connect.Set(3, 1, 0, 2); //встановлюємо АЦП на верхній резистивний дільник
//рівень (низ)
Connect.Set(4, 1, 0, 3); //встановлюємо ЦАП на нижній резисторний дільник
Connect.Set(5, 1, 0, 4); //встановлюємо АЦП на нижній резисторний дільник
//---------Students code----------------END
}
//++++++++++++++++++++++++++++++++++++++++++++++++++++++
static void Experiment()
{
//---------Students code----------------BEGIN
int v = 2047; //встановлюємо напругу 5 В
int k0, w0; //координати крокового двигуна (цілі числа)
double k = 0, w = 0; //різниця концентрацій,різниця рівнів у реакторі
Do(1, 1, 16, 65); //починаємо запускати кислоту в реактор (у)
Do(1, 0, 16, -35); //починаємо запускати воду в реактор (х)
Time.Pause(3); //пауза 3 секунди
Do(2, 0, 16, v); //пропускаємо напругу через верхній резистивний дільник
int res_10 = Do(3, 0, 0, 0); //знімаємо напругу з верхнього резистивного дільника через АЦП і претворюємо її в код
Do(4, 0, 16, v); //подаємо напругу через нижній резистивний дільник через ЦАП
int res_20 = Do(5, 0, 0, 0); //знімаємо напругу з нижнього резистивного дільника через АЦП і перетворюємо її в код
double concen0 = (5000.0 * res_10) / ((v - res_10) * 1.0); //знімаємо початкову концентрацію з верхнього резистивного дільника
double uroven0 = (1000.0 * res_20) / ((v - res_20) * 1.0); //знімаємо початковий рівень суміші з нижнього резистивного дільника
k0 = 65; w0 = -35; //початкові координати крокового двигуна
while (true) //поки "правда"
{
int res_1 = Do(3, 0, 0, 0); //знімаємо напругу з верхнього резистивного дільника (цілі числа бо код)
int res_2 = Do(5, 0, 0, 0); //знімаємо напругу з нижнього резистивного дільника
double concen = (5000.0 * res_1) / ((v - res_1) * 1.0); //знімаємо концентрацію з верхнього резистивного дільника
double uroven = (1000.0 * res_2) / ((v - res_2) * 1.0); //знімаємо рівень суміші з нижнього резистивного дільника
if (concen >= concen0) //якщо кінцева концентрація більша за початкову концентрацію то:
{
if (k < Math.Abs(concen - concen0))//порівнюємо попередню і кінцеву різниці концентрацій
{ k0 += 5; } //збільшуємо у
Do(1, 1, 16, k0); //закачуємо більше кислоти (у)
//розглядаємо рівень суміші
if (uroven >= uroven0) //якщо кінцевий рівень більший за початковий рівень:
{
if (w < Math.Abs(uroven0 - uroven)) //якщо попередня різниця рівнів менша за кінцеву різницю рівнів, то:
{ w0 += 5; } //збільшуємо х
Do(1, 0, 16, w0); //закачуємо трохи більше води (х)
}
else //інакше
{
if (w < Math.Abs(uroven0 - uroven)) //якщо попередня різниця рівнів більша за кінцеву різницю рівнів, то:
{ w0 -= 5; } //зменшуємо х
Do(1, 0, 16, w0); //закачуємо трохи менше води (х)
}
}
else //інакше
{
if (k < Math.Abs(concen - concen0)) //порівнюємо попередню і кінцеву різниці концентрацій
{ k0 -= 5; } //зменшуємо у
Do(1, 1, 16, k0); //закачуємо трохи менше кислоти
//розглядаємо рівень суміші
if (uroven >= uroven0) //якщо кінцевий рівень більший за початковий рівень:
{
if (w < Math.Abs(uroven0 - uroven)) //якщо попередня різниця рівнів більша за кінцеву різницю рівнів, то:
{ w0 += 5; } //збільшуємо х
Do(1, 0, 16, w0); //збільшуємо подачу води
}
else //інакше
{
if (w < Math.Abs(uroven0 - uroven)) //якщо попередня різниця рівнів більша за кінцеву різницю рівнів, то:
{ w0 -= 5; } //зменшуємо х
Do(1, 0, 16, w0); //зменшуємо подачу води
}
}
//---------------------------
w = Math.Abs(uroven0 - uroven); //різниця між початковим і кінцевим рівнем суміші
k = Math.Abs(concen - concen0); //різниця між початковою і кінцевою концентраціями
}
//---------Students code----------------END
}
//++++++++++++++++++++++++++++++++++++++++++++++++++++++
}
}
====================================
|