Autor Beitrag
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
chrisw
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 439
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.
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
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
chrisw
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 439
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