Update vom 10.05.15

Dependencies:   FreescaleIAP MODSERIAL mbed monitor timer0

Fork of 18_PT1000 by Temp27

Revision:
21:6f524a6caabe
Parent:
20:b85406f52de3
--- a/main.cpp	Mon May 11 17:32:06 2015 +0000
+++ b/main.cpp	Sun Aug 23 10:18:54 2015 +0000
@@ -1,6 +1,7 @@
-// Version 1.0   erstellt am 25.04.2015
-// 01.05.15 den Eingäng 4 auf 2 verlegt
-//          den Eingang 5 auf 1 verlegt
+// Version 1.0   erstellt am 22.08.2015
+//
+// IN1 auf 0 = OUT5+6 AUS
+// IN1 auf 1 = OUT5+6 EIN plus 5 Sekunden Ausschaltverzögerung
 
 #include "mbed.h"
 #include "main.h"
@@ -8,14 +9,6 @@
 #include "monitor.h"
 #include "MODSERIAL.h"
 
-// timer 2 => optischer Alarm Periode = 500 entspricht Blinkfrequnz von 1 Selunde
-#define OA_PERIODE 500
-// timer 3 => Minimale Zeit für den akustischen Alarm in ms >> soll 10000 entspricht 10 Sekunden
-#define AA_NIN 10000
-// timer 4 => Verzögerung für des Entriegeln des Tasters. In dieser Zeit wird dann kein neuer
-// akustischer Alarm ausgelöst
-#define AA_DELAY 10000
-
 #define NEED_CONSOLE_OUTPUT 1   // Set this if you need debug messages on the console
                                 // mit Debug wird die Programmgröße von 32,8k um ca. 300 Byte vergrößert
                                 // dies ist nicht bedeutend, aber auch die Ausführungszeit der Ausgabebefehle
@@ -42,15 +35,15 @@
 DigitalOut LED(PTE30);
 
 DigitalOut OUT1(PTC6);      // nicht belegt
-DigitalOut OUT2(PTC5);      // LED Rot
-DigitalOut OUT3(PTC4);      // LED Grün
-DigitalOut OUT4(PTC3);      // LED Gelb
-DigitalOut OUT5(PTC2);      // Summer
-DigitalOut OUT6(PTC1);      // Relais
+DigitalOut OUT2(PTC5);      // nicht belegt
+DigitalOut OUT3(PTC4);      // nicht belegt
+DigitalOut OUT4(PTC3);      // Türöffner                                schaltet gegen GND max. 500mA
+DigitalOut OUT5(PTC2);      // nicht belegt (Summer)
+DigitalOut OUT6(PTC1);      // Relais: Tür / Torsteuerung               Relais Kontakt als Ausgang
 
-DigitalIn IN1(PTC7);        // Notaus, schaltet gegen 24V =>            24V oder 1 ist der Ruhezustand
-DigitalIn IN2(PTD4);        // Sabotageschalter, schaltet gegen 24V =>  24V oder 1 ist Ruhezustand
-DigitalIn IN3(PTD5);        // KABA Türöffner Signal =>                 24V oder 1 ist Ruheezustand
+DigitalIn IN1(PTC7);        // Taster Türöffnersignal                   24V oder 1 ist der Ruhezustand
+DigitalIn IN2(PTD4);        // nicht belegt  
+DigitalIn IN3(PTD5);        // nicht belegt                  
 DigitalIn IN4(PTD6);        // nicht belegt                             
 DigitalIn IN5(PTD7);        // nicht belegt 
 
@@ -62,8 +55,7 @@
 bool in;
 
 struct di_struct in1;      // Eingang 1
-struct di_struct in2;      // Eingang 2
-struct di_struct in3;      // Eingang 3
+
 
 //------------------------------------------------------------------------------
 //
@@ -82,30 +74,15 @@
     //--------------------------------------------------------------------
     //  Anfangswerte setzen
 
-    in1.old = 1;        // 1 im Ruhezustand
-    in1.aktiv = 0;      
-    in1.filter = 0;
-    in1.optischer_alarm = 0;
-    in1.summer = 0;
-    
-    in2.old = 1;        // 1 im Ruhezustand
-    in2.aktiv = 0;      
-    in2.filter = 0;
-    in2.optischer_alarm = 0;
-    in2.summer = 0;
-
-    in3.old = 1;        // 1 im Ruhezustand
-    in3.aktiv = 0;      
-    in3.filter = 0;
-    
+    in1.old = 1;        // 1 im Ruhezustand      
+    OUT4 = 0;
+    OUT6 = 0; 
+      
     //--------------------------------------------------------------------
     // Softwaretimer für die Zeitsteuerung anlegen
 
