求助,串口通讯程序,在不同机子上有不同的反映(200分)

  • 主题发起人 主题发起人 zz99
  • 开始时间 开始时间
Z

zz99

Unregistered / Unconfirmed
GUEST, unregistred user!
[:(]请问各位大侠,不知有人遇到过这种情况没有:

我在程序在自己的机子上调试,接收仪表的数据都很正常,
(用comport控件做串口通讯),但到用户的机子上通讯时却面目全非,
出现好多乱的数据,并且本来可以正常接采集据的过程,现在要动鼠标
激活一下状态栏什么的,它才采集一个数据,不动就停在那不采集。用
一般的调试程序查看,仪表发的数据又很正常。
但所有的这些现象在我这里又没出现过,不知哪位好心人能赐教相助,
帮我解决这奇怪的问题。
 
仪器是以主动还是被动方式发送数据
 
对不起,我不太懂你所说的主动与被动的情况,我的软件与仪表是自定义通讯协议的,
仪表采集到数据(位移,压力等)后就不断的发送到微机里。
 
你的接受过程可能是一个主线程中的循环,所以鼠标动一下才采集,建议:
1、在循环中加Application.ProcessMessages;
2、把采集过程放入新建线程中。
3、采用MSComm控件的OnComm事件!
 
原来我在循环中用到了Application.ProcessMessages;语句
我用的是comport控件,接收数据时也是在它所提供的中断事件中做的,没有用新的进程

我不解的是为什么在我的电脑中一次故障也没有,而在用户的新机子里却没正常
工作过(两个是相同的操作系统)[:(]
 
to:wql
仁兄一定是高手,不如给个测试串口通讯的源代码,如何?
我给分.
http://www.delphibbs.com/delphibbs/dispq.asp?lid=1715978
 
procedure TForm1.MSComm1Comm(Sender: TObject);
var
Mbuffer:variant;
arr: array of byte;
K_sum:integer;
OutputString:string;
ArrayLength:integer;
begin
arr:=nil;
if mscomm1.CommEvent =2 then begin
mbuffer:=mscomm1.Input ;

arr:=mbuffer;
if arr=nil then exit;
ArrayLength:=high(arr);
ComConnectCount:=0;
case arraylength of
0: if arr[0]=5 then begin
if ResetOrderState=true then
begin
ResetOrderState:=false;
mscomm1.output:=ControlOutPutString;
//
end
else
mscomm1.Output :=chr(6);
end
else begin
mscomm1.InBufferCount :=0;
mscomm1.output:=chr(21);
end;
.
.
.
end;
 
建议使用ntport的dll做控件,比较不错
 
ntport怎么注册
 
后退
顶部