Mscomm.enable=false;
mscomm.enable=true;.
mscomm.output="发送的指令";
发现这样写后,串口很容易延时,有时候反应不过来,我要点好几下才有反应,
该怎么样解决这个串口延时通信的问题呢
9 个解决方案
#1
使用spcomm,偶是使用VC写的DLL
#2
为什么使用SPCOMM,就能解决这个问题呢?
呵呵
呵呵
#3
“串口很容易延时,有时候反应不过来”与控件无关。可能是你下位机的问题。
#4
我知道与控件无关,觉得是通信方面的延时问题呵呵,比如通信的时候有点不顺畅啊,我现在监控和写数据是通过对MSCOMM.ENABLE的FALSE和TRUE来实现的,总觉得这样的方法很笨啊,,你觉得呢
#5
丁丁,呵呵
#6
对于调试串口通信,我建议你先用串口调试器先把通信调试好了再写自己的通信程序。
串口通信的确是有些延迟,但一般不会很大,也就100ms以内。
其他的我就不好在发表些什么看法了,毕竟我不知道你的项目的具体内容,不能瞎说了。
如果愿意你可以说的更详细写,提供更多的信息。
串口通信的确是有些延迟,但一般不会很大,也就100ms以内。
其他的我就不好在发表些什么看法了,毕竟我不知道你的项目的具体内容,不能瞎说了。
如果愿意你可以说的更详细写,提供更多的信息。
#7
那你觉得我这样写是没什么问题吗?
我是用于对硬件的寄存器的数据实时监控啊,比如我软件一起动的时候,我就要发送“RD”指令去实时读取,只要不操作,发生了onComm时间,根据指令标识符,如果指令标识符是“RD”的话,我就又再一次发送“RD”指令去读寄存器里面的数据。如果我要进行操作了,我就要写一个“WD”指令相关的命令发给串口,因为串口独占性的原因。我就首先把MSCOMM.enable=false;Mscomm.enable=true;然后再写Mscomm.output=WR相关发送指令。然后我再oncomm事件里面进行判断,如果指令符是“WD”就提示收到命令,有时候“WR”写一次就能提示了,有时候要写好几次才提示收到,就是这么回事啊,这是为什么呢?
这是发送过程:
OutPutStr:='@00WR00200100';
OutPutStr:=OutPutStr+CalBcc(OutPutStr)+'*'+Chr(13);
form1.MsComm.Enabled :=False;
Form1.MsComm.Enabled :=True;
Form1.MsComm.Output :=OutPutStr;
CommandStr:='WR';
这是MSCOMM接收过程
if CommandStr='WR' then
begin
Mscomm.Enabled :=False;
MsComm.Enabled :=True;
Mscomm.Output := '@00RD01460006'+CalBcc('@00RD01460006')+'*'+chr(13);
CommandStr:='RD';
end;
只要一处理完,“WR“这个操作就立刻再次读寄存器里面的数值
我是用于对硬件的寄存器的数据实时监控啊,比如我软件一起动的时候,我就要发送“RD”指令去实时读取,只要不操作,发生了onComm时间,根据指令标识符,如果指令标识符是“RD”的话,我就又再一次发送“RD”指令去读寄存器里面的数据。如果我要进行操作了,我就要写一个“WD”指令相关的命令发给串口,因为串口独占性的原因。我就首先把MSCOMM.enable=false;Mscomm.enable=true;然后再写Mscomm.output=WR相关发送指令。然后我再oncomm事件里面进行判断,如果指令符是“WD”就提示收到命令,有时候“WR”写一次就能提示了,有时候要写好几次才提示收到,就是这么回事啊,这是为什么呢?
这是发送过程:
OutPutStr:='@00WR00200100';
OutPutStr:=OutPutStr+CalBcc(OutPutStr)+'*'+Chr(13);
form1.MsComm.Enabled :=False;
Form1.MsComm.Enabled :=True;
Form1.MsComm.Output :=OutPutStr;
CommandStr:='WR';
这是MSCOMM接收过程
if CommandStr='WR' then
begin
Mscomm.Enabled :=False;
MsComm.Enabled :=True;
Mscomm.Output := '@00RD01460006'+CalBcc('@00RD01460006')+'*'+chr(13);
CommandStr:='RD';
end;
只要一处理完,“WR“这个操作就立刻再次读寄存器里面的数值
#8
本身的PLC软件上面就是可以实时监控和往里面写数据,不过写数据的我仔细观察了一下,他也是把串口的读数据过程停掉的
#9
"WR"接收指令,忘记写一句:showmessage'收到数据';了,呵呵
#1
使用spcomm,偶是使用VC写的DLL
#2
为什么使用SPCOMM,就能解决这个问题呢?
呵呵
呵呵
#3
“串口很容易延时,有时候反应不过来”与控件无关。可能是你下位机的问题。
#4
我知道与控件无关,觉得是通信方面的延时问题呵呵,比如通信的时候有点不顺畅啊,我现在监控和写数据是通过对MSCOMM.ENABLE的FALSE和TRUE来实现的,总觉得这样的方法很笨啊,,你觉得呢
#5
丁丁,呵呵
#6
对于调试串口通信,我建议你先用串口调试器先把通信调试好了再写自己的通信程序。
串口通信的确是有些延迟,但一般不会很大,也就100ms以内。
其他的我就不好在发表些什么看法了,毕竟我不知道你的项目的具体内容,不能瞎说了。
如果愿意你可以说的更详细写,提供更多的信息。
串口通信的确是有些延迟,但一般不会很大,也就100ms以内。
其他的我就不好在发表些什么看法了,毕竟我不知道你的项目的具体内容,不能瞎说了。
如果愿意你可以说的更详细写,提供更多的信息。
#7
那你觉得我这样写是没什么问题吗?
我是用于对硬件的寄存器的数据实时监控啊,比如我软件一起动的时候,我就要发送“RD”指令去实时读取,只要不操作,发生了onComm时间,根据指令标识符,如果指令标识符是“RD”的话,我就又再一次发送“RD”指令去读寄存器里面的数据。如果我要进行操作了,我就要写一个“WD”指令相关的命令发给串口,因为串口独占性的原因。我就首先把MSCOMM.enable=false;Mscomm.enable=true;然后再写Mscomm.output=WR相关发送指令。然后我再oncomm事件里面进行判断,如果指令符是“WD”就提示收到命令,有时候“WR”写一次就能提示了,有时候要写好几次才提示收到,就是这么回事啊,这是为什么呢?
这是发送过程:
OutPutStr:='@00WR00200100';
OutPutStr:=OutPutStr+CalBcc(OutPutStr)+'*'+Chr(13);
form1.MsComm.Enabled :=False;
Form1.MsComm.Enabled :=True;
Form1.MsComm.Output :=OutPutStr;
CommandStr:='WR';
这是MSCOMM接收过程
if CommandStr='WR' then
begin
Mscomm.Enabled :=False;
MsComm.Enabled :=True;
Mscomm.Output := '@00RD01460006'+CalBcc('@00RD01460006')+'*'+chr(13);
CommandStr:='RD';
end;
只要一处理完,“WR“这个操作就立刻再次读寄存器里面的数值
我是用于对硬件的寄存器的数据实时监控啊,比如我软件一起动的时候,我就要发送“RD”指令去实时读取,只要不操作,发生了onComm时间,根据指令标识符,如果指令标识符是“RD”的话,我就又再一次发送“RD”指令去读寄存器里面的数据。如果我要进行操作了,我就要写一个“WD”指令相关的命令发给串口,因为串口独占性的原因。我就首先把MSCOMM.enable=false;Mscomm.enable=true;然后再写Mscomm.output=WR相关发送指令。然后我再oncomm事件里面进行判断,如果指令符是“WD”就提示收到命令,有时候“WR”写一次就能提示了,有时候要写好几次才提示收到,就是这么回事啊,这是为什么呢?
这是发送过程:
OutPutStr:='@00WR00200100';
OutPutStr:=OutPutStr+CalBcc(OutPutStr)+'*'+Chr(13);
form1.MsComm.Enabled :=False;
Form1.MsComm.Enabled :=True;
Form1.MsComm.Output :=OutPutStr;
CommandStr:='WR';
这是MSCOMM接收过程
if CommandStr='WR' then
begin
Mscomm.Enabled :=False;
MsComm.Enabled :=True;
Mscomm.Output := '@00RD01460006'+CalBcc('@00RD01460006')+'*'+chr(13);
CommandStr:='RD';
end;
只要一处理完,“WR“这个操作就立刻再次读寄存器里面的数值
#8
本身的PLC软件上面就是可以实时监控和往里面写数据,不过写数据的我仔细观察了一下,他也是把串口的读数据过程停掉的
#9
"WR"接收指令,忘记写一句:showmessage'收到数据';了,呵呵