Перейти к публикации

Создать массив(array) НОМЕРОВ элементов в компоненте.


Алексеев Денис

Рекомендованные сообщения

Алексеев Денис
Здравствуйте. Возможно, вопрос решается элементарно, но облазил гугл и ничего подобного не нашел. Я создал компоненте (CM) состоящий из элементов. Далее я его выбрал (CMSEL). Теперь мне надо в цикле перебрать все выделенные элементы и что-то с каждым сделать (сравнить напряжения с каким-то конкретным значением, например). Не пойму, как всунуть в массив ТОЛЬКО номеры выделенных элементов. Вот маленький отрывок моего кода:

 

CMSEL,S,bv1_comp          ! выделим компонент

*get,el_count,ELEM,,count        ! число выделенных элементов

*DIM,elem_numbers,ARRAY,el_count,1 ! создаю пустой массив длиной el_count    

*VGET,elem_numbers,ELEM,.... ! КАК-ТО ТАК ХОЧУ ЗАПОЛНИТЬ МАССИВ НОМЕРАМИ ВЫДЕЛЕННЫХ ЭЛЕМЕНТОВ

 

Помогите, пожалуйста.

Ссылка на сообщение
Поделиться на других сайтах


перебрать все выделенные элементы и что-то с каждым сделать

Как вариант:

выбрали элементы (esel,s)

открыли цикл (*do)

получили минимальный номер активного элемента (*get)

сделали, что нужно, с ним

выкинули элемент из текущего выбора (esel,u)

закрыли цикл (*enddo)

 

 

 

сравнить напряжения с каким-то конкретным значением, например

Если конкретное значение - константа, то могут помочь команды SADD или SALLOW.

Ссылка на сообщение
Поделиться на других сайтах
Алексеев Денис

 

перебрать все выделенные элементы и что-то с каждым сделать

Как вариант:

выбрали элементы (esel,s)

открыли цикл (*do)

получили минимальный номер активного элемента (*get)

сделали, что нужно, с ним

выкинули элемент из текущего выбора (esel,u)

закрыли цикл (*enddo)

 

 

 

сравнить напряжения с каким-то конкретным значением, например

Если конкретное значение - константа, то могут помочь команды SADD или SALLOW.

 

"получили минимальный номер активного элемента (*get)" - а можно конкретнее? Что-то вроде этого мне и нужно. Мне нужно работать с конкретной группой элементов, принадлежащих конкретной группе (компоненту). Поясню подробнее.

 

Что я делаю сейчас: 

выделяю все элементы в модели(esel)

открываю цикл (*DO) от 1 до "all_elements_count"

зная, что у меня всего N элементов выбираю определенный элемент просто по номеру итерации.

сравниваю координаты центра масс элемента с нужными, и если элемент принадлежит какой-то области -  

работаю с ним(не важно, как, сравнить напряжения с каким-то конкретным значением - ПРИМЕР ).

 

Что я хочу делать:

выделяю все элементы в КОМПОНЕНТЕ, т.е сам компонент(cmsel)

открываю цикл (*DO) от 1 до "elements_in_component_count"

у меня в этой области есть много элементов с разными номерами, не по порядку идущими. Поэтому я беру в цикле не по номеру итерации элементы а по номеру взятому из заранее приготовленного СПИСКА НОМЕРОВ ВЫДЕЛЕННЫХ ЭЛЕМЕНТОВ.

работаю с ним, и никаких сравнений координат уже не надо.

Ссылка на сообщение
Поделиться на других сайтах
 получили минимальный номер активного элемента (*get)" - а можно конкретнее? Что-то вроде этого мне и нужно.

Вы же смогли найти команду

 

*get,el_count,ELEM,,count        ! число выделенных элементов

там рядом описано как вытащить минимальный номер элемента

*get,el_min_num,ELEM,,num,min
Ссылка на сообщение
Поделиться на других сайтах
Алексеев Денис

Ага. Теперь понял Вас. А раньше не понял. Да, должно сработать, и никакой список не нужен будет :happy:. Спасибо большое за помощь, попробую, если что, еще напишу сюда...

Ссылка на сообщение
Поделиться на других сайтах

Код, лишенный всех недостатков и проверенный героями многих легенд на протяжении многих тысячелетий.

ne=0
cmsel,s,...

*dowhile,i
   *get,ne,elem,ne,nxth
   *if,ne,eq,0,then
      *exit
   *endif

   .... ! Делаем что нужно
 
*enddo
allsel,all
Ссылка на сообщение
Поделиться на других сайтах

С точки зрения структурного программирования выход из середины цикла уже серьезный недостаток :)

http://ru.wikipedia.org/wiki/%D0%A1%D1%82%D1%80%D1%83%D0%BA%D1%82%D1%83%D1%80%D0%BD%D0%BE%D0%B5_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5

Ссылка на сообщение
Поделиться на других сайтах
С точки зрения структурного программирования выход из середины цикла уже серьезный недостаток :)

Можно номер элемента в счетчик цикла читать. Тогда цикл сам вывалится, когда элементы закончатся.

Ссылка на сообщение
Поделиться на других сайтах

Надежнее ввести переменную флажок и ей присваивать значения в зависимости от ситуации. И выходить из цикла в зависимости от этого флажка. С его помощью и ветвления осуществлять. В виндовом программировании такие флажки называются событиями. Их и обрабатывают по существу. Способ борьбы со сложностью, которая по системному анализу растет по квадратичному закону от управляемой системы. Примерно как сопротивление движению байдарки в воде. Хочешь идти вдвое быстрее, маши веслами в четыре раза шустрее :)

Ссылка на сообщение
Поделиться на других сайтах
Надежнее ввести переменную флажок и ей присваивать значения в зависимости от ситуации. И выходить из цикла в зависимости от этого флажка.

А счетчик цикла не такой флажок?

Ссылка на сообщение
Поделиться на других сайтах

 

Надежнее ввести переменную флажок и ей присваивать значения в зависимости от ситуации. И выходить из цикла в зависимости от этого флажка.

А счетчик цикла не такой флажок?

 

Такой. Просто эта идея распространяется на гораздо большее число возможных ситуаций и не связана с натуральным рядом.

 

http://ru.wikipedia.org/wiki/%D0%A1%D0%BE%D0%B1%D1%8B%D1%82%D0%B8%D0%B9%D0%BD%D0%BE-%D0%BE%D1%80%D0%B8%D0%B5%D0%BD%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%BD%D0%BE%D0%B5_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5

 

В Qt они называются сигналами http://ru.wikipedia.org/wiki/Qt

Ссылка на сообщение
Поделиться на других сайтах
Просто эта идея распространяется на гораздо большее число возможных ситуаций и не связана с натуральным рядом.

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

Ссылка на сообщение
Поделиться на других сайтах

Дa i вообще не нужна, надо бритвой Оккама побрить. Вообще не понятно какая она. While обычно проверяется в начале цикла, в него  можно и не попасть вообще.

Если приглядеться по программистски , то похоже, что код вообще из одних недостатков  :)

Ссылка на сообщение
Поделиться на других сайтах
Дa i вообще не нужна, надо бритвой Оккама побрить. Вообще не понятно какая она. While обычно проверяется в начале цикла, в него  можно и не попасть вообще. Если приглядеться по программистски , то похоже, что код вообще из одних недостатков  :)

Если i заменить на ne, то счетчик циклов окажется таки используемым(хотя не совсем правильно его счетчиком называть. переменная для проверки условия). Также надо будет убрать обнуление ne перед циклом, а задать, наоборот, любое ненулевое значение(хоть тот же минимальный номер элемента). Тогда можно будет убрать условие проверки равенства нулю ne, поскольку это сам по себе делает цикл. И в цикл хотя бы один раз зайдем наверняка.

