Hallo Leute,
ich habe ein Problem an dem ich gerade verzweifle.
Ich setze die Komoponetne TSerialportNG ein um mit einem Comport mit FTDI Chip zu kommunizieren.
Auf der anderen Seite ist ein RS485 Bus dran mit dessen Geräten ich kommunizieren will.
Das geht auch eine Weile gut aber nach dem 10. oder auch 20. Telegramm stellt die Komponente einfach die Arbeit ein, das heißt es wird nichts mehr empfangen und auch nichts mehr gesendet.
Wenn ich einen Breakpoint in die Cluster RX Event Routine setze wird da auch nicht mehr rein gesprungen. Ist einfach tot. Auch den Comport schließen und wieder neu öffnen bringt nichts.
Hat jemand eine Idee wie ich dem Fehler auf die Schliche kommen kann?
Hab schon das Senden etc. auskommentiert damit er sich nicht slebst stört, aber auch das hilft nicht...
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53:
| procedure TForm1.RS485RxClusterEvent(Sender: TObject); var received_value_rs485, sendstring: string; vb,ve: integer; syncbyte,byte0,byte1,byte2: byte; bytes_send: array of byte;
begin syncbyte:= 128; setlength(received_value_rs485,4); setlength(bytes_send,4); received_value_rs485:= RS485.ReadNextClusterAsString; byte0:= ord(received_value_rs485[1]); Button_Mon_Status:= byte0 and not 192; byte1:= ord(received_value_rs485[2]); Button_Mon_Status:= Button_Mon_Status or (byte1 shl 6); byte2:= ord(received_value_rs485[3]); if Button_Mon_Status > 0 then LED_Mon_Status:= Button_Mon_Status; if ( byte0 and 128) = syncbyte then begin if ( byte0 and 64) = 64 then bytes_send[0] := 193 else bytes_send[0] := (LED_Mon_Status and not 64) or 128; bytes_send[1] := LED_Mon_Status shr 6; bytes_send[2] := 36; bytes_send[3] := (bytes_send[0] xor 36 xor byte1) and not 128;
sendstring:= inttostr(bytes_send[0]); end;
memo1.Lines.Add( 'Button: '+inttostr(Button_Mon_Status)); end; |