“变量不能重复使用或使用前必须赋值”这个规定不知是从哪里来,这完全是一个
错误的规定。事实上编程是不可能避免变量重复使用的,任一个变量,完全可以任意赋值,编程者需要了解的是
这个变量何时会被改变?是否会被自己代码以外的程序所改变?比如一条最简的加法指令:

习惯用梯形图的人可能很少会意识到 VW10 实际上被赋值了两次
如何来理解“变量何时会改变”这句话呢?在
中断程序中用到的变量不可做中间变量这个贴子中已有说明
“变量会被自己代码以外的程序改变”?这个主要涉及的是局部变量和累加器了。局部变量存在一个不确定初始值的问题,所以需要有明确的代码初始化才能使用它的值。累加器则比较特别,因为可能在任何地方使用它们,比如下面的代码是很不可靠的:
movw vw0,ac0
+i vw2,ac0
call sbr0, ... // 假设这里输出了一个值到 vw4
/i vw4,ac0
movw ac0,qw0
QW0 中的值是很不可靠的,因为我们不知道子程序 sbr0 是否会改变 AC0 的值
这种问题犹其是在使用第三方无源码的库时要特别要注意,不要在连续使用累加器的中间调用不明子程序,比如上面的示例代码应该将 CALL 指令放到最前面去
顺序说一下,西门子的官方库很多子程序中都使用了累加器而未作说明,这是很不负责任的。我们自己发布库的时候要形成习惯对资源的使用加以说明,比如我个人发布的库一般会有类似下面的说明:
资源占用:
累加器:AC0,AC1,(自动保存与恢复)
V 内存:连续 280 字节