Re: rs232 pufferüberlauf? Kategorie: Programmierung C (von Blackdragon - 30.08.2010 19:57) | ||
Als Antwort auf rs232 pufferüberlauf? von matze - 30.08.2010 18:54 | ||
| ||
> > hallo, bitte seid milde gestimmt , es ist main aller erster Forums Eintrag! Ich habe nur > leider über die Suchfunktion nicht das richtige gefunden. > > folgender Fall: > > Messdaten von cc-pro 128 auf pc via rs232 nach Aufforderung übertragen. > Sprich der pc sendet Steuercodes 10byte, nach dem auswerten auf der cc-pro > soll diese antworten mit den jeweiligen Messdaten. ca 1-2 sec Takt. > > initialisiert wird mit: > Serial_Init_IRQ(0,Buffer_rs232,10,32,SR_8BIT|SR_1STOP|SR_NO_PAR,SR_BD19200); > am Anfang des Programms. > > wenn ich über ein Terminal Programm 10 Zahlen sende: > > while (count <=9) > { > count=Serial_IRQ_Info(0,RS232_FIFO_RECV); > } > > > > so sieht die Antwort meistens aus. > i=0022 0000 0001 0000 0002 0000 0003 0000 0004 > 0000 0005 0000 0006 0000 0007 0000 0008 10 Zeichen im IRQ empfangen > > > aber wenn ich in dem Terminal Programm auf einer Taste drauf bleibe > und er fortlaufend bytes schicke, > sieht es ab und an so aus. > > > i=002E 0000 0001 0000 0002 0000 0003 0000 0004 > 0000 0031 0031 0031 0000 0007 0000 0008 19 Zeichen im IRQ empfangen > > ^ ^ ^ > da ist der fehler!! die drei 31 > > Wie sage ich ihm, das er nur 10 Zeichen lesen soll und danach den Puffer zurücksetzen mu� > damit er nich in den Sendepuffer schreibt > > Es ist doch auch richtig, das ich die zu sendenden Daten in den "Buffer_rs232" + 10 > direkt hineinschreibe bzw : Serial_Write(0,Buffer_rs232[10+count ++]); > > ich hoffe ich habe mich einigerma�en klar ausgedrückt. > ich benutzte derzei noch keine threads eine schleife zählt puffer: > Serial_IRQ_Info(0,RS232_FIFO_RECV); > > danke > > > > > Hallo, ich benutze die RS232 auch und musste eine Abfrage einbauen ob in dem Puffer noch etwas drin ist. Den Empfangspuffer würde ich in deinem Fall etwas grösser machen. Bei mir sieht das wie folgt aus... Ich habe die RS232 in einem eigenem Thread laufen. Ich habe dir mal einen Auszug zusammen gestellt. Vieleich kannst du den Code bei dir anpassen. Dim RS232_Wert_1 as Single Dim Wertin as Single Sub Thread_RS232() 'RS232 Ausgabe Dim Text(37) As Char ' Arrays deklarieren Dim count, sz As Integer Dim Rs232_read_count As Integer 'Init RS232: 38400 bps, 8 Bit, 1 Stop, NP '20 Byte Empfangspuffer - 100 Byte Sendepuffer Serial_Init_IRQ(0,Buffer,20,100,SR_8BIT Or SR_1STOP Or SR_NO_PAR,SR_BD38400) Do While True 'Endlosschleife 'Abfrage wieviel Zeichen empfangen wurden count=Serial_IRQ_Info(0,RS232_FIFO_SEND) If count>0 Then Goto W1 End If 'Wert 1 - senden Str_WriteFloat(RS232_Wert_1,2,Text,0) Serial_WriteText(0,Text) ... Wert xxx 'Ende Schreibe Linefeed Serial_Write(0,LF) '################## RS232 Empfangen ############################## 'Abfrage wieviel Zeichen empfangen wurden count=Serial_IRQ_Info(0,RS232_FIFO_RECV) If count<=15 Then Goto W1 End If Rs232_read_count = 0 Do While True sz=Serial_ReadExt(0) 'Puffer auslesen If sz=&H100 Then Exit 'bei 0x100 ist der Puffer leer Else Msg_WriteChar(sz) 'Zeichen als Message ausgeben 'Serial_Write(0,sz) 'Zeichen auf der seriellen ausgeben Rs232_read(Rs232_read_count) = sz Rs232_read_count = Rs232_read_count + 1 End If End While '------------------------------------------ '0 bis 3 Wertin = byte2float(Rs232_read(0),Rs232_read(1),Rs232_read(2),Rs232_read(3)) '4 bis 7 '------------------------------------------ Lab W1: Thread_Delay(5) '5x10ms Anzahl von 10ms Ticks, die gewartet werden soll End While End Sub Gruss Christian | ||
Antwort schreiben Antworten: Re: rs232 pufferüberlauf? (von matze - 1.09.2010 17:40) |
Zur Übersicht - INFO - Neueste 50 Beiträge - Neuer Beitrag - Suchen - Zum C-Control-I-Forum - Zum C-Control-II-Forum