我通过串口对一组电表进行读取,我是通过FOR循环来做的,现在有个问题就是要等
循环结束才能执行Comm1ReceiveData事件过程,这样一来就收不到数据。
我想要等一块表接收完成再执行下一块表,请问怎么实现? for i:=0 to Lvwbjxx.Items.Count -1 do
begin
if Leftstr(trim(Lvwdxst.Items[0].SubItems[i]),1)='1' then
begin
//这是个发送过程
SetErr(Lvwbjxx.Items[i].SubItems[3],0);
end; end;
循环结束才能执行Comm1ReceiveData事件过程,这样一来就收不到数据。
我想要等一块表接收完成再执行下一块表,请问怎么实现? for i:=0 to Lvwbjxx.Items.Count -1 do
begin
if Leftstr(trim(Lvwdxst.Items[0].SubItems[i]),1)='1' then
begin
//这是个发送过程
SetErr(Lvwbjxx.Items[i].SubItems[3],0);
end; end;
解决方案 »
- 1000元求高效屏幕区域取词源代码
- IDA逆向Delphi程序时很多的库函数认不出来,请问要怎么弄?
- delphi 的流的问题writebuffer,传送Stream的函数,有些看不明白,请各位懂delphi TStream 的大虾们指点
- 谁能帮帮我
- 有没有系统函数可以判断一个字符串是否可以转换为实数
- 打印简单问题
- 请问有没有针对CSV文件处理的控件之类的?
- 菜鸟提问:关于 MessageDlg 的语法问题
- 请教,用DBGrid连接ADOquery,想在DBGrid里用鼠标可以移动一条记录到另一条记录的上面或下面,应怎做呢?
- 各位高手:如何用delphi快速收取email-----------它的demo版程序太滥了, 收一封信需要1.5分钟
- 如此实现与内网的一台机建立IPC$连接?
- 关于单元格合并
FOR I := 1 TO 100 DO
BEGIN
发送电表[I];
S := 读取电表[I];
WHILE S > '' DO
BEGIN
S := S + 读取电表[I];
END;
END;意思就是直到读取完了再操作下一个电表!
你这样不行的,我试过的,Comm1ReceiveData事件是自动触发的,主动执行这个是不行的
application.ProcessMessages让COM有机会得到消息Comm1ReceiveData就有机会执行了,循环中一般应该还有个GetTickCount来保证等待结果时间.
偶一直都是用READFILE等API函数自己写的 !
SPCOMM应该也是通过线程循环,一旦读取到数据就触发事件的吧!没用过它!
BEGIN
发送电表[I];
//延时
application.ProcessMessages;
END;中间最好加上一定的延时,要看串口设备响应的迟滞时间长短!
或者用API来实现串口读写,简单而且方便,比较好控制!
所以你需要接收缓存区,然后通过控制队列来逐个处理~
必要时,需要多线程来配合