Но алгоритма это все равно не изменит. Так... вылизывание и причесывание.

Ссылка на сообщение
Поделиться на других сайтах

!Стопроцентно работает

 

*get,EN,elem,,count                 !получили количество элементов
*get,EMIN,elem,,num,min         !получили минимальный номер элемента

*dim,massiv_elementov,array,en

*do,i,1,EN
  *if,i,ne,1,then
    ii=elnext(ii)
  *else
    ii=EMIN
  *endif
 
massiv_elementov(i)=ii

 

*enddo

Изменено пользователем Petr_ansys
Ссылка на сообщение
Поделиться на других сайтах

*do,i,1,EN   !!! здесь текстом прокомментируйте что делается
        *if,i,ne,1,then  $     ii=elnext(ii)   $     *else   $      ii=EMIN
  *endif

 

И не рекомендуется давать идентификаторам имена типа kk   иначе когда-нибудь вляпаетесь в трудно уловимую ошибку.

А так неплохо, легко воспринимается смысл. Через год посмотрите и не будете мучиться :)

Ссылка на сообщение
Поделиться на других сайтах
Алексеев Денис

Все работает, как часы, спасибо большое всем за активную помощь :smile: Думаю, к этой теме я больше не вернусь.

Ссылка на сообщение
Поделиться на других сайтах
  *if,i,ne,1,then

Все-таки каждый раз выполнять проверку не очень эффективно. В случае больших объемов обрабатываемой информации даже здесь имеет смысл сэкономить время и вынести первый проход за пределы цикла, а дальше работать без проверки.

Ссылка на сообщение
Поделиться на других сайтах

Логично. Начальную инициализацию всегда надо делать вне цикла. Оптимизирующие компиляторы в принципе часто сами это делают, но грамотнее все-таки позаботиться самому об этом :)

 

ii=EMIN  $  *do,i,1,EN $  ii=elnext(ii)  $  *endif  !! комментарий ...

 

 Что то в таком духе и в одну строчку. И все запутал :) Ну надеюсь поняли, что главное в коде читаемость иначе будут ругать. Программисты это называют в чужом дерьме ковыряться. Проще выкинуть и по новой написать обычно если ясно что надо делать :)

Ссылка на сообщение
Поделиться на других сайтах
  • 2 недели спустя...

А вообще-то можно сделать еще проще

 

*get,NN,node,,count        !определение количества узлов

*vget,nn_array,node,,nlist        !заполнение массива номеров узлов (автоматом в порядке возрастания)

Ссылка на сообщение
Поделиться на других сайтах

Присоединяйтесь к обсуждению

Вы можете опубликовать сообщение сейчас, а зарегистрироваться позже. Если у вас есть аккаунт, войдите в него для написания от своего имени.
Примечание: вашему сообщению потребуется утверждение модератора, прежде чем оно станет доступным.

Гость
Ответить в тему...

