а делает ли? Хотя без разницы, вы присваиваете in_p = in_c и оно становится true.
а делает ли? Хотя без разницы, вы присваиваете in_p = in_c и оно становится true.
В скриптах и там и тут у меня все верно сделано. Только там без дополнительных скобок не работает, а здесь работает. Это означает, что компиляторы там и тут по разному код интерпретируют.
Надо прогнать мой код, тот что в CoDeSys, через другие компиляторы. Сдается мне, что в FastScript 1.9, C++Script компилятор плохо реализован.
Последний раз редактировалось Тимур Назарбоев; 04.10.2023 в 09:06.
Проблема в вашем коде может быть связана с последовательностью операций. Кажется, что in_p устанавливается в in_c до выполнения инкремента out1 или out2, что может привести к нежелательным изменениям.
Попробуйте переупорядочить ваш код следующим образом:
python
Copy code
Bool in_c;
Bool in_p;
int out1;
int out2;
in_c = readValue("_1"); // Чтение состояния кнопки
if (in_c == true && in_p == false) {
out1++; // Инкремент out1, только если кнопка была нажата и до этого не была нажата
writeValue("_2", out1); // Вывод значения
}
if (in_c == false && in_p == true) {
out2++; // Инкремент out2, только если кнопка была отжата и до этого была нажата
writeValue("_3", out2); // Вывод значения
}
in_p = in_c; // Обновление предыдущего состояния кнопки
Этот код гарантирует, что инкремент out1 происходит только при нажатии кнопки, а инкремент out2 - только при ее отжатии.
От исходного (#1) ничем не отличается. И так же каждый цикл колбасицца от 2 до 4 проверок. Причем за каким то буля с булем (раньше сказали). И много лишнего
Bool p;
if(readValue("_1") != p){ //дергаемся по изменению
if (p = !p) {out1++; ...;} //нажали
else {out2++; ...;}; //отжали
}
Скобки гарантируют всё/всегда/везде. Зачем пыжится с каким-то "переупорядочиванием" кода ?