是MSCOMM的BUG吗?如何发送超过 $80 的数据???除了 $ff 是正常外,其余只收到0!!!! ( 积分: 0 )

  • 主题发起人 主题发起人 borbery
  • 开始时间 开始时间
B

borbery

Unregistered / Unconfirmed
GUEST, unregistred user!
有人知道什么回事吗?
 
有人知道什么回事吗?
 
没有人试过用MSCOMM传输超过 #128 的数据吗?
 
没有人能回答?
 
这是奇偶检验位的问题
 
用过spcomm,但没研究这么仔细,只是很简单的数据收发;
替你顶,关注......
 
肯定可以的。你是不是将数据位设为7位了?将其设为8为试一下。
 
最后得出结论:MSCOMM的确是不能发大于80H小于FFH的数据的,否则收到的只是0

SPCOMM没这个问题

不信的自己用一个串口发,另一个串口收试试
 
使用spcomm如何获得设备的序列号?我看到有种设备的AT指令是使用AT+CGSN来获取,但是不知道在spcomm中如何取得这个返回的值。
有知道的朋友请告知!
www.startor.cn
 
建议你用SPCOMM控件
以下有个例子,我也用过,很好~ 可以实现楼主想要的功能

编写源代码

变量说明
var
FCOMM: TFCOMM;
Viewstring:string;
i:integer;
rbuf,sbuf:array[1..6] of byte;

打开串口
procedure TFCOMM.FormShow(Sender: TObject);
begin
comm1.StartComm;
end;

关闭串口
procedure TFCOMM.FormClose(Sender: TObject; var Action: TCloseAction);
begin
comm1.StopComm;
end;

发送数据
procedure senddata;
var
i:integer;
commflg:boolean;
begin
viewstring:="";
commflg:=true;
for i:=1 to 6 do
begin
if not fcomm.comm1.writecommdata(@sbuf,1) then
begin
commflg:=false;
break;
end;
sleep(2); {发送时字节间的延时}
viewstring:=viewstring+inttohex(sbuf,2)+" ";
end;
viewstring:="发送"+viewstring;
fcomm.memo1.lines.add(viewstring);
fcomm.memo1.lines.add("");
if not commflg then messagedlg("发送失败!",mterror,[mbyes],0);
end;

procedure TFCOMM.Btn_sendClick(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;

接收过程
procedure TFCOMM.Comm1ReceiveData(Sender: TObject; Buffer: Pointer;
BufferLength: Word);
var
i:integer;
begin
viewstring:="";
move(buffer^,pchar(@rbuf)^,bufferlength);
for i:=1 to bufferlength do
viewstring:=viewstring+inttohex(rbuf,2)+" ";
viewstring:="接受"+viewstring;
memo1.lines.add(viewstring);
memo1.lines.add("");
end;

  如果memo1上显示发送F0 01 FF FF 0F 和 接受F0 01 FF FF F0

这表示串口已正确的发送出数据并正确的接受到数据,串口通讯成功。
 
后退
顶部