Serial Line Internet Protocol - Implementation
spacer
Autor Nachricht
Trazom
Hält's aus hier
Beiträge: 10



BeitragVerfasst: Do 13.10.11 20:26 
Hallo zusammen,

nachdem ich vor einigen Jahren einige Socket-Anwendungen mit der Hilfe von Narses' Tutorial geschrieben (danke nochmal an dieser Stelle dafür), konnte ich also Zeichenketten via TCP/IP übertragen.

Aktuell muss ich auch Zeichenketten über die serielle Schnittstelle übertragen. Dazu habe ich mir serialng geholt und habe damit das Werkzeug, um die Schnittstelle anzusprechen.

Die Daten sollen mit dem "Serial Line Internet Protocol" übertragen werden und als Quelle dient mir dieses hier

www.rfc-editor.org/rfc/rfc1055.txt

Nachdem ich erfolglos bei GOogle und in diesem Forum gesucht habe, wüsste ich gern, ob das schon mal jemand in Delphi implementiert hat, d.h. das Parsing, das passende Ersetzen der Zeichen ESC und END usw.

Vielleicht kennt jemand schon ein Stück Code dazu oder ein Tutorial.

Vielen Dank und viele Grüße,
Trazom
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
Werbung ausblenden? Dann registriere Dich kostenlos. Weitere Gründe für eine Registrierung.


Werbung ausblenden? Dann registriere Dich kostenlos. Weitere Gründe für eine Registrierung.
chrisw
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 436
Erhaltene Danke: 3

W2K
D7
BeitragVerfasst: Mo 17.10.11 13:04 
Mmmh, ich glaube du mischt hier Äpfel und Birnen !

Das SLIP-Protokoll (ebenso wie z.Bsp. auch das besser bekannte PPP-Protokoll) dient dazu TCP/IP Pakete über eine serielle
Leitung zu übertragen.
Heisst: Auf beiden Seiten der Leitung ein TCP-Stack.
Hierzu musst du nichts in Delphi schreiben, sondern lediglich einen SLIP Treiber für dein Betriebssystem finden, und schon kannst du TCP-IP über die serielle Schnittstelle schicken. (SLIP Treiber sind z.Bsp. bei älteren UNIX Derivaten bereits vorhanden. Ich bin der Meinung gelesen zu haben, dass es von WIN7 allerdings standardmässig nicht mehr unterstützt wird).

Ich denke, was du möchtest ist lediglich das Übertragen von Zeichenkettn über eine serielle Schnittstelle, hierzu sind mir bekannte Delphi Komponenten z.Bsp.: SerialNG, TComport oder AsyncPro.

Hiermit kannst du Zeichenketten über die (asynchrone) serielle Schittstelle deines PC's übertragen.


Christian

_________________
Man sollte keine Dummheit zweimal begehen, die Auswahl ist schließlich groß genug.
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
Trazom Threadstarter
Hält's aus hier
Beiträge: 10



BeitragVerfasst: Do 10.11.11 21:37 
Hallo,
ich glaube die Verwirrung entstand, weil die Anwendung etwas ungewöhnlich ist. Aber ich habe die Routinen mittlerweile selbst geschrieben. Viellecht kann sie noch jemand gebrauchen, darum kopier ich sie hier rein.

Die erste Routine ersetzt das Zeichen 192, damit es bei der Übertragung als Terminator verwendet werden kann. Die zweite Routine macht die Rückumwandlung.

ausblenden volle Höhe Delphi-Quelltext markieren
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:
function StrToSlip (const a: String): String;
var
i, l: Integer;
b: String;
begin
l:= length(a);
b:='';
for i:=1 to l do
begin
case ord(a[i]) of
192: b:= b + #219#220;
219: b:= b + #219#221;
else b:= b + a[i];
end;
end;
result:= b;
end;

function SlipToStr (const a: String): String;
var
i, l: Integer;
b: String;
jump: boolean;
begin
l:= length(a);
b:='';
jump:= false;
for i:=1 to l do
begin
if not jump then
begin
case ord(a[i]) of
219: begin
case ord(a[i+1]) of
220: begin
jump:= true;
b:= b + #192;
end;
221: begin
jump:= true;
b:= b + #219;
end;
else b:= b + a[i]; //Protokollverletzung entdeckt, nichts tun.
end;
end;
else b:= b + a[i];
end;
end else
jump:= false;
end;
result:= b;
end;


Moderiert von user profile iconNarses: Code- durch Delphi-Tags ersetzt
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
chrisw
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 436
Erhaltene Danke: 3

W2K
D7
BeitragVerfasst: Fr 11.11.11 12:05 
Da hätte ich, glaub ich, "Stringreplace" verwendet !

Christian

_________________
Man sollte keine Dummheit zweimal begehen, die Auswahl ist schließlich groß genug.


Zuletzt bearbeitet von chrisw am Fr 11.11.11 13:14, insgesamt 1-mal bearbeitet
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
home home