关于200smart定时中断的应用案例
昨天有一个网友提问,说需要做一个无关于plc扫描周期做脉冲输出的程序,脉冲周期为0.1S,提问链接【西门子200smart产生不受扫描周期影响的0.1S脉冲】:
http://www.ad.siemens.com.cn/service/answer/tobe_solution.aspx?Q_ID=186987&cid=1076经过几次交流,估计还没有完全说明这个问题,于是我萌生了想写一写关于200smart 定时中断的应用的念头。
首先该网友需要编辑一个与plc扫描周期无关的输出,我这里理解为几个方面:
1) 与周期无关的程序一般采用中断,又结合是脉冲方式输出,所以定时中断比较合适。西门子200或者200smart 具体定时中断功能的有4个,其中2个是PT端子直接赋值(T32/T96),输入数据范围0~32767*时基,刷新的同步方式即相当于中断方式,系统自动连接到中断事件21# /22#;另外2个中断时间是在特殊标志字节SMB34/SMB35中设置,中断事件连接到10# /11#。
2) 因为是脉冲方式输出,我这里理解为方波占空比50%,因为要求这个脉冲周期为0.1S,那么,相当于50mS的占空比输出。
3) 综合上述要求,是与扫描周期无关的,所以需要立即输出方式
编程思路:
1) 定义定时中断,中断事件号10#,即SMB34中设置为50(mS)
2) 在主程序OB1中调用定时中断初始化子程序
3) 在定时中断子程序中编辑一个取反指令,因为该网友要求仅仅是一个输出,而指令最小单位是字节,所以,在取反指令下面,紧接着应该复位不使用的位逻辑结果。这里调用M区的MB0,当然这个地址区没有规定,用户自由选择其它地址也可以
4) 最后将结果用(I)指令隐射到物理输出地址Q0.0中
程序:完全按个人习惯编写
1) 定时中断初始化,图示:
2) 在主程序OB1中调用定时中断初始化子程序,图示:
3) 在子程序上编辑脉冲输出程序,图示:
4) 将程序编译保存后下载到cpu,打开状态图表,监控程序运行结果
在plc上测试结果能够满足需要,完成。
希望那位网友能够看到这个,如有疑问继续交流。