Hi, ich wollte mal mein neues Projekt reinstellen und fragen was ihr davon haltet und was ich noch verbessern könnte.
Das ganze soll mal ein Rolloaktor für nen Hausbus werden.
Das Teil wird uber die RS232 oder 485 über einen Befehl zB ro0101 (Rollo 01 auf) von einem anderen Busteilnehmer angesprochen und dann dieentsprechende Aktion ausführen. Da ich im freien Erklären nich besonders gut bin fragt einfach nach
p.s. Kritik erwünschtCode:'Rolloaktor V1.0 'Max 8 Rollos 'Befehle über RS232 / RS485 'Erstellt 23.11.2007 By Kalle $regfile = "m32def.dat" $crystal = 4000000 Declare Sub Steuern(subrollonummer As Byte , Subaktionnummer As Byte) '*** Konfig *** Config Lcd = 16 * 2 Config Lcdpin = Pin , Db4 = Portb.4 , Db5 = Portb.5 , Db6 = Portb.6 , Db7 = Portb.7 , E = Portb.3 , Rs = Portb.2 Config Pind.2 = Input Config Pind.3 = Input Config Pind.4 = Input Config Pind.5 = Input Portd.2 = 1 Portd.3 = 1 Portd.4 = 1 Portd.5 = 1 Pind.2 Alias Adr1 Pind.3 Alias Adr2 Pind.4 Alias Adr3 Pind.5 Alias Adr4 '*** Variablendeklaration *** Dim Befehl As String * 6 Dim Befehllaenge As Byte Dim Typ As String * 2 Dim Nummer As String * 2 Dim Aktion As String * 2 Dim Fehler As String * 10 Dim Myadress As String * 8 Dim Adress As String * 8 Dim Umrechnung As Byte Dim Umrechnung2 As Byte Dim Nummerbyte As Byte Dim Rollo(8) As Byte Dim Aktionbyte As Byte Dim Portabyte As Byte Dim Portcbyte As Byte Dim I As Byte Dim Fehlerlaenge As Byte Dim Adrbyte As Byte 'Umrechnung2 = "0000000000000000" '*** Hauptprogramm *** Do Gosub Adresserkennung Input Befehl Befehllaenge = Len(befehl) If Befehllaenge > 0 Then Gosub Befehlserkennung End If Fehlerlaenge = Len(fehler) If Fehlerlaenge > 0 Then Print Fehler End If Loop '*** Unterprogramme *** '*** Befehlserkennung *** Befehlserkennung: Cls Locate 1 , 1 Lcd Befehl Typ = Left(befehl , 2) Nummer = Mid(befehl , 3 , 2) Aktion = Right(befehl , 2) If Typ = "ro" Then Gosub Ausfuehrung Else Fehler = "ERRTYP0001" 'Fehler Falschr Typ Return End If Return '*** Aktion Ausführen *** Ausfuehrung: Nummerbyte = Val(nummer) Aktionbyte = Val(aktion) Rollo(nummerbyte) = Aktionbyte If Nummerbyte < 9 Then If Aktionbyte < 3 Then Goto Weiter Else Fehler = "ERRAKT0001" 'Fehler Falsche Aktion Return 'Hier fehlertelegramm senden End If Else Fehler = "ERRADR0001" 'Fehler Falsche Adresse Return End If Weiter: Locate 2 , 1 Lcd "Rollo" Locate 2 , 7 Lcd Nummerbyte Locate 2 , 9 Lcd Aktionbyte Call Steuern(nummerbyte , Aktionbyte) Return '*** Adresserkennung *** Adresserkennung: Adrbyte = Portd Rotate Adrbyte , Left , 2 Rotate Adrbyte , Right , 4 Adress = Str(adrbyte) Myadress = "ROLL" + Adress Print Myadress Return '*** Steuern subroutine *** noch fertigzustellen 'hier liegt auch das Problem von meinem letzten Beitrag Sub Steuern(subrollonummer As Byte , Subaktionnummer As Byte) Dim Merker As Byte Select Case Subaktionnummer Case 0 : Umrechnung = &B00 'Rollo stop Case 1 : Umrechnung = &B01 'Rollo auf Case 2 : Umrechnung = &B10 'Rollo zu Case Else : Fehler = "ERRAKT0001" 'Fehler Falsche Aktion End Select Merker = Subrollonummer - 1 'Damit Bitfolge beim Bit0 beginnt Merker = Merker * 2 'Bitfolge in jedes 2. Bit schreiben Shift Umrechnung , Left , Merker Portabyte = Portabyte Or Umrechnung Porta = Portabyte End Sub
mfg Kalle







Zitieren

Lesezeichen