Просмотр полной версии : test.0 := NOT test.1 := TRUE. На ПЛК test равняется 3, под симулятором - 2
Следите за руками:
VAR
test: WORD;
END_VAR
test.0 := NOT test.1 := TRUE;На ПЛК110 test = 3, а на симуляторе test = 2. Делаем автоматическое (!) преобразование в IL:
LD TRUE
ST test.1
NOT
ST test.0Запускаем. Теперь на ПЛК test тоже равняется 2.
Чо за хрень?
Те кто писал компилятор, работают по старинке, одно присвоение после точка с запятой. На подобные комбинации ни кто толком не обращал внимание на тестировании,это не редко случается
Следите за руками:
VAR
test: WORD;
END_VAR
test.0 := NOT test.1 := TRUE;На ПЛК110 test = 3, а на симуляторе test = 2. Делаем автоматическое (!) преобразование в IL:
LD TRUE
ST test.1
NOT
ST test.0Запускаем. Теперь на ПЛК test тоже равняется 2.
Чо за хрень?
Не надо заумных конструкций (test.0 := NOT test.1 := TRUE), и все нормально будет.
Имхо, ошибка компилятора не в обработке, а в том что вообще не посчитал ошибочным весьма не очевидное выражение "test.0 := NOT test.1 := TRUE"
Присвоение справа налево в кучу переменных - это нормально и удобно, но в переменные, а не в операцию. "NOT test.1" явно операция.
Наверное было бы более очевидным test.0 := NOT (test.1 := TRUE), в чего и превращается iL и, кажется, есть в КДС3
К слову семен такую конструкцию непропускает даже со скобками и оговорился не компилятор, а интерпретатор
Третий кодесис тоже не пропускает. Дело не в этом. Интересно то, что с одним компилятором получаются два разных результата. Понятно, что кодогенераторы разные, но у них на входе уже разобранные предложения обычно.
Тогда внесём это в копилку где уже есть sizeof и будем продолжать следить за Вашими руками ))
PS
...
...
...
"Ж-ж-ж-ж-ж кр4?(jkvo4#%*C*()!" - сказала японская бензопила.
"А-а-а-а, б..я!" - сказали рабочие
Powered by vBulletin® Version 4.2.3 Copyright © 2024 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot