Paulo
Junior Member / Новичок
Участник № / Member № 3020
отправлено / posted
Здравствуйте! У меня такая проблема. Сделал программу с 515 аргументами, всё работает. Понадобилось расширить программу добавил аргументов до 955 - программа перестала работать, точнее в отладчике она запускается, всё хорошо, а в профайлере каналу, вызывающему её выставляется недостоверность и он отключается Опытным путём выяснил, что всё работает при 895 аргументах, а при 896 уже не работает. Все аргументы имеют тип данных Real. В хелпе заявлено, что «Количество аргументов канала вызова программы ограничено; в случае 4-байтовых аргументов: в Windows – 1024». Но у меня не работает уже при 896. При 895 аргументах изменил тип данных одного из аргументов с Real (4 байта) на Lreall (8 байт) опять перестало работать — отсюда сделал вывод, что скорей всего не хватает памяти канала, выделяемой под аргументы (извините, если не правильно выражаюсь). При этом в атрибут I2 (92) пишется 0 — а кода ошибки нет. Пробовал даже увеличить время цикла, но не помогло (до 10 секунд увеличевал) Что мне делать? В хелпе написано одно, а на деле оказывается другое ((((( Как узнать сколько реально выделено памяти под аргументы и сколько уже занято?
Сообщения / Posts 9 | Из / From: Россия
| IP / IP: IP адрес / IP address |
Karpelyanskiy S.V.
Forum Member / Участник форума
Участник № / Member № 2191
отправлено / posted
Простите пожалуйста за любопытство. Но можно поинтересоваться ради профессионального, так сказать, интереса а какие задачи выполняет Ваша программа с таким количеством аргументов?
Сообщения / Posts 56 | Из / From: Россия
| IP / IP: IP адрес / IP address |
Paulo
Junior Member / Новичок
Участник № / Member № 3020
отправлено / posted
quote:Отправитель / Originally posted by Karpelyanskiy S.V.: Простите пожалуйста за любопытство. Но можно поинтересоваться ради профессионального, так сказать, интереса а какие задачи выполняет Ваша программа с таким количеством аргументов?
Задача такая. Есть 56 каналов Float, для каждого из которого нужно задавать по 8 атрибутов (6 границ, множитель, смещение+ читается значение контрольной суммы по каждому каналу (КС)). Значения атрибутов читаются из файла . Т. е. уже нужно 504 аргумента (чтобы в программу передать значения, прочитанные из файла). После сравнения прочитанных КС с рассчитанными КС делается вывод о том, был ли поврежден файл или нет. Если файл не был поврежден, то все атрибуты записываются в каналы + еще 448 атрибутов (в итоге уже 952 атрибутов)+ еще аргументы управления программой 3 шт. Вот и получается 955 атрибутов.
Сообщения / Posts 9 | Из / From: Россия
| IP / IP: IP адрес / IP address |
Grigorovskih
Forum Professor / Завсегдатай форума
Участник № / Member № 1915
отправлено / posted
Доброе время суток Господа!
А может легче сделать шаблон программы с восьмью аргументами и вызывать его каждым из 56-ти каналом. Конечно при условии того что обращение к файлу не ведется слишком интенсивно. И раскидать пересчёт этих каналов по 4-м фазам общего цикла монитора, т.е. по 14 каналов в каждой фазе, чтоб разом не кидались читать данные из файла.
Сообщения / Posts 362 | Из / From: Россия
| IP / IP: IP адрес / IP address |
Paulo
Junior Member / Новичок
Участник № / Member № 3020
отправлено / posted
quote:Отправитель / Originally posted by Grigorovskih: Доброе время суток Господа!
А может легче сделать шаблон программы с восьмью аргументами и вызывать его каждым из 56-ти каналом. Конечно при условии того что обращение к файлу не ведется слишком интенсивно. И раскидать пересчёт этих каналов по 4-м фазам общего цикла монитора, т.е. по 14 каналов в каждой фазе, чтоб разом не кидались читать данные из файла.
Спасибо. Но к сожалению такой вариант мало пригоден в моем случае т.к. интенсивность обращения к файлу не может превышать 1файл в секунду (об этом можно прочитать здесь http://forum.adastra.ru/ultimatebb.php/ubb/get_topic/f/32/t/000214.html) Получается, что нужно делать 56 обращений, т.е в лучшем случае, если все сразу прочитается правильно, на чтение (и на запись, к стати говоря, тоже) уйдет около минуты. Даже сгруппировав файлы время на чтение и запись увеличивается в разы. Да и вопрос, по сути, состоит в том — сколько выделяется памяти под аргументы, как узнать сколько еще её осталось, ну или хотя бы как узнать, что она уже закончилась (я об этом узнал экспериментальным путем, да и то не факт, что сделал правильный вывод)?
Сообщения / Posts 9 | Из / From: Россия
| IP / IP: IP адрес / IP address |
Grigorovskih
Forum Professor / Завсегдатай форума
Участник № / Member № 1915
отправлено / posted
Тогда необходимо наверное воспользоваться для целей конфигурирования БД, и через ODBC тянуть эти данные. Правда если Адастра устранит недочёты по этой теме в релизе 6.06! Хотя, если эта база будет локальная (ну к примеру Access можно использовать) то нормально можно работать.
Сообщения / Posts 362 | Из / From: Россия
| IP / IP: IP адрес / IP address |
Paulo
Junior Member / Новичок
Участник № / Member № 3020
отправлено / posted
Ждать пока будут устранены недочеты - увы это неопределённый срок, а проблему надо решать. Сейчас, как оказалось, если разбивать каналы на группы, то не только время увеличится, но еще придется переделывать графику ((((( А еще был такой глюк - программа не компелируется и не выдаётся никакой ошибки, т.е. нажал кнопку скомпилировать и ничего не произошло. Перезагрузка ТМ ничего не дала. Но тут выход нашёл Сохранил прогу в библиотеку, удали старую прогу, перезагрузил ТМ, и вставил её из библиотке - заработала Нужно тоже самое попробовать с той программой, где много аргументов
Сообщения / Posts 9 | Из / From: Россия
| IP / IP: IP адрес / IP address |
отправлено / posted
Под аргументы программы выделяется 4 КБ памяти. Почему у Вас выделяется, только 3.5 сложно. У Вас все аргументы REAL? Пришлите Ваш проект на адрес hotline3@adastra.ru
Сообщения / Posts 17322 | Из / From: Россия
| IP / IP: IP адрес / IP address |
Paulo
Junior Member / Новичок
Участник № / Member № 3020
отправлено / posted
Да, все аргументы REAL. Проект только что отправил. Надеюсь получится разобраться
Сообщения / Posts 9 | Из / From: Россия
| IP / IP: IP адрес / IP address |
отправлено / posted
К сожалению, действительно сейчас под аргументы программы выделяется 3.5 КБ памяти. Это будет исправлено.
В Вашем случае можно порекомендовать использование функций getAttribute и setAttribute. Это олжно уменьшить кол-во аргументов программы почти в два раза.
Сообщения / Posts 17322 | Из / From: Россия
| IP / IP: IP адрес / IP address |