-    down_timer.SetCountdownTimer(0,1,500);      // 1 ms Timer * 500 => ergibt 500 ms
-    down_timer.SetCountdownTimer(1,1,100);      // 1 ms Timer * 10 => ergibt 10 ms, 100 ms für Einschaltverzögerung
-    down_timer.SetCountdownTimer(2,1,0);        // 1 ms Timer => reserviert für optischen Alarm
-    down_timer.SetCountdownTimer(3,1,0);        // 1 ms Timer => reserviert für akustischen Alarm
-    down_timer.SetCountdownTimer(4,1,0);        // 1 ms Timer => reserviert für nach Entriegelung
+    down_timer.SetCountdownTimer(0,1,500);      // 1 ms Timer * 500 => ergibt 500 ms für die LED
+    down_timer.SetCountdownTimer(1,1,10);       // 1 ms Timer * 10  => ergibt 10 ms für die Tasterabfrage
     
     //--------------------------------------------------------------------
     // Schleife fuer die Datenerfassung
@@ -121,7 +98,8 @@
         //-------------------------------------------
         // timer 0 steuert die LED auf dem Board mit der Takrate 0,5 Sekunden
 
-        if (down_timer.GetTimerStatus(0) == 0) {
+        if (down_timer.GetTimerStatus(0) == 0) 
+        {
             down_timer.SetCountdownTimer(0,1,500);
             LED = !LED;
             
@@ -143,157 +121,43 @@
         
             in = IN1;
             
-            
             if(!in && in1.old)       // Öffner im Ruhezustand 24 V >> durch Drücken wird eine neg. Flanke erzeugt
-            {
+            {                        
                 in1.old = 0;
-                in1.aktiv = 1;       // Taster ist betätigt
-                in1.optischer_alarm = 1;
-                in1.summer = 1;
-                down_timer.SetCountdownTimer(3,1,AA_NIN);  // Zeit für Softtimer auf 10 Sekunden setzen
                 DEBUG("\n negative Flanke IN1 \n");
             }
 
-            if (in && !in1.old) {     // Öffner im Ruhenzustand 24 V >> durch Rückstellen enteht eine pos. Flanke
-                in1.old = 1;
-                in1.aktiv = 0;        // Taster ist zurückgesetzt
-                
-                in1.summer = 0;
-                down_timer.SetCountdownTimer(4,1,AA_DELAY);  // Zeit für Entriegelung, Haube innerhalb von 10 Sekunden schließen
-                DEBUG("\n positve Flanke IN1 \n");
-            }
-            
-            // optischer Alarm ausschalten, wenn IN3 wieder 0 bekommt ==> Quittierung
-
-            if (in1.optischer_alarm && in3.aktiv && !in1.aktiv) 
+            if (in && !in1.old)      // Öffner im Ruhenzustand 24 V >> durch Rückstellen enteht eine pos. Flanke
             {
-                in1.optischer_alarm = 0;
-                DEBUG("\n IN1 mit IN3 quittiert \n");
-            }
-
-
-            //------------------------------------------------
-            // IN2 Sabotageschalter, 24V ist Ruhezustand
-            // wird mit der negativen Flanke aktiviert
-            // das Signal muss mindestens 10ms anliegen, damit es akzeptiert wird
-            
-            in = IN2;
-            
-            
-            if(!in && in2.old)          // Eingang neg. Flanke
-            {    
-                in2.old = 0;            // 0 im aktivierten Modus
-                in2.aktiv = 1;          // Eingang ist aktiv
-                //in2.optischer_alarm = 1;
-                in2.summer = 1;      // am 11.05.15 entfernt, da Summer weiter untern aktiviert wird
-                //down_timer.SetCountdownTimer(3,1,AA_NIN);  // Zeit für Softtimer auf 10 Sekunden setzen
-                DEBUG("\n negative Flanke IN2 \n");
+                in1.old = 1;
+                down_timer.SetCountdownTimer(3,1,5000);  // Zeit für Abschaltverzögerung auf 5 Sekunden setzen
+                DEBUG("\n positve Flanke IN1 \n");
             }
 
-            if (in && !in2.old)         // Eingang mit pos. Flanke
-            {    
-                in2.old = 1;            // 1 im Ruhezustand   
-                in2.aktiv = 0;          // Eingang ist inaktiv
-                in2.summer = 0;
-                DEBUG("\n positve Flanke IN2 \n");
-            }
-/*
-            if (in2.aktiv && !in2.summer && !in1.summer && (down_timer.GetTimerStatus(4) == 0))
-            {
-                in2.summer = 1; 
-                down_timer.SetCountdownTimer(3,1,AA_NIN);  // Zeit für Softtimer auf 10 Sekunden setzen ( zum Testen auf 2 Sek. gesetzt )  
-                DEBUG("\n IN2 Summer aktiviert \n");
-            }
-            
-            // nur zurückschalten, wenn IN3 wieder 1 ==> Quittierung
-
-            if (in2.optischer_alarm && in3.aktiv) {
-                in2.optischer_alarm = 0;
-                DEBUG("\n IN2 mit IN3 quittiert \n");
-            }
-*/
-            //------------------------------------------------
-            // IN3 Signalstation, Öffner => 1 ist Ruheezustand
-
-            in = IN3;
-
-            if(in && !in3.old)        // Eingang pos. Flanke
-            {   
-                in3.old = 1;
-                in3.aktiv = 0;        // Eingang ist Ruhezustand
-                
-            }
-
-            if (!in && in3.old)       // Eingang mit neg Flanke
-            {
-                in3.old = 0;
-                in3.aktiv = 1;        // Eingang ist aktiv    
-            }
-
-
             //---------------------------------------------------------------------------------------------------------------------------------------
-            // Die Eingänge sind nun gelesen, jetzt kommt das Steuern der Ausgaänge
+            // Die Eingänge sind nun gelesen, jetzt kommt das Steuern der Ausgänge
             //
             
             //------------------------------------------------
-            // Rot/Grüne LED (verriegelt/entriegelt):
-            // rot      Tor ist verriegelt
-            // grün     Tor ist entriegelt
-            
-            //  2. IN3 auf 0 = OUT2 aus und OUT3 ein   Rot aus / Grün an   (entriegelt)
-            //  3. IN1 auf 1 = OUT2 aus und OUT3 ein   Rot aus / Grün an   (entriegelt)
+            // IN1 auf 0 = OUT4+6 AUS
+            // Nach Ablauf der Ausschaltverzögerung wird der Ausgang wieder auf 0 geschaltet
             
-            if (in3.aktiv || in1.aktiv) {          
-                OUT2 = LED_AUS;
-                OUT3 = LED_EIN;
-            }
-            else 
-            //  1. IN3 auf 1 = OUT2 ein und OUT3 aus   Rot an / Grün aus   (verriegelt)
-            {   
-                OUT2 = LED_EIN;
-                OUT3 = LED_AUS;
-            }            
-            
-            //------------------------------------------------
-            //  Gelbe LED (optischer Alarm):
-
-            if (in1.optischer_alarm)  // sobald der optische Alarm aus Eingang 1 akiviert wurde, diesen in Blinkmode schalten
-            {    
-                if (down_timer.GetTimerStatus(2) == 0) 
-                {
-                    down_timer.SetCountdownTimer(2,1,OA_PERIODE);  // Zeit für Softtimer auf eine Sekunde setzen
-                    OUT4 = !OUT4;
-                }
-            } 
-            else 
-            {
-                OUT4 = LED_AUS;
+            if (!in1.old && (down_timer.GetTimerStatus(3) == 0)) 
+            {          
+                OUT4 = 0;
+                OUT6 = 0;
             }
 
             //------------------------------------------------
-            // Summer (OUT5 +24V)
-
-
-            if (in1.summer || in2.summer || (down_timer.GetTimerStatus(3) != 0))  // sobald der Eingang 1 oder Eingang 2 akiviert ist oder der Timer
-            {                                                                     // noch aktiv ist, den Summer aktivieren
-               DEBUG("\n Summer 1 = %d Summer 2 = %d \n",(uint8_t)in1.summer,(uint8_t)in2.summer);
-               OUT5 = 1;
-            } 
-            else 
-            {
-                OUT5 = 0;
-            }
+            // IN1 auf 1 = OUT4+6 EIN plus 5 Sekunden Ausschaltverzögerung 
+            // Die Ausschaltverögerung wirkt auf das Ausschalten nicht auf das Einschalten
+                       
+            if (in1.old)
+            {   
+                OUT4 = 1;
+                OUT6 = 1;
+            }            
             
-            //------------------------------------------------
-            // Relais K1:
-            // Der Kontakt des Nottasters wird weitergegeben
-
-            if (in1.aktiv) {  // 1.  IN1 auf 0 = OUT6 (K1) ein
-                OUT6 = 1;
-            } else {          // 2.  IN1 auf 1 = OUT6 aus
-                OUT6 = 0;
-            }
-
         } // end if (downtimer ...
         
     } // end while