循环问题出在哪里呢。请教高手

txd_2008 2007-12-18 10:33:39
for i:=1 to 9 do
begin
s:=pchar(label3.Caption);
if opencom(1,9600)=1 then
begin
if (senddata(s,length(label3.Caption))=0) then
begin
Memo1.Text:=label3.Caption+' '+'写卡失败';
APPLICATION.ProcessMessages;
sleep(1500);
closecom();

end ;

if (senddata(s,length(label3.Caption))=1) then
begin
Memo1.Text:=label3.Caption+' '+'写卡成功';
label3.caption:=inttostr(strtoint(label3.caption)+1);
APPLICATION.ProcessMessages;
sleep(1500);
closecom();
end;


end;
end;

在第一次循环中第3个if(senddata(s,length(label3.Caption))=1) 里的条件要满足2次,里面的语句才能执行。问题出在哪里呢???
...全文
58 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
小呆之家 2007-12-18
  • 打赏
  • 举报
回复
通讯代码这么写?
1.有必要每次都执行打开串的操作么?(对于同一个串口)
2.为什么不把发送过程定义成一个函数?
3.从你的操作来看,我不明白你为什么要发送9次同样的数据给设备;

一般,我是按下面的操作顺序完成通讯的
var
rlt:boolean;
trycount:byte;

trycount:=1;
rlt:=false;
rtl:=openCOmm();
if rlt then
while trycount<3 do
begin
rlt:=sendData();
if rlt then
begin
//.....发送成功 !
trycount:=4;
end
else
inc(trycount);
end;
closeCOmm;
brightyang 2007-12-18
  • 打赏
  • 举报
回复
自已跟踪调试一下看看吧
小呆之家 2007-12-18
  • 打赏
  • 举报
回复
自动初始化卡片:
不知道你的发卡机是否有检验卡片的功能;
如果有的话,就好办了.
用一个定时器,按一定的时间间隔向发卡机写数据就可以了.
卡号可以用配置文件保存或是由用户手动输入.填写好参数后,你就可以自动发卡了.
卡编号可以用全局变量保存.成功后加1就可以了.
定时器事件完成卡片检查,写卡,写卡后的检验.
txd_2008 2007-12-18
  • 打赏
  • 举报
回复
我做的是磁卡连写程序,

思路是:卡的编号是流水号,如果第一张卡写成功,那就再加1写到第二张卡里,如果第一张不成功就提示错误,并重写第一张。

5,388

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