位逻辑
关于置位和复位指令是这样用的:上面那个bit写地址,下面的n是写你要连续置位或者复位的位数。例如下面的那个梯形图,他是从q0.0开始,连续置位两位,也就是从q0.0开始到q0.1,两位都置一,然后下面的r也是,从这个脉冲开始,连续两位置零。
置位优先和复位优先双稳态触发器指令
这个和数电那个rs触发器是一样的
bit是地址,然后看表格
sr置位优先
r | s | bit | out |
1 | 1 | 1 | 1 |
0 | 1 | 1 | 1 |
1 | 0 | 0 | 0 |
0 | 0 | 不变 | 不变 |
rs复位优先
r | s | bit | out | |||
1 | 1 | 0 | 0 | |||
0 | 1 | 1 | 1 | |||
1 | 0 | 0 | 0 | |||
0 | 0 | 不变 | 不变 |
根据表格我们不难看出来,你看在sr置位优先的时候,我是s优先的,所以当我s作用的时候r是没有用的,只有当我s为0了,你r才起作用。
同样的,在rs复位优先的时候,我只有在r等于0时我的s才能起作用。
立即io指令
立即指令就是不用等到cpu的扫描,执行后立即刷新或者采集输入,这样的速度就非常快了,因为是对物理输入点直接存取的
立即输出指令
只能用于输出继电器q,执行命令时立即执行。
注意:立即io指令是通过直接访问物理输入输出点的,比一般指令访问输入/输出映像寄存器占用cpu的时间要长,所以不要乱用立即指令,不然会增加程序响应时间。
立即置位和立即复位指令
其实和之前的线圈是一样的,不同的就是立即两个字而已
只能用于输出q,从指令开始操作的那个地址开始连续n个地址被立即置位或者立即复位并保持,n的取值范围为1-255,执行后,新值被同时写到物理输出点和相应的输出映像寄存器
取反指令和空操作指令
1.取反指令(not)
将其左边的结果取反,例如一个常开触点,经过取反之后就变成了1,再往下一级传输
2.空操作指令(nop n 【n取1-255】)
这个对程序是没有影响的,相当于c语言里的空函数,在程序设计之初留下空白用的.
正负跳变指令(上升沿和下降沿)
分为两个:
-|p|-是正跳变指令,就是上升沿触发,当上升沿到来的时候,产生一个宽度为一个扫描周期的脉冲
-|n|-是负跳变指令,就是下降沿触发,当下降沿到来的时候,产生一个宽度为一个扫描周期的脉冲
定时器指令
接通延时定时器(ton)
这个接通延时寄存器你可以理解为,我in输入,pt是设定值,然后例如我这里是pt=50,50x100ms就是五秒钟,i输入开始计数,记够五秒钟我就向外输出一个脉冲,但是如果这个时候i不断电我就会一直记数,直到最大值32767,在这期间,t还是保持on的状态,到32767就自动断开了。
如果我i断电了,那就复位归零,马上断开
保持型接通延时定时器(tonr)
这个和之前那个最大的区别就是他断电后不会自己置零,而是累加一直到32767也不会掉下来,就会一直保持on的状态。直到直到我外部给他一个复位信号,就是i0.1那个复位开关,按一下线圈产生复位脉冲,t3这时候才置零。
计数器(c0-c255)(数据类型为int整数)
增计数器(ctu)
首次扫描时,计数器位为off,置零。ld端是脉冲输入,来一个脉冲计一个数,pv是设定值,记到pv就整体输出为1,然后r是复位键,r来一个脉冲就置零。
减计数器(ctd)
一样的,只是首次扫描时,计数器位为0,当前值设定为pv值,然后来一个脉冲就往下减,减到0整体置1.
增减计数器(ctud)
对比普通的只有加或减的计数器他有一个比较特别的地方
有cu和cd两个脉冲输入端,还有个r和pv是一样的
脉冲嘛,就加到哪里就相应地增减就可以了
但是!!!当记到最大数32767的时候,再加1就变成了-32768(16进制的#8000)当记到最小的数-32768的时候下一个再减就变成了最大值32767
为什么是32767呢,因为plc每个地方都分配了16bit的空间,刚好16位数然后最高位是符号位,那剩下的15位就2的15次方就是32768.
比较指令
按照需求不同可以分为不同的比较。这个就不多讲了。
(书p127)
移位寄存器指令
这是书上的说法,但是我觉得这个有点抽象,不好理解。所以看下面的例子。
这是一个用移位寄存器控制的8盏小灯每隔3秒点亮,全亮3秒后全灭然后再循环。类似于一个流水灯吧大概是这样一个意思。
看这个例子,en是使能位,这里的t37是作为脉冲发生器使用的,稳定隔3秒钟发送一个脉冲给移位寄存器。然后呢data位是数据输入口,这个程序用的是m0.0的数据,你可以看到m0.0在开头是被置一了的,所以他这里数据输入源永远是1.然后呢s_bit就是要移动的地址了,n是移位寄存器的长度。
还有一个mov_b拓展以下,是赋值指令。移动字节指令将输入字节移至输出字节,不改变原来的数值。所以说可以看到in是0,out是vb100,就是把0移到vb100,相当于就是置零了。en是输入端,eno是输出端
移位寄存器最高有效位地址的计算
这是书上的算法,其实可以不用记公式,靠常识就能解决这个问题
我们抛开公式不看,你看啊按照书上的例题
v33.4往上移n=14位,那最终值是多少呢?
每一个字节里面有8个位
例如v33里面就有v33.0、v33.1…v33.7
那么我v33.0移8位是v33.7,v33.0移16位就是v34.7
那v33.0移14位呢?就是v34.5
所以我v33.4移14位就是v34.5移4位,v34.6、v34.7、v35.0、v35.1
这就是答案
所以不用去记公式的,这样就能推出来。
顺序控制指令scr
这个看书p131,就不讲了。