|
За да номерираме проводниците с IEC-стил и все пак да не показваме INST и LOC стойностите е възможно. При това чертежа ще отговаря на стойностите по подразбиране. Ето и как може да стане. Благодарение на Miles Nicholson, от Aceri UK. този алгоритъм за работа беше създаден за да покрие нуждите на неговите потребители. Често те се сблъскват с много на брой схеми където номерата на проводниците между два елемента трябва да остане постоянна въпреки че са в различни токови кръгове. Добър пример за това са повтарящите се стандартни схеми за управление на двигатели. Всеки токов кръг стои в отделна секция на КСМ (контролната схема на мотора) и само няколко извода заминават на някъде другаде. Ето какво иска да види потребителя: Проблемът Нека приемем че имаме проект с 12 чертежа всеки от който е схема като показаната отгоре (но със различна номерация на двигателите). Тогава ще имаме дванадесет номера на проводници със стойност 9, дванадесет номера на проводници със стойност, обаче AutoCAD Electrical няма да иска да повтори номерацията. Решението на – Стъпка 1 Първата стъпка е да настроим AutoCAD Electrical и да добавим в IEC-стила "INST/LOC" към всеки надпис на проводник. INST и LOC стойностите могат да се зададат като drawing-wide от "Drawing Properties" диалоговия прозорец. Примерно стойността на INST да е "MCC2" което идва като описание за Motor Control Center #2. За стойността на LOC може да сложим стойността на секцията в която се намира в MCC2. Примерно LOC = "C4" може да означава че се намира на третата секция във вертикално отношение и на четвърта позиция от горе на долу. (i.e. "4"). Така че за всеки чертеж (един MCC секция за чертеж), стойностите по подразбиране на INST/LOC са настроени да индефицират MCC "installation" и стойността на секцията "location" в MCC. Сега на същия диалогов прозорец (Drawing Properties), Miles настройва и номерацията на проводниците да включва и IEC да включва и "Inst" и "Loc" стойностите (%I и %L) които да са като префикс към номера на ( %N ). Сега след като сме направили това за всеки чертеж, за който е нужна тази функционалност сме готови да направим номериране на проводниците в целия проект. След като на всеки чертеж сме задали комбинацията от INST/LOC да е уникална и номерацията на проводниците да е поредна стартираща с 1 и стъпка през 1, ще получим нормална номерация на всички чертежи в проекта освен тези с префикс INST/LOC. Ето един чертеж с уникалната комбинация "=MCC2+C4" за префикс за всички номера на проводниците. Стъпка 2 – Премахване на LOC и/или INST префикс когато са изпълнени заданията на чертежа по подразбиране Последната стъпка изисква използване на малка AutoLISP функция която да запитва за номерацията на проводниците в AutoCAD Electrical "API". Този инструмент може да обработи един чертеж. Това което прави е да прочете стойностите по подразбиране за чертежа за INST и LOC параметрите (Тези които сложихме в диалоговия прозорец ,,Drawing Properties” и които се записаха в WD_M блока). След това ще прочете всяка стойност на номерацията на проводниците. Функцията търси съвпадение на INST стойността. Ако е намерена такава тогава маха тази стойност от номерацията. След това прави същото за LOC стойноста. Крайния резултат е това че всяка стойност на номерацията на проводниците която съвпада с зададените стойности по подразбиране за чертежа ще се върнат към стойност само с номер. Но всеки номер с различна стойност за INST/LOC ще остане непроменен ( ! ). Ето и AutoLisp-а. Може да направите така че накарате скрипта да работи върху всички проводници или само на тези които не с маркирани с "fixed". Коментирайте само необходимите редове, около 18 реда надолу. ; ** 12-Apr-09 NEHolt reworked to look for drawing-wide INST/LOC assignments ; ** 16-Feb-08 NEHolt fixed typo in original ; ------- W N U M _ R M V _ I E C _ S U F F I X . L S P ------ (defun c:rmv ( / ss delim_char slen ix wnum_en pos wen newnum attrname) ; PURPOSE: remove IEC wire number suffix when INST/LOC values match up ; with drawing-wide INST/LOC assignments... leaving just bare wire number. ; This works on both normal wire numbers and in-line wire numbers. It updates ; any extra wire number "copies" as well. ; Note: this will process and modify just "normal" (i.e. non-fixed) wire numbers ; unless adjustment made immediately below. ; ************ ; To process both normal and "fixed" wire numbers, uncomment line "WIRENO*" and ; comment out the "WIRENO" line. ; To process just "normal" wire numbers and leave "Fixed" untouched, uncomment ; the "WIRENO" line below and comment out the "WIRENO*" line. ; (uncomment just one of the two lines below - remove the line's leading ";" character) ; (setq attrname "WIRENO*") ; uncomment this line to process both normal and fixed (setq attrname "WIRENO") ; uncomment this line to process just "normal" (fixed untouched) ; ************ ; Search for schematic wire number instances. This includes in-line wire number ; instances. (setq ss (ssget "_X" '((-4 . " ( 0 . "INSERT") ( 2 . "WD_WN*") (-4 . "AND>")))) (if (/= ss nil) (progn ; active drawing carries some wire number instances. Continue. ; Get drawing-wide INST and LOC assignments (wd_cfg_read_dwg_params) ; read the WD_M block and set GBL_wd_m global (setq inst (nth 52 GBL_wd_m)) ; get INST from drawing properties (setq loc (nth 53 GBL_wd_m)) ; get LOC value from drawing properties (setq slen (sslength ss)) (setq ix 0) (while (< ix slen) (setq wnum_en (ssname ss ix)) ; get wire number entity (setq ix (1+ ix)) ; increment for next time ; Get wire number text (either WIRENO* or WIRENO attribute name) (if (setq wnum_val (c:wd_getattrval wnum_en attrname)) (progn (setq save_val wnum_val) ; save copy for comparison later (if (AND inst (/= inst "")) (progn ; Look for INST prefix on this wire number string (if (= (substr wnum_val 1 (strlen inst)) inst) (progn ; Exact match with INST value. Strip it off (setq wnum_val (substr wnum_val (1+ (strlen inst)))) ) ; ELSE (progn (if (= (substr wnum_val 1 (1+ (strlen inst))) (strcat "=" inst)) (progn ; Exact match with "=INST" value. Strip it off. (setq wnum_val (substr wnum_val (+ 2 (strlen inst)))) ) ) ) ) ) ) (if (AND loc (/= loc "")) (progn ; Look for LOC prefix on this wire number string (if (= (substr wnum_val 1 (strlen loc)) loc) (progn ; Exact match with INST value. Strip it off (setq wnum_val (substr wnum_val (1+ (strlen loc)))) ) ; ELSE (progn (if (= (substr wnum_val 1 (1+ (strlen loc))) (strcat "+" loc)) (progn ; Exact match with "=INST" value. Strip it off. (setq wnum_val (substr wnum_val (+ 2 (strlen loc)))) ) ) ) ) ) ) (if (/= wnum_val save_val) (progn ; Something was stripped off. Push bare wire number back ; out to the wire network. ; Remove any leading "-" prefix on the wire number (if (= (substr wnum_val 1 1) "-")(setq wnum_val (substr wnum_val 2))) ; Now get the entity name of the wire that passes under this ; wire number instance. (if (setq wen (car (c:ace_wnum_find_wire_en wnum_en GBL_wd_trp))) (progn ; Found it. Push revised wire number back out. Update ; any extra wire number "copies" found on the wire network. (princ "\n") (princ save_val) (princ " --> ") (princ wnum_val) (c:wd_putwn wen wnum_val) ) ) ) ) ) ) ) (setq ss nil) ) ) (princ) ) Слощете файла в същата директория която ползвате за ,,ACAD support path” и го кръстете wnum_rmv_iec_suffix.lsp. За да го направите активен изпълнете тези инструкции: Напишете командата Appload в командния ред. Изберете от секцията StartUpSuite, Contents Изберете Add Изберете директорията в която сложихте файла. Изберете wnum_rmv_iec_suffix.lsp Изберете Add и след това Close Сега когато искате да стартирате този инструмент, напишете RMV [Enter] в командния ред. Може да използвате този инструмент и като project-wide. За да направите това направете скрипт файл със само един ред : "RMV". След това изпълнете този скрипт от "Project-wide Utilities" --> "Run Command Script".
|