mit RS232 auf LIN schreiben

Jul 14, 2007 10 Replies

Hallo zusammen,



ich möchte von einer automotive Komponente mit LIN Anschluss ein Telegramm anfordern und den Inhalt auf dem PC (Laptop) darstellen. Ich habe einen LIN auf RS232 Wandler (nur Pegelanpassung und Splitter auf zwei Adern Rx, Tx).



Mein Problem: Meine Applikation auf dem Laptop spielt LIN Master und muss also das Telegramm einleiten (siehe auch [1]). Das bedeutet, dass ich die Sequenz:



[sync break] [sync field] [id+parity]

senden muss. Jetzt ist es blöderweise so, dass das sync break aus 13 konsekutiven Nullen besteht (gefolgt von einer geringen Anzahl Einsen). Das bedeutet, dass ich das Stop-Bit (eine 1) ausschalten muss, sonst kann ich nicht mehr als 8 konsekutive Nullen senden. Sobald ich aber [sync field] und [id+parity] sende, muss das StopBit wieder aktiv sein. Die Vorgehensweise wäre also Folgende:



Comport.NumStopBits := 0; Comport.Send(0x001F); // sync break bestehend aus 1 Startbit (eine 0), 8 Nullen, ein Startbit, 3 Nullen, 5 folgende unvermeidbare Einsen



Comport.NumStopBits := 1; Comport.Send(0x55); // sync field Comport.Send(0xD6); // id + parity



Leider funktioniert das nicht. Durch das Umschalten des StopBits nach dem Senden des Sync-Break entsteht eine Verzögerung, die bestimmt 10 Bit lange ist. Der Slave antwortet nicht. Ich nehme zumindest an an, dass es daran liegt, sonst fällt mir im Moment nichts ein. Ich habe auch schon überlegt nur ein einziges Byte als Sync Break zu senden, aber mit einer geringeren Baudrate. Aber auch hier entsteht beim anschließenden Umschalten der Baudrate eine größere Verzögerung.



Habt Ihr schon mal etwas ähnliches gemacht? Wie seid Ihr vorgegengen?



Danke im Voraus,



Gruß,



Gerhardt Hohn



[1]
formatting link


RS232 kennt doch das "BREAK", also TxD lange auf "0" zu halten. Versuch das doch mal. Deine ComPort-Klasse müsste eigentlich auch eine Funktion dafür haben.

M.

Gerhardt Hohn schrieb:

So wird es wohl häufig gemacht. Die Länge des BRK-Zeichens auf>13 nominelle Bitzeiten einstellen, eine Überlänge wird wohl gem. Spezifikation toleriert.

- Udo

"Matthias Weingart" schrieb:

Tatsache, die Komponente kann das Break beliebig ein und ausschalten, oder aber für ein Vielfaches von 55 ms automatisch schalten und sogar währenddessen asynchron den Programmfluss weiterlaufen lassen. Ich hatte das Feature bisher nur nicht entdeckt.

Vielen Dank! Ich komme erst am Dienstag dazu es zu testen, werde dann aber Bescheid sagen ob es so geklappt hat.

Gruß, Gerhardt Hohn

"Gerhardt Hohn" schrieb:

hmpf, wobei 55 ms ca. 1056 Bits entspricht, bei 19,2 kBaud. Mal gucken.

Gerhardt Hohn

Matthias Weingart schrieb:

Welche Klasse er hier verwendet hätte mich auch mal interessiert.... Gruß Andy

"Andreas Weber" schrieb:

Er verwendet Turbopower Async Pro "TApdComPort" :-). Der in der ursprünglichen Mail gezeigte Quelltext entspricht jedoch nicht exakt den Befehlen der Komponente.

Gruß, Gerhardt Hohn

Gerhardt Hohn schrieb:

Aah, Delphi. Die Klasse hab ich früher auch verwendet. Und zur Zeit so in C++ drin, dass ich schon fast vergessen habe, wie schön und schnell man in Delphi Anwendungen schreiben/klicken konnte.

Gruß von Andy

"Matthias Weingart" schrieb:

das wars, ein gezieltes selbst getimetes Break mit einer Dauer von 677 Mikrosekunden (gefolgt von sync break und id field) hat den slave zum antworten gebracht. Läuft seit mehreren tausend Abfragen absolut zuverlässig.

thx und Gruß, Gerhardt Hohn

"Andreas Weber" schrieb:

ja, hab für solche Sachen zwar auch noch Visual C++ auf dem Rechner, aber da ärgere ich mich dann immer, sobald ich was an der Benutzeroberfläche machen muss. Die VCL ist einfach super (das sage ich selbst nachdem ich mit .net gespielt habe noch).

Gruß, Gerhardt

Gerhardt Hohn schrieb:

Hi Gerhard, ich finde .net ist kein Vergleich zu Delphi (obwohl M$ den Chefentwickler von Borland abgeworben hat. (sieht man auch)) Wenn ich mir mehr als 1GB installieren muss um ein paar Anwendungen zu erstellen.... Das Visual .NET Zeugs ist IMHO viel zu groß und aufgeblasen.

Gruß von Andy

Join the Discussion

Have something to add? Share your thoughts — no account required.

Didn't find your answer?

Ask the community — no account required