Форум TRACE MODE: техническая поддержка Послать новую тему / Post New Topic  Послать ответ / Post A Reply
мой профиль / my profile авторизация / login | регистрация / register | поиск / search | часто задаваемые вопросы / faq | начало / forum home

  Следующая старая тема / next oldest topic   Следующая новая тема / next newest topic
» Форум TRACE MODE: техническая поддержка » ТЕХНИЧЕСКАЯ ПОДДЕРЖКА / TECHNICAL SUPPORT TRACE MODE 6 » Языки программирования в TRACE MODE 6 / Algorithm Programming Languages » аргументы и массивы

   
Автор / Author Тема / Topic: аргументы и массивы
mev163
Active Forum Member / Активный участник форума
Участник № / Member № 4235


Icon 5 отправлено / posted      Профиль для / Profile for mev163           Редактировать/удалить сообщение / Edit/Delete Post   Вставить в ответ текст исходного сообщения  / Reply With Quote 
Есть 10 аргументов, например: вход1, вход2 и т.д.
В ST программе создал глобальную переменную массив Arr[1..10].
Приравнял Arr[1]=вход1, Arr[2]=вход2 и т.д.
в программе мне удобно обращаться к элементу массива,
например: for цикл=1 to 10 do Arr[цикл]:=..... ; (алгоритм вычисления сложный)
Писать строчку для каждого аргумента, не удобно : вход1:=... вход2:=.... и т.д.

В конце программы выполняю обратное преобразование
присваиваю вход1, вход2 и т.д. значениям массива.

Все работает, но фактически в программе глобальные переменные дублируют мои аргументы, затрачивается процессорное время на ненужное присвоение.
Не соображу, есть ли красивое решение?

Сообщения / Posts 66 | Из / From: Россия  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
Nico
Forum Professor / Завсегдатай форума
Участник № / Member № 5342


Icon 1 отправлено / posted      Профиль для / Profile for Nico           Редактировать/удалить сообщение / Edit/Delete Post   Вставить в ответ текст исходного сообщения  / Reply With Quote 
а зачем создавать глобальный массив ?
в таких случаях инициализацию массива(или передачу его значений в аргументы ) делают через
функции getAttributeF.setAttributeF

[ 21.06.2012, 13:11: Сообщение отредактировал / Message edited by AdAstra Technical Support ]

Сообщения / Posts 806 | Из / From: Россия  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
mev163
Active Forum Member / Активный участник форума
Участник № / Member № 4235


Icon 1 отправлено / posted      Профиль для / Profile for mev163           Редактировать/удалить сообщение / Edit/Delete Post   Вставить в ответ текст исходного сообщения  / Reply With Quote 
спасибо [Улыбка / Smile]
Сообщения / Posts 66 | Из / From: Россия  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
mev163
Active Forum Member / Активный участник форума
Участник № / Member № 4235


Icon 1 отправлено / posted      Профиль для / Profile for mev163           Редактировать/удалить сообщение / Edit/Delete Post   Вставить в ответ текст исходного сообщения  / Reply With Quote 
как с помощью setAttributeF работать с boolean типом?
почему-то не изменяется, может что не так делаю?

Сообщения / Posts 66 | Из / From: Россия  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
Nico
Forum Professor / Завсегдатай форума
Участник № / Member № 5342


Icon 1 отправлено / posted      Профиль для / Profile for Nico           Редактировать/удалить сообщение / Edit/Delete Post   Вставить в ответ текст исходного сообщения  / Reply With Quote 
через setAttributeI
а если массив boolean то надо использовать
биты и аргумент безнаковый

Сообщения / Posts 806 | Из / From: Россия  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
mev163
Active Forum Member / Активный участник форума
Участник № / Member № 4235


Icon 1 отправлено / posted      Профиль для / Profile for mev163           Редактировать/удалить сообщение / Edit/Delete Post   Вставить в ответ текст исходного сообщения  / Reply With Quote 
выполняю
setAttributeF(19, 1000 , 0);
все равно первый атрибут не изменяется.
пробовал и setAttributeI
у атрибута стоит in/out - uint.

Сообщения / Posts 66 | Из / From: Россия  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
Nico
Forum Professor / Завсегдатай форума
Участник № / Member № 5342


Icon 1 отправлено / posted      Профиль для / Profile for Nico           Редактировать/удалить сообщение / Edit/Delete Post   Вставить в ответ текст исходного сообщения  / Reply With Quote 
1. а если массив boolean то надо использовать
биты и аргумент безнаковый тем боллее что размерность массива < 32

2.
19-правильный ID канала ?
чтение работает ?
программа выполняется ?
в tm6_log и файл профайлера что-нибудь запмсалось ?
у ID=19 поставвить бит отладки
и установить debugon=1000
3 версия TM ?

Сообщения / Posts 806 | Из / From: Россия  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
mev163
Active Forum Member / Активный участник форума
Участник № / Member № 4235


Icon 1 отправлено / posted      Профиль для / Profile for mev163           Редактировать/удалить сообщение / Edit/Delete Post   Вставить в ответ текст исходного сообщения  / Reply With Quote 
чтение прекрасно работает.
программа выполняется.
тм 6.07.2
Создал специально новый проект,
ST программа с одной строкой: setAttributeI(1, 1001 , 122);
результат - 0 .
Можешь прислать текст программы, где работает Setattribute ?

Сообщения / Posts 66 | Из / From: Россия  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
Nico
Forum Professor / Завсегдатай форума
Участник № / Member № 5342


Icon 1 отправлено / posted      Профиль для / Profile for Nico           Редактировать/удалить сообщение / Edit/Delete Post   Вставить в ответ текст исходного сообщения  / Reply With Quote 
текст элементарен


val_i=getAttributeI(1,1000)
setAttributeI(1,1001,val_i);
val_f=val_i
val=setAttributeF(1,1002,val_f);

в 0 аргументе меняем значение руками
значения аргументов куда пишем куда привязаны и как наблюдаем

привязать set к другому атрибуту(например 2) и проверить

привязать set к другому атрибуту(например 140-172) и проверить


через упакованные биты пргрпмма работает быстрее

Сообщения / Posts 806 | Из / From: Россия  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
mev163
Active Forum Member / Активный участник форума
Участник № / Member № 4235


Icon 1 отправлено / posted      Профиль для / Profile for mev163           Редактировать/удалить сообщение / Edit/Delete Post   Вставить в ответ текст исходного сообщения  / Reply With Quote 
не работает, извиняюсь не туда посмотрел. не на тот аргумент.
не работает код.
обновился до 6.08

команда SetAttribute не хочет работать:

PROGRAM
VAR_INOUT ARG_000 : DINT; END_VAR

setAttributeI(1,1000,122);

END_PROGRAM

Сообщения / Posts 66 | Из / From: Россия  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
mev163
Active Forum Member / Активный участник форума
Участник № / Member № 4235


Icon 1 отправлено / posted      Профиль для / Profile for mev163           Редактировать/удалить сообщение / Edit/Delete Post   Вставить в ответ текст исходного сообщения  / Reply With Quote 
Заметил, что SetAttributeI работает для attr_id=1, 2 и т.д. т.е. для реального значения, входного значения и т.д.
не получается изменять аргументы программы.
Вопрос к тех поддержке открыт.
Если возможно,пожалуйста пример на почту: xxx(собака)yyy

[ 18.06.2012, 15:08: Сообщение отредактировал / Message edited by AdAstra Technical Support ]

Сообщения / Posts 66 | Из / From: Россия  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
Nico
Forum Professor / Завсегдатай форума
Участник № / Member № 5342


Icon 1 отправлено / posted      Профиль для / Profile for Nico           Редактировать/удалить сообщение / Edit/Delete Post   Вставить в ответ текст исходного сообщения  / Reply With Quote 
какому каналу задаются аргументы?
связаны с чем-нибудь аргументы
попробуйте через атрибуты 140-172 они соответсвуют аргументам начиная с 0

Сообщения / Posts 806 | Из / From: Россия  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
mev163
Active Forum Member / Активный участник форума
Участник № / Member № 4235


Icon 1 отправлено / posted      Профиль для / Profile for mev163           Редактировать/удалить сообщение / Edit/Delete Post   Вставить в ответ текст исходного сообщения  / Reply With Quote 
создал новый чистый проект, одну программу st.
4 переменных.
PROGRAM
VAR_OUTPUT ARG_000 : DINT; END_VAR
VAR_OUTPUT ARG_001 : DINT; END_VAR
VAR_OUTPUT ARG_002 : DINT; END_VAR
VAR_OUTPUT ARG_003 : DINT; END_VAR
// ниже описаны глобальные переменные
UDINT_ch_id=1;
UINT_attr_id=1001;
DINT_value=121;
//
//сама функция:
setAttributeI(UDINT_ch_id,UINT_attr_id,DINT_value);
END_PROGRAM

по-подобию getAttributeF, пытался обращаться к аргументам программы UINT_attr_id= 1000 + порядковый номер нужного мне аргумента в программе.
аргументы st программы ни с чем не связаны. Результат - 0.
При UINT_attr_id=140 - результат 0.
Не могли бы прислать работающий пример?

