delphi 用MsComm控制手机发送短信,可以发送但是得不到“ok”或者“Error”的返回值的问题,急

jingwqzhi 2007-12-17 04:44:45
我在 win2000超级终端 和 串口调试助手 中输入AT都能得到返回值OK,但是通过MsComm控件来操作AT指令的时候,可以成功发送短信,但是得不到input返回值,input有时候是空有时候是"Error reading comm device"的错误. 逐步调试发现MsComm1.OutPut := 'AT'+ chr(13); 后,紧接着InInBufferCount里面是有值的,是不是说明我要接收的已经在接收缓冲区里面了,但是我延迟2-3秒后,再取input为空或者报错,而且不触发OnComm事件,已经设置好RThreshold := 1 和 RTSEnable := true的了。
我的MsComm如下:
CommPort := 1; (确定连接成功,设备管理器中解调器是com1口,而且超级终端和串口调试助手连接成功,确定已经PortOpen := true)
HandShaking := 3; (我觉得是这里的问题吧,后面补充说明)
InBufferSize := 1024;
OutBufferSize := 1024;
InputLen ;= 0;
InputMode := compInputModeText;
RThreshold := 1;
SThreshold := 0;
RTSEnable := true;
Settings := 115200,n,8,1;

button事件代码:
var
inbuffer: integer;
s: ANSIstring;
begin
MsComm1.InputLen := 0;
MsComm1.InBufferCount := 0;
MsComm1.OutBufferCount := 0;
if not MsComm1.PortOpen then MsComm1.PortOpen := true;
sleep(500);
MsComm1.Output := 'AT' + chr(13);
while MsComm1.OutBufferCount > 0 do Application.ProcessMessages; // 这里执行output后按道理outbuffercount是不为0的吧?但是总是为0的我调试的时候.
inbuffer := MsComm1.InBufferCount; // 这里可以得到是InBufferCount是9,这样紧接着是不是去触发oncomm呢?是没有触发过的,所以我后面自己写上获取返回值
sleep(1000);
s := MsComm1.input;
end;
按我之前的设置,这里应该是返回一个字符串例如:"AT + 回车 OK"这样的,但是我什么都没有得到或者是Error reading comm device错误

我说说我设备那边的设置:
我是用诺基亚手机来操作的.
在 “设备管理器”中 调制解调器是 Nokia GSM phone USB Modem 最大端口速度: 115200 在“诊断”中“查询调制解调器”有很多响应并且是确定的. “高级”里面,端口是Com1 115200,n,8,1 流控制 默认是硬件(是不是这里的问题?它有Xon/Xoff,硬件,无)mscomm中的handshaking好像没有硬件,换了最后一个等于3的,也是不行,我调了调设备流控制为无都是一样的结果.
不知道究竟是什么原因? 我刚刚接触串口,还是有很多不明白的,请大侠们帮帮忙看看, 急
...全文
138 点赞 收藏 1
写回复
1 条回复
切换为时间正序
请发表友善的回复…
发表回复

还没有回复,快来抢沙发~

发动态
发帖子
网络通信/分布式开发
创建于2007-08-02

1565

社区成员

Delphi 网络通信/分布式开发
申请成为版主
社区公告
暂无公告