Das Open-Control-Projekt - Die Alternative zur C-Control-I


Das Forum zur C-Control-1
Welche C-Control-Varianten existieren?
Übersicht - Suchen - Neueste 50 Beiträge - Neuer Beitrag - Login - Registrieren
INFO - FAQ - CC2-Forum - CCPro-Forum 

 Im Schrittregister Schrittaus die wartezeiten nicht greifen Kategorie: Programmierung Basic (von hecktor - 5.09.2005 22:48)
hecktor nutzt:  CC1-M-Unit V1.1
Das programm funktioniert ausser das bei PRG2 und dem Schrittregister Schrittaus die wartezeiten nicht greifen. was mach ich da falsch ?      





'---- LCD PARMAMETERS -----
define  LINE     byte[1]
define  CHAR     byte[1]
define  POS      byte[1]
define  BARS     byte[1]
define  BIN      byte[1]
define  DEZ      byte[1]
'-- LCD SYSTEM ADDR -----
define LCD_INIT   &H101
define LCD_CLR    &H11D
define LCD_LINE1  &H125
define LCD_LINE2  &H12A
define LCD_POSL1  &H12F
define LCD_POSL2  &H133
define LCD_SCRL   &H13B
define LCD_SCRR   &H140
define LCD_BAR    &H145
define LCD_BIN    &H154
define LCD_DEZ    &H1C3
define LCD_WRT    &H1A4
define LCD_PRINT  &H179


'--------------------------
'------ I/O PORTS ---------
'--------------------------
'define lcd_port byteport[2]
'define lcd_rs port[14]
'define lcd_rw port[13]
'define lcd_e  port[15]
define leds        byteport[1]
define wiled1          port[1]
define waled2          port[2]
define schrled3        port[3]
define schlled4        port[4]
define ventled5        port[5]
define pumpled6        port[6]
define vschalter7      port[7]
define wschalter8      port[8]
define key_val  ad[8]
'--------------------------
'---- Variable -------
'--------------------------
define ProgNr       byte[2]
define Wartezeit    byte[3] '
define Schritt      byte[4]
define x            byte[5]
define Bytefrei6    byte[6]
define wert1        byte[7]'Schmierbyte
define wert2        byte[8]'Schmierbyte
define wert12       word[4]'Schmierword = byte 7,8
define wert3        byte[9] 'Schmierbyte
define key          byte[10]'------- KEY DECODER ---------
define Bit81_88     byte[11]'11 (statische Bits)<<(bit 81 bis 88)<<<<<<
define Zaehler1     byte[12]
define Zaehler2     byte[13]
define Zykluszeit   byte[14]'Timer-Differenz
define TimerAlt     word[8]'= Byte 15,16 (Altwert)

define wert1Bit0           Bit [49]'für bit-Handling des byte wert1
define wert1Bit1           Bit [50]
define wert1Bit2           Bit [51]
define wert1Bit3           Bit [52]
define wert1Bit4           Bit [53]
define wert1Bit5           Bit [54]
define wert1Bit6           Bit [55]
define wert1Bit7           Bit [56]
'bits zu Byte 11
define FlankeZeitpuls      Bit[81]'Flankenbit
define TastaturFlanke      Bit[82]'Flankenbit
define AufrufbitKey7       Bit[83]'
define AufrufbitKey0       Bit[84]'
define BitFrei5            Bit[85]'
define BitFrei6            Bit[86]
define SekPuls             Bit[87]'
define LoeschLCD           Bit[88] 'Aufruf LCD löschen


 sys lcd_init
 sys lcd_clr
 'Vorbesetzung
 Zaehler1 = 127
 Zaehler2 = 65
 '########################################################
#Anfang ' Hauptprogramm

 if ProgNr < 1 then goto ende12
 ' 3.1 Zeittakt
 SekPuls  = OFF
 wert1 = second
 if wert1Bit0 = FlankeZeitpuls  then goto ende1
 FlankeZeitpuls = wert1Bit0
 SekPuls  = ON
 AufrufbitKey7  = OFF
 AufrufbitKey0  = OFF