×   Вставлено в виде отформатированного текста.   Вставить в виде обычного текста

  Разрешено не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.

  • Сейчас на странице   0 пользователей

    Нет пользователей, просматривающих эту страницу.




  • Сообщения

    • maxx2000
      Спасибо КЭП, но в ярлыке ничего прописывать не надо, достаточно создать новый ярлык. Вопрос был про вызов справки из приложения. Впрочем, перезагрузка ПК устранило это досадное недоразумение.
    • Maxmore
      Согласен полностью, через всё это пришлось пройти. От себя добавлю что у нас 400ый не PRO а обычный - его еще больше пришлось доводить до рабочего состояния, так как их производят разные заводы. с ITX508MY еще все более печально было - проблемы на пусконаладке, затем замена прокладок, затем пусконаладка уже с участием китайца...в общем да, помучаться пришлось. С большего оборудование рабочее, свои функции выполняет. Фануковские посты можно доработать до HNC без особых проблем.
    • Fedor
      Для любой размерности можно решать полином этой размерности. Такова сущность вопроса существования, а не конкретное явление вычисления. Дух, а не буква :)
    • anykeyto
      День добрый коллеги. Работает ли кто на этой стойке? Где берете информацию по программированию кроме мануала от Ками?  Интересует макропрограммирование, программирование цилиндрической интерполяции. Да и вообще, давайте делиться опытом. В свободном доступе практически нет никакой информации о работе станка и стойки этого чуда китайской инженерии.  Вопрос про G108, пользовался ли кто функцией CTOS/STOC?   
    • __Andrey__
      Доброго всем времени суток. Начал сборку станка для симуляции. Загрузил модель станка DMU50 в папку. В генераторе станков сделал настройки осей. Постпроцессор на sinumerik создал из шаблона. Скопировал папку cse_driver со станка с похожей кинематикой (sim06_mill_5ax). В файлы .dat внесены данные. При запуске симуляции по машинному коду ругается, что не найден файл PMAC. После закрытия окна с ошибкой продолжает работу и доходит до смены инструмента и там выскакивает ошибка. . Прошу помощи с этой проблемой. Файл to_ini генерируется в папку cse_driver.
    • anykeyto
      Устроился в начале года в контору где стоит IronMAC IMU-5X 400 Pro. Стойка HNC8-848di. Контора отправила на обучение, на курс 5-осной обработки на этой стойке, в цто Ками в Москве. В целом все доступно и понятно. Это когда было само обучение. Но в работе самой стойки есть куча вопросов. По факту на стойка не настроена. Не знаю, может наладчик который запускал станок попался ленивый, может в другом была причина. Но первый месяц-полтора занимался только настройкой системы (что знал, что пришло в процессе изучения параметров, ладдера, и прочее).   Сам станок интересный и понятный. Но русская локализация хромая, как и мануал от ками. Там голимый перевод то ли с английского, толи с китайского.... но вместо фрезы "нож" и так далее.  Основа тут G код, в целом почти фанук, но есть отличия. Есть группа циклов для фрезеровки сверления, резьбы и расточки, под них есть прям шаблон, в котором только переменные задаешь, но криво реализован синтаксис, который поправить можно уже непосредственно в коде.
    • Ветерок
      В ярлыке прописать путь к русскому файлу: "C:\PTC\Creo 8.0.4.0\creo_help_pma\russian\index.html"
    • Guhl
      Номера 2000 и выше - это вроде как не ошибка а сообщение оператору Открывайте инструкцию на станок с описанием сообщений или смотрите в ладдере в чпу или скачайте ладдер и смотрите в Fladder3
    • ДОБРЯК
      В МКЭ это классический modal-prestress анализ. Из МКЭ вы получаете только матрицу масс и матрицу жесткости. На этом МКЭ заканчивается. Дальше решайте как хотите. Вот Федор решает квадратное уравнение и получает первые собственные частоты.:=) Вопрос только в том какие силы нужно задать, чтобы получить начальные напряжения и как эти силы зависят от частоты вращения. Дальше матрица начальных напряжений суммируется с матрицей жесткости. Естественно данное суммирование меняет жесткость конструкции. Поэтому и говорят про преднапряженный модальный анализ. Основной вопрос какие силы нужно приложить в зависимости от частоты вращения, прежде чем делать статический анализ.  Но вы этот вопрос не освещает. Это ваше право не подумайте, что у меня есть какие то претензии.
    • Fedorly
      Вашему вниманию предоставляется программа, которая позволяет пакетно обработать DXF файлы разверток и получать Длину реза, Количество врезок, габариты развертки, миниатюру.  Полученные данный  легко сохраняются в PDF, Excel, txt и другие форматы. Дальше, полученные данные, могут быть применены в расчете себестоимости детали Скачать  
×
×
  • Создать...