This is topic Присвоение значения канала in forum Языки программирования (IL/FBD) / Algorithm Programming Languages at Форум TRACE MODE: техническая поддержка.


To visit this topic, use this URL:
http://forum.adastra.ru/ultimatebb.php/ubb/get_topic/f/11/t/000069.html

Posted by Olga Shabalina (Участник № / Member № 1126) on :
 
Здравствуйте.
Что неверно в моей программе?

PROGRAM
VAR_IN_OUT
Q0 BigSumma In

END_VAR
Q0=0:Discret:1 R
EXIT

Не присваивается 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-код блока вычисляется как одна строчка за один такт! [Улыбка / Smile]
Поэтому при вычислении блока Вы получите сумму всех трех входов, а не их последовательные слагаемые. 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
[clever / умный]
 
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
 
Q0 = I1
Q0 + I2
Q0 + I3

Тоже верный код и должен работать правильно.
 
Posted by Olga Shabalina (Участник № / Member № 1126) on :
 
Действительно, работает [Улыбка / Smile]
Правильно, какая разница, что присваивать Q1 в начале

Спасибо! [Усмешка / Big Grin]
 


Новости АСУ ТП / News | SCADA / HMI | Обучение / Trainings | Свяжитесь с нами / Contact Us



Powered by Infopop Corporation
UBB.classic™ 6.7.2