TSPCOMM的问题,有点辣手的问题 ( 积分: 200 )

  • 主题发起人 主题发起人 jet_shen
  • 开始时间 开始时间
J

jet_shen

Unregistered / Unconfirmed
GUEST, unregistred user!
我现在有一个TSPcomm的问题想请教一下
frmmain.btn1click(sender:tobject);
var .......

begin
if mscomm.portopen=true then
mscomm.portopen:=false;
spcomm1.stopcomm;
strcomand:='read:pow:all?' //该命令用MSCOMM已经成功,且有返回;
spcomm1.startcomm
trytime:=0;
inputlen:=0;
while not (spcomm1.writecommdata(strcomand,ilen)) do
begin
trytime:=trytime+1;
if (trytime>10) then
begin
showmessage('失败');
abort;
end ;
sleep(500);
end;
end ;

frmmain.spcomm1receivedata(.....)
begin
showmessage('成功,有返回');
.......
....
......

end ;

我看了,发送是成功了,我从机器的显示屏上可以看出来的,可是没有返回信息(spcomm1receivedata 没有触发,就是没有显示"成功,有返回",)?
谢谢,能回答上的,200分送上。
我初步认为是返回的字节数太少,未能使spcomm1receivedata触发,但我没有找到设置有多少字节后就返回的属性,请高手指教。
 
我现在有一个TSPcomm的问题想请教一下
frmmain.btn1click(sender:tobject);
var .......

begin
if mscomm.portopen=true then
mscomm.portopen:=false;
spcomm1.stopcomm;
strcomand:='read:pow:all?' //该命令用MSCOMM已经成功,且有返回;
spcomm1.startcomm
trytime:=0;
inputlen:=0;
while not (spcomm1.writecommdata(strcomand,ilen)) do
begin
trytime:=trytime+1;
if (trytime>10) then
begin
showmessage('失败');
abort;
end ;
sleep(500);
end;
end ;

frmmain.spcomm1receivedata(.....)
begin
showmessage('成功,有返回');
.......
....
......

end ;

我看了,发送是成功了,我从机器的显示屏上可以看出来的,可是没有返回信息(spcomm1receivedata 没有触发,就是没有显示"成功,有返回",)?
谢谢,能回答上的,200分送上。
我初步认为是返回的字节数太少,未能使spcomm1receivedata触发,但我没有找到设置有多少字节后就返回的属性,请高手指教。
 
返回的字节多少没关的.检查一下你的线好了,串口查询有一返回数据线,一发送线,一地线.
 
不会是返回字节数太少的问题,你的while(循环中应该加入响应消息的语句,
application.ProcessMessages;
 
spcomm是根据帧间隔触发事件的,肯定不是字数少的问题
先确定确实有回应的数据发到串口了
把发送过程简化一下,先发个符合协议的字串下去看看下位机有没有应答
s:='123456';
Comm1.WriteCommData(PAnsiChar(s),Length(s));
 
你的串口设置是否正确?
 
各位大侠,都不是以上情况,我用同一根线,用MSCOMM控件就有返回的.
 
你的发送代码有问题
1.comm1.startcomm后不能立即发送,至少sleep(5)
2.Comm1.WriteCommData(PAnsiChar(s),Length(s));发送参数是一个指针和一个长度,你的代码里都没有
3.建议使用串口调试助手一类的软件,这样很容易判断问题位置
 
1。你先用超级终端发送接收看一下,确保你的物理连接没有问题
2。发送和接收的com参数配置必须设置成一样
3。测试的字符串不要含不可见字符
4。receivedata是要在事件函数中实现的,不能直接调用spcomm1receivedata。老兄
 
接受答案了.
 
后退
顶部