我用vc的Api串口读写函数,通过Rs232口和CQM1H-CPU51用hostlink码进行通信,每读PLC一个字的时间要50mm左右,请问有哪些可能原因造成的通信时间需要这么长? 
COMMTIMEOUTS timeouts; 
timeouts.ReadIntervalTimeout = 30;
timeouts.ReadTotalTimeoutMultiplier  = 3;
timeouts.ReadTotalTimeoutConstant  = 50;timeouts.WriteTotalTimeoutMultiplier = 3;
timeouts.WriteTotalTimeoutConstant   = 30;

解决方案 »

  1.   

    应该是plc的问题,我想。应为用单片机时候没有这种问题!
      

  2.   

    虽然波特率,超时都是影响相应时间的因素,但是我感觉不是核心原因,应该是PLC某出的设置可能有问题,唉,也不知道怎么改的让它快一点,郁闷死了!
      

  3.   

    还不太懂你什么意思,你的数据通讯是什么方式,数据包方式?这样计算50ms确实太慢大概只有200bps,我想可能是因为你的数据通讯方式是可编程控制的少量数据通讯方式,比如先发送一个字节控制pic,然后再接受pic发送的数据,这样就会有很多原因我知道的如下
    1 计算机串口UART 16550有硬件数据缓冲FIFO,这样会造成数据包发送延时,如果是编程控制少量数据发送,且发送频率高就会造成速度非常慢,win2000下可关闭这个硬件缓冲来提高数据发送的实时性
    2 线程延时,线程切换会造成你的程序等待20ms或更长时间.
      

  4.   

    我用线程采集,发送的数据量很小(几个字的长度),发送频率肯定高,我用的是com口,不知道怎么关掉你说的那个硬件缓冲?
      

  5.   

    我用线程采集,发送的数据量很小(几个字的长度),发送频率肯定高,我用的是com口,不知道怎么关掉你说的那个硬件缓冲?
    ===========================================================
    所以说你的这种方式肯定会很慢,首先线程信号机制肯定达不到你要求的频率,唯一可改的只能是硬件缓冲区设置方法如下,
    2000设备管理器->串口->串口设置->高级
      

  6.   

    找不到你说的这个
    我的电脑-属性-硬件-设备管理器-端口-com1你说的2000设备管理器->串口->串口设置->高级在哪儿?
      

  7.   

    硬件已经运到厂里去了,我现在没有plc,我再有机会试一下,把结果告诉你,也许以后没有机会再做控制的项目了,现在做的项目都是纯软件的,没有什么意思,你的硬件水平真高,我在学校里学的太杂了,老师来什么项目就去做什么项目,毕业了还不知道拿什么去找工作,我现在没有专业,没有方向,连英语都学不好,只是老师的一个机器,唉,真不知道前途在什么地方,而且老师不给钱!