Jump to content

Не запускается lisp. Неверный тип аргумента


Recommended Posts

При запуске пишет неверный тип аргумента numberp nil. Подскажите, пожалуйста, с чем это связано? 
Я в этой теме вообще новичок (((( Программа с окном dcl и так-то и лично для меня много уже подфункций.
+ знаете как уменьшить масштаб размеров? - в автокаде приемлемо, но в нанокаде очень большие

 

RCHsovstroknom.lsp OknoRCH.dcl

MicrosoftTeams-image (1).png

MicrosoftTeams-image (1).png

Link to comment
Share on other sites

Ну предполагается что программа будет отрисовывать зенкер с любыми данными. Обычно ставлю для проверки 30 (все значения в мм)

Link to comment
Share on other sites

Спойлер

Сугубо ИМХО - код написан так, что его хочется развидеть.

Учитывая отсутствие отладчика, можно перед каждым назначением переменной или любой операцией с ней выполнять (princ (strcat ИмяПеременной (vl-princ-to-string ИмяПеременной))) и смотреть где и что отвалилось. Точнее, где переменная вдруг получила значение nil, хотя не должна.

Link to comment
Share on other sites

Перед командами по отрисовке удалось найти две ошибки

Спойлер

image.png.0089c44ddb25824f6144ca256f209173.png

 

к этой точке pt2 была неопределена.

Решил, что можно pt2 заменить на c42

 

и

 

Спойлер

image.png.18f896acff9f43521031ed7851265076.png

 

переменная a нигде и близко не упоминалась.

"Поехали" - это мое отладочное сообщение

 

Согласен с @kpblc, такой текст править - задание не для слабонервных.

Больше искать не стал.

 

Хорошо бы еще привести пример результирующего файла.

Так же, не помешали бы подходящие значения в окошке по дефолту.

А может даже есть рисунок с пронумерованными точками?

Edited by EdwardSt
  • Like 1
Link to comment
Share on other sites

Переменные, начинающиеся на DIM сравните, в частности DIMSCALE

5 часов назад, newborn сказал:

+ знаете как уменьшить масштаб размеров? - в автокаде приемлемо, но в нанокаде очень большие

image.thumb.png.f697ec7844cb13656072bc40c29b9dd8.png

Link to comment
Share on other sites

Чисто в качестве примера, как бы я писал код (времени нет, так что не до конца сделал):

(defun c:window (/ fun_create-dcl fun_callback dcl_lst dcl_id dcl_res)

  (defun fun_create-dcl (/ dcl_file dcl_handle)
    (setq dcl_file   (strcat (vl-string-right-trim "\\" (getenv "temp")) "\\dlg.dcl")
          dcl_handle (open dcl_file "w")
    ) ;_ end of setq
    (foreach item '("Okna: dialog{label = \"Параметры режущей части\";" ":column {" ": edit_box {label = \"Координата x\";key = \"xcoord\";edit_width = 3;}"
                    ":edit_box {label = \"Координата y\";key = \"ycoord\";edit_width = 3;}"
                    ":edit_box {label = \"Диаметр зенкера\";key = \"diam\";edit_width = 3;}"
                    ":edit_box {label = \"Длина фаски\";key = \"chamfer_len\";edit_width = 3;}"
                    ":edit_box {label = \"Ширина ленточки\";key = \"width\";edit_width = 3;}"
                    ":edit_box {label = \"Длина державки\";key = \"len\";edit_width = 3;}" "}" "ok_cancel;" "}"
                   )
      (write-line item dcl_handle)
    ) ;_ end of foreach
    (close dcl_handle)
    dcl_file
  ) ;_ end of defun

  (defun fun_callback (key value ref-list / lst)
    (if (not (cdr (assoc key (eval ref-list))))
      (set ref-list (cons (cons key (atof value)) (eval ref-list)))
      (set ref-list (subst (cons key value) (assoc key (eval ref-list)) (eval ref-list)))
    ) ;_ end of if
    (setq lst (eval ref-list))
    (if (apply (function and)
               (apply (function append)
                      (mapcar (function (lambda (x) ((cdr (assoc x lst))))) '("xcoord" "ycoord"))
                      (mapcar (function (lambda (x) (and (cdr (assoc x lst)) (> (cdr (assoc x lst)) 0.))))
                              '("diam" "chamfer_len" "width" "len")
                      ) ;_ end of mapcar
               ) ;_ end of apply
        ) ;_ end of apply
      (mode_tile "accept" 0)
      (mode_tile "accept" 1)
    ) ;_ end of if
  ) ;_ end of defun

  (defun fun_draw (data-list)
    (alert "Нужен результат!")
  ) ;_ end of defun

  (setq dcl_file (fun_create-dcl))
  (if (setq dcl_id (load_dialog dcl_file))
    (progn
      (new_dialog "Okna" dcl_id "(fun_callback $key $value 'dcl_lst)")
      (action_tile "accept" "(done_dialog 1)")
      (action_tile "cancel" "(done_dialog 0)")
      (mode_tile "accept" 1)
      (setq dcl_res (start_dialog))
      (unload_dialog dcl_id)
      (if (= dcl_res 1)
        (fun_draw dcl_lst)
      ) ;_ end of if
    ) ;_ end of progn
  ) ;_ end of if
) ;_ end of defun

Код не проверял и не гонял: нужен конечный чертеж. Расшифровывать, в чем разница между a1, c11, cc1, cl и прочая - не хочу.

  • Like 1
Link to comment
Share on other sites

Проблема разрешилась, когда удалил в dcl ввод длины хвостовика и начал ввод через getreal. Там где-то было несоответствие типа переменной.
Да, увидел момент с с42 и pt2. 

Программа реально страшная и собрана по частям из множества других + каких-то моих моих знаний полученных из 4 часов лр в  универе, так что довольствовался тем, чем мог 
Спасибо :')

Link to comment
Share on other sites

Между прочим, код и в ACAD рушится в слюни. В мясо. В щщи.

Вот мне интересно, что автор экономил, давая такие имена переменным? Нажатия клавиш?

Спойлер

Два объявления:

Продается компьютерная мышь 2020 г.в.. Пробег 30 000 км и 5e16 кликов

Продам клавиатуру, выпуск 01.2020. 2000 кликов.

 

  • Haha 2
Link to comment
Share on other sites

10 часов назад, kpblc сказал:

Между прочим, код и в ACAD рушится в слюни.

Он и не мог не рушиться, т.к., как минимум, в операциях сложения и преобразования используются неинициализированные переменные.

Предполагаю, что был сначала некий рисунок, в котором потом от руки были пронумерованы точки, придуманы зависимости в размещении этих точек относительно друг друга. А далее была только проблема не перепутать "c" (latinos) и "c" в именовании переменных, а также в порядке их инициализации.

 

ЗЫ. Кстати, если предположение верно, то можно было бы посоветовать автору реализовать отрисовку этого изделия в виде параметрического объекта СПДС, т.к. именно параметрика проглядывается тут в чистом виде. 

 

ЗЫ2. Ну и заинтриговать народ, а потом сказать "всем спасибо, все свободны", не показав результата, это особый шик ))).

Link to comment
Share on other sites

2 минуты назад, EdwardSt сказал:

заинтриговать народ, а потом сказать "всем спасибо, все свободны", не показав результата, это особый шик

Стандартное поведение, я уже особого внимания на это не обращаю :)

 

