Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*************************************************************************/
- /* Program testowy dla obiektu X oprogamowania SPSym */
- /*************************************************************************/
- #include "spsym.h" // Pomocnicze funkcje i deklaracje
- #include <stdio.h> // Stadnardowe I/O
- // --- Makrodefinicje dla obiektu D ---
- #define cO X1 // Czujnik całkowitego otwarcia bramy
- #define cZ X2 // Czujnik całkowitego zamknięcia bramy
- #define cF X3 // Fotokomórka
- #define SILNIK Y1 // Silnik otwierający/zamykajacy bramę
- #define KIER Y2 // Kierunek obrotów silnika (0=zamykanie, 1=otwieranie)
- #define LAMPA Y3 // Lampa sygnalizująca ruch bramy
- #define WJAZD Y4 // Zezwolenie na wjazd pojazdu (czerwone/zielone)
- // --- Zmienne użytkownika ---
- int timp1=0,timp2=0,timu1=0,timt1=0;
- char stan=1,stanU=0,stanT=0;
- int liczK1=0,liczK3=0;
- int tP=0,tP2=0; // zadany czas pieczenia oraz realny czas pieczenia
- int liczT=0;
- int tT=0, tT2=0;
- void prolog(void) // Inicjowanie programu (jednorazowo przy starcie)
- {
- L1=L2=L3=0; // Zgaszenie L1..L4
- pK1=aK1; pK2=aK2; pK3=aK3;
- }
- void oblicz(void) // Kod użytkownika wykonywany cyklicznie
- {
- // K1 - przycisk start
- // K2 - przycisk ustawień
- // K3 - przycisk potwierdzenia/pieczenia
- // L1 - wyłączony piekarnik (nieświeci), włączony (świeci ciągle), ustawienia (miga dłużej świeci niż nieświeci), ustawianie czasu pieczania (miga dłużej nie śiweci niż świeci), pieczenie (miga co raz szybicej)
- // L2 - piecze (świeci się dwa razy dłużej niż wduszony KL3)
- switch(stan)
- {
- case 1: // piekarnik wyłączony
- L1=L2=L3=L4=0;
- if(aK1) stan=2;
- break;
- case 2: // piekarnik uruchomiony
- L1=1; L2=L3=L4=0;
- if(aK1&&!pK1) stan=1;
- if(aK2) {stan=3; timp1=0; timu1=0;}
- if(aK3) {stan=4; tP=0; timp1=20; L1=1;}
- break;
- case 3: //
- L2=0;
- if(aK1&&pK1) stan=1;
- if(aK2&&!pK2) stan=2;
- if(!timp1) {
- if (!L1) timp1=15;
- else timp1=5;
- L1=!L1;
- }
- break;
- case 4:
- L2=0;
- tP=tP+10;
- if (!timp1){
- if (!L1) timp1=5;
- else timp1=15;
- L1=!L1;
- }
- if(!aK3) {
- stan=5; timp1=10; L1=1;
- if((tP/1000<10)&&(tP/1000>=1))
- tP2=(tP/1000+1)*1000;
- else if((tP/100<10)&&(tP/100>=1))
- tP2=(tP/100+1)*100;
- else if((tP/10<10)&&(tP/10>=1))
- tP2=(tP/10+1)*10;
- else
- tP2=tP+1;
- tP2/=10;
- timp2=10;
- }
- if(aK1&&pK1) stan=1;
- break;
- case 5:
- L2=1;
- if(!timp1){
- L1=!L1;
- timp1=timp2;
- }
- if(!tP) stan=2;
- if(tP%tP2==0)
- {
- timp2--;
- timp1=timp2;
- }
- if (timp1<=0) timp1=1;
- if(tP)--tP;
- if(aK1&&pK1) stan=1;
- break;
- }
- switch(stanU)
- {
- case 0:
- L3=0;
- if(aK3&&liczK3==0) {stanU=1; liczK3=1; timu1=15; L3=1;}
- if(aK3&&liczK3==2) {stanU=2; liczK3=2; timu1=15; L3=1;}
- if(aK3&&liczK3==3) {stanU=3; liczK3=3; timu1=15; L3=1;}
- break;
- case 1:
- if(!timu1) {L3=0;}
- if(aK3&&liczK3==1&&!pK3) {stanU=2; liczK3=2; liczT=0; timu1=15; L3=1;}
- if(stan!=3) {stanU=0; liczK3=0; liczT=0;}
- break;
- case 2:
- if(!timu1&&liczT<3) {L3=!L3; liczT++; timu1=15;}
- if(aK3&&liczK3==2&&!pK3) {stanU=3; liczK3=3; liczT=0; timu1=15; L3=1;}
- if(stan!=3) {stanU=0; liczK3=0; liczT=0;}
- break;
- case 3:
- if(!timu1&&liczT<5) {L3=!L3; liczT++; timu1=15; }
- if(aK3&&liczK3==3&&!pK3) {stanU=1; liczK3=1; liczT=0; timu1=15; L3=1;}
- if(stan!=3) {stanU=0; liczK3=0; liczT=0;}
- break;
- }
- switch(stanT){
- case 0:
- L4=0;
- L5=0;
- if(aK4){ stanT=1; timt1=50; tT=0; tT2=0;}
- break;
- case 1:
- L4=1;
- tT2++;
- L5=0;
- if(tT)--tT;
- if(!aK4&&!tT){ stanT=2;tT=tT2;tT2=0;}
- if(aK4&&!timt1&&!tT){ stanT=4; timt1=10; tT=tT2;tT2=0;}
- break;
- case 2:
- L4=0;
- L5=0;
- if(!timt1){ stanT=3; timt1=20;}
- if(aK4){ stanT=1; timt1=50; tT=0; tT2=0;}
- break;
- case 3:
- L4=0;
- L5=1;
- if(!timt1){ stanT=1; timt1=50;}
- if(aK4){ stanT=1; timt1=50; tT=0; tT2=0;}
- break;
- case 4:
- L4=0;
- L5=0;
- if(!aK4) stanT=1;
- }
- if(timt1)--timt1;
- if(timu1)--timu1;
- if(timp1)--timp1;
- 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ługs 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] = stanT;
- aTab[1] = timt1;
- aTab[2] = tT;
- aTab[3] = tP2;
- aTab[4] = stanU;
- bTab[0] = (int)aK1;
- bTab[1] = (int)aK2;
- bTab[2] = (int)aK3;
- bTab[5] = (int)L1;
- bTab[6] = (int)L2;
- bTab[7] = (int)L3;
- bTab[8] = (int)L4;
- bTab[9] = (int)L5; // LAMPA
- bTab[10] = (int)L6;
- bTab[11] = (int)LAMPA;
- }
- #endif
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement