Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /**********************************************************************************/
- /* Program symulatora SP-841/AVR w wersji do zadań z Symulatorem Obiektów */
- /**********************************************************************************/
- #include "WorkObiekt.h" // Definicje zmiennych i prototypy funkcji SP841
- #include "SchematA.h" // Definicje wejść i wyjść obiektu A
- #include "Zadania.h"
- #include <iostream>
- using namespace std;// Zadania użytkownika
- int stanLCD=1;
- int timLCD=30;
- int t1=300;
- int t2=500;
- short stan1=1;
- int tim1=30;
- short stan2=1;
- int tim2;
- short stan3=1;
- int tim3;
- void dzialaj(); //deklaracja zapowiadajaca
- void inicjuj(void) // Inicjowanie programu (jednorazowo przy starcie)
- {
- }
- void oblicz(void) // Kod użytkownika - wykonywany co wCykl [ms]
- {
- //STEROWANIE WYSWIETLACZEM!!!
- switch(stanLCD)
- {
- case 1:
- LCD_xy(0,1); LCD_puts(" Sterowanie");
- LCD_xy(0,2); LCD_puts(" zbiornikiem");
- if(!timLCD) { stanLCD=2; timLCD=20; }
- break;
- case 2:
- LCD_xy(0,1); LCD_puts("Wlaczany tryb ");
- LCD_xy(0,2); LCD_puts("automatczny ");
- if(!timLCD) {stanLCD=3;}
- break;
- case 3:
- LCD_xy(0,1); LCD_puts("(AUTO) K1-reczny ");
- LCD_xy(0,2); LCD_puts("K2ustaw K3stany ");
- dzialaj(); // funkcja zawierajaca program
- if(aK1 && !pK1) {stanLCD=4; timLCD=20;} //przechodzimy do recznego
- if(aK2 && !pK2) {stanLCD=6;} //ustawienia
- if(aK3 && !pK3) {stanLCD=8; }
- break;
- case 8: dzialaj();
- sprintf(buf,"Z1=%dZ2=%dZ3=%dZ4=%d ",Z1,Z2,Z3,Z4); //sprawdzanie stanów
- LCD_xy(0,1); LCD_puts(buf);
- sprintf(buf,"Z5=%dG=%dM=%d K3cof ",Z5,G,M);
- LCD_xy(0,2); LCD_puts(buf);
- if(!aK3 && pK3)
- {stanLCD=3;
- }
- break;
- case 4: Z1=Z2=Z3=Z4=Z5=G=M=0; //ekran przejsciowy
- LCD_xy(0,1); LCD_puts("Wlaczany tryb ");
- LCD_xy(0,2); LCD_puts("reczny ");
- if(!timLCD) stanLCD=5;
- break;
- case 5:
- LCD_xy(0,1); LCD_puts("Z1-Z5:K1-K5 "); //sterowanie reczne
- LCD_xy(0,2); LCD_puts("G-K7, auto-K8 ");
- if(aK1 && !pK1) // wlacz i wylacz Z1
- Z1=1;
- if(!aK1 && pK1)
- Z1=0;
- if(aK2 && !pK2)// wlacz i wylacz Z2
- Z2=1;
- if(!aK2 && pK2)
- Z2=0;
- if(aK3 && !pK3)// wlacz i wylacz Z3
- Z3=1;
- if(!aK3 && pK3)
- Z3=0;
- if(aK4 && !pK4)// wlacz i wylacz Z4
- Z4=1;
- if(!aK4 && pK4)
- Z4=0;
- if(aK5 && !pK5)// wlacz i wylacz Z5
- Z5=1;
- if(!aK5 && pK5)
- Z5=0;
- // if(aK6 && !pK6)
- // M=1;//
- // if(!aK6 && pK6)/ mieszadlem nie sterujemy recznie !
- // M=0;
- if(aK7 && !pK7) // wlacz i wylacz G
- G=1;
- if(!aK7 && pK7)
- G=0;
- if(X1) // jesli jest poziom X1 przerwij wlacz buzer
- {
- BUZ=0;
- Z1=Z2=Z3=Z4=Z5=G=M=0;
- stanLCD=7;
- sprintf(buf,"ZBIORNIK LEWY ");
- }
- if(X3) //podobnie tylko z X3
- {
- BUZ=0;
- Z1=Z2=Z3=Z4=Z5=G=M=0;
- stanLCD=7;
- sprintf(buf,"ZBIORNIK PRAWY ");
- }
- if(X5) // z X5
- {
- BUZ=0;
- Z1=Z2=Z3=Z4=Z5=G=M=0;
- stanLCD=7;
- sprintf(buf,"ZBIORNIK DOLNY ");
- }
- if(T)// z temperatura
- {
- BUZ=0;
- Z1=Z2=Z3=Z4=Z5=G=M=0;
- stanLCD=7;
- sprintf(buf,"TEMPERATURA ");
- }
- if(aK8 && !pK8)
- {
- stanLCD=2;
- timLCD=40; // powrot do steorweania auto za pomoca klawisza K8
- }
- break;
- case 6: //zmiana czasow t1 i t2
- dzialaj(); //podczas zmiany zbiornik musi ciagle dzialac
- sprintf(buf, "t1=%2.1f(K3+/K4-) ", (float)t1/10.0); //ustawienia trybu automatrycznego
- LCD_xy(0,1);
- LCD_puts(buf);
- sprintf(buf,"t2=%3.1f(K5+/K6-) ",(float)t2/10.0 );
- LCD_xy(0,2);
- LCD_puts(buf);
- //dla t1
- if(aK3)
- t1+=2;
- if(aK4)
- t1-=2;
- if(t1>500)t1=500;
- if(t1<30)t1=30;
- //dla t2
- if(aK5)
- t2+=2;
- if(aK6)
- t2-=2;
- if(t2>1200) t2=1200;
- if(t2<200) t2=200;
- if(!aK2 && pK2)
- {
- stanLCD=3;
- }
- break;
- case 7 : // ekran alertowy
- BUZ=0;
- LCD_xy(0,1); LCD_puts(buf); //wyswietlnie komuniaktu o bledzie
- LCD_xy(0,2); LCD_puts("ALERT! K8-AUTO ");
- if(aK8 && !pK8)
- { stanLCD=2; timLCD=40; BUZ=1;}
- break;
- }
- if(timLCD) --timLCD;
- pK1=aK1;
- pK2=aK2;
- pK3=aK3;
- pK4=aK4;
- L1=Z1;
- L2=Z2;
- L3=Z3;
- L4=Z4;
- L5=Z5;
- L6=M;
- L7=G;
- }
- void int_T0(void) // Przerwanie od T0/T1/T2 wywoływane tIntr [ms]
- {
- }
- void WykresyPC() // Opisy/wartości wykresów i zmiennych pomocniczych
- {
- }
- //glowna funkcja sterujaca zbiornikami
- void dzialaj()
- {
- switch(stan1)
- {
- case 1: Z1=1;
- if(!tim1) {tim1=10; stan1=2; }
- else if(X1) stan1=3;
- break;
- case 2: Z1=0;
- if(!tim1) {stan1=1; tim1=30; }
- break;
- case 3: Z1=0;
- if(!X2) {stan1=1; tim1=30; }
- break;
- }
- if(tim1) --tim1;
- //zbiornik gorny prawy
- switch (stan2)
- {
- case 1: Z2=1;
- if(X4) {tim2=100; stan2=2; }
- break;
- case 2: Z2=1;
- if(X3 || !tim2)
- stan2=3;
- else if(!X4) stan2=1;
- break;
- case 3: Z2=0;
- if(!X4)
- stan2=1;
- break;
- }
- if(tim2) --tim2;
- //zbornik dolny !!!
- switch(stan3)
- {
- case 1: if(X2 && X4) //tylko wtedy gdy sa oba poziomy w zbiornikach powyzej
- {
- Z3=Z4=1; Z5=M=G=0;
- if(X7) {tim3=20; stan3=2; }
- }
- break;
- case 2: Z3=1; Z4=Z5=G=M=0;
- if(!tim3) {stan3=3; tim3=20; }
- else if(X5) {stan3=4; tim3=t1; }
- break;
- case 3: Z3=0; Z4=1; Z5=G=M=0;
- if(!tim3) {stan3=2; tim3=20; }
- else if(X5) {stan3=4; tim3=t1; }
- break;
- case 4: Z3=Z4=Z5=M=0; G=1;
- if(!tim3 && T)
- {tim3=50; stan3=5; }
- else if (!tim3 && !T) {stan3=7; tim3=t2; }
- break;
- case 5: Z3=Z4=Z5=G=0; M=1;
- if(!tim3) stan3=6;
- break;
- case 6: Z3=Z4=0; Z5=1; G=M=0;
- if(!X7) stan3=1;
- break;
- case 7: Z3=Z4=Z5=M=0; G=1;
- if(!tim3)
- {stan3=6;}
- else if(T)
- {stan3=5; tim3=50; }
- break;
- }
- if(tim3) --tim3;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement