Логотип сайта поддержки пользователей САПРО сайте поддержки пользователей САПР Translate to:
Hosting Ukraine

Тема 4 Этап съема данных с плана чертежа.

Программы съема данных и создание информационных текстовых файлов на диске для хранения данных по каждому шлейфу.

Оглавление

После того, как в блоках обозначения пожарных извещателей (ПИ) на плане чертежа установлены необходимые данные можно переходить к следующему этапу работы – получевому обсчету данных и сбросу данных в файлы хранения информации. Давайте посмотрим какая информация хранится в блоках обозначения (ПИ). Для дымового пожарного извещателя (ПИ) типа ДИП-34А блок обозначения носит имя 1_NL. Внутри него хранится следующая информация:

Имя атрибута Подсказка содержания Значение информации
ADR Адрес датчика А01.041.072
NL Номер луча ПС 1-21
ND Номер датчика в луче 72
DAT1 Тип датчика ДИП-34А
Адрес пожарного извещателя А01.041.072 расшифровывается следующим образом:

Для ручного пожарного извещателя (ПИ) типа ИПР-513-3А блок обозначения носит имя 1_NLR. Внутри него хранится следующая информация:

Имя атрибута Подсказка содержания Значение информации
ADR Адрес датчика А01.021.092
NL Номер луча ПС 1-3
ND Номер датчика в луче 92
DAT2 Тип датчика ИПР-513-3А
Адрес пожарного извещателя А01.021.092 расшифровывается следующим образом:

Заглянем немного вперед, чтобы ознакомиться с содержанием файла 1_1.txt, содержащего информацию о луче (шлейфе) 1_1:

Содержание файла 1_1.txt
Содержание файла Пояснение информации
ДИП-34А Тип дымового датчика ПС
94 Общее число датчиков в шлейфе
1 Номер первого датчика ПС
94 Номер последнего датчика ПС
А01.019.001 Адрес первого датчика ПС
А01.019.094 Адрес последнего датчика ПС
ИПР-513-3А * Тип ручного датчика ПС
5 * Общее число датчиков в шлейфе
95 * Номер первого датчика ПС
99 * Номер последнего датчика ПС
А01.019.095 * Адрес первого датчика ПС
А01.019.099 * Адрес последнего датчика ПС
5 * Число коробок УК-П для ИПР
18 Число БРИЗ в шлейфе
* - если в шлейфе отсутствуют (ПИ) типа ИПР-513-3А, то указанные позиции отсутствуют.

Рассмотрение программы 1_OPPG5.LSP

Для детального усвоения программ в пособии 1 использовалась методика пошагового рассмотрения текста программ. В этом посо-бии я перехожу к логическому рассмотрению программ крупными «кусками», которые позволяют понять замысел автора. Для начального знакомства с языком Автолисп лучше всего заглянуть в пособие 1.

