通过SPCOMM控制单片机,如何缩小指令间的时间间隔?详情见内。谢谢!!(300分)

  • 主题发起人 主题发起人 JIUYI
  • 开始时间 开始时间
J

JIUYI

Unregistered / Unconfirmed
GUEST, unregistred user!
通过SPCOMM控制单片机
当用spcomm 连续发送多条命令(一条指令接一条指令的发,而不是一次发出所有的指令)
到串口时,出现指令执行错误。由于单片机一次只能接收一个字节的指令,怀疑是由于
SPCOMM(或者是MS的writefile)把所有指令一次发出的原因造成的。
故在每条指令之间加入150-200ms的延时,基本无此现象。

单片机每隔1ms就可接收一次PC机发过来的指令。

我的问题是:能否将指令发送间隔减小到几毫秒之内?

 
延时几毫秒不行?
 
你既然可以加入150-200ms的延时,几毫秒的延时应该是相同的道理呀。
你是如何加入150-200ms的延时的,能把代码贴出来吗?
 
单片机软件写得太差了吧
 
当然可以
spcomm对数据的处理是按批的,
通过对时间间隔的设置来决定多长时间为一批。

以下属性就是用来设置延时/超时的:
property ReadIntervalTimeout: DWORD read FReadIntervalTimeout write SetReadIntervalTimeout;
property ReadTotalTimeoutMultiplier: DWORD read FReadTotalTimeoutMultiplier write SetReadTotalTimeoutMultiplier;
property ReadTotalTimeoutConstant: DWORD read FReadTotalTimeoutConstant write SetReadTotalTimeoutConstant;
property WriteTotalTimeoutMultiplier: DWORD read FWriteTotalTimeoutMultiplier write SetWriteTotalTimeoutMultiplier;
property WriteTotalTimeoutConstant: DWORD read FWriteTotalTimeoutConstant write SetWriteTotalTimeoutConstant;

因为缺省情况下,
ReadIntervalTimeout为100ms
所以你在单片机一方要加100ms以上的延时,
你可以逐渐把它降低,
同时调整单片机的延时,
使两者同步即可。
最低能到多少要看具体应用。
 
先多谢各位!

现在在改写单片机端的程序,使之可以一次接收多条指令(指令集)也许有效
试试再说
 
ras485通讯,一台计算机,八台批量控制仪,boundrate等其他com口数据都设置好了,但
控制仪上还有个address,依次是001,002,003....008,如何把address加入到程序中,使
之能分辨每一台仪表,向它们发送数据和接收数据?
 
zhaohai9:
通过计算机与控制仪内部的通信协议,加入地址信息
 
问题已解决。
我现在采用一次把指令全部发送给单片机,单片机收到后再一一转发给其它单片机
这样能够解决此问题。效果不错。
究其原因还是在单片机等待另一单片机耗时太多所致。

多谢大家!:-)




 
多人接受答案了。
 
后退
顶部