指令说明:
SFRD是16位连续执行型移位读出指令,即每个扫描周期都执行数据移位读出运算。即从“先进先出”队列S的首项读出到D中,然后将队列S逐字右移1个字,将队列指针递减。以第一个编号装置作为指针,当指令执行时,指针内容值先减1,之后S所指定的装置其内容值会写入先入先出D数据串列中由指针所指定的位置。
若指针已经为0,则指令不处理前述操作,而0标志M8020会置1。
※ 由于使用连续执行型指令SFRD,每个运算周期都移位,因此请使用脉冲执行型指令SFRDP编程
操作数:
S:KnY, KnM, KnS,T,C,D, LV,DT,@
D:KnY, KnM, KnS,T,C,D, Z,V,LV,DT
n:K,H,@
指令格式:[SFRD S D n ]
编程示例:
控制器上电运行,成批复位D0~D20。
写入1个值到D0,上升沿触点X0接通1次,SFWR移位写入指令执行一次,然后D0值传送到D11,以此类推,再操作8次,8个不同的值写入到D12~D19,D10作为指针记录操作次数。
当上升沿触点X1接通1次时,SFRD移位读出指令执行一次,按照先进先出的原则,D11~D19的值依次传送到D1,上一个数据传送后,该寄存器被下一个数据占领。操作9次后,D10变为0,D11~D99皆为最后位输入的值。

SFWR指令执行时,D10~D19的变化情况
|
写入 D0=11 |
写入D0=22 |
写入D0=33 |
写入D0=44 |
写入D0=55 |
写入D0=66 |
写入D0=77 |
写入D0=88 |
写入D0=99 |
|
按下第1次X0 |
按下第2次X0 |
按下第3次X0 |
按下第4次X0 |
按下第5次X0 |
按下第6次X0 |
按下第7次X0 |
按下第8次X0 |
按下第9次X0 |
|
D10=1 |
D10=2 |
D10=3 |
D10=4 |
D10=5 |
D10=6 |
D10=7 |
D10=8 |
D10=9 |
|
D11=11 |
D12=22 |
D13=33 |
D14=44 |
D15=55 |
D16=66 |
D17=77 |
D18=88 |
D19=99 |
SFRD指令执行时,D10~D19的变化情况
|
按下第1次X1 |
按下第2次X1 |
按下第3次X1 |
按下第4次X1 |
按下第5次X1 |
按下第6次X1 |
按下第7次X1 |
按下第8次X1 |
按下第9次X1 |
|
读出D1=11 |
读出D1=22 |
读出D1=33 |
读出D1=44 |
读出D1=55 |
读出D1=66 |
读出D1=77 |
读出D1=88 |
读出D1=99 |
|
D10=8 |
D10=7 |
D10=6 |
D10=5 |
D10=4 |
D10=3 |
D10=2 |
D10=1 |
D10=0 |
|
D11=22 D12=33 D13=44 D14=55 D15=66 D16=77 D17=88 D18=99 D19=99 |
D11=33 D12=44 D13=55 D14=66 D15=77 D16=88 D17=99 D18=99 D19=99 |
D11=44 D12=55 D13=66 D14=77 D15=88 D16=99 D17=99 D18=99 D19=99 |
D11=55 D12=66 D13=77 D14=88 D15=99 D16=99 D17=99 D18=99 D19=99 |
D11=66 D12=77 D13=88 D14=99 D15=99 D16=99 D17=99 D18=99 D19=99 |
D11=77 D12=88 D13=99 D14=99 D15=99 D16=99 D17=99 D18=99 D19=99 |
D11=88 D12=99 D13=99 D14=99 D15=99 D16=99 D17=99 D18=99 D19=99 |
D11=99 D12=99 D13=99 D14=99 D15=99 D16=99 D17=99 D18=99 D19=99 |
D11=99 D12=99 D13=99 D14=99 D15=99 D16=99 D17=99 D18=99 D19=99 |