ich arbeite gerade an genau so einem selbe problem mit serialng...
ich versuche mit einem datenmodem zu komunizieren.
aber mit byte und nicht mit stirng.
funktioniert auch soweit wenn ich die daten im sniffer sehe passt alles,
allerding das lesen klappt nicht in meinem programm, ich muss alles immer
drei mal absenden bis ich vom in cluster was lesen kann...
hat jemand einen codeschnippsel für lesen? muss da ein timoutimmer ran oder sowas?
hier mal die schreibe prozedur von mir die soweit auch funktioniert:
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:
| procedure ComReadWrite(WriteLen:Integer;ReadLen:Cardinal;ReadTimeOut:Integer); Var Tampilan:String; j:Integer; tmp:Integer; clustersize:integer; begin If WriteLen > 0 Then Begin Tampilan := 'TX : '; For j := 0 to (WriteLen-1) Do Begin Tmp:=ord(Buffer[j]); Tampilan := Tampilan + '' + ((IntToHex(Tmp,2) + ' ')); end;
Form1.memo1.lines.Add(Tampilan); application.ProcessMessages; sleep(Readtimeout); port.SendData(@buffer[1], WriteLen);
|
aufrufen kannst du es dann so:
zuerst den buffer mit die einzelnen bytes füllen die du senden willst:
Buffer[1] := #$4B;
Buffer[2] := #$13;
Buffer[3] := #$19;
Buffer[4] := #$00;
Buffer[5] := #$04;
Buffer[6] := #$02;
Buffer[7] := #$7E;
application.ProcessMessages;
dann absenden:
ComReadWrite(7, 0, 50);
"ComReadWrite ist die prozedure die 7 steht für die oben eingelesenen 7 byte
die 0 sollte dann für die lese prozedur sein, die aber noch nicht funktioniert (HILFE!)...
die 50 ist normalerweise das ReadTimout, das ich aber im moment für sleep verwende
damit er nicht zu schnell die nächsten commands sendet...
ohne procedure gehts auch so:
port.SendData(@buffer[1], 7); // buffer is ein array of char und 7 sind wieviele buffer
und buffer muss global deklariert werden (zumindest habe ichs so gemacht)
Buffer : array[0..255] of char;
grüße
hari
vieleicht könnte mir auch einer helfen bei meinem problem?
//port.SendData(@buffer[1], 7);