Advertisement
Guest User

Untitled

a guest
Apr 21st, 2017
75
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 5.91 KB | None | 0 0
  1. /**********************************************************************************/
  2. /*     Program symulatora SP-841/AVR w wersji do zadań z Symulatorem Obiektów     */
  3. /**********************************************************************************/
  4. #include "WorkObiekt.h"             // Definicje zmiennych i prototypy funkcji SP841
  5. #include "SchematA.h"               // Definicje wejść i wyjść obiektu A
  6. #include "Zadania.h"
  7. #include <iostream>
  8.  
  9. using namespace std;// Zadania użytkownika
  10. int stanLCD=1;
  11. int timLCD=30;
  12. int t1=300;
  13. int t2=500;
  14. short stan1=1;
  15. int tim1=30;
  16. short stan2=1;
  17. int tim2;
  18.  
  19. short stan3=1;
  20. int tim3;
  21.  
  22. void dzialaj(); //deklaracja zapowiadajaca
  23. void inicjuj(void)                  // Inicjowanie programu (jednorazowo przy starcie)
  24. {
  25. }
  26.  
  27. void oblicz(void)                   // Kod użytkownika - wykonywany co wCykl [ms]
  28. {
  29.  
  30.    
  31.    
  32.     //STEROWANIE WYSWIETLACZEM!!!
  33.     switch(stanLCD)
  34.     {
  35.     case 1:
  36.             LCD_xy(0,1); LCD_puts("    Sterowanie");
  37.             LCD_xy(0,2); LCD_puts("    zbiornikiem");
  38.             if(!timLCD) { stanLCD=2; timLCD=20; }
  39.  
  40.             break;
  41.  
  42.     case 2:
  43.             LCD_xy(0,1); LCD_puts("Wlaczany tryb             ");
  44.             LCD_xy(0,2); LCD_puts("automatczny              ");
  45.             if(!timLCD) {stanLCD=3;}
  46.             break;
  47.  
  48.     case 3:
  49.             LCD_xy(0,1); LCD_puts("(AUTO) K1-reczny               ");
  50.             LCD_xy(0,2); LCD_puts("K2ustaw K3stany            ");
  51.            
  52.                
  53.                 dzialaj(); // funkcja zawierajaca program
  54.  
  55.            
  56.             if(aK1 && !pK1) {stanLCD=4; timLCD=20;} //przechodzimy do recznego
  57.             if(aK2 && !pK2) {stanLCD=6;} //ustawienia
  58.             if(aK3 && !pK3) {stanLCD=8; }
  59.             break;
  60.  
  61.            
  62.     case 8: dzialaj();
  63.             sprintf(buf,"Z1=%dZ2=%dZ3=%dZ4=%d    ",Z1,Z2,Z3,Z4); //sprawdzanie stanów
  64.             LCD_xy(0,1); LCD_puts(buf);
  65.             sprintf(buf,"Z5=%dG=%dM=%d K3cof        ",Z5,G,M);
  66.             LCD_xy(0,2); LCD_puts(buf);
  67.             if(!aK3 && pK3)
  68.             {stanLCD=3;
  69.  
  70.             }
  71.             break;
  72.  
  73.  
  74.     case 4: Z1=Z2=Z3=Z4=Z5=G=M=0; //ekran przejsciowy
  75.             LCD_xy(0,1); LCD_puts("Wlaczany tryb        ");
  76.             LCD_xy(0,2); LCD_puts("reczny               ");
  77.             if(!timLCD) stanLCD=5;
  78.             break;
  79.  
  80.     case 5:
  81.         LCD_xy(0,1); LCD_puts("Z1-Z5:K1-K5      "); //sterowanie reczne
  82.         LCD_xy(0,2); LCD_puts("G-K7, auto-K8 ");
  83.        
  84.         if(aK1 && !pK1) // wlacz i wylacz Z1
  85.             Z1=1;
  86.         if(!aK1 && pK1)
  87.             Z1=0;
  88.  
  89.         if(aK2 && !pK2)// wlacz i wylacz Z2
  90.             Z2=1;
  91.         if(!aK2 && pK2)
  92.             Z2=0;
  93.  
  94.         if(aK3 && !pK3)// wlacz i wylacz Z3
  95.             Z3=1;
  96.         if(!aK3 && pK3)
  97.             Z3=0;
  98.  
  99.         if(aK4 && !pK4)// wlacz i wylacz Z4
  100.             Z4=1;
  101.         if(!aK4 && pK4)
  102.             Z4=0;
  103.  
  104.         if(aK5 && !pK5)// wlacz i wylacz Z5
  105.             Z5=1;
  106.         if(!aK5 && pK5)
  107.             Z5=0;
  108.  
  109.     //  if(aK6 && !pK6)
  110. //          M=1;//
  111. //      if(!aK6 && pK6)/ mieszadlem nie sterujemy recznie !
  112. //          M=0;
  113.  
  114.         if(aK7 && !pK7) // wlacz i wylacz G
  115.             G=1;
  116.         if(!aK7 && pK7)
  117.             G=0;
  118.        
  119.  
  120.         if(X1) // jesli jest poziom X1 przerwij wlacz buzer
  121.         {
  122.             BUZ=0;
  123.             Z1=Z2=Z3=Z4=Z5=G=M=0;
  124.             stanLCD=7;
  125.             sprintf(buf,"ZBIORNIK LEWY          ");
  126.         }
  127.        
  128.         if(X3) //podobnie tylko z X3
  129.         {
  130.             BUZ=0;
  131.             Z1=Z2=Z3=Z4=Z5=G=M=0;
  132.             stanLCD=7;
  133.             sprintf(buf,"ZBIORNIK PRAWY            ");
  134.         }
  135.        
  136.         if(X5) // z X5
  137.         {
  138.             BUZ=0;
  139.             Z1=Z2=Z3=Z4=Z5=G=M=0;
  140.             stanLCD=7;
  141.             sprintf(buf,"ZBIORNIK DOLNY         ");
  142.         }
  143.  
  144.         if(T)// z temperatura
  145.         {
  146.             BUZ=0;
  147.             Z1=Z2=Z3=Z4=Z5=G=M=0;
  148.             stanLCD=7;
  149.             sprintf(buf,"TEMPERATURA       ");
  150.         }
  151.  
  152.            
  153.  
  154.         if(aK8 && !pK8)
  155.         {
  156.             stanLCD=2;
  157.             timLCD=40; // powrot do steorweania auto za pomoca klawisza K8
  158.         }
  159.         break;
  160.  
  161.     case 6: //zmiana czasow t1 i t2
  162.         dzialaj(); //podczas zmiany zbiornik musi ciagle dzialac
  163.         sprintf(buf, "t1=%2.1f(K3+/K4-)        ", (float)t1/10.0); //ustawienia trybu automatrycznego
  164.         LCD_xy(0,1);
  165.         LCD_puts(buf);
  166.         sprintf(buf,"t2=%3.1f(K5+/K6-)         ",(float)t2/10.0 );
  167.         LCD_xy(0,2);
  168.         LCD_puts(buf);
  169.         //dla t1
  170.         if(aK3)
  171.             t1+=2;
  172.         if(aK4)
  173.             t1-=2;
  174.         if(t1>500)t1=500;
  175.         if(t1<30)t1=30;
  176.  
  177. //dla t2
  178.         if(aK5)
  179.             t2+=2;
  180.         if(aK6)
  181.             t2-=2;
  182.         if(t2>1200) t2=1200;
  183.         if(t2<200) t2=200;
  184.  
  185.  
  186.  
  187.         if(!aK2 && pK2)
  188.         {
  189.             stanLCD=3;
  190.            
  191.         }
  192.         break;
  193.  
  194.     case 7 : // ekran alertowy
  195.         BUZ=0;
  196.        
  197.         LCD_xy(0,1); LCD_puts(buf); //wyswietlnie komuniaktu o bledzie
  198.         LCD_xy(0,2); LCD_puts("ALERT! K8-AUTO       ");
  199.         if(aK8 && !pK8)
  200.         { stanLCD=2; timLCD=40; BUZ=1;}
  201.         break;
  202.     }
  203.     if(timLCD) --timLCD;
  204.     pK1=aK1;
  205.     pK2=aK2;
  206.     pK3=aK3;
  207.     pK4=aK4;
  208.     L1=Z1;
  209.     L2=Z2;
  210.     L3=Z3;
  211.     L4=Z4;
  212.     L5=Z5;
  213.     L6=M;
  214.     L7=G;
  215. }
  216.  
  217. void int_T0(void)                   // Przerwanie od T0/T1/T2 wywoływane tIntr [ms]
  218. {
  219. }
  220.  
  221. void WykresyPC()                    // Opisy/wartości wykresów i zmiennych pomocniczych
  222. {
  223. }
  224. //glowna funkcja sterujaca zbiornikami
  225. void dzialaj()
  226. {
  227.         switch(stan1)
  228.     {
  229.     case 1: Z1=1;
  230.         if(!tim1) {tim1=10; stan1=2; }
  231.         else if(X1) stan1=3;
  232.         break;
  233.  
  234.     case 2: Z1=0;
  235.         if(!tim1) {stan1=1; tim1=30; }
  236.         break;
  237.  
  238.     case 3: Z1=0;
  239.         if(!X2) {stan1=1; tim1=30; }
  240.         break;
  241.     }
  242.     if(tim1) --tim1;
  243.  
  244.    
  245.     //zbiornik gorny prawy
  246.     switch (stan2)
  247.     {
  248.  
  249.     case 1: Z2=1;
  250.         if(X4) {tim2=100; stan2=2; }
  251.         break;
  252.    
  253.     case 2: Z2=1;
  254.         if(X3 || !tim2)
  255.         stan2=3;
  256.         else if(!X4) stan2=1;
  257.         break;
  258.    
  259.     case 3: Z2=0;
  260.         if(!X4)
  261.             stan2=1;
  262.         break;
  263.  
  264.     }
  265.  
  266.     if(tim2) --tim2;
  267.  
  268.    
  269.  
  270.  
  271.     //zbornik dolny !!!
  272.  
  273.     switch(stan3)
  274.     {
  275.     case 1: if(X2 && X4) //tylko wtedy gdy sa oba poziomy w zbiornikach powyzej
  276.             {
  277.                 Z3=Z4=1; Z5=M=G=0;
  278.                 if(X7) {tim3=20; stan3=2; }
  279.  
  280.             }
  281.             break;
  282.  
  283.     case 2: Z3=1; Z4=Z5=G=M=0;
  284.         if(!tim3) {stan3=3; tim3=20; }
  285.         else if(X5) {stan3=4; tim3=t1; }
  286.         break;
  287.  
  288.     case 3: Z3=0; Z4=1; Z5=G=M=0;
  289.         if(!tim3) {stan3=2; tim3=20; }
  290.         else if(X5) {stan3=4; tim3=t1; }
  291.         break;
  292.  
  293.     case 4: Z3=Z4=Z5=M=0; G=1;
  294.         if(!tim3 && T)
  295.         {tim3=50; stan3=5; }
  296.         else if (!tim3 && !T) {stan3=7; tim3=t2; }
  297.         break;
  298.    
  299.     case 5: Z3=Z4=Z5=G=0; M=1;
  300.         if(!tim3) stan3=6;
  301.         break;
  302.  
  303.     case 6: Z3=Z4=0; Z5=1; G=M=0;
  304.         if(!X7) stan3=1;
  305.             break;
  306.  
  307.     case 7: Z3=Z4=Z5=M=0; G=1;
  308.         if(!tim3)
  309.         {stan3=6;}
  310.         else if(T)
  311.         {stan3=5; tim3=50; }
  312.  
  313.         break;
  314.  
  315.  
  316.     }
  317.     if(tim3) --tim3;
  318. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement