Untitled
Guest 205 12th Apr, 2024
/******************************************************************************/
/* Obiekt B */
/* Zbiornik 1 (lewy górny) */
/* h < X1 - nalewamy Z1 do X1 cały czas */
/* h >=X1 - dalej nalewamy do X2 w cyklu 3 + 2 s */
/* h >=X2 - zamykamy Z1 i czekamy na opróżnienie do X1, ale nie krócej niż 5s */
/* Zbiornik 2 (prawy górny) */
/* h < X3 - nalewamy Z3 do X3 cały czas */
/* h >=X3 - dalej nalewamy z Z3 do X4 w cyklu 3 + 2 s, ale nie dłużej niż 8s */
/* h >=X4 - zamykamy Z3 i czekamy na opróżnienie do X43 */
/* Zbiornik 3 (dolny) */
/* h < X5 - nalewamy z obu Z2+Z4 do X5 (cały czas) */
/* h >=X5 - dalej nalewamy do X7 na przemian Z2 i Z4 */
/* w cyklu 3 + 3 s (3 z lewego, 3 z prawego, itd.) */
/* h >=X7 - zamykamy Z2/Z4, włączamy grzałkę G3, */
/* aż temperatura osiągnie T3, ale nie dłużej niż 5 s */
/* - wyłączamy grzałkę, wylewamy Z5 do X5, ale nie krócej niż 5 s */
/******************************************************************************/
#include "spsym.h" // Pomocnicze funkcje i deklaracje
#include <stdio.h> // Stadnardowe I/O
// --- Makrodefinicje dla obiektu B ---
#define x1 X1 // BI[0].b.x_1
#define x2 X2 // BI[0].b.x_2
#define x3 X3 // BI[0].b.x_3
#define x4 X4 // BI[0].b.x_4
#define x5 X5 // BI[0].b.x_5
#define x6 X6 // BI[0].b.x_6
#define x7 X7 // BI[0].b.x_7
#define T1 X8
#define T2 X9
#define T3 X10
#define Z1 Y1
#define Z2 Y2
#define Z3 Y3
#define Z4 Y4
#define Z5 Y5
#define M Y6
#define G1 Y7
#define G2 Y8
#define G3 Y9
#define G4 Y10
// --- Zmienne użytkownika --
//char stan1 = 1, x1, x2, T1, Z1, G2;
//char stan2 = 1, x4, x3, Z6, Z3, tim2a;
//char stan3 = 1, x5, x6, x7, T, Z2, Z4, Z5, G3, tim3a;
char stan1 = 1, stan2 = 1, stan3 = 1, tim2a, tim3a;
void prolog(void) // Inicjowanie programu (jednorazowo przy starcie)
{
L1=L2=L3=L4=0; // Zgaszenie LED-ów
L5=L6=L7=L8=0; // Zgaszenie LED-ów
pK1=aK1; pK2=aK2; pK3=aK3; pK4=aK4;
pK5=aK5; pK6=aK6; pK7=aK7; pK8=aK8;
}
void oblicz(void) // Kod użytkownika wykonywany cyklicznie
{
switch(stan1) { // ------------------------------------- zbiornik 1
case 1: Z1=1; G1=0;
if (x2) stan1=2;
break;
case 2: Z1=0; G1=1;
if (T1) stan1 = 3;
else if (!x1) stan1=1;
break;
case 3: Z1=0; G1=0;
if (!x1) stan1=1;
break;
}
switch(stan2) { // ------------------------------------- zbiornik 2
case 1: Z6=0; Z3=1;
if (x3){tim2a=20; stan2=2;}
break;
case 2: Z6=1; Z3=0;
if (!x3) stan2=1;
else if (!tim2a){tim2a=40; stan2=3;}
else if (x4) stan2=4;
break;
case 3: Z6=0; Z3=1;
if (x4) stan2=4;
else if (!tim2a) {stan2=2; tim2a = 20;}
else if (!x3) stan2=1;
break;
case 4: Z6=0; Z3=0;
if (!x3) stan2=1;
break;
}
if (tim2a) --tim2a;
switch(stan3) { // ------------------------------------- zbiornik 3
case 1: Z2=1; Z4=0; Z5=0; G3=0;
if (x5){tim3a=50; stan3=2;}
break;
case 2: Z2=0; Z4=1; Z5=0; G3=0;
if (x6){tim3a=50; stan3=4;}
else if (!tim3a){tim3a=20; stan3=3;}
break;
case 3: Z2=1; Z4=0; Z5=0; G3=0;
if (x6){tim3a=20; stan3=4;}
else if (!tim3a){tim3a=50; stan3=2;}
break;
case 4: Z2=0; Z4=1; Z5=0; G3=0;
if (!tim3a&&x7){tim3a=40; stan3=5;}
else if (!tim3a&&!x7) stan3=7;
break;
case 5: Z2=0; Z4=0; Z5=0; G3=1;
if (!tim3a&&T3){stan3=6; tim3a = 70;}
else if (!tim3a&&!T3) stan3=8;
break;
case 6: Z2=0; Z4=0; Z5=1; G3=0;
if (!tim3a&&x5) stan3=9;
else if (!tim3a&&!x5) stan3=1;
break;
case 7: Z2=0; Z4=1; Z5=0; G3=0;
if(x7) {stan3=5; tim3a = 40;}
break;
case 8: Z2=0; Z4=0; Z5=0; G3=1;
if(T3) {stan3=6; tim3a=70;}
break;
case 9: Z2=0; Z4=0; Z5=1; G3=0;
if (!x5) stan3=1;
break;
}
if (tim3a) --tim3a;
L1=Z1; L2=Z2; L3=Z3; L4=Z4; L5=Z5; L6=Z6; L7=G1; L8=G3; // zaświeć diody
AO[0] += 1; AO[1] += 2;
AO[2] += 3; AO[3] += 4;
AO[4] += 5; AO[5] += 6;
AO[6] += 7; AO[7] += 7;
sprintf(buf,"K1=%dK2=%dK3=%dK4=%d ",(int)aK1,(int)aK2,(int)aK3,(int)aK4);
LCD_xy(1,1); LCD_puts(buf);
sprintf(buf,"L1=%dL2=%dL3=%dL4=%d ",(int)L1,(int)L2,(int)L3,(int)L4);
LCD_xy(1,2); LCD_puts(buf);
pK1 = aK1; pK2 = aK2; pK3 = aK3; pK4 = aK4;
pK5 = aK5; pK6 = aK6; pK7 = aK7; pK8 = aK8;
}
void przerwanie(void) // Obsługa przerwania od układu czasowo-licznikowego
{}
void komunikacja(void) // Obsługa komunikacji szeregowej
{}
#ifdef Symulator_PC
void wykres(void) // Dane do tabeli i wykresu (dot. symulacji obiektu)
{
aTab[0] = (int)(AI[0]/10.0);
aTab[1] = (int)(AI[1]/10.0);
aTab[2] = (int)(AI[2]/10.0);
aTab[3] = (int)(AI[3]/10.0);
aTab[4] = (int)(AI[4]/10.0);
aTab[5] = (int)(AI[5]/10.0);
aTab[6] = (int)(AI[6]/10.0);
aTab[7] = AO[7];
bTab[0] = X2;
bTab[1] = X1;
bTab[2] = Z1;
bTab[3] = X4;
bTab[4] = X3;
bTab[5] = Z3;
bTab[6] = X7;
bTab[7] = X5;
bTab[8] = T3;
bTab[9] = Z2;
bTab[10] = Z4;
bTab[11] = Z5;
bTab[12] = stan1;
bTab[13] = stan2;
bTab[14] = stan3;
bTab[15] = 15;
}
#endif
To share this paste please copy this url and send to your friends
RAW Paste Data
Recent Pastes
- C.H.1.L.Ds Vids-Pics Updated May 09
Markup | 8 | 2 hours ago
- Как повлияла пандемия на куринные крылышки
Dart | 12 | 8 hours ago
- Wanted to apprehend what your conception is on this point
Smarty | 11 | 10 hours ago
- Untitled
Markup | 123 | 15 hours ago
- Untitled
Markup | 21 | 15 hours ago
- Автосервис Ярославль
Bro | 113 | 15 hours ago
- Untitled
C# | 22 | 19 hours ago