Сообщения / Posts 66 | Из / From: Россия  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
Nico
Forum Professor / Завсегдатай форума
Участник № / Member № 5342


Icon 1 отправлено / posted      Профиль для / Profile for Nico           Редактировать/удалить сообщение / Edit/Delete Post   Вставить в ответ текст исходного сообщения  / Reply With Quote 
то есть производится попытка setAtribute изменить
значения аргументов у программы в которой данная функция вызывается ?

создайте еше 1 call,содержащий данные и меняйте в нем(успех ходит где-то рядом )

Сообщения / Posts 806 | Из / From: Россия  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
mev163
Active Forum Member / Активный участник форума
Участник № / Member № 4235


Icon 1 отправлено / posted      Профиль для / Profile for mev163           Редактировать/удалить сообщение / Edit/Delete Post   Вставить в ответ текст исходного сообщения  / Reply With Quote 
именно так.
хотел упростить программу (см. самое первое сообщение)

Сообщения / Posts 66 | Из / From: Россия  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
Nico
Forum Professor / Завсегдатай форума
Участник № / Member № 5342


Icon 1 отправлено / posted      Профиль для / Profile for Nico           Редактировать/удалить сообщение / Edit/Delete Post   Вставить в ответ текст исходного сообщения  / Reply With Quote 
те заработало ?
Сообщения / Posts 806 | Из / From: Россия  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
mev163
Active Forum Member / Активный участник форума
Участник № / Member № 4235


Icon 1 отправлено / posted      Профиль для / Profile for mev163           Редактировать/удалить сообщение / Edit/Delete Post   Вставить в ответ текст исходного сообщения  / Reply With Quote 
нет, не заработало.
quote:
значения аргументов у программы в которой данная функция вызывается ?

Именно так.
Хочу получить возможность обращаться к аргументам программы как к элементам массива.
Чтение получается, а запись - нет.
Жду комментариев и помощи Адастры.
[Недоумение / Confused]

Сообщения / Posts 66 | Из / From: Россия  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
Nico
Forum Professor / Завсегдатай форума
Участник № / Member № 5342


Icon 1 отправлено / posted      Профиль для / Profile for Nico           Редактировать/удалить сообщение / Edit/Delete Post   Вставить в ответ текст исходного сообщения  / Reply With Quote 
Id=1 call.program(ST)

val_f=100.;
setatributeF(2,1000,val_f);
val_f=101.1;
setatributeF(2,1001,val_f);


Id=2 call.chgr (содержит аргументы ни к чему не привязанные)

Сообщения / Posts 806 | Из / From: Россия  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
mev163
Active Forum Member / Активный участник форума
Участник № / Member № 4235


Icon 1 отправлено / posted      Профиль для / Profile for mev163           Редактировать/удалить сообщение / Edit/Delete Post   Вставить в ответ текст исходного сообщения  / Reply With Quote 
не понял [Неодобрение / Frown] , никогда не использовал CALL. если можно, чуть подробнее, не соображу...

нужно создать Call с id=2 поставить в параметрах call.chgr ?

Сообщения / Posts 66 | Из / From: Россия  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
Nico
Forum Professor / Завсегдатай форума
Участник № / Member № 5342


Icon 1 отправлено / posted      Профиль для / Profile for Nico           Редактировать/удалить сообщение / Edit/Delete Post   Вставить в ответ текст исходного сообщения  / Reply With Quote 
чем вызывается шаблоны -каналами call
каналы класса call могут только содержать данные(например chgreq)
создайте в узле такой канал и назначьте ему функцию

Сообщения / Posts 806 | Из / From: Россия  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
mev163
Active Forum Member / Активный участник форума
Участник № / Member № 4235


Icon 1 отправлено / posted      Профиль для / Profile for mev163           Редактировать/удалить сообщение / Edit/Delete Post   Вставить в ответ текст исходного сообщения  / Reply With Quote 
спасибо, сейчас попробую.
Создал Call ChGroupReq параметр поставил 16.
создал 4 аргумента.
Результат:
В ID=2: аргументы скопировались из ID=1 (из ST программы). В Id=2 изменяется аргумент по SetAttribute (2, 1001, 123), но это изменение не передается обратно в аргументы ST программы.

Сообщения / Posts 66 | Из / From: Россия  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
Nico
Forum Professor / Завсегдатай форума
Участник № / Member № 5342


Icon 1 отправлено / posted      Профиль для / Profile for Nico           Редактировать/удалить сообщение / Edit/Delete Post   Вставить в ответ текст исходного сообщения  / Reply With Quote 
и не будет тк перед вызовом программы TM делает
срез значений всех аргументов при выходе создается
срез выходных переменных который записывается в аргументы тира OUTPUT и затирают асинхронные присвоения к которым относятся выше используемые функции(имейте входа в call.chgr и результат туда же а алгоритм пересылки содержит программа)

Сообщения / Posts 806 | Из / From: Россия  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
mev163
Active Forum Member / Активный участник форума
Участник № / Member № 4235


Icon 1 отправлено / posted      Профиль для / Profile for mev163           Редактировать/удалить сообщение / Edit/Delete Post   Вставить в ответ текст исходного сообщения  / Reply With Quote 
у меня сейчас 350 аргументов (по 10 аргументов для массива).
получается, что проще оставить массив из глобальных переменных. в начале программы и в конце присвоить ему значения аргументов, чем перепривязывать их... Хотел сократить и оптимизировать код, видимо не получилось.
Т.е. получается что SetAttribute не может изменить аргументы той программы из которой она вызывалась?

PS Как вы думаете насколько уменьшится время выполнения одного цикла программы, если убрать из программы около 350 строк присвоения глобальных переменных аргументам, заменив на алгоритм описанный выше?

Сообщения / Posts 66 | Из / From: Россия  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
Nico
Forum Professor / Завсегдатай форума
Участник № / Member № 5342


Icon 1 отправлено / posted      Профиль для / Profile for Nico           Редактировать/удалить сообщение / Edit/Delete Post   Вставить в ответ текст исходного сообщения  / Reply With Quote 
Верно и это не явдяется ошибкой
Использование глобальных переменных эквивалентно
использованию дополнительных аргументов

еще раз намекаю бинарные(bool) переменные оптимальнее использовать упакованными

Сообщения / Posts 806 | Из / From: Россия  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
mev163
Active Forum Member / Активный участник форума
Участник № / Member № 4235


Icon 1 отправлено / posted      Профиль для / Profile for mev163           Редактировать/удалить сообщение / Edit/Delete Post   Вставить в ответ текст исходного сообщения  / Reply With Quote 
все же, жду ответа от тех поддержки по поводу SetAttribute.
Про boolean - ясно.
Спасибо за помощь Nico [Улыбка / Smile]

Сообщения / Posts 66 | Из / From: Россия  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
АдАстра. Техподдержка
Administrator
Участник № / Member № 4


Icon 1 отправлено / posted      Профиль для / Profile for АдАстра. Техподдержка           Редактировать/удалить сообщение / Edit/Delete Post   Вставить в ответ текст исходного сообщения  / Reply With Quote 
"Т.е. получается что SetAttribute не может изменить аргументы той программы из которой она вызывалась?"

Верно. Не стоит пытаться функцией SetAttribute задавать значения аргументов программы, в которой она вызывается.
В конце пересчета канала Call.Program выполняется запись во все его аргументы Output , в результате чего будут затерты значения, выставленные асинхронными функциями SetAtribute (выше об этом правильно упомянул Nico).

В данном случае можно создать канал Call с типом вызова ChGroupReq и работать с его аргументами из программы, используя функции SetAttribute и GetAttribute.

Спасибо Nico за грамотные ответы.

Сообщения / Posts 17106 | Из / From: Россия  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
mev163
Active Forum Member / Активный участник форума
Участник № / Member № 4235


Icon 1 отправлено / posted      Профиль для / Profile for mev163           Редактировать/удалить сообщение / Edit/Delete Post   Вставить в ответ текст исходного сообщения  / Reply With Quote 
вопрос про эффективность:
с точки зрения эффективности использования процессорного времени, что лучше канал Call или глобальными переменными массивы создавать?

Сообщения / Posts 66 | Из / From: Россия  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
АдАстра. Техподдержка
Administrator
Участник № / Member № 4


Icon 1 отправлено / posted      Профиль для / Profile for АдАстра. Техподдержка           Редактировать/удалить сообщение / Edit/Delete Post   Вставить в ответ текст исходного сообщения  / Reply With Quote 
Можно сказать, что в целом ресурсоемкость обоих подходов одинакова.
Сообщения / Posts 17106 | Из / From: Россия  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
   

Quick Reply
Сообщение / Message:

HTML код не разрешен. / HTML is not enabled.
UBB код разрешен. / UBB Code is enabled.

Значки Graemlins / Instant Graemlins
   


Послать новую тему / Post New Topic  Послать ответ / Post A Reply Закрыть тему / Close Topic   Feature Topic   Переместить топик / Move Topic   Удалить топик / Delete Topic Следующая старая тема / next oldest topic   Следующая новая тема / next newest topic
 - Printer-friendly view of this topic
Перейти к / Hop To


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



Powered by Infopop Corporation
UBB.classic™ 6.7.2