avatar
Untitled

Guest 193 12th Apr, 2024

MARKUP 5.60 KB
                                           
                         /******************************************************************************/
/* 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
Ta strona używa plików cookie w celu usprawnienia i ułatwienia dostępu do serwisu oraz prowadzenia danych statystycznych. Dalsze korzystanie z tej witryny oznacza akceptację tego stanu rzeczy.
Wykorzystywanie plików Cookie
Jak wyłączyć cookies?
ROZUMIEM