关于MSComm串口通信的一个5秒钟就能回答的问题,大分送上。。。(100分)

  • 主题发起人 主题发起人 Wjzhou
  • 开始时间 开始时间
W

Wjzhou

Unregistered / Unconfirmed
GUEST, unregistred user!
在用MSComm通信时,我的打开过程如下:
MSComm.CommPort := 1;
MSComm.Settings := '19200,n,8,1';
MSComm.InBufferCount := 0;
MSComm.InputLen := 0;
MSComm.RThreshold := 1;
MSComm.PortOpen := True;
Comm事件如下:
procedure TForm1.MSCommComm(Sender: TObject);
var
input: string;
begin
if MSComm.CommEvent = 2 then begin // 2 - vbMSCommEvReceive
input := MSComm.Input;
M.SelText := input;
end;
end;
为什么每条命令的回应信息总是开头有命令的文本啊,我不想要这些的,比如
我执行了
=====
》AT
AT
OK
=======
它返回的是AT和OK,不是单单一个OK,有什么办法不让它返回命令的文本呢?
 
还有InputLen是干什么用的?
 
你是对什么东西发送信息呀?如果这是双方约定好的格式,你要不要它都要往上发,不要就不理它不就结了吗?
 
我是对支持Gsm At命令的手机发,在Gsm 的那个协议上明明说回应只有一个OK,不是前面有个命令文本啊,所以我想这是不是编程上的问题,有什么属性和方法去了它,只要手机真真发过来的。
 
程序本身没有问题
 
但是,实际上从手机发出的信息只有OK这二个字啊,为什么MSComm擅自在前面加了个命令文本呢?而且,在手机未插上接口的情况下,发出AT命令,它回应了AT,没有了OK,所以证明这个回应是MSComm加上的,不是手机发的(因为手机没接上).
 
學程序分析就可以了.
 
那是没搞清楚吧,mscomm不会加的
 
问题是它确实加了.不信你试试.
 
你可以用超级终端或者串口测试工具测试一下
 
Windows的那个超极终端连上后怎么打命令啊?我打不了?好象是只读的一样?
 
先测一下吧,确定问题到底出在哪。通讯只要有一点不对都不行的。
 
那用串口测试工具
 
串口测试工具哪有啊?我只有自已写的这个.
我再试试,十分钟后再发结果.
 
哪要看你测试的终端是什么,用MODEM测试返回的应该只有'OK'
MSComm1.InputLen:=0; //读输入缓冲区字节数(全部读取)
MSComm1.RThreshold:=1; //接收触发事件
MSComm1.PortOpen:=True;
MSComm1.InputMode:=comInputModeBinary; //二进制发送模式
//接收事件
if MSComm.CommEvent = 2 then begin // 2 - vbMSCommEvReceive
input := MSComm.Input;
M.SelText := input;
end;
我用这个测试AT命令用得还好,没有什么问题
 
To wukang,用了你的方法后就这样了[:(]
>>>>>> AT
呁?伊?
>>>>>> AT+CMGL=2呁?????????水??????????社??????????名????????????

而之前是这样的:
>>>>>> AT
AT

OK
>>>>>> AT+CMGL=2
AT+CMGL=2

+CMGL: 5,2,,26
0011000B813118325476F80008A70C00410042004300444E2D6587

OK

=================================
原来代码:
procedure TForm1.Button2Click(Sender: TObject);
begin
MSComm.CommPort := 1;
MSComm.Settings := '19200,n,8,1';
MSComm.InBufferCount := 0;
MSComm.InputLen := 0;
MSComm.RThreshold := 1;
// MSComm.InputMode := comInputModeBinary;
MSComm.PortOpen := True;
if not MSComm.PortOpen then
M.Lines.Add('>>>>>> Connect Failture.');
end;
procedure TForm1.Button4Click(Sender: TObject);
begin
MSComm.Output := Edit3.Text + #13;
M.Lines.Add('>>>>>> ' + Edit3.Text);
end;
procedure TForm1.MSCommComm(Sender: TObject);
var
input: string;
begin
if MSComm.CommEvent = 2 then begin // 2 - vbMSCommEvReceive
input := MSComm.Input;
M.SelText := input;
end;
end;
 
我用了DELPHI7+MSCOMM32.OCX写了这个,看看吧
http://cn.briefcase.yahoo.com/zybwk
 
用的是二进制方式,当然显是是乱码了,你要换算一下,呵呵
 
to wukang:
Yahoo的公文包里面的非图片文件只能本人才能看的,你不信试试.
 
测试程序问题还是终端问题,可以做个本地回环,把串口的2、3脚短接。
这个测试程序本来是用VC++写的,最近把它换成了DELPHI,我用没出什么问题
 
后退
顶部