0
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 语句正在不断评估一样,即使评估的条件不再为真。

代码正在做我想做的事,我只是想弄清楚为什么。

4

1 回答 1

1

whilex变量小于或等于 data['a2goodthousands'] * 1000:while 循环正在运行。每次运行它,data['MyA2Good']变量的值都会更改为,x + ['a2goodhundreds']并且在分配之后 x 是 a x + 1000。当x将大于或等于data['a2goodthousands'] * 1000while 循环结束并执行 if 语句时。如果1大于变量data['a2goodthousands']等于data['MyA2Good']data['a2goodhundreds']

于 2020-07-13T11:21:03.753 回答