
首先附上测试程序,图1图2通过依次点动M100,M101,M102,M103,M104,M105,分别将"ABCDEFGHIJKLMN"传送至队列,结果如图3所示。SFWRP是先入先出......
首先附上测试程序,

图1

图2
通过依次点动M100,M101,M102,M103,M104,M105,分别将"ABCDEFGHIJKLMN"传送至队列,结果如图3所示。SFWRP是先入先出写入数据的指令,通过SFWRP指令,字符串被依次写入D101~D107中,一共占用7个寄存器,加上D100(存储队列中的数量),一共是需要8个寄存器,所以[SFWRPD0D100K8]中的K8指的是分配8个寄存器。

图3
点动M10,触发SFRDP指令,SFRDP是先入先出读取数据的指令,每点动一次M10,会从队列中提取出一个寄存器的内容,然后后边寄存器的内容会依次向前一个寄存器进行移位,当设置[SFRDPD100D300K8]中的第三个操作数为K8时,数据读取就会出问题,如图4所示,

图4
每次读取一个数据,后边的空出的寄存器会被最后一个寄存器D107(“MN”)的内容依次填充,都读取完成后,最后发现D101~D107中都会变成D107中的("MN"),如图5所示

图5
当设置[SFRDPD100D300K9]中的第三个操作数为K9时,出栈队列就是正常的,如图6所示

图6
全部读取完成后的结果如图7所示

图7
综上判定,读取数据指令SFRDP中的第三个操作数一定要大于SFWRP中的第三个操作数,但是当分配的队列寄存器足够多的时候,比如大于实际要存的数据,则第三个操作数的设定值可以相等,所以使用SFWRP与SFRDP指令时,实际存储的数据一定不能大于所分配的队列寄存器。