#ende1
 ' 3.2 Steuerprogramm
 ' *** Schrittsteuerung mit Wartezeiten ***
 'In jedem Schritt kann eine Wartezeit gesetzt werden, die rückwärts gegen Null läuft.
 'Nach Ablauf  der Wartezeit wird der eingeschaltete Schritt bearbeitet.
 if (Wartezeit = 0)and ProgNr=1 then goto Schritt else if ProgNr=2 then goto Schrittaus
 if (sekpuls = OFF) then goto Ende12
 Wartezeit = Wartezeit -1 'Wartezeit minus 1 sek (Zeittakt siehe oben)
 goto Ende12
#Schritt ' Schrittregister bei Wartezeit NULL
 if (Schritt = 1) then goto Schritt1 '
 if (Schritt = 2) then goto Schritt2 '
 if (Schritt = 3) then goto Schritt3 '
 if (Schritt = 4) then goto Schritt4 '
 if (Schritt = 5) then goto Schritt5 '
 if (Schritt = 6) then goto Schritt6 '
 if (Schritt = 7) then goto Schritt7 '
 if (Schritt = 8) then goto Schritt8 '

Schritt = 1

goto Ende12


#Schritt1
 ventled5 = OFF '
 Wartezeit = 10 'x 1 sec Wartezeit setzen
 Goto Schrittweiter
#Schritt2 '
 pumpled6 = OFF : wiled1 = ON : schrled3 = ON  '
 Wartezeit = 10'x1 sec Wartezeit setzen
 Goto Schrittweiter
#Schritt3 '
 schrled3 = OFF : wiled1 = OFF : waled2 = ON'
 Wartezeit = 10'x1 sec Wartezeit setzen
 Goto Schrittweiter
#Schritt4 '
  waled2 = OFF :wiled1 = ON : schlled4 = ON :'
 Wartezeit = 10'x1 sec Wartezeit setzen
 Goto Schrittweiter
#Schritt5
  schlled4 = OFF : wiled1 = OFF :waled2 = ON
 Wartezeit = 10'x1 sec Wartezeit setzen
 Goto Schrittweiter
#Schritt6
 waled2 = OFF :ventled5 = ON
 Wartezeit = 5'x1 sec Wartezeit setzen
 Goto Schrittweiter
#Schritt7
 pumpled6 = ON
 Wartezeit = 5'x1 sec Wartezeit setzen
 goto Schrittweiter
#Schritt8
 Wartezeit = 5'x1 sec Wartezeit setzen
 if wschalter8 = OFF  then goto Ende12

#Schrittaus
 if (Schritt = 1) then goto Schrittaus1 '
 if (Schritt = 2) then goto Schrittaus2 '
 if (Schritt = 3) then goto Schrittaus3 '
 if (Schritt = 4) then goto Schrittaus4 '
 if (Schritt = 5) then goto Schrittaus5 '
 if (Schritt = 6) then goto Schrittaus6 '
 Schritt = 1
 goto Ende12

#Schrittaus1
 ventled5 = OFF '
 Wartezeit = 10 'x 1 sec Wartezeit setzen
 Goto Schrittweiter
#Schrittaus2 '
 pumpled6 = OFF : wiled1 = ON : schrled3 = ON  '
 Wartezeit = 10'x1 sec Wartezeit setzen
 Goto Schrittweiter
#Schrittaus3 '
 schrled3 = OFF : wiled1 = OFF : waled2 = ON'
 Wartezeit = 10'x1 sec Wartezeit setzen
 Goto Schrittweiter
#Schrittaus4 '
  waled2 = OFF :wiled1 = ON : schlled4 = ON :'
 Wartezeit = 10'x1 sec Wartezeit setzen
 Goto Schrittweiter
#Schrittaus5
  schlled4 = OFF : wiled1 = OFF :waled2 = ON
 Wartezeit = 10'x1 sec Wartezeit setzen
 Goto Schrittweiter
#Schrittaus6
 waled2 = OFF :deact leds : ProgNr=0:return

#Schrittweiter
 Schritt = Schritt + 1 ' Schritt-Nummer um 1 erhöhen

#Ende12
 'Messung der Zykluszeit des Programms
 'Das Messprogramm bildet Differenz des aktuellen Timer-Werts zum vorherigen gespeicherten Altwert.
 Zykluszeit = (Timer - TimerAlt)' * 20 ' Anzeige *20 in Millisekunden
 TimerAlt = Timer ' Bildung des Altwerts

 gosub Tastatur  ' Abfrage Tastatur
 Goto LCD'        Anzeigen (LCD endet mit goto Anfang)
 '########################################################
 ' *** Unterprogramme  ***
#Tastatur
 gosub key_decode  'Abfrage Taste gedrückt, sichere Version  <<<<<<<<<<<<<<<<<<

 if key < 199 then goto Taste ' >199=keine Taste, 0 bis 9=Ziffer, 10=*  11=#
 TastaturFlanke = OFF
 x = 1
 Return

#Taste   'Auswertung und Befehlsgabe der Tastatur

 if ProgNr < 1 then goto TastaturFlanke'
 
#TastaturFlanke'
 if TastaturFlanke = ON then Return ' Einzelschritt
 TastaturFlanke = ON 'nachfolgende Tasten lösen Einzelschritt aus
 if key =1 then goto ProgNrPlus   'Programm Nr stellen (Einzelschritt)
 
 if ProgNr < 1 then return ' Relais schalten
   
 if Key = 7 then AufrufbitKey7 = ON
if AufrufbitKey7 then goto Vibrationabschaltung
if Key = 0 then AufrufbitKey0 = ON
if AufrufbitKey0 then ProgNr=2
if ProgNr=2 then   LoeschLCD = ON
return

#key_decode 'Umsetzungstabelle auf Tastencode  Applikationboard (Version Wilzeck)
 key=255 ' Vorbesetzung Anfang: (keine Taste gedrückt 240 bis 255)
#nochmal
 wert3 = key_val
 if wert3 > 240 then return  ' keine Taste gedrückt
 Key = key -1                '(Schleifenzähler)
 if wert3 = key_val then goto TasteAusgeben 'Wert stabil?
 if Key > 240 then goto nochmal ' max. 15-mal prüfen
 return                         ' dann Abbruch
#TasteAusgeben
 if wert3>=0   then key=10 '  KEY *
 if wert3>14  then key=7  '  KEY
 if wert3>36  then key=4  '  KEY
 if wert3>57  then key=1  '  KEY
 if wert3>70  then key=0  '  KEY
 if wert3>100 then key=8  '  KEY
 if wert3>122 then key=5  '  KEY
 if wert3>142 then key=2  '  KEY
 if wert3>163 then key=11 '   KEY #
 if wert3>183 then key=9  '  KEY
 if wert3>204 then key=6  '  KEY
 if wert3>225 then key=3  '  KEY
 return

#LCD
 if LoeschLCD = OFF then goto Anzeige ' Aufruf LCD löschen (bei PrgPlus)
 LoeschLCD = OFF :sys LCD_CLR
#Anzeige
 if ProgNr =1 then goto LCDprg1
 if ProgNr =2 then goto LCDprg2 'u.s.w.

 SYS LCD_LINE1:sys LCD_PRINT:print" EIN die 1 und AUS die 0  V=7       "
 for wert1=1 to 22
 SYS LCD_SCRL:pause 20
 
 goto Anfang ' Ende Hauptprogramm

#LCDprg1
 sys LCD_LINE1 ' Start Zeile 1
 DEZ = ProgNr : SYS LCD_DEZ               'Spalte 1
 sys LCD_PRINT:print"  warte "
 DEZ = Wartezeit : SYS LCD_DEZ : sys LCD_PRINT:print" sec"
 goto LCD67' Ende Hauptprogramm

#LCDprg2
 sys LCD_LINE1 ' Start Zeile 1
 DEZ = ProgNr : SYS LCD_DEZ               'Spalte 1
 sys LCD_PRINT:print"  warte "
 DEZ = Wartezeit : SYS LCD_DEZ : sys LCD_PRINT:print" sec"
 goto LCD67

#LCD67
 sys LCD_LINE2 ' Start Zeile 2
 sys LCD_PRINT:print"Schritt "
 DEZ = Schritt : SYS LCD_DEZ
 goto Anfang ' Ende Hauptprogramm

#ProgNrPlus
 ProgNr = ProgNr + 1
 LoeschLCD = ON  ' Aufruf LCD löschen (jeweils bei ProgNrPlus)
 if ProgNr > 3 then ProgNr = 1
 return
#Vibrationabschaltung
schrled3 = OFF : schlled4 = OFF :wiled1 = OFF : waled2 = ON : return
#PlusZaehler1 '
 Zaehler1 = Zaehler1 +1 :return
#MinusZaehler1 '
 Zaehler1 = Zaehler1 -1 :return
#PlusZaehler2 '
 Zaehler2 = Zaehler2 +1 :return
#MinusZaehler2 '
 Zaehler2 = Zaehler2 -1 :return
#PlusVar '
 Zaehler2 = Zaehler2 + x
 x = x + 1
 return
 'Ausgabe von Zahlen im word
#Zahl5 ' 5-stellige Zahl ausgeben
 if wert12 <0 then gosub Minus else gosub space
 wert12 =  abs (wert12)
 if wert12 >= 10000 then CHAR = wert12 /10000 +&H30 else  CHAR = &H20
 SYS LCD_WRT
#Zahl4 ' 4-stellige Zahl ausgeben
 if wert12 >= 1000 then CHAR = wert12 MOD 10000 /1000 +&H30 else  CHAR = &H20
 SYS LCD_WRT
#Zahl3Word ' 3-stellige Zahl ausgeben (wert größer 255)
 if wert12 >= 100 then CHAR = wert12 MOD 1000 /100 +&H30 else  CHAR = &H20
 SYS LCD_WRT
 if wert12 >= 10 then CHAR = wert12 MOD 100 /10 +&H30 else  CHAR = &H20
 SYS LCD_WRT
 CHAR = wert12 MOD 10 +&H30
 SYS LCD_WRT
 Return

 'Ausgabe von Zahlen im Byte, führende Null wird Space
#Zahl3 ' 3-stellige Zahl ausgeben (Byte max 255)
 if wert1 >= 100 then CHAR = wert1/100 +&H30 else CHAR = &H20 'Space
 SYS LCD_WRT
#Zahl2 ' 2-stellige Zahl ausgeben
 if wert1 >= 10 then CHAR = wert1 MOD 100 /10 +&H30 else  CHAR = &H20
 SYS LCD_WRT
#Zahl1 ' 1-stellige Zahl ausgeben
 CHAR = wert1 mod 10 +&H30
 SYS LCD_WRT : Return



#Space CHAR = &H20 :SYS LCD_WRT :Return
#Plus  CHAR = &H2B :SYS LCD_WRT :Return
#Minus CHAR = &H2D :SYS LCD_WRT :Return
#ae    CHAR = &HE1 :SYS LCD_WRT :Return
#oe    CHAR = &HEF :SYS LCD_WRT :Return
#ue    CHAR = &HF5 :SYS LCD_WRT :Return


goto Anfang





'--------------- DISPLAY TREIBER ----------------------
'syscode "lcddrv11.s19"


                                                                                           


 Antwort schreiben

Bisherige Antworten: