• Industries
  • Products
  • Buy
  • Services & Support
  • Communities
  • Discussion Groups

    AutoCAD Electrical

    Reply
    *krollenhagen

    PLC I/O wire number increments

    127 Views, 2 Replies
    11-21-2003 02:17 AM
    Does anyone know how to get a plc i/o wire number to increment after a
    termination?

    I want O:7/0 to go to O:7/0A after a fuse.

    Any help will be appreciated.

    Keith
    Please use plain text.
    *Custer, Phil

    Re: PLC I/O wire number increments

    11-21-2003 06:27 AM in reply to: *krollenhagen
    I have tried to get it to do that but it appears after the first device out
    of a PLC
    the wire # changes to the default format. I think this is something for
    AutoDesk
    to consider in the next release??

    --
    Phil Custer II, PE
    Custer Services, Inc.
    custer@landfillgas.com

    "krollenhagen" wrote in message
    news:14D3B715E71FC9D4DBEA27BEC2A48312@in.WebX.maYIadrTaRb...
    > Does anyone know how to get a plc i/o wire number to increment after a
    > termination?
    >
    > I want O:7/0 to go to O:7/0A after a fuse.
    >
    > Any help will be appreciated.
    >
    > Keith
    >
    >
    Please use plain text.
    *Autodesk\

    PLC I/O wire number increments - sample utility

    11-21-2003 09:44 AM in reply to: *krollenhagen
    Keith,

    You can use this little utility to semi-manually insert incrementing PLC I/O
    wire numbers. It's one step above manually typing them in. Cut and paste
    below into an ascii text file, call it plcwnum.lsp. Then "APPLOAD" this file
    and type plcwnum [enter] at the AutoCAD command line to run. Pick an I/O
    address or I/O wire number or I/O connected wire and then
    "pick,pick,pick..." the wires that extend out from it. I/O address-based
    wire numbers should pop in.

    This utility makes use of some of the user "API" calls shown in the on-line
    help. I encourage you to enhance it, make it work cooler!

    Nate.
    ===========

    ; 20-Nov-03 NEHolt created
    ; --
    (defun c:smileytongue:lcwnum ( / en ed x new_wnum base_wnum ix_cnt index pt1 pt2
    wnum_blk_hdl
    pick_xy xitnow ss suffixlst new_wireno ins_xy)
    ; Semi-automatically insert incrementing I/O address wire numbers
    (setq suffixlst (list "A" "B" "C" "D" "E" "F" "G" "H" "J" "K" "L" "M" "N"
    "P" "R"))
    (while (setq x (entsel "\nSelect MAIN I/O wire connection (LINE wire or
    WNUM itself):"))
    (setq ix_cnt "")
    (setq base_wnum nil)
    (setq en (car x))
    (setq pick_xy (cadr x)) ; point point
    (setq ed (entget en))
    (cond
    ((= (cdr (assoc 0 ed)) "INSERT") ; user may have picked on wire number
    block
    (setq base_wnum (c:wd_getattrval en "WIRENO*")) ; get wire number
    attrib value
    (if (AND (not base_wnum)(wcmatch (cdr (assoc 2 ed)) "PLCIO*"))
    (progn ; Appears user may have picked on the PLC I/O module
    itself. Try an
    ; auto-repick to see if user picked on a TAGA* I/O address
    attribute
    (if (setq x (nentselp pick_xy))
    (progn ; okay, maybe it's our lucky day...
    (setq en (car x)) ; picked entity
    (setq ed (entget en))
    (if (AND (= (cdr (assoc 0 ed)) "ATTRIB")
    (wcmatch (cdr (assoc 2 ed)) "TAGA*"))
    (progn ; Yes, lucky day. Get I/O address value TAGA*
    attribute value
    (setq base_wnum (cdr (assoc 1 ed)))
    ) ) ) ) ) )

    )
    ((= (cdr (assoc 0 ed)) "LINE") ; user probably picked on line WIRE
    ; Look for wire number pointer tied to this LINE entity. Points at
    the
    ; wire number block insert.
    (setq wnum_blk_hdl (car (wd_wnet_find_ptr_for_whole_net en)))
    (if (AND wnum_blk_hdl (handent wnum_blk_hdl))
    (progn
    (setq base_wnum (c:wd_getattrval (handent wnum_blk_hdl)
    "WIRENO*"))
    )
    )
    )
    )
    (if base_wnum
    (progn ; Okay, now prompt user to pick on wires for the incrementing
    ; I/O address-based wire number assignments.
    (setq index 0) ; start at beginning of suffix list
    (setq new_wireno (strcat base_wnum (nth index suffixlst)))
    (setq xitnow nil)
    (while (AND (not xitnow)
    (setq x (entsel (strcat "\n Pick wire for wnum
    assignment: " new_wireno))))
    (setq en (car x))
    (setq ed (entget en))
    (cond
    ((= (cdr (assoc 0 ed)) "LINE") ; user picked on a "WIRE"
    (hopefully!)
    (c:wd_putwnf en new_wireno) ; insert wire number on selected
    network
    )
    ((= (cdr (assoc 0 ed)) "INSERT") ; user picked on a block insert
    (!)
    ; See if lucky and user picked on a wire number block insert.
    Block
    ; name will have a "WD_WN" prefix if it's a wire number block
    insert.
    (if (wcmatch (cdr (assoc 2 ed)) "WD_WN*")
    (progn ; yes, user picked the wire number insert. Need to
    find the LINE
    ; wire that it's sitting on.
    (setq ins_xy (cdr (assoc 10 ed))) ; XY coord of wire
    number block insert
    ; Set up a diagonal fence to cut across and capture any
    underlying
    ; line wire.
    (setq pt1 (list (- (car ins_xy) 0.05) (- (cadr ins_xy)
    0.05) 0.0))
    (setq pt2 (list (+ (car ins_xy) 0.05) (+ (cadr ins_xy)
    0.05) 0.0))
    (setq ss (ssget "_F" (list pt1 pt2) '((0 . "LINE"))))
    (if (/= ss nil)
    (progn ; a LINE entity captured.
    (setq en (ssname ss 0)) ; first or only LINE captured
    (setq ss nil) ; release the selection set
    (c:wd_putwnf en new_wireno) ; pop in the wire number
    (it should
    ; update the existing one and reset the component
    wire
    ; connection X?TERMxx attributes that "touch" this
    wire.
    ) )
    ) )

    )
    )
    (setq index (1+ index)) ; increment pointer
    (if (= index (length suffixlst))
    (progn ; no more suffixes remain, exit now
    (setq xitnow 1)
    )
    ; ELSE
    (progn ; calculate next wire number
    (setq new_wireno (strcat base_wnum (nth index suffixlst)))
    ) )
    ; If AcadE had to do a ZOOM extents to follow the wire number
    off-screen
    ; then variable "Z_prev" will be set to 1. If so, do a ZOOM PREV
    to return
    ; the display to the original position.
    (if Z_prev (command "_.ZOOM" "_PREV"))
    (setq Z_prev nil)
    )
    ) )
    )
    (princ)
    )
    Please use plain text.