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: |
Zur Übersicht - INFO - Neueste 50 Beiträge - Neuer Beitrag - Suchen - Zum C-Control-I-Forum - Zum C-Control-II-Forum