This is topic Присвоение значения канала in forum Языки программирования (IL/FBD) / Algorithm Programming Languages at Форум TRACE MODE: техническая поддержка.
Не присваивается Q0 значение канала 0:Discret:1 Если написать "Q0=100" - присваивается!
Posted by Olga Shabalina (Участник № / Member № 1126) on :
Извините, вопрос снимается.
Возник новый: как сложить несколько значений?
Пишу:
PROGRAM VAR_IN_OUT Q0 BigSumma In I1 0:Discret:1 I2 0:Discret:31 I3 0:Discret:79 END_VAR Q0 = I1 + I2 + I3 EXIT
В результате Q0 принимает значение только I1 !!!
В чем ошибка?
Спасибо!
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
PROGRAM VAR_IN_OUT Q0 BigSumma In I1 0:Discret:1 I2 0:Discret:31 I3 0:Discret:79 END_VAR Q0+I1 Q0+I2 Q0+I3 EXIT
Posted by Olga Shabalina (Участник № / Member № 1126) on :
В этом случае с каждым тактом происходит циклическое добавление значений каналов к Q0, т.е. реализовано выражение Q0=Q0+I1+I2+I3!!!! А мне нужно просто сумма I, I=1..n
Q0=I1+I2+I3
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
Вы не поняли - выход блока формируется в рамках одного такта, ведь никто же не говорит, что IL-код блока вычисляется как одна строчка за один такт! Поэтому при вычислении блока Вы получите сумму всех трех входов, а не их последовательные слагаемые. IL - это ОДНОАДРЕСНЫЙ язык программирования, в нем недопустимы конструкции вида: Q0=I1+I2+I3
Posted by Olga Shabalina (Участник № / Member № 1126) on :
Хорошо, как же мне на IL написать программу, вычисляющую сумму?
Posted by Olga Shabalina (Участник № / Member № 1126) on :
Невнимательно прочитала Ваш ответ, а Вы, вероятно мой...
Код Q0+I1 Q0+I2 Q0+I3
дает при всех единицах последовательные результаты: 3 6 9 Проверяла!!! То есть, программа реализует функцию Q0=Q0+I1+I2+I3 а мне нужна Q0=I1+I2+I3 !!!!!!!
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
Правильно, выход блока же не сбрасывается от вызова к вызову, значит надо сделать так: F0+I1 F1+I2 F2+I3 Q0=F0
Суммировать через динамическую переменную, она при каждом вызове обнуляется. Но можно и выход обнулять в самом начале программы.
Posted by Kuznetsov (Участник № / Member № 360) on :
Используйте код:
Q0 = I1 Q0 + I2 Q0 + I3
Posted by Olga Shabalina (Участник № / Member № 1126) on :
Не поможет. Поможет в начале Q0=0
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
Q0 = I1 Q0 + I2 Q0 + I3
Тоже верный код и должен работать правильно.
Posted by Olga Shabalina (Участник № / Member № 1126) on :
Действительно, работает Правильно, какая разница, что присваивать Q1 в начале