x = 1000
while x <= data['a2goodthousands'] * 1000:
data['MyA2Good'] = x + data['a2goodhundreds']
x = x + 1000
if 1 > data['a2goodthousands']:
data['MyA2Good'] = data['a2goodhundreds']
以上是我写的代码。它有效,但我想确切地了解它为什么有效。最初,我写了它,它奏效了,我继续前进。然后我开始思考为什么它会不断更新?有关更多解释,数据来自只能存储带符号的 16 位的旧 PLC。因此,最大数量为 32,676。由于计数器将很快超过该值,因此每次达到 1000 时,我们都会在“千”计数器中加 1,并重置“百”。不过,这会将我想要查看的实际数字放在两个不同的词中。我在 Ignition 中编写了这段代码,将这两个数字合并到一个位置。
话虽这么说,“千”标签当然从 0 开始,所以底部的 if 语句一直存在,直到第一个 1000 被计算在内,它只查看数百个值。
我理解它的方式是,一旦我的“千”标签加一,那一刻,我的 while 语句条件被等号运算符(x = 1000 和我的标签 * 1000 = 1000)满足,我加 1000 + 我的“Hundreds”计数器并将其存储在新数据标签“MyA2Good”中,然后将 x 加 1000 为 2000。话虽如此,直到我现在在计数器上达到 2000 之前,while 语句不应该再次评估,对吧? 但是,当监视存储在我的标签中的值时,“MyA2Good”随着数百个计数器一次递增 1,标签会不断更新,就好像 while 语句正在不断评估一样,即使评估的条件不再为真。
代码正在做我想做的事,我只是想弄清楚为什么。