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


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

Posted by Paulo (Участник № / Member № 3020) on :
 
Здравствуйте!
У меня такая проблема. Сделал программу с 515 аргументами, всё работает. Понадобилось расширить программу добавил аргументов до 955 - программа перестала работать, точнее в отладчике она запускается, всё хорошо, а в профайлере каналу, вызывающему её выставляется недостоверность и он отключается [Неодобрение / Frown] Опытным путём выяснил, что всё работает при 895 аргументах, а при 896 уже не работает.
Все аргументы имеют тип данных Real. В хелпе заявлено, что «Количество аргументов канала вызова программы ограничено; в случае 4-байтовых аргументов: в Windows – 1024». Но у меня не работает уже при 896.
При 895 аргументах изменил тип данных одного из аргументов с Real (4 байта) на Lreall (8 байт) опять перестало работать — отсюда сделал вывод, что скорей всего не хватает памяти канала, выделяемой под аргументы (извините, если не правильно выражаюсь). При этом в атрибут I2 (92) пишется 0 — а кода ошибки нет.
Пробовал даже увеличить время цикла, но не помогло (до 10 секунд увеличевал)
Что мне делать? В хелпе написано одно, а на деле оказывается другое ((((( Как узнать сколько реально выделено памяти под аргументы и сколько уже занято?
 
Posted by Karpelyanskiy S.V. (Участник № / Member № 2191) on :
 
Простите пожалуйста за любопытство. Но можно поинтересоваться ради профессионального, так сказать, интереса а какие задачи выполняет Ваша программа с таким количеством аргументов?
 
Posted by Paulo (Участник № / Member № 3020) on :
 
quote:
Отправитель / Originally posted by Karpelyanskiy S.V.:
Простите пожалуйста за любопытство. Но можно поинтересоваться ради профессионального, так сказать, интереса а какие задачи выполняет Ваша программа с таким количеством аргументов?

Задача такая. Есть 56 каналов Float, для каждого из которого нужно задавать по 8 атрибутов (6 границ, множитель, смещение+ читается значение контрольной суммы по каждому каналу (КС)). Значения атрибутов читаются из файла . Т. е. уже нужно 504 аргумента (чтобы в программу передать значения, прочитанные из файла). После сравнения прочитанных КС с рассчитанными КС делается вывод о том, был ли поврежден файл или нет. Если файл не был поврежден, то все атрибуты записываются в каналы + еще 448 атрибутов (в итоге уже 952 атрибутов)+ еще аргументы управления программой 3 шт. [Улыбка / Smile] Вот и получается 955 атрибутов.
 
Posted by Grigorovskih (Участник № / Member № 1915) on :
 
Доброе время суток Господа!

А может легче сделать шаблон программы с восьмью аргументами и вызывать его каждым из 56-ти каналом. Конечно при условии того что обращение к файлу не ведется слишком интенсивно. И раскидать пересчёт этих каналов по 4-м фазам общего цикла монитора, т.е. по 14 каналов в каждой фазе, чтоб разом не кидались читать данные из файла.
 
Posted by Paulo (Участник № / Member № 3020) on :
 
quote:
Отправитель / Originally posted by Grigorovskih:
Доброе время суток Господа!

А может легче сделать шаблон программы с восьмью аргументами и вызывать его каждым из 56-ти каналом. Конечно при условии того что обращение к файлу не ведется слишком интенсивно. И раскидать пересчёт этих каналов по 4-м фазам общего цикла монитора, т.е. по 14 каналов в каждой фазе, чтоб разом не кидались читать данные из файла.

Спасибо. Но к сожалению такой вариант мало пригоден в моем случае т.к. интенсивность обращения к файлу не может превышать 1файл в секунду (об этом можно прочитать здесь http://forum.adastra.ru/ultimatebb.php/ubb/get_topic/f/32/t/000214.html) Получается, что нужно делать 56 обращений, т.е в лучшем случае, если все сразу прочитается правильно, на чтение (и на запись, к стати говоря, тоже) уйдет около минуты. Даже сгруппировав файлы время на чтение и запись увеличивается в разы.
Да и вопрос, по сути, состоит в том — сколько выделяется памяти под аргументы, как узнать сколько еще её осталось, ну или хотя бы как узнать, что она уже закончилась (я об этом узнал экспериментальным путем, да и то не факт, что сделал правильный вывод)?
 
Posted by Grigorovskih (Участник № / Member № 1915) on :
 
Тогда необходимо наверное воспользоваться для целей конфигурирования БД, и через ODBC тянуть эти данные.
Правда если Адастра устранит недочёты по этой теме в релизе 6.06! Хотя, если эта база будет локальная (ну к примеру Access можно использовать) то нормально можно работать.
 
Posted by Paulo (Участник № / Member № 3020) on :
 
Ждать пока будут устранены недочеты - увы это неопределённый срок, а проблему надо решать. Сейчас, как оказалось, если разбивать каналы на группы, то не только время увеличится, но еще придется переделывать графику (((((
А еще был такой глюк - программа не компелируется и не выдаётся никакой ошибки, т.е. нажал кнопку скомпилировать и ничего не произошло. Перезагрузка ТМ ничего не дала. Но тут выход нашёл [clever / умный] Сохранил прогу в библиотеку, удали старую прогу, перезагрузил ТМ, и вставил её из библиотке - заработала [beer / пиво]
Нужно тоже самое попробовать с той программой, где много аргументов [Улыбка / Smile]
 
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
 
Под аргументы программы выделяется 4 КБ памяти. Почему у Вас выделяется, только 3.5 сложно. У Вас все аргументы REAL? Пришлите Ваш проект на адрес hotline3@adastra.ru
 
Posted by Paulo (Участник № / Member № 3020) on :
 
Да, все аргументы REAL. Проект только что отправил. Надеюсь получится разобраться [Пдмигивание / Wink]
 
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
 
К сожалению, действительно сейчас под аргументы программы выделяется 3.5 КБ памяти. Это будет исправлено.

В Вашем случае можно порекомендовать использование функций getAttribute и setAttribute. Это олжно уменьшить кол-во аргументов программы почти в два раза.
 


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



Powered by Infopop Corporation
UBB.classic™ 6.7.2