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

Создать массив(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 пользователей

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




  • Сообщения

    • Viktor2004
      Данная система подразумевает покупку блока для каждого станка. Монтаж и настройку выездным специалистом. При чем блоки эксклюзивные. Больше такие нигде не продаются. Идет жесткая привязка и зависимость только от одного поставщика. Зачем так усложнять. Думаю есть вариант с подключением каждого станка просто проводом без лишних закупок. Только софт на компьютер
    • Sabadash
      Пилится на станке такое)
    • Sabadash
      Приветствую! В процессе отладки станка Росфрезер HM04STM, имеет автосмену на 12 позиций инструмента HSM Works выбран как основная CAM, так как позволяет завязывать управляющие стратегии напрямую на перестраиваемый исходник геометрии детали, завязанный на cборку в SW Станок модифицирован до 4  осей, на базе волнового редуктора и сервопривода Delta Стойка поддерживает непрерывную обработку под точение микро механики, учимся делать циклоидные сервоприводы. Сейчас в процессе отладки постпроцессора, за основу взят постпроцессор для Mach 3 Mill, так как ранее он использовался под  аналогичную обработку под управлением Rich Auto DSP A18   4 Ось уже работает вдоль Х оси Проблема возникла с некорректной работой дуговой интерполяции. В мануале написано что стойка поддерживает дуговую интерполяцию для каждой из плоскостей.   Однако при запуске сгенерированной УП стойка выдает ошибку недоспустимого радиуса дуги. В мануале так же упомянуто о таком поведении в пункте 5     В постпроцессоре дуговая интерполяция включена, но как ее переключить на описанное в мануале стойки пока не разобрался.   Постпроцессор в поцессе правок. Если кто подскажет пример реализации подобного, буду очень благодарен HM04STM.cps
    • agering53
      Здесь выложена кое какая информация по сетевой системе, о которой я сообщал выше.  1. Универсальная сетевая система IN-DNC: https://www.mediafire.com/file/5reascq3sppdbn1/IinDoc.zip/file 2. Видео ролики для системы IN-DNC: https://www.mediafire.com/file/jwz8wwozj4iig1b/IIN-DNC_Video.rar/file
    • openair1981
    • maxx2000
      @davidovka да её и нет, есть жёсткий тупняк, поиск волшебной кнопки и т.д., и т.п. Просто пора в отпуск.
    • davidovka
      Наверное не понял проблемы, в эскизе квадрат с одним размером
    • maxx2000
      Вот ещё вопрос. Концентрический массив. Почему массив, чтобы потом сделать массив по привязке.  Есть у кого то соображения как?    
    • A_1
      Будет ли выполнена команда GOTO в этом кадре? IF 1>2 AND 5<10 GOTO GLUECK Sinumerik: расширенное программирование  Промокод "ЛЕТО" продолжает действовать на этот курс, а также курсы Программирование станка с системой ЧПУ FANUC (и Sinumerik) Параметрическое программирование станков с ЧПУ FANUC
    • maxx2000
      @davidovka ахахахах, это шедевр. Просто шикарно. У меня просто культурный шок. Осталось допилить до полноценного нестинга 3D моделей и прощайте костыли с кучей прослоек из других программ. 
×
×
  • Создать...