Zur Übersicht - INFO - Neueste 50 Beiträge - Neuer Beitrag - Suchen - Zum C-Control-I-Forum - Zum C-Control-II-Forum

RS232 Strings und Verarbeitung Kategorie: Programmierung Basic (von KAXTJ - 10.03.2016 22:21)


Hallo,


Ich möchte via RS232 über den Computer an den Controler (AVR32) senden welche Relais
ab oder aus sein sollen. Habe mich ans beispiel gehelten und so das Ganze aufegabut:

Sub Seriel()
 Serial_WriteText(UART_PORT, "1 V: 00.00.01 rn")
 Do While True



        Buffer_Index=0
        sz=0

        ' Data are available
        If Serial_IRQ_Info(UART_PORT,RS232_FIFO_RECV)<>0 Then

            ' Read data
            Do While True
                Buffer_Index++
                sz=Serial_ReadExt(UART_PORT)
                If Buffer_Index>79 Then
                    Exit
                End If
                Data_Buffer(Buffer_Index)=sz
                AbsDelay(1)
                If sz=&H100 Then        ' end at zero termination
                    Exit
                End If
            End While

        End If


        ' We have received data
        If Buffer_Index>0 Then
          Serial_WriteText(UART_PORT, "00001%rn") 'Bestätigung für eingegangene Nachricht
          ' Command filter
          Select Case Data_Buffer(1)

              'Kommandos 1, 0 usw.
              Case 1:
              If Data_Buffer(2)=0 Then    'Verbunden Bestätigung
                 Verbunden = 1
                 Serial_WriteText(UART_PORT, "00005%rn") 'Bestätigung verarbeite Nachricht
              ElseIf Data_Buffer(2)=1 Then   'Alle Relais an
                 R1 = 1
                 R2 = 1
                 R3 = 1
                 R4 = 1
                 R5 = 1
                 R6 = 1
                 R7 = 1
                 R8 = 1
                 R9 = 1
                 R10 = 1
                 R11 = 1
                 R12 = 1
                 RA1 = 1
                 Serial_WriteText(UART_PORT, "00005%rn") 'Bestätigung verarbeite Nachricht
              ElseIf Data_Buffer(2)=2 Then    'Programm Beenden (Progrmierwerkzeug)
                  in = 1
                  Serial_WriteText(UART_PORT, "00005%rn") 'Bestätigung verarbeite Nachricht
                 ElseIf Data_Buffer(2)=3 Then    'Alle Relais aus
                   R1 = 0
                 R2 = 0
                 R3 = 0
                 R4 = 0
                 R5 = 0
                 R6 = 0
                 R7 = 0
                 R8 = 0
                 R9 = 0
                 R10 = 0
                 R11 = 0
                 R12 = 0
                 RA1 = 0
                  Serial_WriteText(UART_PORT, "00005%rn") 'Bestätigung verarbeite Nachricht
                ElseIf Data_Buffer(2)=4 Then    
                 TrennventilAuf()
                  Serial_WriteText(UART_PORT, "00005%rn") 'Bestätigung verarbeite Nachricht
                ElseIf Data_Buffer(2)=5 Then    
                 TrennventilZu()
                  Serial_WriteText(UART_PORT, "00005%rn") 'Bestätigung verarbeite Nachricht



              Else
                 Serial_WriteText(UART_PORT, "00002%rn") 'Befehl nicht Verstanden
              End If

             'Kommandos 2, 0 usw
             Case 2:
               If Data_Buffer(2)=0 Then
                    R1 = 1
                     Serial_WriteText(UART_PORT, "00005%rn")
              ElseIf Data_Buffer(2)=1 Then
                        R2 = 1
                         Serial_WriteText(UART_PORT, "00005%rn")
                        Serial_WriteText(UART_PORT, "00005%rn")
              ElseIf Data_Buffer(2)=2 Then
                        R3 = 1
                         Serial_WriteText(UART_PORT, "00005%rn")
                          Serial_WriteText(UART_PORT, "00005%rn")
              ElseIf Data_Buffer(2)=3 Then
                        R4 = 1
                         Serial_WriteText(UART_PORT, "00005%rn")
                          Serial_WriteText(UART_PORT, "00005%rn")
              ElseIf Data_Buffer(2)=4 Then
                        R5 = 1
                         Serial_WriteText(UART_PORT, "00005%rn")
                          Serial_WriteText(UART_PORT, "00005%rn")
              ElseIf Data_Buffer(2)=5 Then
                        R6 = 1
                         Serial_WriteText(UART_PORT, "00005%rn")
                          Serial_WriteText(UART_PORT, "00005%rn")
              ElseIf Data_Buffer(2)=6 Then
                        R7 = 1
                         Serial_WriteText(UART_PORT, "00005%rn")
                         Serial_WriteText(UART_PORT, "00005%rn")
              ElseIf Data_Buffer(2)=7 Then
                        R8 = 1
                         Serial_WriteText(UART_PORT, "00005%rn")
                          Serial_WriteText(UART_PORT, "00005%rn")
              ElseIf Data_Buffer(2)=8 Then
                        R9 = 1
                         Serial_WriteText(UART_PORT, "00005%rn")

                       Serial_WriteText(UART_PORT, "00005%rn")
              ElseIf Data_Buffer(2)=9 Then
                        R10 = 1
                         Serial_WriteText(UART_PORT, "00005%rn")
                          Serial_WriteText(UART_PORT, "00005%rn")
              ElseIf Data_Buffer(2)=10 Then
                        R11 = 1
                         Serial_WriteText(UART_PORT, "00005%rn")
                        Serial_WriteText(UART_PORT, "00005%rn")
              ElseIf Data_Buffer(2)=11 Then
                        R12 = 1
                         Serial_WriteText(UART_PORT, "00005%rn")
                          Serial_WriteText(UART_PORT, "00005%rn")
              ElseIf Data_Buffer(2)=12 Then
                        RA1 = 1
                         Serial_WriteText(UART_PORT, "00005%rn")

          Else
          ' Error or unknown command
          Serial_WriteText(UART_PORT, "00003%rn") 'Befehl nict Verstanden
          End If
              'Kommandos 3, 0 usw
             Case 3:
               If Data_Buffer(2)=0 Then
                    R1 = 0
                     Serial_WriteText(UART_PORT, "00005%rn")
              ElseIf Data_Buffer(2)=1 Then
                        R2 = 0
                         Serial_WriteText(UART_PORT, "00005%rn")
                        Serial_WriteText(UART_PORT, "00005%rn")
              ElseIf Data_Buffer(2)=2 Then
                        R3 = 0
                         Serial_WriteText(UART_PORT, "00005%rn")
                          Serial_WriteText(UART_PORT, "00005%rn")
              ElseIf Data_Buffer(2)=3 Then
                        R4 = 0
                         Serial_WriteText(UART_PORT, "00005%rn")
                          Serial_WriteText(UART_PORT, "00005%rn")
              ElseIf Data_Buffer(2)=4 Then
                        R5 = 0
                         Serial_WriteText(UART_PORT, "00005%rn")
                          Serial_WriteText(UART_PORT, "00005%rn")
              ElseIf Data_Buffer(2)=5 Then
                        R6 = 0
                         Serial_WriteText(UART_PORT, "00005%rn")
                          Serial_WriteText(UART_PORT, "00005%rn")
              ElseIf Data_Buffer(2)=6 Then
                        R7 = 0
                         Serial_WriteText(UART_PORT, "00005%rn")
                         Serial_WriteText(UART_PORT, "00005%rn")
              ElseIf Data_Buffer(2)=7 Then
                        R8 = 0
                         Serial_WriteText(UART_PORT, "00005%rn")
                          Serial_WriteText(UART_PORT, "00005%rn")
              ElseIf Data_Buffer(2)=8 Then
                        R9 = 0
                         Serial_WriteText(UART_PORT, "00005%rn")

                       Serial_WriteText(UART_PORT, "00005%rn")
              ElseIf Data_Buffer(2)=9 Then
                        R10 = 0
                         Serial_WriteText(UART_PORT, "00005%rn")
                          Serial_WriteText(UART_PORT, "00005%rn")
              ElseIf Data_Buffer(2)=10 Then
                        R11 = 0
                         Serial_WriteText(UART_PORT, "00005%rn")
                        Serial_WriteText(UART_PORT, "00005%rn")
              ElseIf Data_Buffer(2)=11 Then
                        R12 = 0
                         Serial_WriteText(UART_PORT, "00005%rn")
                          Serial_WriteText(UART_PORT, "00005%rn")
              ElseIf Data_Buffer(2)=12 Then
                        RA1 = 0
                         Serial_WriteText(UART_PORT, "00005%rn")

          Else
          ' Error or unknown command
          Serial_WriteText(UART_PORT, "00003%rn") 'Befehl nict Verstanden
          End If

          End Case

        End If

    End While


End Sub


So weit so gut...



Fuktioniert sogar, nur Leider ein bischen langsam, ich warte auf dem Programm am Computer
immer auf die Bestätigung, und schicke dann den nexten befehl ab, ich schicke aber nicht nur
wenn sich etwas verändert sonder in dauerschleife, das Heist er geht alle argumente drucht,
wartet nach jedem argument bis eine antwort da ist und schickt dann das nexte.

wenn die schlefe grade beginnt und das Letzte argument zutrifft bruach es eineige sekunden bis
etwas passiert. Jetzt hatte ich die idee, ich könnte alle argumente auf einmal schicken


also:

1 1 2 0 3 0 4 0 5 1

___________

1 1 = R1 An
2 0 = R2 Aus
3 0 = R3 Aus
4 0 = R4 Aus
5 1 = R5 An




So aber wenn ich das Aktuell so schicke Fuktioniert natrülich nix. aber wie lasse ich den
Controler das Verabrieten? am einfachten were glaube ich wenn ich einen String schicken würde
und diesen in der C-Control Spilitte aber kann der Compiler das? weil Strings gibt es ja nur
Umwege. Und wenn ja wie?

Oder gibt es sonnst ideen? bin für jede dankbar :)


    Antwort schreiben


Antworten: