关于串口通信的问题,请大家帮帮忙!!!(50分)

  • 主题发起人 主题发起人 mymy
  • 开始时间 开始时间
M

mymy

Unregistered / Unconfirmed
GUEST, unregistred user!
我用串口接收数据,当设断点单步运行时,数据不发生错误,可是直接运行时却老是会出错,这是为什么啊??

各位大虾请帮帮忙啊
 
加上一个延时试一下看看???
 
我用了一个sleep(2)还是没用。

我是加在这个控件的触发事件中。
 
在接受数据前设置一个标志
on receive
bol_receive :=true
if bol_receive then
....
end;
bol_receive:=false;
 
谢谢!
to masoft
设标志是为了延时吗?

直接运行时,好像是有些数据没有来得及接收
 
深的道理我也闹不清楚,大概是线程不安全什么的一类东西吧,[:D],我胡说的。
以前我用spcomm碰到过,就是这样解决的。
至于延时的方法,不能用sleep。那样的话整个程序就都停止了。
 
谢谢!串口通信我不是很了解。

bol_receive :=true
if bol_receive then
.... ------这段是处理接收的数据?
end;
bol_receive:=false
 
谢谢!可是我发现还是和原来的一样。我用的是TMSA32控件
 
采用同步模式接收数据。
 
to 无级变速
能否详细说明,我不是很明白这个过程
 
给你个段延时程序,你可以试试,
procedure TimeDelay(DT: DWORD);
var
TT: DWORD;
begin
//取得现在的Tick值
TT := GetTickCount();
//计算Tick差值是否超过设置值
while GetTickCount()-TT<DT do
Application.ProcessMessages; //释放控制权
end;
 
直接有API吧,不要用控件,另外你可以把缓冲区设大点
 
能否详细说明api的做法?
 
这种情况我遇到过,把延时设大一点就可以了。
sleep(100)试一下,[:D]
 
要加延时的,在打开端口时加一个20ms的延时,如果可能的话,在每发一串数据后也加一个延时。
但是延时最好不要用sleep(我以前遇到过类似情况,sleep挂起应用程序,好像不能自动清空缓冲),应该使用masoft类似的方法。。
 
我用spcomm!!没出显过错误!!你要注意缓冲区和延时!!你要和什么通讯啊!!!
 
to mymy
我正在做串口编程的项目,有机会我们可以互相学习一下,我直接用API,通讯部分用公司自己研发的转换卡。我的邮箱是mu_hx@126.com.
你的问题估计是延时不够,毕竟通讯受硬件的通讯线的影响,速度远小于CPU的处理速度。sleep(2)只是延时2毫秒,考虑到Delphi的线程运行机制,顶多是即使毫秒,我们的程序中动辄就延时几百毫秒。这种问题我以前也遇到,用延时解决,不知道有没有更好的方法。
 
谢谢各位,
我用延时的方法解决了,不知道这样做以后会不会出现错误
 
用spcomm吧。在控件里面有设延时的地方吧(一年多以次做过一个,现在好像忘了)。sleep(2)根本不行。。太小了。
 
后退
顶部