Update vom 10.05.15
Dependencies: FreescaleIAP MODSERIAL mbed monitor timer0
Fork of 18_PT1000 by
Revision 21:6f524a6caabe, committed 2015-08-23
- Comitter:
- rs27
- Date:
- Sun Aug 23 10:18:54 2015 +0000
- Parent:
- 20:b85406f52de3
- Commit message:
- Version 1
Changed in this revision
diff -r b85406f52de3 -r 6f524a6caabe info.txt --- a/info.txt Mon May 11 17:32:06 2015 +0000 +++ b/info.txt Sun Aug 23 10:18:54 2015 +0000 @@ -1,15 +1,22 @@ -1. Nottaster NICHT gedrückt = Öffner (Klemmen,2,3,4) geschlossen / Summer und Alarm-LED inaktiv -2. Nottaster gedrückt = Öffner (Klemmen1,2,3,4) offen / Summer und Alarm-ELD aktiv (bis der Nottaster zurückgestellt wird) -3. KABA AML OUT1 NICHT aktiv = Öffner geschlossen / rote LED (Verriegelt) EIN / grüne LED (Entriegelt) AUS -4. KABA AML OUT1 aktiv = Öffner offen / rote LED (Verriegelt) AUS / grüne LED (Entriegelt) EIN +Anpassung der Software für das NTB1880-IX Board + +I/O Belegung +• IN1: Ext. Öffnugsbefehl (Taster) +• OUT5: Türöffner +• OUT:6 (Relais): Tür-/Torsteuerung + +Funktion: +• IN1 auf 0 = OUT5+6 AUS +• IN1 auf 1 = OUT5+6 EIN plus 5 Sekunden Ausschaltverzögerung -IN1 Sabotageschaltet -IN2 Nottaster -IN3 Schlüsselschalter S1 LABA ALM OUT1 -IN4 Schlüsselachalter S2 + +IN1 Taster Befehl für Türöffner +IN2 nicht belegt +IN3 nicht belegt +IN4 nicht belegt -OUT1 Summer -OUT2 LED rot -OUT3 LED grün -OUT4 LED gelb -OUT5 Relais KABA ALM \ No newline at end of file +OUT1 nicht belegt +OUT2 nicht belegt +OUT3 nicht belegt +OUT4 Türöffner +OUT5 Relais: Tür / Torsteuerung \ No newline at end of file
diff -r b85406f52de3 -r 6f524a6caabe main.cpp --- 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
diff -r b85406f52de3 -r 6f524a6caabe main.h --- a/main.h Mon May 11 17:32:06 2015 +0000 +++ b/main.h Sun Aug 23 10:18:54 2015 +0000 @@ -9,10 +9,7 @@ struct di_struct { bool aktiv; // Flag zur Steuerung - bool old; // alter Wert vom Eingang für Flankenerkennung - bool filter; // ein Flankengetriggertes Signal muss mindestens 10ms anliegen - bool optischer_alarm; // für die Bestätigung von IN3 - bool summer; // Flag für Zeitsteuerung des Summers + bool old; // alter Wert vom Eingang für Flankenerkennung // Flag für Zeitsteuerung des Summers }; #endif