Link to comment
Share on other sites

5 часов назад, EdwardSt сказал:

Ну и заинтриговать народ, а потом сказать "всем спасибо, все свободны", не показав результата, это особый шик ))).

Исправляюсь)
Конечно, можно было создать и так, но передо мной поставили задачу именно таким образом создать отрисовку осевого инструмента 

 

5 часов назад, EdwardSt сказал:

в виде параметрического объекта СПДС

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

P.S. Код в автокаде запускается только если добавить папку с окном и лсп в путь доступа вспомогательных файлах, в нанокаде как-то обошел, но нужно менять названия типа линий и заранее настраивать размерные стили

P.S.S. Момент с описанием точек с23,с56 и т.д. достался мне по наследству из методички 95 года, он тогда еще на эвм считался))))))0)

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

Screenshot_1.png

Screenshot_2.png

OknoRCH.dcl Otrisovka.LSP

  • Thanks 1
Link to comment
Share on other sites

9 минут назад, newborn сказал:

Исправляюсь)

Честно говоря, это лучший из возможных ответов. Еще раз спасибо.

 

11 минут назад, newborn сказал:

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

Реализация через параметрический объект СПДС была бы самым красивым решением.

Реализация с помощью лиспа - более универсальным.

Если это дипломный проект, то времени уже может быть мало, да и рамки задания могут не распространяться на задействование функционала СПДС-модуля.

Поэтому, сейчас уже легче допилить образмеривание и рамку с основной надписью.

Специально для такого чертежа уместно подготовить шаблон *.dwt с настроенными стилями, слоями, блоками (включая блоки основной и боковых надписей).

И в инструкции по использованию написать, что запускать нужно только на данном шаблоне.

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

И для вводимых параметров желательно указать диапазон допустимых значений, а еще лучше добавить контроль введенных значений на предмет попадания в диапазон.

Link to comment
Share on other sites

Вообще на данный момент передо мной не стоит задачи  рационализировать это решение. Из лиспа однозначно не уйду, потому что в этом вся соль. Сейчас нужно настроить размеры и рамку. Пока не могу понять, что от меня требует мой научный руководитель каким образом вставить рамку (надеюсь блоком, а не вписывать отрисовку рамки в программу). 
Требования к программе прямиком из детсада, потому что это не мой профиль. Мой диплом - создание технологического процесса обработки детали. Состоит он у меня из 60+ операций, среди которых присутствует зенкерование и этот несчастный зенкер. Просто в качестве НИР и элемента исследования мне предложили создать программу для его автоматической отрисовки - т.е. автоматизации работы технолога + добавить актуальность на фоне перехода из автокада в нанокад. Я, как образцово-показательный студент, не имел права отказаться. Подытоживая, для моей специальности - это реально нечто стоящее, но посидя на подобных форумах, я понял, что над этой прогой можно только посмеяться

Однозначно апдейты по ней еще будут, т.к. нервов мне она еще помотает.

Link to comment
Share on other sites

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

 

Link to comment
Share on other sites

8 минут назад, newborn сказал:

Пока не могу понять, что от меня требует мой научный руководитель каким образом вставить рамку (надеюсь блоком, а не вписывать отрисовку рамки в программу).

Однозначно, блоком. Т.к., потом этот чертеж может редактироваться. Работать с кучей отрезков, имеющих фиксированное взаимное положение, - это ад.

Бывали случаи, когда отдельные проектировщики специально разбивали блоки и полилинии перед передачей заказчику, чтобы затруднить дальнейшую работу с исходниками. Не нужно такие решения тиражировать). Кроме того, используя блоки с атрибутами, можно сразу охватить и автоматизированное заполнение штампов.

 

12 минут назад, newborn сказал:

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

Фишка в том, что написание лиспа - это автоматизация, но это решение универсальное для АС и NC, поэтому к переходу отношения не имеет. 

А предлагаемая мной выше тема с СПДС как раз может покрыть именно  это требование.

Кстати, там красиво решена и задача  оформления  форматок чертежа.

добавлено через 2 минуты
3 минуты назад, lidia.antipina.ru сказал:

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

Ну, чисто с т.з. академического интереса или обучающего процесса - почему бы и нет?)))

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
 Share

  • Tell a friend

    Love Официальный форум компании Нанософт Разработка? Tell a friend!
×
×
  • Create New...