Advertisement
Hubert_M

Untitled

Apr 9th, 2019
88
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.36 KB | None | 0 0
  1. /*************************************************************************/
  2. /* Program testowy dla obiektu X oprogamowania SPSym */
  3. /*************************************************************************/
  4. #include "spsym.h" // Pomocnicze funkcje i deklaracje
  5. #include <stdio.h> // Stadnardowe I/O
  6.  
  7. // --- Makrodefinicje dla obiektu D ---
  8. #define cO X1 // Czujnik całkowitego otwarcia bramy
  9. #define cZ X2 // Czujnik całkowitego zamknięcia bramy
  10. #define cF X3 // Fotokomórka
  11.  
  12. #define SILNIK Y1 // Silnik otwierający/zamykajacy bramę
  13. #define KIER Y2 // Kierunek obrotów silnika (0=zamykanie, 1=otwieranie)
  14. #define LAMPA Y3 // Lampa sygnalizująca ruch bramy
  15. #define WJAZD Y4 // Zezwolenie na wjazd pojazdu (czerwone/zielone)
  16.  
  17. // --- Zmienne użytkownika ---
  18. int timp1=0,timp2=0,timu1=0,timt1=0;
  19. char stan=1,stanU=0,stanT=0;
  20. int liczK1=0,liczK3=0;
  21. int tP=0,tP2=0; // zadany czas pieczenia oraz realny czas pieczenia
  22. int liczT=0;
  23. int tT=0, tT2=0;
  24.  
  25. void prolog(void) // Inicjowanie programu (jednorazowo przy starcie)
  26. {
  27. L1=L2=L3=0; // Zgaszenie L1..L4
  28. pK1=aK1; pK2=aK2; pK3=aK3;
  29. }
  30.  
  31. void oblicz(void) // Kod użytkownika wykonywany cyklicznie
  32. {
  33. // K1 - przycisk start
  34. // K2 - przycisk ustawień
  35. // K3 - przycisk potwierdzenia/pieczenia
  36. // 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)
  37. // L2 - piecze (świeci się dwa razy dłużej niż wduszony KL3)
  38. switch(stan)
  39. {
  40. case 1: // piekarnik wyłączony
  41. L1=L2=L3=L4=0;
  42. if(aK1) stan=2;
  43. break;
  44. case 2: // piekarnik uruchomiony
  45. L1=1; L2=L3=L4=0;
  46. if(aK1&&!pK1) stan=1;
  47. if(aK2) {stan=3; timp1=0; timu1=0;}
  48. if(aK3) {stan=4; tP=0; timp1=20; L1=1;}
  49. break;
  50. case 3: //
  51. L2=0;
  52. if(aK1&&pK1) stan=1;
  53. if(aK2&&!pK2) stan=2;
  54. if(!timp1) {
  55. if (!L1) timp1=15;
  56. else timp1=5;
  57. L1=!L1;
  58. }
  59. break;
  60. case 4:
  61. L2=0;
  62. tP=tP+10;
  63. if (!timp1){
  64. if (!L1) timp1=5;
  65. else timp1=15;
  66. L1=!L1;
  67. }
  68. if(!aK3) {
  69. stan=5; timp1=10; L1=1;
  70. if((tP/1000<10)&&(tP/1000>=1))
  71. tP2=(tP/1000+1)*1000;
  72. else if((tP/100<10)&&(tP/100>=1))
  73. tP2=(tP/100+1)*100;
  74. else if((tP/10<10)&&(tP/10>=1))
  75. tP2=(tP/10+1)*10;
  76. else
  77. tP2=tP+1;
  78. tP2/=10;
  79. timp2=10;
  80. }
  81. if(aK1&&pK1) stan=1;
  82. break;
  83. case 5:
  84. L2=1;
  85. if(!timp1){
  86. L1=!L1;
  87. timp1=timp2;
  88. }
  89. if(!tP) stan=2;
  90. if(tP%tP2==0)
  91. {
  92. timp2--;
  93. timp1=timp2;
  94. }
  95. if (timp1<=0) timp1=1;
  96. if(tP)--tP;
  97. if(aK1&&pK1) stan=1;
  98. break;
  99. }
  100. switch(stanU)
  101. {
  102. case 0:
  103. L3=0;
  104. if(aK3&&liczK3==0) {stanU=1; liczK3=1; timu1=15; L3=1;}
  105. if(aK3&&liczK3==2) {stanU=2; liczK3=2; timu1=15; L3=1;}
  106. if(aK3&&liczK3==3) {stanU=3; liczK3=3; timu1=15; L3=1;}
  107. break;
  108. case 1:
  109.  
  110. if(!timu1) {L3=0;}
  111. if(aK3&&liczK3==1&&!pK3) {stanU=2; liczK3=2; liczT=0; timu1=15; L3=1;}
  112. if(stan!=3) {stanU=0; liczK3=0; liczT=0;}
  113. break;
  114. case 2:
  115.  
  116. if(!timu1&&liczT<3) {L3=!L3; liczT++; timu1=15;}
  117. if(aK3&&liczK3==2&&!pK3) {stanU=3; liczK3=3; liczT=0; timu1=15; L3=1;}
  118. if(stan!=3) {stanU=0; liczK3=0; liczT=0;}
  119. break;
  120. case 3:
  121.  
  122. if(!timu1&&liczT<5) {L3=!L3; liczT++; timu1=15; }
  123. if(aK3&&liczK3==3&&!pK3) {stanU=1; liczK3=1; liczT=0; timu1=15; L3=1;}
  124. if(stan!=3) {stanU=0; liczK3=0; liczT=0;}
  125. break;
  126. }
  127.  
  128. switch(stanT){
  129. case 0:
  130. L4=0;
  131. L5=0;
  132. if(aK4){ stanT=1; timt1=50; tT=0; tT2=0;}
  133. break;
  134. case 1:
  135. L4=1;
  136. tT2++;
  137. L5=0;
  138. if(tT)--tT;
  139. if(!aK4&&!tT){ stanT=2;tT=tT2;tT2=0;}
  140. if(aK4&&!timt1&&!tT){ stanT=4; timt1=10; tT=tT2;tT2=0;}
  141. break;
  142. case 2:
  143. L4=0;
  144. L5=0;
  145. if(!timt1){ stanT=3; timt1=20;}
  146. if(aK4){ stanT=1; timt1=50; tT=0; tT2=0;}
  147. break;
  148. case 3:
  149. L4=0;
  150. L5=1;
  151. if(!timt1){ stanT=1; timt1=50;}
  152. if(aK4){ stanT=1; timt1=50; tT=0; tT2=0;}
  153. break;
  154. case 4:
  155. L4=0;
  156. L5=0;
  157. if(!aK4) stanT=1;
  158. }
  159.  
  160. if(timt1)--timt1;
  161. if(timu1)--timu1;
  162. if(timp1)--timp1;
  163.  
  164.  
  165. sprintf(buf,"K1=%dK2=%dK3=%dK4=%d ",(int)aK1,(int)aK2,(int)aK3,(int)aK4);
  166. LCD_xy(1,1); LCD_puts(buf);
  167. sprintf(buf,"L1=%dL2=%dL3=%dL4=%d ",(int)L1,(int)L2,(int)L3,(int)L4);
  168. LCD_xy(1,2); LCD_puts(buf);
  169.  
  170. pK1=aK1; pK2=aK2; pK3=aK3; pK4=aK4;
  171. pK5=aK5; pK6=aK6; pK7=aK7; pK8=aK8;
  172.  
  173. }
  174.  
  175. void przerwanie(void) // Obsługs przerwania od układu czasowo-licznikowego
  176. {}
  177.  
  178. void komunikacja(void) // Obsługa komunikacji szeregowej
  179. {}
  180.  
  181. #ifdef Symulator_PC
  182. void wykres(void) // Dane do tabeli i wykresu (dot. symulacji obiektu)
  183. {
  184. aTab[0] = stanT;
  185. aTab[1] = timt1;
  186. aTab[2] = tT;
  187. aTab[3] = tP2;
  188. aTab[4] = stanU;
  189.  
  190. bTab[0] = (int)aK1;
  191. bTab[1] = (int)aK2;
  192. bTab[2] = (int)aK3;
  193. bTab[5] = (int)L1;
  194. bTab[6] = (int)L2;
  195. bTab[7] = (int)L3;
  196. bTab[8] = (int)L4;
  197. bTab[9] = (int)L5; // LAMPA
  198. bTab[10] = (int)L6;
  199. bTab[11] = (int)LAMPA;
  200. }
  201. #endif
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement