'************************************************************************
'* *
'* Programm zum ansteuern eines automatischen Werkstückvorschubes *
'* *
'* von Matthias G. *
'* *
'************************************************************************
$regfile = "m8def.dat"
$crystal = 8000000
$hwstack = 40
$swstack = 16
$framesize = 32
'$sim
'****************** Initialisierung Display *****************************
Config Lcdpin = Pin , E = Portc.0 , Rs = Portc.1 , Db4 = Portc.2 , Db5 = Portc.3 , Db6 = Portc.4 , Db7 = Portc.5
Config Lcd = 16 * 2
Config Lcdbus = 4 'Im Code sind längere Texte als das LCD 16 * 2 anzeigen kann, ich Tausche es noch gegen ein 20 * 2
Initlcd
Cls
'***************** Ports bestimmen **************************************
Ddrb = &H00 'portb.0 - .5 eingänge
Ddrd = &H0F 'portd.4 - .7 eingänge und .0 - .3 ausgänge
Portb = &HFF 'Port B alle Eingänge haben Pullup Widerstände
Portd = &HF0 'Port D Eingänge haben Pullup Widerstände , Ausgänge haben Low Pegel
'Ausgänge Port D
Ma Alias Portd.0 'gibt der Maschine Freigebe zum bohren 1 = Bohren 0 = Grundstellung
Z1 Alias Portd.1 'vordere Werkstückklemmung 1 = klemmen , 0 = lösen
Z2 Alias Portd.2 'hintere Werkstückklemmung 1 = klemmen , 0 = lösen
Z3 Alias Portd.3 'Werkstückvorschub 1 = vorn , 0 = hinten
'Eingänge Port D (Rückmeldung)
Di Alias Portd.4 'Drehzahlimpuls
Sr Alias Portd.5 'Spindelrückmeldung - fertig gebohrt Werkstück weiterschieben
Z3v Alias Portd.6 'Vorschubzylinder ist vorn
Z3h Alias Portd.7 'Vorschubzylinder ist hinten
'Eingänge Port B
Z1z Alias Pinb.0 'vordere Werkstückklemmung ist zu
Z2z Alias Pinb.1 'hintere Werkstückklemmung ist zu
Su Alias Pinb.2 'Spindel unten **********************************
T1 Alias Pinb.3 'Taster 1 * Die Taster haben die Funktion, *
T2 Alias Pinb.4 'Taster 2 * die in der zweiten Zeile des *
T3 Alias Pinb.5 'Taster 3 * Displays angezeigt werden. *
' **********************************
'***************** Variablen dimensionieren*****************************
Dim Bo As Byte 'Bo steht für die anzahl der zu Bohrenden Löcher
Dim Boa As String * 2 'Boa wird zur formatierten Ausgabe von Bo benötigt
Dim Sbo As Byte
Dim I As Byte
Bo = 1 'vorgabe eine Bohrung
'****** Hauptprogramm **************************************************
Gosub Grundstellung ' sprungbefehl zu Grundstellung
Waitms 50 ' taster prellen noch werd´s noch anders lösen
Bitwait T2 , Reset ' warte auf betätigung Taster2 = "weiter"
Gosub Anzahl_bohrungen ' sprungbefehl Anzahl_Bohrungen
[COLOR="#B22222"]Klemm:[/COLOR] Gosub Klemmung ' sprungbefehl Klemmung
Gosub Programmstart
For I = sBo To 1 Step - 1 ' durchläufe nach anzahl der eingegebenen Bohrungen
Gosub Maschine_bohren ' hardware abläufe
Gosub Vorschub
Next
Gosub Fertig
End
'*********** Subroutinen ***********************************************
Fertig:
Waitms 250
Do
Upperline : Lcd " Fertig ! "
Lowerline : Lcd "Aus PgmSrt Neu"
If T1 = 0 Then ' ist Taster1 (Aus) springe grundstellung mach display aus
Gosub Grundstellung
Display Off
Return
Elseif T2 = 0 Then ' ist Taste2 (PgmSrt) [COLOR="#B22222"]jetzt sollte zur klemmung gesprungen werden um das werkstück tauschen zu können und das ganze programm wiederholt werden[/COLOR]
Bo = Sbo ' sbo ist die variable die gesichert wurde bevor bo decrementiert wird [COLOR="#B22222"]leider sind nach goto die anzahl der Bohrungen Bo wegund mit gosub würde genau hier wieder hergesprungen werden[/COLOR]
Goto Klemm
Elseif T3 = 0 Then ' ist Taster3 (neu) reset mit goto 0
Goto 0
End If
Waitms 100
Loop
Vorschub: ' Spätere hardware ausführen kommen noch eingangs abfragen dazu - solang das Menü noch nicht geht ist es erstmal nicht wichtig
Reset Z1
Waitms 500
Set Z3
Waitms 500
Set Z1
Waitms 500
Reset Z2
Waitms 500
Reset Z3
Waitms 500
Set Z2
Waitms 500
Return
Maschine_bohren:
Boa = Str(bo) 'wandelt variable in ein string um?
Boa = Format(boa , " ") 'gibt den string in einem bestimmten Format zurück
Upperline ' LCD 1. Zeile anwählen
If Bo = 1 Then 'wenn Bo = 1 dann gib den Text "Bohrung" aus
Lcd "noch " ; Boa ; " Bohrung"
Else 'sonst gib "Bohrungen" aus
Lcd "noch " ; Boa ; " Bohrungen"
End If
Lowerline : Lcd "Programm läuft"
Set Ma ' hardware ansteuerung
Bitwait Su , Reset
Reset Ma
Decr Bo ' zählt Bo für anzeige runter
Return
Programmstart:
Waitms 250
Do
Upperline : Lcd "Programm Starten"
Lowerline : Lcd "Rst {132}ndern Start"
If T3 = 0 Then ' ist Taster3 (Start) springt zurück und startet die For Next schleife
Return
Elseif T1 = 0 Then ' ist Taster1 (reset) reset mit goto 0
Goto 0
Elseif T2 = 0 Then ' ist Taste2 (ändern) sprung zu anzahl bohrungen zum ändern und hierhin zurück
Gosub Anzahl_bohrungen
End If
Waitms 100
Loop
Klemmung:
Waitms 250
Do
Upperline : Lcd "Werkst{129}ck Klemmen " ' Anzeige LCD warum da kein "ü" gemacht wird kann ich mir nicht erklären bis 127 geht alles ab 128 nicht mehr,
If Z1z = 1 And Z2z = 1 Then
Lowerline : Lcd "zu * ok auf" 'in nem anderen Testprogramm von mir hat es schon funktioniert
Else
Lowerline : Lcd "zu ok * auf"
End If
If T3 = 0 Then ' ist Taster3 (auf) gedrückt dann reset Z1 und Z2
Reset Z1
Reset Z2
Elseif T1 = 0 Then ' ist Taster1 (zu) gedrückt dann set Z1 und Z2
Set Z1
Set Z2
Elseif T2 = 0 And Z1 = 1 And Z2 = 1 Then ' wird Taste2 (ok) betätigt dann verlasse die Routine
Return
End If ' rücksprung ins Hauptprogramm , [COLOR="#B22222"]hier leider das Problem mit dem wiederholen am ende - dann gilt dieses return dem sprungbefehl aus "Fertig:"[/COLOR]
Waitms 100
Loop
Anzahl_bohrungen:
Waitms 250 'entprellen und Anzeige beruhigen
Do 'schleife
Boa = Str(bo) 'wandelt variable in ein string um?
Boa = Format(boa , " ") 'gibt den string in einem bestimmten Format zurück
Upperline ' LCD 1. Zeile anwählen
If Bo = 1 Then 'wenn Bo = 1 dann gib den Text "Bohrung" aus
Lcd Boa ; " Bohrung "
Else 'sonst gib "Bohrungen" aus
Lcd Boa ; " Bohrungen "
End If
Lowerline : Lcd "- ok +" ' 2.Zeile gewählt und Ausgabe des Textes für die Funktion der 3 Taster
If T3 = 0 Then ' ist Taster3 (+) gedrückt dann addiere 1 zum Wert Bo dazu
Incr Bo
If Bo > 99 Then ' Bo wird auf 99 begrenzt
Bo = 99
End If
Elseif T1 = 0 Then ' ist Taster1 (-) gedrückt dann subtrahiere 1 vom Wert Bo
Decr Bo
If Bo < 1 Then ' ist Bo kleiner 1 dann setze Bo auf 1 und gib den Text aus
Bo = 1
Upperline : Lcd " Sehr Witzig "
Wait 1
End If
Elseif T2 = 0 Then ' wird Taste2 (ok) betätigt dann verlasse die Routine
Sbo = Bo ' die anzahl wird für eine spätere wiederholung gesichert, da bo ja decrementiert wird
Return
End If
Waitms 100
Loop
Grundstellung: ' Alle Ausgänge werden auf 0 gesetzt(Grundstellung)
Ma = 0
Z1 = 0
Z2 = 0
Z3 = 0
Waitms 500 ' wird noch angepasst Aktionszeit der Zylinder oder Motore(hab mich noch nicht entschieden)
If Pind = &H70 And Pinb = &HFF Or Pind = &H60 And Pinb = &HFF Then ' Abfragen der Eingänge alle eingänge sollen nicht betätigt also High-Pegel haben
Upperline : Lcd " Grundstellung " ' ausser Pind.7(z3h in Grundstellung betätigt)muss Low-Pegel haben und bei Pind.4 ist der Pegel egal (drehzahlmessung)
Lowerline : Lcd " ok " ' ausgabe auf Display
Return
Else
Upperline : Lcd "Fehler B" ; Bin(pinb) ' zeigt port b und d im LCD an zur Fehlersuche oder was auch immer
Lowerline : Lcd " D" ; Bin(pind)
Waitms 250
End If
Gosub Grundstellung
Return
End