На главную страницу
Русский English
 


Поддержка
Форум
Техподдержка
Закрытый разделПерсональная

Авторизация

Запомнить меня на этом компьютере
  Забыли свой пароль?
  Регистрация



Поиск по сайту


Подписка

Изменение параметров

Hits 67418376
9726
Hosts 3608937
1974
Visitors 53570919
9389

111


Главная / Поддержка / Форумы / Макро

Форум «Макро»

Версия для печати Версия для печати

Список форумов
Новые темы
Список тем
Поиск по форумам
Помощь
Войти
Регистрация


Тема: «Rastrwin/Excel/Matlab » в форуме: Макро   Просмотров: 26120
 
Михаил Одинцов
Постоянный посетитель
 
Всего сообщений: 148
Дата регистрации: 22.07.2008
Создано: 28.09.2010 17:38:00
 
 
В общем,мне перестало хватать возможностей связки Excel/Rastrwin, т.е. большинство макросов я пишу в экселе и он через VBA колдует с растром, но в экселе слабый математичекий аппарат, поэтому хотелось бы подключить возможности матлаба. В общем это нужно для выполнения очень большого количества сложных расчетов, вручную сделать их нереально. Собственно связь экселя и растра не проблема, вопрос в матлабе, в этой теме я буду писать свои попытки и идеи, но т.к. программирование не моя сильная сторона, то надеюсь кто-то заинтересуется и поможет создать небольшой примерчик матлаб/растр и т.д.
В общем идей две:
1) работаем в экселе и вызываем растр и матлаб из экселя. (Excel link)
По этому пункту пока не работал.
2) работаем в матлабе и вызываем растр из матлаба
Здесь получилось(похоже на то) открыть режимный файл из матлаба(надо создать м-файл):


Rastr = actxserver('Astra.Rastr')­;
shabl1 = 'C:\Program Files\RastrWin\SHABLON\ре­жим.rg2';
File1='C:\Макро\Тест Для МК(version 1)\Копия Урал_зима_max_2010_ees.rg­2';
Rastr.Load( 1, File1, shabl1);
t1 = Rastr.get;

Только не понимаю, как вытащить данные из таблиц

Полезная ссылка:
http://www.mathworks.com/­help/techdoc...#f16-54223­
 
Профиль
Наверх
Александр Александров
Администратор
 
Всего сообщений: 659
Дата регистрации: 31.05.2008
Создано: 28.09.2010 18:26:43
 
 
Можно начать с:
Код

RastrTables = Rastr.Tables;
RastrTable_node = RastrTables.Item('node');­
RastrTable_node.SetSel('s­ta=0');

и дальше по аналогии.
 
Профиль
Наверх
Михаил Одинцов
Постоянный посетитель
 
Всего сообщений: 148
Дата регистрации: 22.07.2008
Создано: 28.09.2010 19:41:24
 
 
Спасибо за ответ, просто по аналогии как раз и неполучается, наверно это не сложно, просто я в этом слабо разбираюсь, попробовал

Код

    RastrTables = Rastr.Tables;
    RastrTable_node = RastrTables.Item('node');­
    RastrTable_node.SetSel('s­ta=0');
    RastrTable_node.DelRows
    Rastr.Save(File1, shabl1);


Но ругается на удаление.
No appropriate method, property, or field DelRows for class
Interface.astra_1.0_Type_­Library.ITable.
При этом метод Setsel выполняет, и вроде даже сохраняет (т.к. изменения я сделать не могу, то не проверить действительно ли это так)

Я никак не могу понять, как сделать хотя бы одно изменение или вытащить данные, т.е. изменить нагрузку в узле например и сохранить. Если у Вас есть возможность сделать такой пример, буду очень благодарен.
В принципе одно решение удалось найти, работать с Матлабом через VBA из экселя, т.е. отправлять туда переменные и их вычислять и забирать обратно, только надо посмотреть вообще скорость таких действий, слишком много накручено.

Set Matlab = CreateObject("matlab.appl­ication")

t = Matlab.PutWorkspaceData("­A", "base", ny_t.Z(i))
t = Matlab.Execute("B=A*rand(­1,1)")
Cells(i + 6, 3).Value = Matlab.GetVariable("B", "base")

