帮帮小菜鸟吧!关于mscomm接收和发送的问题? (50分)

  • 主题发起人 主题发起人 小菜鸟
  • 开始时间 开始时间

小菜鸟

Unregistered / Unconfirmed
GUEST, unregistred user!
我要用mscomm控件发送一组16进制数,如:数在数组aa[0..5]=($eb,$90,$ff,$61,$00,$e6);
中,请问如何发送??从mscomm.input里,接收6个字节的16进制数,如何把它分别放在
数组bb[0..5]中???
 
都两天了,怎么就没有人回答呢??
是不是太困难了,不可能啊?
各位大侠,帮忙解决一下,好吗?
 
参考下面spcomm做的,其实很简单

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, SPComm;

type
TForm1 = class(TForm)
Comm1: TComm;
Memo1: TMemo;
Memo2: TMemo;
Button1: TButton;
Button2: TButton;
procedure Button2Click(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure Comm1ReceiveData(Sender: TObject; Buffer: Pointer;
BufferLength: Word);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;
Viewstring:string;
i:integer;
rbuf,sbuf:array[1..6] of byte;



implementation

{$R *.dfm}
procedure senddata;
var
i:integer;
commflg:boolean;
begin
viewstring:='';
commflg:=true;
for i:=1 to 6 do
begin
if not form1.comm1.writecommdata(@sbuf,1) then
begin
commflg:=false;
break;
end;
sleep(2); {发送时字节间的延时}
viewstring:=viewstring+inttohex(sbuf,2)+'';
end;

viewstring:='发送'+viewstring;
form1.memo1.lines.add(viewstring);
form1.memo1.lines.add('');
if not commflg then messagedlg('发送失败!',mterror,[mbyes],0);
end;


procedure TForm1.Button2Click(Sender: TObject);
begin

comm1.StartComm; button2.Enabled:=false;
showmessage('ok!');

end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
comm1.StopComm;
end;

procedure TForm1.Comm1ReceiveData(Sender: TObject; Buffer: Pointer;
BufferLength: Word);

var

i:integer;

begin

viewstring:='';
move(buffer^,rbuf,bufferlength);

for i:=1 to bufferlength do

viewstring:=viewstring+inttohex(rbuf,2)+' ';

viewstring:='接受'+viewstring;

memo2.lines.add(viewstring);

memo2.lines.add('');

end;




procedure TForm1.Button1Click(Sender: TObject);
begin
sbuf[1]:=byte($f0); {帧头}

sbuf[2]:=byte($01); {命令号}

sbuf[3]:=byte($ff);

sbuf[4]:=byte($ff);

sbuf[5]:=byte($01);

sbuf[6]:=byte($0f); {帧尾}

senddata;{调用发送函数}

end;

end.
 
这个程序我已经试过了,
可以发送,但是memo1.text没有接收的字样
都接受到一堆乱码。
 
因为这个程序是针对实际应用写的,发送的都是帧格式字符,所以你看到的都是乱码吧。
把程序里发送的字符改一下就好了。
 
请问怎么改,
这个程序是用16进制数发送的,还是发送是字符
接收16进制数后,缓冲区是不是自动清控的
不是的话,怎么清空.
 

Similar threads

D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
1K
DelphiTeacher的专栏
D
D
回复
0
查看
856
DelphiTeacher的专栏
D
后退
顶部