отправлено / posted
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
Сообщения / Posts 17345 | Из / From: Россия
| IP / IP: IP адрес / IP address |
Olga Shabalina
Forum Haunter / Завсегдатай форума
Участник № / Member № 1126
отправлено / posted
В этом случае с каждым тактом происходит циклическое добавление значений каналов к Q0, т.е. реализовано выражение Q0=Q0+I1+I2+I3!!!! А мне нужно просто сумма I, I=1..n
отправлено / posted
Вы не поняли - выход блока формируется в рамках одного такта, ведь никто же не говорит, что IL-код блока вычисляется как одна строчка за один такт! Поэтому при вычислении блока Вы получите сумму всех трех входов, а не их последовательные слагаемые. IL - это ОДНОАДРЕСНЫЙ язык программирования, в нем недопустимы конструкции вида: Q0=I1+I2+I3
Сообщения / Posts 17345 | Из / From: Россия
| IP / IP: IP адрес / IP address |
Olga Shabalina
Forum Haunter / Завсегдатай форума
Участник № / Member № 1126
Olga Shabalina
Forum Haunter / Завсегдатай форума
Участник № / Member № 1126
отправлено / posted
Невнимательно прочитала Ваш ответ, а Вы, вероятно мой...
Код Q0+I1 Q0+I2 Q0+I3
дает при всех единицах последовательные результаты: 3 6 9 Проверяла!!! То есть, программа реализует функцию Q0=Q0+I1+I2+I3 а мне нужна Q0=I1+I2+I3 !!!!!!!
Сообщения / Posts 141 | Из / From: Russia
| IP / IP: IP адрес / IP address |
отправлено / posted
Правильно, выход блока же не сбрасывается от вызова к вызову, значит надо сделать так: F0+I1 F1+I2 F2+I3 Q0=F0
Суммировать через динамическую переменную, она при каждом вызове обнуляется. Но можно и выход обнулять в самом начале программы.
Сообщения / Posts 17345 | Из / From: Россия
| IP / IP: IP адрес / IP address |