(defun 1_oppg5() ; задача в 5 раз быстрее 
;ОБСЧЕТ ПЛАНА ДАННЫХ ПОЖ.СИГНАЛ. АДРЕСНЫЕ ДЫМ.РУЧН НОМ.ЛУЧА БРИЗ
;ДЛЯ ПОДГОТОВКИ ПОСТРОЕНИЯ ТАБЛИЦЫ КДЛ для дип-34А и ИПР-513-3А 
;может брать любое кол-во этажей 
(princ "=============== начало 1_oppg5 ===============")(terpri)
(setq a nil b nil c nil a1 nil)(gc)
(setq zna nil imj nil nad nil ndat nil)(gc)
(setq kl1 nil kl2 nil kl3 nil kl4 nil kl5 nil)(gc)
(setq kl21 nil kl22 nil kl23 nil kl24 nil kl20 nil)(gc)
(setq kl31 nil kl32 nil kl33 nil kl34 nil kl30 nil)(gc)
(setq npd1 nil npd2 nil npd3 nil npd4 nil npd5 nil)
(setq npa1 nil npa2 nil npa3 nil npa4 nil npa5 nil)
(setq op1 nil op2 nil op3 nil op4 nil op5 nil op6 nil op7 nil)(gc)
(princ "=====================================")(terpri)
(princ "      ВВЕДИТЕ НОМЕР ЭТАЖА            ")(terpri)
(princ "-------------------------------------")(terpri)
(princ "      ЭТАЖ 1                 = 1     ")(terpri)
(princ "      ЭТАЖ 2                 = 2     ")(terpri)
(princ "      ЭТАЖ N                 = N     ")(terpri)
(princ "=====================================")(terpri)
(setq net (getstring "\n   ВВЕДИТЕ НОМЕР ЭТАЖА !!!\n___: "))
(princ "=====================================")(terpri)
(princ "      ВВЕДИТЕ НОМЕР ШЛЕЙФА           ")(terpri)
(princ "-------------------------------------")(terpri)
(princ "      ШЛЕЙФ 1                = 1     ")(terpri)
(princ "      ШЛЕЙФ 2                = 2     ")(terpri)
(princ "      ШЛЕЙФ N                = N     ")(terpri)
(princ "=====================================")(terpri)
(setq nsh (getstring "\n   ВВЕДИТЕ НОМЕР ШЛЕЙФА !!!\n___: "))
(setq nsh10 (atoi nsh))
(setq nsh1 nsh nshn nsh)
(setq nsh2 (itoa(+ nsh10 1))) 
(setq nsh3 (itoa(+ nsh10 2))) 
(setq nsh4 (itoa(+ nsh10 3))) 
(setq nsh5 (itoa(+ nsh10 4))) 
Ввод начальных данных программы.
Обнуление переменных (на всякий случай) во избежание некорректной работы программы. Особенность данной программы – она одновременно просматривает 5 шлейфов, что позволяет значительно ускорить работу. После просмотра всех примитивов чертежа и выявления данных по 5 шлейфам, все начинается сначала, но просмотр идет уже следующих 5 шлейфов. Можно конечно сделать одновременный просмотр для большего количества шлейфов, например для 10, но это подсказка для тех, кто впервые знакомится с материалом
(setq a (entnext))   
(setq b (cdr(assoc '0 (entget a))) aa1 t aa2 t nnnn 0)
(setq imj (cdr(assoc '2 (entget a))))
Нахождение первого примитива в чертеже и получение первых данных о нем (тип примитива и имя примитива), все примитивы имеют тип, это и отрезки, полилинии, блоки… А имя примитива имеют в нашем случае только блоки и атрибуты. Поэтому их легко сортировать.
(while aa1                   ;цикл 1 работы по этажу                                    
  (while aa2                 ;цикл 2 работы по шлейфу                                   
    (if (and (equal b "INSERT")                 
        (or(equal imj "1_NL")(equal imj "1_NLR")(equal imj "1_NL3")
        (equal imj "1_NLR3")(equal imj "1_UK")(equal imj "BRIZ")))
        (progn     ;2 если это блок с определенным именем         
        (setq imj (cdr(assoc '2 (entget a))))                                     
        (if (or(equal imj "1_NL3")(equal imj "1_NL"))(progn  
            (setq opb1 "1")(setq a (entnext a) bb t))) 
            ; получение признака 1 (opb1)      
        (if (or(equal imj "1_NLR")(equal imj "1_NLR3"))(progn 
            (setq opb1 "2")(setq a (entnext a) bb t)))       
            ; получение признака 2 (opb1)      
        (if (equal imj "1_UK")(progn  (setq opb1 "3")
            (setq a (entnext a) bb t)))       
            ; получение признака 3 (opb1)      
        (if (equal imj "BRIZ")(progn  (setq opb1 "4")
            (setq a (entnext a) bb t)))       
            ; получение признака 4 (opb1)      
            (while bb       ; цикл 3 просмотра атрибутов   
              (setq b (cdr(assoc '0 (entget a))))                         
              (setq imj (cdr(assoc '2 (entget a))))
              (setq zna (cdr(assoc '1 (entget a))))
              (if (equal b "ATTRIB")(progn                                    
                  (if (equal imj "NL")(progn ;НОМЕР ЛУЧА      
                      (if (equal zna (strcat net "-" nsh1)) (progn
                          (setq op1 "1")))
                      (if (equal zna (strcat net "-" nsh2)) (progn 
                          (setq op1 "2")))
                      (if (equal zna (strcat net "-" nsh3)) (progn 
					  (setq op1 "3")))
                      (if (equal zna (strcat net "-" nsh4)) (progn 
                          (setq op1 "4")))
                      (if (equal zna (strcat net "-" nsh5)) (progn 
                          (setq op1 "5")))
                  ))                                                          
                  (if (equal imj "DAT1")(progn 
                      (if (equal zna "ДИП-34А")(progn 
                          (setq op2 "1")))
                  )) 
                  (if (equal imj "DAT2")(progn 
                      (if (equal zna "ИПР-513-3А")(progn
                          (setq op3 "1")))
                  ))
                  (if (equal imj "DAT3")(progn 
                      (if (equal zna "С2000-ИП")(progn
                          (setq op3 "2")))
                  ))
                  (if (equal imj "ND")(progn (setq ndat zna)))
                  ; НОМЕР ДАТЧИКА
                  (if (equal imj "ADR") (progn (setq nad zna)))    
                  ;АДРЕС ДАТЧИКА
              ))                                                               
              (setq a (entnext a))
              (if a (progn (setq b (cdr(assoc '0 (entget a))))
                    (setq imj (cdr(assoc '2 (entget a))))
                    (setq zna (cdr(assoc '1 (entget a))))
                    (if (equal b "SEQEND")(progn (setq bb nil)))
              ))
              (if (not a)(progn (setq bb nil aa nil)))
            )       ; цикл 3 просмотра атрибутов окончание                                                                  
;(princ "===============================================")
Данная часть программы позволяет внимательно рассмотреть блоки и атрибуты блоков, подходящиие под условия рассмотрения и в соответствии с выбором данных получить соответствующие найденному примитиву ряд совокупных признаков, по которым в дальнейшем будет идти работа программы. Эти признаки позволяют качественно определить, что перед нами – дымовой или ручной извещатель (ПИ), или коробка УК-П, или БРИЗ. По атрибутам можно определить номер шлейфа, номер датчика в шлейфе, тип извещателя (ПИ), номер датчика и адрес датчика.
(if (and (equal opb1 "1")(equal op1 "1")(equal op2 "1"))(progn 
     (if (not kl1)(setq kl1 0))(if kl1 (progn (setq kl1 (+ kl1 1))))
     (setq npd1 ndat)(if (not(equal nad ""))(progn (setq npa1 nad)))
     (setq zna nil opb1 nil op1 nil op2 nil ndat nil nad nil)))
 (if (and (equal opb1 "1")(equal op1 "2")(equal op2 "1"))(progn 
     (if (not kl2)(setq kl2 0))(if kl2 (progn (setq kl2 (+ kl2 1))))
     (setq npd2 ndat)(if (not(equal nad ""))(progn (setq npa2 nad)))
     (setq zna nil opb1 nil op1 nil op2 nil ndat nil nad nil)))
 (if (and (equal opb1 "1")(equal op1 "3")(equal op2 "1"))(progn 
     (if (not kl3)(setq kl3 0))(if kl3 (progn (setq kl3 (+ kl3 1))))
     (setq npd3 ndat)(if (not(equal nad ""))(progn (setq npa3 nad)))
     (setq zna nil opb1 nil op1 nil op2 nil ndat nil nad nil)))
 (if (and (equal opb1 "1")(equal op1 "4")(equal op2 "1"))(progn 
     (if (not kl4)(setq kl4 0))(if kl4 (progn (setq kl4 (+ kl4 1))))
     (setq npd4 ndat)(if (not(equal nad ""))(progn (setq npa4 nad)))
     (setq zna nil opb1 nil op1 nil op2 nil ndat nil nad nil)))
 (if (and (equal opb1 "1")(equal op1 "5")(equal op2 "1"))(progn 
     (if (not kl5)(setq kl5 0))(if kl5 (progn (setq kl5 (+ kl5 1))))
     (setq npd5 ndat)(if (not(equal nad ""))(progn (setq npa5 nad)))
     (setq zna nil opb1 nil op1 nil op2 nil ndat nil nad nil)))
Теперь перейдем к рассмотрению фильтров (только части), которые используя набор совокупных признаков помогают в сортировке данных, в нашем случае дымового пожарного извещателя (ПИ) по признаку opb1=1 принадлежащего к первому шлейфу op1=1 (надо помнить, что первым шлейфом при прокрутке может быть шлейф 1 - шлейф 6 - шлейф 11 – и т.д. с шагом 5. Аналогично для 2,3,4,5 шлейфа. Определяется количество (ПИ), адрес (ПИ). Условия других фильтров для второго, третьего, четвертого и пятого шлейфов работают аналогично. В данном примере я не показываю остальные фильтры для ручных (ПИ), коробок и БРИЗ. Они легко читаются в основном тексте про-граммы.
;(princ "========================================")
     (setq imj nil zna nil op1 nil op2 nil ndat nil nad nil)(gc)
     (setq nsh11 nil nsh12 nil nsh13 nil nsh14 nil nsh15 nil)(gc)
))                ;условие 1 окончание                                      
(setq a (entnext a))
(if a (progn (setq b (cdr(assoc '0 (entget a))))
      (setq imj (cdr(assoc '2 (entget a))))
))     
(if (not a) (progn (setq aa2 nil)))
)                ; цикл 2 по шлейфам окончание
Конечная часть рассмотрения информации о (ПИ) – окончание работы фильтров по признакам, обнуление ненужных переменных, до окончания цикла эта часть помогает прокрутке примитивов чертежа, если заканчивается последний примитив чертежа, то заканчивается и работа цикла 2 (aa2) и мы выходим из цикла.
(if (and kl1 npa1) (progn (setq kl kl1 npd npd1 npa npa1)
  (setq nsh nsh1 dat "ДИП-34А")(setq npd1 nil npa1 nil)(gc)
  (load "rach3")(rach3)(setq rach3 nil)(gc)
  (princ "ДИП-34А в шлейфе")(princ " ")(princ nsh)
  (princ "   ")(princ kl) (princ " шт")(terpri)
  (load"sbros3")(sbros3)(setq sbros3 nil)(gc)
  (setq kl nil npd nil npa nil)(gc)))
Мы рассматриваем первое из пяти условий. Условия сброса информации в текстовые информационные файлы. Для этого в условии производится переименование переменных в стандартные имена для работы в дополнительных унифицированных программах, где и используются эти стандартные имена. Дополнительные программы будут рассмотрены позднее. К примеру программа «rach3» служит для формирования первого и последнего номера (ПИ) и формирования первого и последнего адреса (ПИ). А уже программа «sbros3» помогает сбросить эти оформленные данные в текстовый файл на диске, после чего стандартные переменные, которые использовались в этих программах уничтожаются, чтобы возродится вновь в других местах. Одновременно работает пять похожих условий для пяти шлейфов. Они хорошо просматриваются в тексте программы. Единственное, что хотелось бы добавить это условие работает в цикле 1 и сбрасывает последовательно при работе цикла 1 данные например по шлейфу 1, затем шлейфу 6, шлейфу 11, шлейфу 16 и т.д. Аналогично работают и другие условия для 2,3,4 и 5 шлейфов. Надо подчеркнуть, что эти пять условий служат для пожарных извещателей ДИП-34А.
(if (and kl11 npa11) (progn 
  (setq kl kl11 npd npd11 npa npa11 nsh nsh1 dat "ИПР-513-3А")
  (princ "ИПР-513-3А в шлейфе")(princ " ")
  (princ nsh)(princ " = ")(princ kl) (princ " шт")(terpri)
  (if (and kl1 kl11)(progn (setq npd1 (itoa(+ kl1 1)))
    (setq npd (itoa(+ kl1 kl11)))
    (load "rach1")(rach1)(setq rach1 nil)(gc)  
    (load"sbros1")(sbros1)(setq sbros1 nil)))
  (if (and kl11 (not kl1))(progn 
    (load "rach3")(rach3)(setq rach3 nil)(gc)
    (load"sbros3")(sbros3)(setq sbros3 nil)(gc)))
  (setq npd11 nil npa11 nil kl1 nil kl11 nil)(gc)))
Данное условие является первым из пяти для сброса информации по по пожарным извещателям ручным. Смысл работы условия аналогичен вышеописанному с небольшими уточнениями. Если в шлейфе имеются кроме ручных (ПИ) и пожарные извещатели ДИП-34А, то в работу включаются программы «rach1» и «sbros1», если в шлейфе отсутствуют пожарные извещатели ДИП-34А, то в работу включаются программы «rach3 и «sbros3».
(if kl20 (progn (setq kl kl20 nsh nsh1)
  (princ "УК-П в шлейфе")(princ " ")(princ nsh)
  (princ " = ")(princ kl)(terpri)
  (load"sbros4")(sbros4)(setq sbros4 nil)))
Данное условие является первым из пяти для сброса информации по коробкам УК-П. Принцип работы аналогичен вышеописанному, только немного проще. Остальные пять условий аналогично.
(if kl30 (progn (setq kl kl30 nsh nsh1)
  (princ "БРИЗ в шлейфе")(princ " ")(princ nsh)
  (princ " = ")(princ kl)(terpri)
  (load"sbros4")(sbros4)(setq sbros4 nil)))(setq kl30 nil)(gc)
Данное условие является первым из пяти для сброса информации по устройствам БРИЗ. Принцип работы аналогичен вышеописанному, только немного проще. Остальные пять условий аналогично.
(setq a (entnext))(setq aa2 t)
(if a (progn (setq b (cdr(assoc '0 (entget a))))
      (setq imj (cdr(assoc '2 (entget a))))
))
Смысл данного выражения заключается в отыскании первого примитива чертежа, т.е. начало нового цикла работы, для того чтобы отработать следующие пять шлейфов, аналогично предыдущим пяти шлейфам.
(setq nsh10 (+ nsh10 5))(setq nsh1 (itoa nsh10))
(setq nsh2 (itoa(+ nsh10 1)))(setq nsh3 (itoa(+ nsh10 2))) 
(setq nsh4 (itoa(+ nsh10 3)))(setq nsh5 (itoa(+ nsh10 4))) 
Нумерация пяти рассматриваемых шлейфов. Для этого к номеру старого первого шлейфа добавляется цифра «5». Аналогично для второго шлейфа, третьего шлейфа, четвертого шлейфа и пятого шлейфа.
(if (> nsh10 160)(progn (setq aa1 nil aa2 nil)))
Выражение, создающее предел для работы программы, если номер шлейфа достигает величины, превышающей цифру «160», программа прекращает свою работу. Поэтому, если число шлейфов на чертеже имеет другое значение, то предел можно корректировать.
(if kl1 (setq kl1 nil))(if kl2 (setq kl2 nil))
(if kl3 (setq kl3 nil))(if kl4 (setq kl4 nil))
(if kl5 (setq kl5 nil))(if kl20 (setq kl20 nil))
(if kl21 (setq kl21 nil))(if kl22 (setq kl22 nil))
(if kl23 (setq kl23 nil))(if kl24 (setq kl24 nil))
(if kl30 (setq kl30 nil))(if kl31 (setq kl31 nil))
(if kl32 (setq kl32 nil))(if kl33 (setq kl33 nil))
(if kl34 (setq kl34 nil))
)                 ; цикл по этажам (условно)  
Уничтожение используемых переменных (перестраховка), ведь они могут уничтожаться в процессе работы. Скобка окончания цикла 1. Либо мы остаемся и работаем на новом витке, либо заканчиваем работу и выходим из цикла.
(textscr)
(terpri)(princ "============================================")(terpri)
(setq a nil b nil c nil a1 nil)(gc)
(setq zna nil imj nil)(gc)
(setq op1 nil op2 nil op3 nil)(gc)
(setq kl1 nil kl2 nil kl3 nil kl4 nil kl5 nil)(gc)
(setq kl21 nil kl22 nil kl23 nil kl24 nil kl20 nil)(gc)
(setq kl31 nil kl32 nil kl33 nil kl34 nil kl30 nil)(gc)
(princ "========== конец 1_oppg5 ============")(terpri)
)
Окончание работы программы. Уничтожение оставшихся переменных.

Текст программы 1_OPPG5.LSP

(defun 1_oppg5() ; задача в 5 раз быстрее чем 1_opg
;ОБСЧЕТ ПЛАНА ДАННЫХ ПОЖ.СИГНАЛ. АДРЕСНЫЕ ДЫМ.РУЧН НОМ.ЛУЧА БРИЗ
;ДЛЯ ПОДГОТОВКИ ПОСТРОЕНИЯ ТАБЛИЦЫ КДЛ для дип-34А и ИПР-513-3А 
;может брать любое кол-во этажей 
(princ "=============== начало 1_oppg5 ===============")(terpri)
(setq a nil b nil c nil a1 nil)(gc)
(setq zna nil imj nil nad nil ndat nil)(gc)
(setq kl1 nil kl2 nil kl3 nil kl4 nil kl5 nil)(gc)
(setq kl21 nil kl22 nil kl23 nil kl24 nil kl20 nil)(gc)
(setq kl31 nil kl32 nil kl33 nil kl34 nil kl30 nil)(gc)
(setq npd1 nil npd2 nil npd3 nil npd4 nil npd5 nil)
(setq npa1 nil npa2 nil npa3 nil npa4 nil npa5 nil)
(setq op1 nil op2 nil op3 nil op4 nil op5 nil op6 nil op7 nil)(gc)
(princ "=====================================")(terpri)
(princ "      ВВЕДИТЕ НОМЕР ЭТАЖА            ")(terpri)
(princ "-------------------------------------")(terpri)
(princ "      ЭТАЖ 1                 = 1     ")(terpri)
(princ "      ЭТАЖ 2                 = 2     ")(terpri)
(princ "      ЭТАЖ N                 = N     ")(terpri)
(princ "=====================================")(terpri)
(setq net (getstring "\n   ВВЕДИТЕ НОМЕР ЭТАЖА !!!\n___: "))
(princ "=====================================")(terpri)
(princ "      ВВЕДИТЕ НОМЕР ШЛЕЙФА           ")(terpri)
(princ "-------------------------------------")(terpri)
(princ "      ШЛЕЙФ 1                = 1     ")(terpri)
(princ "      ШЛЕЙФ 2                = 2     ")(terpri)
(princ "      ШЛЕЙФ N                = N     ")(terpri)
(princ "=====================================")(terpri)
(setq nsh (getstring "\n   ВВЕДИТЕ НОМЕР ШЛЕЙФА !!!\n___: "))
(setq nsh10 (atoi nsh))
(setq nsh1 nsh nshn nsh)
(setq nsh2 (itoa(+ nsh10 1))) 
(setq nsh3 (itoa(+ nsh10 2))) 
(setq nsh4 (itoa(+ nsh10 3))) 
(setq nsh5 (itoa(+ nsh10 4))) 
(setq a (entnext))   
(setq b (cdr(assoc '0 (entget a))) aa1 t aa2 t nnnn 0)
(setq imj (cdr(assoc '2 (entget a))))
(while aa1             ;цикл 1 работы по этажу                                    
  (while aa2           ;цикл 2 работы по шлейфу                                   
    (if (and (equal b "INSERT")                   
        (or(equal imj "1_NL")(equal imj "1_NLR")(equal imj "1_NL3")
        (equal imj "1_NLR3")(equal imj "1_UK")(equal imj "BRIZ")))
        (progn                                    ;условие 1
        (setq imj (cdr(assoc '2 (entget a))))                                     
        (if (or(equal imj "1_NL3")(equal imj "1_NL"))(progn  
            (setq opb1 "1")(setq a (entnext a) bb t)))       
        (if (or(equal imj "1_NLR")(equal imj "1_NLR3"))(progn 
            (setq opb1 "2")(setq a (entnext a) bb t)))       
        (if (equal imj "1_UK")(progn  (setq opb1 "3")
            (setq a (entnext a) bb t)))       
        (if (equal imj "BRIZ")(progn  (setq opb1 "4")
            (setq a (entnext a) bb t)))       
        (while bb     ;цикл 3 просмотра атрибутов                                                      
            (setq b (cdr(assoc '0 (entget a))))                         
            (setq imj (cdr(assoc '2 (entget a))))
            (setq zna (cdr(assoc '1 (entget a))))
            (if (equal b "ATTRIB")(progn                                    
                (if (equal imj "NL")(progn ;НОМЕР ЛУЧА      
                    (if (equal zna (strcat net "-" nsh1)) (progn
                        (setq op1 "1")))
                    (if (equal zna (strcat net "-" nsh2)) (progn 
                        (setq op1 "2")))
                    (if (equal zna (strcat net "-" nsh3)) (progn 
                        (setq op1 "3")))
                    (if (equal zna (strcat net "-" nsh4)) (progn 
                        (setq op1 "4")))
                    (if (equal zna (strcat net "-" nsh5)) (progn 
                        (setq op1 "5")))
                ))                                                          
                (if (equal imj "DAT1")(progn 
                    (if (equal zna "ДИП-34А")(progn 
                        (setq op2 "1")))
                )) 
                (if (equal imj "DAT2")(progn 
                    (if (equal zna "ИПР-513-3А")(progn
                        (setq op3 "1")))
                ))
                (if (equal imj "DAT3")(progn 
                    (if (equal zna "С2000-ИП")(progn
                        (setq op3 "2")))
                ))
                (if (equal imj "ND")(progn (setq ndat zna)))
                ; НОМЕР ДАТЧИКА
                (if (equal imj "ADR") (progn (setq nad zna)))    
                ;АДРЕС ДАТЧИКА
            ))                                                               
            (setq a (entnext a))
            (if a (progn (setq b (cdr(assoc '0 (entget a))))
                  (setq imj (cdr(assoc '2 (entget a))))
                  (setq zna (cdr(assoc '1 (entget a))))
                  (if (equal b "SEQEND")(progn (setq bb nil)))
            ))
            (if (not a)(progn (setq bb nil aa nil)))
          )     ;цикл 3 просмотра атрибутов окончание                                                                
;(princ "===============================================")
 (if (and (equal opb1 "1")(equal op1 "1")(equal op2 "1"))(progn 
     (if (not kl1)(setq kl1 0))(if kl1 (progn (setq kl1 (+ kl1 1))))
     (setq npd1 ndat)(if (not(equal nad ""))(progn (setq npa1 nad)))
     (setq zna nil opb1 nil op1 nil op2 nil ndat nil nad nil)))
 (if (and (equal opb1 "1")(equal op1 "2")(equal op2 "1"))(progn 
     (if (not kl2)(setq kl2 0))(if kl2 (progn (setq kl2 (+ kl2 1))))
     (setq npd2 ndat)(if (not(equal nad ""))(progn (setq npa2 nad)))
     (setq zna nil opb1 nil op1 nil op2 nil ndat nil nad nil)))
 (if (and (equal opb1 "1")(equal op1 "3")(equal op2 "1"))(progn 
     (if (not kl3)(setq kl3 0))(if kl3 (progn (setq kl3 (+ kl3 1))))
     (setq npd3 ndat)(if (not(equal nad ""))(progn (setq npa3 nad)))
     (setq zna nil opb1 nil op1 nil op2 nil ndat nil nad nil)))
 (if (and (equal opb1 "1")(equal op1 "4")(equal op2 "1"))(progn 
     (if (not kl4)(setq kl4 0))(if kl4 (progn (setq kl4 (+ kl4 1))))
     (setq npd4 ndat)(if (not(equal nad ""))(progn (setq npa4 nad)))
     (setq zna nil opb1 nil op1 nil op2 nil ndat nil nad nil)))
 (if (and (equal opb1 "1")(equal op1 "5")(equal op2 "1"))(progn 
     (if (not kl5)(setq kl5 0))(if kl5 (progn (setq kl5 (+ kl5 1))))
     (setq npd5 ndat)(if (not(equal nad ""))(progn (setq npa5 nad)))
     (setq zna nil opb1 nil op1 nil op2 nil ndat nil nad nil)))
 (if (and (equal opb1 "2")(equal op1 "1")(equal op3 "1"))(progn 
     (if (not kl11)(setq kl11 0))
     (if kl11 (progn (setq kl11 (+ kl11 1))))(setq npd11 ndat)
     (if (not(equal nad ""))(progn (setq npa11 nad)))
     (setq zna nil opb1 nil op1 nil op3 nil ndat nil nad nil)))
 (if (and (equal opb1 "2")(equal op1 "2")(equal op3 "1"))(progn 
     (if (not kl12)(setq kl12 0))
     (if kl12 (progn (setq kl12 (+ kl12 1))))(setq npd12 ndat)
     (if (not(equal nad ""))(progn (setq npa12 nad)))
     (setq zna nil opb1 nil op1 nil op3 nil ndat nil nad nil)))
 (if (and (equal opb1 "2")(equal op1 "3")(equal op3 "1"))(progn 
     (if (not kl13)(setq kl13 0))
     (if kl13 (progn (setq kl13 (+ kl13 1))))(setq npd13 ndat)
     (if (not(equal nad ""))(progn (setq npa13 nad)))
     (setq zna nil opb1 nil op1 nil op3 nil ndat nil nad nil)))
 (if (and (equal opb1 "2")(equal op1 "4")(equal op3 "1"))(progn 
     (if (not kl14)(setq kl14 0))
     (if kl14 (progn (setq kl14 (+ kl14 1))))(setq npd14 ndat)
     (if (not(equal nad ""))(progn (setq npa14 nad)))
     (setq zna nil opb1 nil op1 nil op3 nil ndat nil nad nil)))
 (if (and (equal opb1 "2")(equal op1 "5")(equal op3 "1"))(progn 
     (if (not kl15)(setq kl15 0))
     (if kl15 (progn (setq kl15 (+ kl15 1))))(setq npd15 ndat)
     (if (not(equal nad ""))(progn (setq npa15 nad)))
     (setq zna nil opb1 nil op1 nil op3 nil ndat nil nad nil)))
 (if (and (equal opb1 "1")(equal op1 "1")(equal op3 "2"))(progn 
     (if (not kl41)(setq kl41 0))
     (if kl41 (progn (setq kl41 (+ kl41 1))))(setq npd41 ndat)
     (if (not(equal nad ""))(progn (setq npa41 nad)))
     (setq zna nil opb1 nil op1 nil op3 nil ndat nil nad nil)))
 (if (and (equal opb1 "1")(equal op1 "2")(equal op3 "2"))(progn 
     (if (not kl42)(setq kl42 0))
     (if kl42 (progn (setq kl42 (+ kl42 1))))(setq npd42 ndat)
     (if (not(equal nad ""))(progn (setq npa42 nad)))
     (setq zna nil opb1 nil op1 nil op3 nil ndat nil nad nil)))
 (if (and (equal opb1 "1")(equal op1 "3")(equal op3 "2"))(progn 
     (if (not kl43)(setq kl43 0))
     (if kl43 (progn (setq kl43 (+ kl43 1))))(setq npd43 ndat)
     (if (not(equal nad ""))(progn (setq npa43 nad)))
     (setq zna nil opb1 nil op1 nil op3 nil ndat nil nad nil)))
 (if (and (equal opb1 "1")(equal op1 "4")(equal op3 "2"))(progn 
     (if (not kl44)(setq kl44 0))
     (if kl44 (progn (setq kl44 (+ kl44 1))))(setq npd44 ndat)
     (if (not(equal nad ""))(progn (setq npa44 nad)))
     (setq zna nil opb1 nil op1 nil op3 nil ndat nil nad nil)))
 (if (and (equal opb1 "1")(equal op1 "5")(equal op3 "2"))(progn 
     (if (not kl45)(setq kl45 0))
     (if kl45 (progn (setq kl45 (+ kl45 1))))(setq npd45 ndat)
     (if (not(equal nad ""))(progn (setq npa45 nad)))
     (setq zna nil opb1 nil op1 nil op3 nil ndat nil nad nil)))
 (if (and (equal opb1 "3")(equal op1 "1"))(progn 
     (if (not kl20)(setq kl20 0))
     (if kl20 (progn (setq kl20 (+ kl20 1))))
     (setq zna nil opb1 nil op1 nil)))
 (if (and (equal opb1 "3")(equal op1 "2"))(progn 
     (if (not kl21)(setq kl21 0))
     (if kl21 (progn (setq kl21 (+ kl21 1))))
     (setq zna nil opb1 nil op1 nil)))
 (if (and (equal opb1 "3")(equal op1 "3"))(progn 
     (if (not kl22)(setq kl22 0))
     (if kl22 (progn (setq kl22 (+ kl22 1))))
     (setq zna nil opb1 nil op1 nil)))
 (if (and (equal opb1 "3")(equal op1 "4"))(progn 
     (if (not kl23)(setq kl23 0))
     (if kl23 (progn (setq kl23 (+ kl23 1))))
     (setq zna nil opb1 nil op1 nil)))
 (if (and (equal opb1 "3")(equal op1 "5"))(progn 
     (if (not kl24)(setq kl24 0))
     (if kl24 (progn (setq kl24 (+ kl24 1))))
     (setq zna nil opb1 nil op1 nil)))
 (if (and (equal opb1 "4")(equal op1 "1"))(progn 
     (if (not kl30)(setq kl30 0))
     (if kl30 (progn (setq kl30 (+ kl30 1))))
     (setq zna nil opb1 nil op1 nil)))
 (if (and (equal opb1 "4")(equal op1 "2"))(progn 
     (if (not kl31)(setq kl31 0))
     (if kl31 (progn (setq kl31 (+ kl31 1))))
     (setq zna nil opb1 nil op1 nil)))
 (if (and (equal opb1 "4")(equal op1 "3"))(progn 
     (if (not kl32)(setq kl32 0))
     (if kl32 (progn (setq kl32 (+ kl32 1))))
     (setq zna nil opb1 nil op1 nil)))
 (if (and (equal opb1 "4")(equal op1 "4"))(progn 
     (if (not kl33)(setq kl33 0))
     (if kl33 (progn (setq kl33 (+ kl33 1))))
     (setq zna nil opb1 nil op1 nil)))
 (if (and (equal opb1 "4")(equal op1 "5"))(progn 
     (if (not kl34)(setq kl34 0))
     (if kl34 (progn (setq kl34 (+ kl34 1))))
     (setq zna nil opb1 nil op1 nil)))
     ;(princ "========================================")
     (setq imj nil zna nil op1 nil op2 nil ndat nil nad nil)(gc)
     (setq nsh11 nil nsh12 nil nsh13 nil nsh14 nil nsh15 nil)(gc)
))                ;условие 1 окончание                                      
(setq a (entnext a))
(if a (progn (setq b (cdr(assoc '0 (entget a))))
      (setq imj (cdr(assoc '2 (entget a))))
))     
(if (not a) (progn (setq aa2 nil)))
)                ; цикл 2 по шлейфам окончание                                              
 (princ "net = ")(princ net)(terpri)
 ;(princ "nsh = ")(princ nsh)(terpri)
 (princ "kl1 = ")(princ kl1)(terpri)
 (princ "kl2 = ")(princ kl2)(terpri)
 (princ "kl3 = ")(princ kl3)(terpri)
 (princ "kl4 = ")(princ kl4)(terpri)
 (princ "kl5 = ")(princ kl5)(terpri)
 ;(princ "kl11 = ")(princ kl11)(terpri)
 (princ "kl12 = ")(princ kl12)(terpri)
 ;(princ "kl13 = ")(princ kl13)(terpri)
 (princ "kl14 = ")(princ kl14)(terpri)
 ;(princ "kl15 = ")(princ kl15)(terpri)
 (if kl15 (progn (princ "npa15 = ")(princ npa15)(terpri)))
 (princ "kl30 = ")(princ kl30)(terpri)
 (princ "kl31 = ")(princ kl31)(terpri) 
 (princ "kl32 = ")(princ kl32)(terpri)
 (princ "kl33 = ")(princ kl33)(terpri)
 (princ "kl34 = ")(princ kl34)(terpri)
 (princ "kl41 = ")(princ kl41)(terpri)
 (princ "kl42 = ")(princ kl42)(terpri) 
 (princ "kl43 = ")(princ kl43)(terpri)
 (princ "kl44 = ")(princ kl44)(terpri)
 (princ "kl45 = ")(princ kl45)(terpri);(getstring "")
(if (and kl1 npa1) (progn (setq kl kl1 npd npd1 npa npa1)
  (setq nsh nsh1 dat "ДИП-34А")(setq npd1 nil npa1 nil)(gc)
  (load "rach3")(rach3)(setq rach3 nil)(gc)
  (princ "ДИП-34А в шлейфе")(princ " ")(princ nsh)
  (princ "   ")(princ kl) (princ " шт")(terpri)
  (load"sbros3")(sbros3)(setq sbros3 nil)(gc)
  (setq kl nil npd nil npa nil)(gc)))
(if (and kl2 npa2) (progn (setq kl kl2 npd npd2 npa npa2)
  (setq nsh nsh2 dat "ДИП-34А")(setq npd2 nil npa2 nil)(gc)
  (load "rach3")(rach3)(setq rach3 nil)(gc)
  (princ "ДИП-34А в шлейфе")(princ " ")(princ nsh)
  (princ "   ")(princ kl) (princ " шт")(terpri)
  (load"sbros3")(sbros3)(setq sbros3 nil)(gc)
  (setq kl nil npd nil npa nil)(gc)))
(if (and kl3 npa3) (progn
  (setq kl kl3 npd npd3 npa npa3 nsh nsh3 dat "ДИП-34А")
  (setq npd3 nil npa3 nil)(gc)
  (load "rach3")(rach3)(setq rach3 nil)(gc)
  (princ "ДИП-34А в шлейфе")(princ " ")(princ nsh)
  (princ " = ")(princ kl) (princ " шт")(terpri)
  (load"sbros3")(sbros3)(setq sbros3 nil)(gc)
  (setq kl nil npd nil npa nil)(gc)))
(if (and kl4 npa4) (progn 
  (setq kl kl4 npd npd4 npa npa4 nsh nsh4 dat "ДИП-34А")
  (setq npd4 nil npa4 nil)(gc)
  (load "rach3")(rach3)(setq rach3 nil)(gc)
  (princ "ДИП-34А в шлейфе")(princ " ")
  (princ nsh)(princ " = ")(princ kl) (princ " шт")(terpri)
  (load"sbros3")(sbros3)(setq sbros3 nil)(gc)
  (setq kl nil npd nil npa nil)(gc)))
(if (and kl5 npa5) (progn 
  (setq kl kl5 npd npd5 npa npa5 nsh nsh5 dat "ДИП-34А")
  (setq npd5 nil npa5 nil)(gc)
  (load "rach3")(rach3)(setq rach3 nil)(gc)
  (princ "ДИП-34А в шлейфе")(princ " ")
  (princ nsh)(princ " = ")(princ kl) (princ " шт")(terpri)
  (load"sbros3")(sbros3)(setq sbros3 nil)(gc)
  (setq kl nil npd nil npa nil)(gc)))
(if (and kl11 npa11) (progn 
  (setq kl kl11 npd npd11 npa npa11 nsh nsh1 dat "ИПР-513-3А")
  (princ "ИПР-513-3А в шлейфе")(princ " ")
  (princ nsh)(princ " = ")(princ kl) (princ " шт")(terpri)
  (if (and kl1 kl11)(progn (setq npd1 (itoa(+ kl1 1)))
    (setq npd (itoa(+ kl1 kl11)))
    (load "rach1")(rach1)(setq rach1 nil)(gc)  
    (load"sbros1")(sbros1)(setq sbros1 nil)))
  (if (and kl11 (not kl1))(progn 
    (load "rach3")(rach3)(setq rach3 nil)(gc)
    (load"sbros3")(sbros3)(setq sbros3 nil)(gc)))
  (setq npd11 nil npa11 nil kl1 nil kl11 nil)(gc)))
(if (and kl12 npa12)(progn 
  (setq kl kl12 npd npd12 npa npa12 nsh nsh2 dat "ИПР-513-3А")
  (princ "ИПР-513-3А в шлейфе")(princ " ")
  (princ nsh)(princ " = ")(princ kl) (princ " шт")(terpri)
  (if (and kl2 kl12)(progn 
    (setq npd1 (itoa(+ kl2 1)))(setq npd (itoa(+ kl2 kl12)))
    (load "rach1")(rach1)(setq rach1 nil)(gc)  
    (load"sbros1")(sbros1)(setq sbros1 nil)))
  (if (and kl12 (not kl2))(progn 
    (load "rach3")(rach3)(setq rach3 nil)(gc)
    (load"sbros3")(sbros3)(setq sbros3 nil)(gc)))
  (setq npd12 nil npa12 nil kl2 nil kl12 nil)(gc)))
(if (and kl13 npa13) (progn 
  (setq kl kl13 npd npd13 npa npa13 nsh nsh3 dat "ИПР-513-3А")
  (princ "ИПР-513-3А в шлейфе")(princ " ")
  (princ nsh)(princ " = ")(princ kl) (princ " шт")(terpri)
  (if (and kl3 kl13)(progn (setq npd1 (itoa(+ kl3 1)))
    (setq npd (itoa(+ kl3 kl13)))
    (load "rach1")(rach1)(setq rach1 nil)(gc) 
    (load"sbros1")(sbros1)(setq sbros1 nil)))
  (if (and kl13 (not kl3))(progn 
    (load "rach3")(rach3)(setq rach3 nil)(gc)
    (load"sbros3")(sbros3)(setq sbros3 nil)(gc)))
  (setq npd13 nil npa13 nil kl3 nil kl13 nil)(gc)))
(if (and kl14 npa14) (progn 
  (setq kl kl14 npd npd14 npa npa14 nsh nsh4 dat "ИПР-513-3А")
  (princ "ИПР-513-3А в шлейфе")(princ " ")
  (princ nsh)(princ " = ")(princ kl) (princ " шт")(terpri)
  (if (and kl4 kl14)(progn 
    (setq npd1 (itoa(+ kl4 1)))(setq npd (itoa(+ kl4 kl14)))
    (load "rach1")(rach1)(setq rach1 nil)(gc) 
    (load"sbros1")(sbros1)(setq sbros1 nil)))
  (if (and kl14 (not kl4))(progn 
    (load "rach3")(rach3)(setq rach3 nil)(gc)
    (load"sbros3")(sbros3)(setq sbros3 nil)(gc)))
  (setq npd14 nil npa14 nil kl4 nil kl14 nil)(gc)))
(if (and kl15 npa15) (progn 
  (setq kl kl15 npd npd15 npa npa15 nsh nsh5 dat "ИПР-513-3А")
  (princ "ИПР-513-3А в шлейфе")(princ " ")
  (princ nsh)(princ " = ")(princ kl) (princ " шт")(terpri)
  (if (and kl5 kl15)(progn 
    (setq npd1 (itoa(+ kl5 1)))(setq npd (itoa(+ kl5 kl15)))
    (load "rach1")(rach1)(setq rach1 nil)(gc) 
    (load"sbros1")(sbros1)(setq sbros1 nil)))
  (if (and kl15 (not kl5))(progn 
    (load "rach3")(rach3)(setq rach3 nil)(gc)
    (load"sbros3")(sbros3)(setq sbros3 nil)(gc)))
  (setq npd15 nil npa15 nil kl5 nil kl15 nil)(gc)))
(if kl20 (progn (setq kl kl20 nsh nsh1)
  (princ "УК-П в шлейфе")(princ " ")(princ nsh)
  (princ " = ")(princ kl)(terpri)
  (load"sbros4")(sbros4)(setq sbros4 nil)))
(if (not kl20) (progn (setq kl 1 nsh nsh1)
  (princ "УК-П в шлейфе")(princ " ")(princ nsh)
  (princ " = ")(princ kl)(terpri)
  (load"sbros4")(sbros4)(setq sbros4 nil)))(setq kl20 nil)(gc)
(if kl21 (progn (setq kl kl21 nsh nsh2)
  (princ "УК-П в шлейфе")(princ " ")(princ nsh)
  (princ " = ")(princ kl)(terpri)
  (load"sbros4")(sbros4)(setq sbros4 nil)))
(if (not kl21) (progn (setq kl 1 nsh nsh2)
  (princ "УК-П в шлейфе")(princ " ")(princ nsh)
  (princ " = ")(princ kl)(terpri)
  (load"sbros4")(sbros4)(setq sbros4 nil)))(setq kl21 nil)(gc)
(if kl22 (progn (setq kl kl22 nsh nsh3)
  (princ "УК-П в шлейфе")(princ " ")(princ nsh)
  (princ " = ")(princ kl)(terpri)
  (load"sbros4")(sbros4)(setq sbros4 nil)))
(if (not kl22) (progn (setq kl 1 nsh nsh3)
  (princ "УК-П в шлейфе")(princ " ")(princ nsh)
  (princ " = ")(princ kl)(terpri)
  (load"sbros4")(sbros4)(setq sbros4 nil)))(setq kl22 nil)(gc)
(if kl23 (progn (setq kl kl23 nsh nsh4)
  (princ "УК-П в шлейфе")(princ " ")(princ nsh)
  (princ " = ")(princ kl)(terpri)
  (load"sbros4")(sbros4)(setq sbros4 nil)))
(if (not kl23) (progn (setq kl 1 nsh nsh4)
  (princ "УК-П в шлейфе")(princ " ")(princ nsh)
  (princ " = ")(princ kl)(terpri)
  (load"sbros4")(sbros4)(setq sbros4 nil)))(setq kl23 nil)(gc)
(if kl24 (progn (setq kl kl24 nsh nsh5)
  (princ "УК-П в шлейфе")(princ " ")(princ nsh)
  (princ " = ")(princ kl)(terpri)
  (load"sbros4")(sbros4)(setq sbros4 nil)))
(if (not kl24) (progn (setq kl 1 nsh nsh5)
  (princ "УК-П в шлейфе")(princ " ")(princ nsh)
  (princ " = ")(princ kl)(terpri)
  (load"sbros4")(sbros4)(setq sbros4 nil)))(setq kl24 nil)(gc)
(if kl30 (progn (setq kl kl30 nsh nsh1)
  (princ "БРИЗ в шлейфе")(princ " ")(princ nsh)
  (princ " = ")(princ kl)(terpri)
  (load"sbros4")(sbros4)(setq sbros4 nil)))(setq kl30 nil)(gc)
(if kl31 (progn (setq kl kl31 nsh nsh2)
  (princ "БРИЗ в шлейфе")(princ " ")(princ nsh)
  (princ " = ")(princ kl)(terpri)
  (load"sbros4")(sbros4)(setq sbros4 nil)))(setq kl31 nil)(gc)
(if kl32 (progn (setq kl kl32 nsh nsh3)
  (princ "БРИЗ в шлейфе")(princ " ")(princ nsh)
  (princ " = ")(princ kl)(terpri)
  (load"sbros4")(sbros4)(setq sbros4 nil)))(setq kl32 nil)(gc)
(if kl33 (progn (setq kl kl33 nsh nsh4)
  (princ "БРИЗ в шлейфе")(princ " ")(princ nsh)
  (princ " = ")(princ kl)(terpri)
  (load"sbros4")(sbros4)(setq sbros4 nil)))(setq kl33 nil)(gc)
(if kl34 (progn (setq kl kl34 nsh nsh5)
  (princ "БРИЗ в шлейфе")(princ " ")(princ nsh)
  (princ " = ")(princ kl)(terpri)
  (load"sbros4")(sbros4)(setq sbros4 nil)))(setq kl34 nil)(gc)
(setq a (entnext))(setq aa2 t)
(if a (progn (setq b (cdr(assoc '0 (entget a))))
      (setq imj (cdr(assoc '2 (entget a))))
))
(setq nsh10 (+ nsh10 5))(setq nsh1 (itoa nsh10))
(setq nsh2 (itoa(+ nsh10 1)))(setq nsh3 (itoa(+ nsh10 2))) 
(setq nsh4 (itoa(+ nsh10 3)))(setq nsh5 (itoa(+ nsh10 4))) 
(princ "net  = ")(princ net)
;(terpri)(princ "   nsh  = ")(princ nsh)(terpri)
(princ "  nsh1 = ")(princ nsh1)
;(terpri)(princ "  nsh2 = ")(princ nsh2);(terpri)
(princ "  nsh3 = ")(princ nsh3)
;(terpri)(princ "  nsh4 = ")(princ nsh4);(terpri)
(princ "  nsh5 = ")(princ nsh5)(terpri)
(if (> nsh10 160)(progn (setq aa1 nil aa2 nil))) 
(if kl1 (setq kl1 nil))(if kl2 (setq kl2 nil))
(if kl3 (setq kl3 nil))(if kl4 (setq kl4 nil))
(if kl5 (setq kl5 nil))(if kl20 (setq kl20 nil))
(if kl21 (setq kl21 nil))(if kl22 (setq kl22 nil))
(if kl23 (setq kl23 nil))(if kl24 (setq kl24 nil))
(if kl30 (setq kl30 nil))(if kl31 (setq kl31 nil))
(if kl32 (setq kl32 nil))(if kl33 (setq kl33 nil))
(if kl34 (setq kl34 nil))
)                 ; цикл по этажам                                                
(textscr)
(terpri)(princ "==========================")(terpri)
(setq a nil b nil c nil a1 nil)(gc)
(setq zna nil imj nil)(gc)
(setq op1 nil op2 nil op3 nil)(gc)
(setq kl1 nil kl2 nil kl3 nil kl4 nil kl5 nil)(gc)
(setq kl21 nil kl22 nil kl23 nil kl24 nil kl20 nil)(gc)
(setq kl31 nil kl32 nil kl33 nil kl34 nil kl30 nil)(gc)
(princ "========== конец 1_oppg5 ============")(terpri)
)

Дополнительные программы для работы основной программы 1_oppg5

Эти программы помогают:
  1. Структурированию некоторых данных – таких как, количество (ПИ) и их обозначение.
  2. Формировать данные и сбрасывать их в текстовые файлы с расширением (.txt).

Перечень дополнительных программ, участвующих, в работе основной программы 1_OPPG5.LSP

Программа RACH1.LSP – установка номеров и адресов датчиков ПС (первого и последнего) для ручного пожарного извещателя ИПР-513-3А шлейфа

(defun rach1() 
;установка номеров и адресов датчиков ПС первого и ;последнего
(princ "=============== начало rach1 ============")(terpri)
(setq adp (substr npa 1 8))  ; для ИПР-513-3а
(setq dlnpd1 (strlen npd1))
(if (= dlnpd1 1)(progn (setq npa1 (strcat adp "00" npd1))))
(if (= dlnpd1 2)(progn (setq npa1 (strcat adp "0" npd1))))
(if (= dlnpd1 3)(progn (setq npa1 (strcat adp npd1))))
(setq dlnpd (strlen npd))
(if (= dlnpd 1)(progn (setq npa (strcat adp "00" npd))))
(if (= dlnpd 2)(progn (setq npa (strcat adp "0" npd))))
(if (= dlnpd 3)(progn (setq npa (strcat adp npd))))
(setq adp nil dlnpd nil)(gc)
(princ "============== конец rach1 ==============")(terpri)
)
Эта программа формирует данные для текстового файла, для последую-щей установки этих данных в таблицу пожарной сигнализации. Сначала вычисляется длина номера пожарного извещателя (ПИ) (первого и последнего) и добавляется необходимое количество нулей для трехзначной части адреса, (к примеру, если номер первого (ПИ) - 15 добавляется один нуль и получается 015), а вид адреса будет А01.030.015. Аналогично работа идет по номеру последнего пожарного извещателя.

Текст программы RACH1.LSP

(defun rach1() 
;установка номеров и адресов датчиков ПС первого и последнего
(princ "=============== начало rach1 ============")(terpri)
(setq adp (substr npa 1 8))  ; для ИПР-513-3а
(setq dlnpd1 (strlen npd1))
(if (= dlnpd1 1)(progn (setq npa1 (strcat adp "00" npd1))))
(if (= dlnpd1 2)(progn (setq npa1 (strcat adp "0" npd1))))
(if (= dlnpd1 3)(progn (setq npa1 (strcat adp npd1))))
(setq dlnpd (strlen npd))
(if (= dlnpd 1)(progn (setq npa (strcat adp "00" npd))))
(if (= dlnpd 2)(progn (setq npa (strcat adp "0" npd))))
(if (= dlnpd 3)(progn (setq npa (strcat adp npd))))
(setq adp nil dlnpd nil)(gc)
(princ "============== конец rach1 ==============")(terpri)
)

Программа SBROS1.LSP – сброс данных о ручном ПС извещателе в текстовый файл

(defun sbros1() ; сброс данных о ручном ПС извещателе в файл
(princ "============== начало sbros1 ===============")(terpri)
(setq dan1 "D:\\0_PROGRAM\\НОВ_КАБ\\A\\") 
; для ИПР-513-3А
(setq pr (open (strcat dan1 net "_" nsh ".txt") "a"))
(if pr (progn (if dat (progn (write-line dat pr)))
   (if kl (progn (setq kl (itoa kl))(write-line kl pr)))
   (if npd1 (progn 
      (write-line npd1 pr)))(if npd (progn (write-line npd pr)))
   (if npa1 (progn 
   (write-line npa1 pr)))(if npa (progn (write-line npa pr)))
))
(if pr (progn (close pr)(setq pr nil dan1 nil)))
(setq dan1 nil dat nil npd1 nil npd nil)(gc)
(setq kl nil npa nil npa1 nil)(gc)
(princ "============== конец sbros1 ===================")(terpri)
)
Эта программа помогает сформировать на диске текстовые файлы и поместить в них информацию о ручных пожарных извещателях. Работа идет последовательно по принципу «один файл – один шлейф». Если в шлейфе присутствуют дымовые адресные датчики ДИП-34А, то файл шлейфа создается раньше при записи данных о ДИП, а информация о ручных (ПИ) дописывается вслед. Особое внимание следует уделить пути открытия текстового файла. Этот путь сохраняется в перемен-ной (dan1). Естественно, что работу программы можно организовать в любом месте диска на выбор проектировщика. По опыту работы могу сказать, что лучше всего организовать систему папок, находящихся в одном месте, и в этом месте в разных папках размещать системы разных программ.

Текст программы SBROS1.LSP

(defun sbros1() ; сброс данных о ручном ПС извещателе в файл
(princ "============== начало sbros1 ===============")(terpri)
(setq dan1 "D:\\0_PROGRAM\\НОВ_КАБ\\A\\") 
; для ИПР-513-3А
(setq pr (open (strcat dan1 net "_" nsh ".txt") "a"))
(if pr (progn (if dat (progn (write-line dat pr)))
   (if kl (progn (setq kl (itoa kl))(write-line kl pr)))
   (if npd1 (progn 
      (write-line npd1 pr)))(if npd (progn (write-line npd pr)))
   (if npa1 (progn 
   (write-line npa1 pr)))(if npa (progn (write-line npa pr)))
))
(if pr (progn (close pr)(setq pr nil dan1 nil)))
(setq dan1 nil dat nil npd1 nil npd nil)(gc)
(setq kl nil npa nil npa1 nil)(gc)
(princ "============== конец sbros1 ===================")(terpri)
)

Программа RACH3.LSP – установка номеров и адресов датчиков дымовых пожарной сигнализации (первого и последнего)

(defun rach3() 
;установка номеров и адресов датчиков ПС первого и последнего
(princ "============= начало rach3 ==============")(terpri)
(setq nnd1 "1" npd (itoa kl))   ;для ДИП-34А
(setq adp (substr npa 1 8))(setq npa1 (strcat adp "001"))   
(setq dlnpd (strlen npd))
(if (= dlnpd 1)(progn (setq npa (strcat adp "00" npd))))
(if (= dlnpd 2)(progn (setq npa (strcat adp "0" npd))))
(if (= dlnpd 3)(progn (setq npa (strcat adp npd))))
(setq adp nil dlnpd nil)(gc)
(princ "============= конец rach3 ===============")(terpri)
)
Эта программа формирует данные для текстового файла, для последую-щей установки этих данных в таблицу пожарной сигнализации. Сначала вычисляется длина номера пожарного извещателя (ПИ) (первого и последнего) и добавляется необходимое количество нулей для трехзначной части адреса, (к примеру, если номер первого (ПИ) - 1 добавляется два нуля и получается 001), а вид адреса будет А01.030.001. Аналогично работа идет по номеру последнего пожарного извещателя.

Текст программы RACH3.LSP

(defun rach3() 
;установка номеров и адресов датчиков ПС первого и последнего
(princ "============= начало rach3 ==============")(terpri)
(setq nnd1 "1" npd (itoa kl))   ;для ДИП-34А
(setq adp (substr npa 1 8))(setq npa1 (strcat adp "001"))   
(setq dlnpd (strlen npd))
(if (= dlnpd 1)(progn (setq npa (strcat adp "00" npd))))
(if (= dlnpd 2)(progn (setq npa (strcat adp "0" npd))))
(if (= dlnpd 3)(progn (setq npa (strcat adp npd))))
(setq adp nil dlnpd nil)(gc)
(princ "============= конец rach3 ===============")(terpri)
)

Программа SBROS3.LSP – сброс данных об основном извещателе ДИП-34А в т/файл

(defun sbros3() 
;сброс данных об основном ПС извещателе в файл
(princ "============ начало sbros ===============")(terpri)
(setq dan1 "D:\\0_PROGRAM\\НОВ_КАБ\\A\\")  ;для ДИП-34А
(setq pr (open (strcat dan1 net "_" nsh ".txt") "r"))
(setq aaa (strcat dan1 net "_" nsh ".txt"))(princ aaa)(terpri)
(setq aaa nil)
(if pr (progn (close pr)
   (setq pr (open (strcat dan1 net "_" nsh ".txt") "w"))
   (close pr)(setq pr nil)
))
(if (not pr)(progn 
   (setq pr (open (strcat dan1 net "_" nsh ".txt") "a"))
))
(if dat (progn (write-line dat pr)))
(if kl (progn (setq kl (itoa kl))(write-line kl pr)))
(if nnd1 (progn (write-line nnd1 pr)))
(if npd (progn (write-line npd pr)))
(if npa1 (progn (write-line npa1 pr)))
(if npa (progn (write-line npa pr)))
(if pr (progn (close pr)(setq pr nil)))
(setq dan nil nnd1 nil npd nil kl nil npa nil npa1 nil)(gc)
(princ "=========== конец sbros =================")(terpri)
)
Эта программа помогает сформировать на диске текстовые файлы и поместить в них информацию о дымовых пожарных извещателях. Работа идет последовательно по принципу «один файл – один шлейф». Особое внимание следует уделить пути открытия текстового файла. Этот путь сохраняется в переменной (dan1). Естественно, что работу программы можно организовать в любом месте диска на выбор проектировщика. По опыту работы могу сказать, что лучше всего организовать систему папок, находящихся в одном месте, и в этом месте в разных папках размещать системы разных программ.

Текст программы SBROS3.LSP

(defun sbros3() 
;сброс данных об основном ПС извещателе в файл
(princ "============ начало sbros ===============")(terpri)
(setq dan1 "D:\\0_PROGRAM\\НОВ_КАБ\\A\\")  ;для ДИП-34А
(setq pr (open (strcat dan1 net "_" nsh ".txt") "r"))
(setq aaa (strcat dan1 net "_" nsh ".txt"))(princ aaa)(terpri)
(setq aaa nil)
(if pr (progn (close pr)
   (setq pr (open (strcat dan1 net "_" nsh ".txt") "w"))
   (close pr)(setq pr nil)
))
(if (not pr)(progn 
   (setq pr (open (strcat dan1 net "_" nsh ".txt") "a"))
))
(if dat (progn (write-line dat pr)))
(if kl (progn (setq kl (itoa kl))(write-line kl pr)))
(if nnd1 (progn (write-line nnd1 pr)))
(if npd (progn (write-line npd pr)))
(if npa1 (progn (write-line npa1 pr)))
(if npa (progn (write-line npa pr)))
(if pr (progn (close pr)(setq pr nil)))
(setq dan nil nnd1 nil npd nil kl nil npa nil npa1 nil)(gc)
(princ "=========== конец sbros =================")(terpri)
)

Программа SBROS4.LSP – сброс данных о УК-П и БРИЗ в текстовый файл

(defun sbros4() ; сброс данных о УК-П БРИЗ в файл
(princ "========== начало sbros4 ===============")(terpri)
(setq dan1 "D:\\0_PROGRAM\\НОВ_КАБ\\A\\") 
; для УК-П БРИЗ
(setq pr (open (strcat dan1 net "_" nsh ".txt") "r"))
(if pr (progn (if pr (progn (close pr)(setq pr nil)))
   (setq pr (open (strcat dan1 net "_" nsh ".txt") "a"))
   (if kl (progn (setq kl (itoa kl))(write-line kl pr)))
))
(if pr (progn (close pr)(setq pr nil dan1 nil)))
(setq dan1 nil kl nil)(gc)
(princ "============ конец sbros4 ===============")(terpri)
)
Эта программа помогает дополнить на диске текстовые файлы и поместить в них информацию о коробках универсальных УК-П и устройствах БРИЗ, шлейфа линии ДПЛС. Работа идет последовательно по принципу «один файл – один шлейф». Особое внимание следует уделить пути открытия текстового файла. Этот путь сохраняется в переменной (dan1).

Текст программы SBROS4.LSP

(defun sbros4() ; сброс данных о УК-П БРИЗ в файл
(princ "========== начало sbros4 ===============")(terpri)
(setq dan1 "D:\\0_PROGRAM\\НОВ_КАБ\\A\\") 
; для УК-П БРИЗ
(setq pr (open (strcat dan1 net "_" nsh ".txt") "r"))
(if pr (progn (if pr (progn (close pr)(setq pr nil)))
   (setq pr (open (strcat dan1 net "_" nsh ".txt") "a"))
   (if kl (progn (setq kl (itoa kl))(write-line kl pr)))
))
(if pr (progn (close pr)(setq pr nil dan1 nil)))
(setq dan1 nil kl nil)(gc)
(princ "============ конец sbros4 ===============")(terpri)
)

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

Содержание файла 1_2.txt

Имя файла 1_2 можно расшифровать к примеру так:

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

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

Содержание файла 1_1.txt
Содержание файла Пояснение информации
ДИП-34А Тип дымового датчика ПС
94 Общее число датчиков в шлейфе
1 Номер первого датчика ПС
94 Номер последнего датчика ПС
А01.019.001 Адрес первого датчика ПС
А01.019.094 Адрес последнего датчика ПС
ИПР-513-3А * Тип ручного датчика ПС
5 * Общее число датчиков в шлейфе
95 * Номер первого датчика ПС
99 * Номер последнего датчика ПС
А01.019.095 * Адрес первого датчика ПС
А01.019.099 * Адрес последнего датчика ПС
5 * Число коробок УК-П для ИПР
18 Число БРИЗ в шлейфе
* - если в шлейфе отсутствуют (ПИ) типа ИПР-513-3А, то указанные позиции отсутствуют.
Оглавление



Copyright © Сайт поддержки пользователей САПР