Kommentar: Einfügen von HTML im Kommentar: Link einfügen: <a href="LINKURL" target="_blank">LINKTITEL</a> Bild einfügen: <img src="BILDURL"> Text formatieren: <b>fetter Text</b> <i>kursiver Text</i> <u>unterstrichener Text</u> Kombinationen sind auch möglich z.B.: <b><i>fetter & kursiver Text</i></b> C Quellcode formatieren: <code>Quellcode</code> BASIC Quellcode formatieren: <basic>Quellcode</basic> (Innerhalb eines Quellcodeabschnitts ist kein html möglich.) Wichtig: Bitte mache Zeilenumbrüche, bevor Du am rechten Rand des Eingabefeldes ankommst ! -> I > > > > > > 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 > > > > du hattest recht, den Buffer vergrößert. > Zusätzlich einen Empfangs und einen Sendebuffer hinzugefügt >