前面所发的几个帖子都谈到CPU226与93表通讯进行自由口通讯时,若CPU226的程序循环时间小于93表的答复延迟时间,则CPU226利用通讯中断就可以接收到93表的完整一帧答复信息,反之就不行。为此怎么也找不到原因,最后的解决办法是尽量调整程序使之程序循环时间小于93表的答复延迟时间。今天又与西门子的技术服务工程师取得联系请教此问题,他告诉我应该将发送完再恢复接收的程序语句放在接收中断子程序的第一行内,而不是像现在放在主程序内,因为恢复接收要进行一系列的初始化工作,需要一定的时间,若放在主程序内,时间来不及。经过实际调整程序试验,结果确实如此。对此,我是这样理解的:当93表的答复信息回来时,CPU还是进入中断了,但是此时由于在主程序内还没有来得及开通接收,所以接收到的信息被被舍弃了,如果在中断子程序的第一行就开通接收,则接收到的信息就被采用。另一方面,若CPU226的程序循环时间小于93表的答复延迟时间,则当93表的答复信息还没有回来时,CPU226已经在主程序内开通接收所以就可以接收到93表的完整一帧答复信息了。是否可以这样理解,还请各位老师指点。