P.S. Режим тоже посчитался, удалось получить, что он сходится, т.е. фактически мне не понятно как получить в переменные столбцы с параметрами и как вызывать их значения и менять их, все время вылезает Index exceeds matrix dimensions. Может проблема в том, что в матлабе размер столбца начинается с 1 а в растре с 0?? Или в том, что я не знаю правильного синтаксиса.
 
Профиль
Наверх
Михаил Реутов
Постоянный посетитель
 
Всего сообщений: 224
Дата регистрации: 21.11.2007
Создано: 28.09.2010 23:09:05
 
 
Цитата
Михаил Одинцов пишет:
В общем это нужно для выполнения очень большого количества сложных расчетов, вручную сделать их нереально.
Интересно! Какие "сложные" расчеты Вы имеете ввиду?


 
Профиль
Наверх
Михаил Одинцов
Постоянный посетитель
 
Всего сообщений: 148
Дата регистрации: 22.07.2008
Создано: 29.09.2010 13:25:39
 
 
Цитата
Михаил Реутов пишет:
Цитата
Михаил Одинцов пишет:
В общем это нужно для выполнения очень большого количества сложных расчетов, вручную сделать их нереально.
Интересно! Какие "сложные" расчеты Вы имеете ввиду?


Я так написал, чтобы не посоветовали использовать просто другие форматы в качестве обмена, экспорт в txt например, т.е. чтобы написанный макрос делал расчеты без моего участия.

Планировалось применять в научной области (апробация некоторых идей, которые есть только на бумаге), а не только в расчетах режимов, конкретно определенного применения пока нет, есть только мысли и желания=)
Просто MATLAB чаще используется и намного сильнее и удобнее того же Excel, например в матричной области, не представляю как выполнить сингулярное разложение и вообще какие-нибудь операции с матрицами в Excel, ведь большинство из них основано на методах приближения, писать специальный модуль - глупость, быстрее разобратся и подключить MATLAB. Хранение и вызов переменных и модулей тоже будет плюсом.

 
Профиль
Наверх
Александр Александров
Администратор
 
Всего сообщений: 659
Дата регистрации: 31.05.2008
Создано: 29.09.2010 13:50:36
 
 
Матфайл замены всех нагрузок узлов с номером более 10000 на 13 МВт и сохранение файла.

Вот, что у меня получилось:

Код

clc
clear global;
Rastr = actxserver('Astra.Rastr')­;
Rastr.Load( 1, 'C:projectsKZInvestTKZ_30­00_DataRDU_SEMY_NETMakeNo­nSymmреальная схема части РДУ\rdu_1_.rg2', '' );
RastrTables = Rastr.Tables;
RastrTable_node = RastrTables.Item('node');­
node_Cols = RastrTable_node.Cols;
node_Col_pn = node_Cols.Item('pn');
RastrTable_node.SetSel('n­y>10000');
CurrentRow_node = RastrTable_node.get( 'FindNextSel', -1 );
while( CurrentRow_node ~= -1 )
    node_Col_pn.set('Z', CurrentRow_node , 13 )
    CurrentRow_node = RastrTable_node.get('Find­NextSel', CurrentRow_node );
end
Rastr.Save(  'C:Tempprank', '' );
disp('ok');

Сильно помогло чтение:
MatLabHelp

Общее впечатление, что работа с КОМ в МатЛаб не совсем привычна пользователю VBA.
 
Профиль
Наверх
Михаил Одинцов
Постоянный посетитель
 
Всего сообщений: 148
Дата регистрации: 22.07.2008
Создано: 29.09.2010 14:09:28
 
 
Спасибо большое, кажется я понял как это работает. Теперь только надо подумать и потестировать, что оптимальнее - работать MATLAB/Rastrwin или MATLAB/Excel/Rastrwin.
Думаю в этой теме теперь есть все для связок с MATLAB и из MATLAB используя VBA, можно считать ее закрытой.
 
Профиль
Наверх
Роман Язенин
Заглянувший
 
Всего сообщений: 7
Дата регистрации: 28.02.2011
Создано: 28.02.2011 14:07:54
 
 
Уважаемые форумчане!
Возникла проблема с запуском Растра из Матлаба.
В М-файле пишу всего одну строчку

Rastr = actxserver('Astra.Rastr')­;

И Матлаб выдает следующую ошибку:
??? Error using ==> feval
Server Creation Failed: Класс не зарегистрирован


Error in ==> actxserver at 87
h=feval(['COM.' convertedProgID], 'server', machinename, interface);

Error in ==> primer at 1
Rastr = actxserver('Astra.Rastr')­;

Может кто сталкивался?
 
Профиль
Наверх
Михаил Одинцов
Постоянный посетитель
 
Всего сообщений: 148
Дата регистрации: 22.07.2008
Создано: 28.02.2011 14:32:59
 
 
Вроде бы такая ошибка выдавалась на 64-битном Матлабе,мне было сказано что 64-битный Матлаб с actxserver плохо дружит, а точнее не дружит совсем, решилось установкой 32-битного Матлаба.
 
Профиль
Наверх
Роман Язенин
Заглянувший
 
Всего сообщений: 7
Дата регистрации: 28.02.2011
Создано: 28.02.2011 14:46:55
 
 
У меня 64-битная ОС Windows.
Разве можно на нее устанавливать 32-битный матлаб?
Если нет, то какие пути Вы видите для преодоления этой проблемы?
 
Профиль
Наверх
Михаил Одинцов
Постоянный посетитель
 
Всего сообщений: 148
Дата регистрации: 22.07.2008
Создано: 28.02.2011 17:47:18
 
 
Можно, Вы попробуйте, была такая же проблема на машине с 64-битной ОС Windows 7, сейчас на той машине стоит 32-битный матлаб и все прекрасно работает. Просто при установке запускаете экзешник 32-битного матлаба.
 
Профиль
Наверх
Роман Язенин
Заглянувший
 
Всего сообщений: 7
Дата регистрации: 28.02.2011
Создано: 01.03.2011 19:46:16
 
 
Спасибо!
Все работает!
Возник еще один вопрос: как сохранять из матлаб растровские файлы? чтоб было расширение rg2.
 
Профиль
Наверх
Роман Язенин
Заглянувший
 
Всего сообщений: 7
Дата регистрации: 28.02.2011
Создано: 01.03.2011 21:02:12
 
 
Прошу прощения, нашел про сохранение)
 
Профиль
Наверх
Михаил Одинцов
Постоянный посетитель
 
Всего сообщений: 148
Дата регистрации: 22.07.2008
Создано: 02.03.2011 18:32:51
 
 
Что-то я ступил, видимо уставший был, я знаю как сделать, то что ты хочешь в MatLab, если не получится, заходи я тебе напишу программулину.
Сорри за оффтоп=)
 
Профиль
Наверх
Роман Язенин
Заглянувший
 
Всего сообщений: 7
Дата регистрации: 28.02.2011
Создано: 03.03.2011 13:32:41
 
 
Обязательно зайду! =)
 
Профиль
Наверх
Вячеслав Коробка
Заглянувший
 
Всего сообщений: 3
Дата регистрации: 15.11.2017
Создано: 12.11.2018 02:44:54
 
 
Александр Александров,

Почему то не работает вызов таблиц Rastr из Matlab. Взял за основу ваш код, указав свои пути к файлам:

clear
Rastr = actxserver('Astra.Rastr')­;
shabl1 = 'D:\Soft\RastrWin3\RastrW­in3\SHABLON\режим.rg2';
File1='D:\LARS\Наука\НИОК­Р 2018\Отправка 28.06.18\зима_max.rg2';
Rastr.Load( 1, File1, shabl1);
RastrTables = Rastr.Tables;
RastrTable_node = RastrTables.Item('node');­


Подскажите, пожалуйста, что я делаю не так? При выполнении данного куска кода я ведь должен получить переменную RastrTable_node, в которой данные будут представлены по шаблону Узлы? Или как должна выглядеть переменная RastrTable_node?
P.S. стоит задача загрузки в файл Rastr активной проводимости G в некоторых ветвях с последующей оптимизацией режима по Q. Сами G будут рассчитаны в Matlab, для чего и нужна связь Matlab-RastrWin.
 
Профиль
Наверх



Читают тему
гостей: 1, пользователей: 0, из них скрытых: 0


Список форумов
Новые темы
Список тем
Поиск по форумам
Помощь
Войти
Регистрация







Программный комплекс «RasrWin»
Программный комплекс «RastrWin»
© «RastrWin», 1988-2019