6ES75184AX001AC0西门子CPU模块S7-1500
![]() | 6ES7518-4AX00-1AC0 SIMATIC S7-1500, CPU 1518-4 PN/DP MFP, inclusive C/C++ Runtime and OPC UA Runtime license working memory 4 MB for program and 20 MB for data, 1. interface: PROFINET IRT with 2 port switch, 2. interface: PROFINET RT, 3. interface: Ethernet, 4. interface: PROFIBUS, 1 ns bit-performance, SIMATIC memory card (min. 2 GB) necessary |
在PL编程时,我们经常会忽略语句中临时参数重复使用的的问题,在调试程序时,分析当前语句好似没有问题,只有放到整个程序中检查才能发现,这是由于PLC循环扫描的工作机制导致的。这种现象的处理可以按下示方法解决。
问题程序
现有示例程序如下:
在分析上述语句时,当”start”变量被置为”1”时,”on delay”接受能流,变量被置位,能够实现自锁。但在仿真时,程序段1中的”on delay”变量并没有被置位,而只有程序段2上的”on delay”变量被置位。仿真结果如下图所示。
可以看出,以上程序由于程序段1中的”on delay”变量无法被置位而不能实现自锁。
问题分析
PLC的工作方式是从上到下、由左至右地循环扫描,而”on delay”变量属于Temp—临时变量,只有在PLC的一个循环周期内,”on delay”变量能够保持,一个循环周期结束后,分配给”on delay”变量的存储空间被释放。
在上述程序的个循环周期中,程序段1左边的变量”start”被置位,而”on delay”变量没有被置位,程序段1右边的变量”on delay”由于”start”被置位而接受能流;程序段2左边的变量”on delay”由于接受能流而被置位;一个循环周期结束后,”on delay”的存储空间被释放,”on delay”变量又被复位,在第二个循环周期中,程序段1左边的”on delay”变量依然不能被置位。
解决方案
采用FB程序块对上述程序进行编程,并将”on delay”变量设为Static——静态变量,程序如下所示。
实验结果如下所示。
可见,程序段1中左侧的”on delay”变量被成功置位,改程序能够实现自锁。
总结
临时变量可以用于所有块中 (OB, FC, FB)。当块执行的时候它们被用来临时存储数据,当退出该块时这些数据将丢失。因此, 在PLC扫描运行时, FC块中的临时变量Temp不能自锁。
如果FC块,可以使用全局变量(标志位和数据块)来存储数据,实现自锁。
如果FB块,除了全局变量之外,也可以使用静态变量来存储数据,实现自锁。
6ES75184AX001AC0西门子CPU模块S7-1500