-
        

Ergebnis 1 bis 3 von 3

Thema: Rolloasteuerung

  1. #1
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    08.02.2005
    Ort
    Südtirol
    Beiträge
    283

    Rolloasteuerung

    Anzeige

    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

    Code:
    '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
    p.s. Kritik erwünscht
    mfg Kalle

  2. #2
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    08.02.2005
    Ort
    Südtirol
    Beiträge
    283
    Schade, 75x angeschaut, aber keiner hat fragen oder anregungen

  3. #3
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    08.02.2005
    Ort
    Südtirol
    Beiträge
    283
    Schade, 75x angeschaut, aber keiner hat fragen oder anregungen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •