从版本V2.3.56或更高版本开始,编译旧项目可能会导致以下问题:较早版本中由编译器放置在保持区域内的定时器,从版本V2.3.56开始被分配到非保持区域。
原因是从版本V2.3.56开始,可以将功能块实例分配给保持区域或非保持区域。因此,编译器为功能块‘TM_xxxs_FB’的每个VAR_RETAIN实例分配一个系统定时器,从定时器内存区的末尾(系统寄存器5 - 1)到保持区域的开头(系统寄存器6)。对于类别VAR的每个实例,编译器分配一个系统定时器,从非保持区域的末尾(系统寄存器6 - 1的值)直到0。
如果按下例所示设置了系统寄存器5和6,则发生上述效果。必须相应调整系统寄存器5或6,或者更改功能块实例的类别。
在早于V2.3.56的版本中,定时器被分配到位于保持区域的编号2999。从版本V2.3.56开始,编译器尝试将定时器分配到非保持区域。编译器分配编号2499。
解决方案:更改程序头中的类别以将实例分配给保持区域。