用S7-200比较指令做的小程序,Q0-Q5输出六路循环,时间间隔10S,以下程序可以直接拷贝到记事本存为 .awl文件,直接导入SETP7软件即能下载到PLC运行,请大家指教。-------------------------------------------------------------------------------------ORGANIZATION_BLOCK 主:OB1
用S7-200比较指令做的小程序,Q0-Q5输出六路循环,时间间隔10S,以下程序可以直接拷贝到记事本存为 .awl文件,直接导入SETP7软件即能下载到PLC运行,请大家指教。
-------------------------------------------------------------------------------------
ORGANIZATION_BLOCK 主:OB1
TITLE=程序注解
BEGIN
Network 1 // 网络标题
// 网络注解
LD SM0.1
OW= T37, +600
MOVB 16#1, QB0
Network 2
LDW= T37, +100
MOVB 16#02, QB0
Network 3
LDW= T37, +200
MOVB 16#04, QB0
Network 4
LDW= T37, +300
MOVB 16#08, QB0
Network 5
LDW= T37, +400
MOVB 16#10, QB0
Network 6
LDW= T37, +500
MOVB 16#20, QB0
Network 7
LDN T37
TON T37, +600
END_ORGANIZATION_BLOCK
SUBROUTINE_BLOCK SBR_0:SBR0
TITLE=子例行程序注解
BEGIN
Network 1 // 网络标题
// 网络注解
END_SUBROUTINE_BLOCK
INTERRUPT_BLOCK INT_0:INT0
TITLE=中断例行程序注解
BEGIN
Network 1 // 网络标题
// 网络注解
END_INTERRUPT_BLOCK
-------------------------------------------------------------------------------------
2楼
梯形图
回复
3楼
用比较指令做六路循环只要一个100mS定时器T37,网络1的SM0.1是为了PLC首次扫描时使Q0.0立即闭合,QB0是PLC的第一个输出字节,对应于Q0.0~Q0.7。
回复
4楼
怎么没人回帖?
回复
5楼
这真是一个好方法.
但我碰到一个问题,如果要循环的输出点不是8个,而是10个,怎么做好?
回复
6楼
如果是10个:
第九路接在Q1.0上 ,程序: MOVB 16#01, QB1 (或:MOVW 16#100, QW0 )
第十路接在Q1.1上 ,程序: MOVB 16#02, QB1 (或:MOVW 16#200, QW0 )
回复
7楼
谢谢,比我用移位指令来得简单些.
不过用QB1好象不行吧,移QB1时QB0应该全为0,要加QB0复位指令.
用QW0应该可以.
回复
8楼
是吗?我也是刚学S7-200,我们共同学习.
QB0与QB1作为两个字节应该可以单独赋值吧?我刚才在SETPV3.2上试了,编译时并没有错误啊?能不能请你说清楚一点?
回复
9楼
能不能将你用移位指令做的也贴上来,大家互相学习学习.
回复
10楼
移位指令明天找到了贴上来.
还有一个问题,QW0用16#0100时它是付给了QB0,16#0001才是付给QB1,对不?
因为QW0中,QB0是高8位,QB1是低8位.
QB0与QB1作为两个字节应该可以单独赋值吧?我刚才在SETPV3.2上试了,编译时并没有错误啊?能不能请你说清楚一点?
编译是不错,因为程序也没错,只是实现功能不对了,因为实现的是流水型呀,到了第9个Q1.0时,Q0.7要关呀,所以QB0要复位,而以上程序Q0.7=1时就Q1.0=1了,没有QB0的复位指令,不知对否??
回复
11楼
对啊,你说得对,是我疏忽了,QB0是高位字节,应该是: MOVW 16#01, QW0 // MOVW 16#02 QW0 才对,还有光考虑程序了没有考虑到流水型功能,如果Q1.0=1时Q0.7=0,这时是要复位QB0,不如用QW0方便!谢谢你!
回复