Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Failure to add multiple ports using siwave.create_circuit_port_on_pin #872

Open
2 tasks done
Garpurinn opened this issue Oct 25, 2024 · 9 comments
Open
2 tasks done
Assignees
Labels
bug Something isn't working

Comments

@Garpurinn
Copy link

Before submitting the issue

  • I have searched among the existing issues
  • I am using a Python virtual environment

Description of the bug

Hi,

I have a 4 layer PCB design that contains a PI filter matching network. I have created a script that uses the component name to get the pin location of each of the matching component (components.get_pin_from_component) and then using siwave.create_circuit_port_on_pin to create the port on those pin locations.

The issue is that I can get the script to correctly perform the port creation when only using it on one component - as soon as I start to do it on more components (2 or 3), two of the other ports get created at location (0, 0).

Viewing the ports in the "Components" window, I can see the functional port has the correct pin assignment, for example:

  • 1_FE_1stShunt:
    - 2 (L24)
    - 1 (L24)

While the next one has the following assignment:

  • 2_FE_Series:
    - NO PIN
    - NO PIN

In the example above, I can then try again and just leave out the first port creation (1_FE_1stShunt) and then I can get 2_FE_Series to be created correctly - indicating there is nothing wrong in my IPC2581 file.

Steps To Reproduce

Here is a code that shows the issue on pyaedt version 0.11.2:

import ansys.aedt.core as aedt
import os

project_directory = r"C:/Somewhere/"
file_path = r"C:/SomeIPC2581File.xml"
Project_name = "IssuePortCreation"  
        
aedb_path = os.path.join(project_directory, Project_name)
edb = aedt.Edb(edbpath=aedb_path, edbversion="2024.2")

# Import the IPC2581 file 
edb.import_layout_pcb(file_path, aedb_path, anstranslator_full_path='', use_ppe=False, control_file=None)       
    
# Perform the port creation on already present components
FESeriesPins = edb.components.get_pin_from_component("L24") # Get the pins of the component
edb.siwave.create_circuit_port_on_pin(FESeriesPins[0], FESeriesPins[1], 50, "1_FE_1stShunt") # Create the port on the pins

FE2ndSHPins = edb.components.get_pin_from_component("L22") # Get the pins of the component
edb.siwave.create_circuit_port_on_pin(FE2ndSHPins[0], FE2ndSHPins[1], 50, "2_FE_Series") # Create the port on the pins
 
# Save
edb.save_edb()
edb.close_edb()

Which Operating System are you using?

Windows

Which Python version are you using?

3.10

Installed packages

accelerate==0.19.0
adodbapi==2.6.1.3
affine==2.3.1
aiofiles==22.1.0
aiohttp==3.8.3
aiosignal==1.2.0
aiosqlite==0.17.0
alabaster==0.7.12
alembic==1.8.0
algopy==0.5.7
altair==4.2.2
altair-data-server==0.4.1
altair-transform==0.2.0
aniso8601==9.0.1
annotated-types==0.7.0
ansiwrap==0.8.4
ansys-additive-core==0.17.0
ansys-api-additive==1.4.1
ansys-api-dbu==0.2.2
ansys-api-dyna==0.3.5
ansys-api-edb==1.0.0
ansys-api-fluent==0.3.22
ansys-api-geometry==0.3.5
ansys-api-mapdl==0.5.1
ansys-api-mechanical==0.1.1
ansys-api-meshing-prime==0.1.2
ansys-api-platform-instancemanagement==1.0.0
ansys-api-pyensight==0.3.4
ansys-api-sherlock==0.1.22
ansys-api-systemcoupling==0.1.0
ansys-dpf-composites==0.3.2
ansys-dpf-core==0.10.1
ansys-dpf-gate==0.4.1
ansys-dpf-gatebin==0.3.1
ansys-dpf-post==0.6.0
ansys-dyna-core==0.4.6
ansys-dynamicreporting-core==0.5.1
ansys-edb-core==0.1.2
ansys-fluent-core==0.18.2
ansys-geometry-core==0.4.9
ansys-grantami-bomanalytics==2.0.0
ansys-grantami-bomanalytics-openapi==2.0.0
ansys-grantami-recordlists==1.1.0
ansys-grantami-serverapi-openapi==2.0.0
ansys-grpc-dpf==0.7.1
ansys-mapdl-core==0.67.0
ansys-mapdl-reader==0.52.17
ansys-math-core==0.1.3
ansys-mechanical-core==0.10.6
ansys-mechanical-env==0.1.2
ansys-meshing-prime==0.5.1
ansys-motorcad-core==0.4.0
ansys-openapi-common==1.4.0
ansys-optislang-core==0.5.1
ansys-platform-instancemanagement==1.1.2
ansys-pyensight-core==0.7.5
ansys-pythonnet==3.1.0rc3
ansys-seascape==0.2.0
ansys-sherlock-core==0.4.0
ansys-systemcoupling-core==0.3.1
ansys-tools-path==0.4.1
ansys-turbogrid-api==0.4.0
ansys-turbogrid-core==0.4.dev1
anyio==3.6.2
appdirs==1.4.4
argon2-cffi==21.3.0
argon2-cffi-bindings==21.2.0
arrow==1.2.2
arviz==0.15.1
asciitree==0.3.3
asgi-csrf==0.9
asgiref==3.5.2
asn1crypto==1.4.0
asteval==0.9.27
astroid==2.12.12
astroML==1.0.2.post1
astropy==5.1.1
asttokens==2.1.0
async-generator==1.10
async-timeout==4.0.2
atomicwrites==1.4.0
attrs==22.1.0
autopep8==1.7.0
azure-core==1.25.1
azure-cosmos==4.3.1
azure-identity==1.12.0
Babel==2.10.3
backcall==0.2.0
backports-abc==0.5
baresql==0.8.0
bcrypt==3.2.0
beartype==0.17.0
beautifulsoup4==4.11.1
binaryornot==0.4.4
black==23.3.0
bleach==5.0.0
blinker==1.4
blis==0.7.9
blosc==1.10.6
bokeh==3.3.4
botorch==0.8.5
Bottleneck==1.3.4
bqplot==0.12.39
branca==0.5.0
brewer2mpl==1.4.1
Brotli==1.0.9
build==0.10.0
cachelib==0.9.0
cachetools==5.2.0
Cartopy==0.21.1
catalogue==2.0.8
certifi==2022.9.24
cffi==1.15.0
cftime==1.6.0
chardet==5.0.0
charset-normalizer==2.0.12
click==8.1.3
click-default-group-wheel==1.2.2
click-plugins==1.1.1
cligj==0.7.2
cloudpickle==2.1.0
clr-loader==0.2.6
clrmagic==0.0.1a2
colorama==0.4.6
colorcet==3.0.1
comm==0.1.3
commonmark==0.9.1
confection==0.0.3
cons==0.4.5
contourpy==1.0.7
cookiecutter==2.1.1
coverage==6.5.0
cramjam==2.6.2
cryptography==37.0.4
csvs-to-sqlite==1.3.1a0
cvxopt==1.3.0
cvxpy==1.3.1
cycler==0.11.0
cymem==2.0.7
Cython==0.29.34
cytoolz==0.12.1
dash==2.8.1
dash-core-components==2.0.0
dash-html-components==2.0.0
dash-table==5.0.0
dask==2023.5.0
dask-glm==0.2.0
dask-image==2023.3.0
dask-ml==2023.3.24
dask-searchcv==0.2.0
databases==0.5.5
datasette==0.64.3
datasette-graphql==2.1.1
datashader==0.14.5a1+g7a97e97.dirty
datashape==0.5.2
dateparser==1.1.0
db.py==0.5.4b1
deap==1.3.1
debugpy==1.6.7
decorator==5.1.1
defusedxml==0.7.1
Deprecated==1.2.14
deprecation==2.1.0
diff-match-patch==20200713
dill==0.3.8
dirty-cat==0.4.1
distlib==0.3.6
distributed==2023.5.0
Django==4.1.2
dnspython==2.1.0
docker==7.0.0
docopt==0.6.2
docrepr==0.1.1
docstring-to-markdown==0.10
docutils==0.18.1
duckdb==0.8.0
ecos==2.0.12
elementpath==4.2.0
emcee==3.1.2
entrypoints==0.4
et-xmlfile==1.1.0
etuples==0.3.8
exceptiongroup==1.1.1
executing==1.2.0
fabric==3.2.2
fast-histogram==0.11
fastai==2.7.12
fastapi==0.95.1
fastcore==1.5.11
fastdownload==0.0.7
fasteners==0.17.3
fastjsonschema==2.16.2
fastparquet==2023.4.0
fastprogress==1.0.3
feather-format==0.4.1
filelock==3.8.0
filterpy==1.4.5
Fiona==1.8.21
flake8==5.0.4
Flask==2.2.2
flask-accepts==0.18.4
Flask-Mail==0.9.1
flask-restx==0.5.1
Flask-Session==0.4.0
Flask-SQLAlchemy==2.5.1
flaskerize==0.14.0
flit==3.8.0
flit_core==3.8.0
folium==0.13.0
fonttools==4.37.4
formlayout==1.2.1a1
fpdf2==2.7.7
fqdn==1.5.1
frozenlist==1.3.0
fs==2.4.15
fsspec==2023.5.0
future==0.18.2
fuzzywuzzy==0.18.0
gast==0.4.0
GDAL==3.4.3
geographiclib==1.52
geomdl==5.3.1
geopandas==0.13.0
geopy==2.2.0
geoviews==1.10.0a2.post4+g65df916
gitdb==4.0.9
GitPython==3.1.29
gmpy2==2.1.5
google-api-core==2.11.1
google-api-python-client==2.91.0
google-auth==2.21.0
google-auth-httplib2==0.1.0
googleapis-common-protos==1.59.1
gpytorch==1.10
graphene==3.1.1
graphql-core==3.2.3
graphql-relay==3.2.0
greenlet==2.0.2
grpcio==1.56.0
grpcio-health-checking==1.48.2
grpcio-status==1.48.2
guidata==2.3.1
guiqwt==4.3.3
h11==0.12.0
h2==4.1.0
h5netcdf==1.1.0
h5py==3.9.0
HeapDict==1.0.1
holoviews==1.16.0
hpack==4.0.0
html5lib==1.1
httpcore==0.15.0
httpie==3.2.1
httplib2==0.22.0
httpx==0.23.0
huggingface-hub==0.14.1
hupper==1.10.3
husl==4.0.3
hvplot==0.8.3
hypercorn==0.14.3
hyperframe==6.0.1
hypothesis==6.56.2
idlex==1.22
idna==3.1
imageio==2.28.1
imageio-ffmpeg==0.4.2
imagesize==1.4.1
imbalanced-learn==0.10.1
importlib-metadata==5.0.0
inflection==0.5.1
iniconfig==1.1.1
intake==0.6.4
intervaltree==3.0.2
invoke==2.2.0
ipycanvas==0.13.1
ipydatagrid==1.1.15
ipykernel==6.22.0
ipyleaflet==0.17.2
ipympl==0.9.3
ipython==8.13.1
ipython-genutils==0.2.0
ipython-sql==0.4.1b1
ipywidgets==8.0.6
isoduration==20.11.0
isort==5.10.1
itsdangerous==2.1.2
janus==1.0.0
jaraco.classes==3.2.3
jedi==0.18.2
jellyfish==0.11.2
Jinja2==3.1.2
jinja2-time==0.2.0
joblib==1.2.0
json5==0.9.8
jsonpointer==2.3
jsonschema==4.17.3
julia==0.6.1
jupyter==1.0.0
jupyter-bokeh==3.0.7
jupyter-console==6.4.4
jupyter-events==0.6.3
jupyter-server-mathjax==0.2.6
jupyter-sphinx==0.4.0
jupyter-ydoc==0.2.4
jupyter_client==8.2.0
jupyter_core==5.3.0
jupyter_packaging==0.12.3
jupyter_server==2.5.0
jupyter_server_fileid==0.9.0
jupyter_server_terminals==0.4.4
jupyter_server_ydoc==0.8.0
jupyterlab==3.6.3
jupyterlab-launcher==0.13.1
jupyterlab-pygments==0.2.2
jupyterlab-widgets==3.0.7
jupyterlab_rise==0.2.0
jupyterlab_server==2.22.1
keyring==23.13.1
kiwisolver==1.4.3
langcodes==3.3.0
lazy-object-proxy==1.7.1
lazy_loader==0.2
linear-operator==0.4.0
linkify-it-py==2.0.0
llvmlite==0.40.0
lmfit==1.0.3
locket==1.0.0
logical-unification==0.4.5
loky==3.4.0
lxml==4.9.2
lz4==4.3.2
Mako==1.2.0
Markdown==3.3.7
markdown-it-py==2.2.0
MarkupSafe==2.1.1
marshmallow==3.12.1
matplotlib==3.7.1
matplotlib-inline==0.1.6
maturin==0.14.15
mccabe==0.7.0
mdit-py-plugins==0.3.5
mdurl==0.1.2
mercantile==1.2.1
mergedeep==1.3.4
metakernel==0.28.2
miniKanren==1.0.3
missingno==0.5.1
mistune==0.8.4
mizani==0.9.0
mlxtend==0.22.0
more-itertools==9.0.0
moviepy==1.0.3
mpl-scatter-density==0.7
mpld3==0.5.8
mpldatacursor==0.7.1
mpmath==1.2.1
msal==1.22.0
msal-extensions==1.0.0
msgpack==1.0.4
msvc-runtime==14.34.31931
multidict==6.0.2
multipledispatch==0.6.0
munch==2.5.0
murmurhash==1.0.9
mypy==1.3.0
mypy-extensions==1.0.0
mysql-connector-python==8.0.21
nbclassic==1.0.0
nbclient==0.7.4
nbconvert==6.5.0
nbconvert_reportlab==0.2
nbdime==3.1.1
nbformat==5.7.0
nbval==0.9.6
nest-asyncio==1.5.6
netCDF4==1.6.0
networkx==3.1
nlopt==2.7.1
nltk==3.7
notebook==6.5.4
notebook_shim==0.2.3
ntlm-auth==1.5.0
numba==0.57.0
numcodecs==0.10.0
numdifftools==0.9.40
numexpr==2.8.4
numpy==1.24.2
numpydoc==1.3
oct2py==5.4.3
octave-kernel==0.34.1
openai==0.27.5
openpyxl==3.0.10
opt-einsum==3.3.0
orjson==3.7.3
osqp==0.6.2.post9
outcome==1.2.0
packaging==22.0
pandas==1.5.2
pandas-datareader==0.10.0
pandocfilters==1.5.0
panel==1.3.8
papermill==2.4.0
param==2.0.2
parambokeh==0.2.3
paramiko==2.8.0
paramnb==2.0.4
parso==0.8.3
partd==1.2.0
pathspec==0.11.0
pathy==0.10.1
patsy==0.5.3
pdfrw==0.4.post2
pep8==1.7.1
pexpect==4.8.0
pg8000==1.23.0
pickleshare==0.7.5
Pillow==9.5.0
PIMS==0.6.1
Pint==0.19.2
pkginfo==1.8.3
platformdirs==4.2.0
plotly==5.18.0
plotnine==0.12.1
pluggy==1.0.0
plumbum==1.8.2
ply==3.11
pmdarima==2.0.2
polars==0.17.11
pooch==1.7.0
portalocker==2.7.0
portpicker==1.5.0
ppci==0.5.9
preshed==3.0.8
prettytable==3.3.0
priority==2.0.0
proglog==0.1.10
prometheus-client==0.15.0
prompt-toolkit==3.0.33
protobuf==3.20.3
protoc-gen-swagger==0.1.0
psutil==5.9.5
ptpython==3.0.20
ptyprocess==0.7.0
PuLP==2.6.0
pure-eval==0.2.2
py-lru-cache==0.1.4
py2vega==0.6.1
pyaedt==0.11.2
pyaml==20.4.0
pyansys==2024.1.5
pyansys-tools-versioning==0.4.0
pyarrow==12.0.0
pyasn1==0.5.0
pyasn1-modules==0.3.0
PyAudio==0.2.11
pybars3==0.9.7
pybind11==2.10.3
pycodestyle==2.9.1
pycosat==0.6.3
pycparser==2.21
pyct==0.4.8
pydantic==2.7.4
pydantic_core==2.18.4
pydeck==0.8.0
pydocstyle==6.3.0
pyedb==0.31.0
pyepsg==0.4.0
pyerfa==2.0.0.1
pyflakes==2.5.0
pyflux==0.4.17
pygad==2.17.0
pygame==2.1.2
pygbm==0.1.0
Pygments==2.15.1
pygranta==2024.1.0
pyhdf==0.10.5
pyiges==0.3.1
PyJWT==2.4.0
pylint==2.15.4
pylint-venv==2.3.0
pyls-spyder==0.4.0
pymc==5.3.0
PyMeta3==0.5.1
pymongo==4.3.3
Pympler==1.0.1
PyNaCl==1.5.0
pynndescent==0.5.7
pyodbc==4.0.35
PyOpenGL==3.1.6
pypandoc==1.5
pyparsing==3.0.9
pypiwin32==223
pypng==0.20220715.0
pyproj==3.4.1
pyproject_hooks==1.0.0
PyQt5==5.15.6
PyQt5-Qt5==5.15.2
PyQt5-sip==12.11.0
pyqtgraph==0.13.3
PyQtWebEngine==5.15.5
PyQtWebEngine-Qt5==5.15.2
pyro-api==0.1.2
pyro-ppl==1.8.4
pyrsistent==0.18.1
pyserial==3.5
pyshp==2.3.0
PySimpleGUI==4.60.5
PySocks==1.7.1
pystache==0.5.4
pytensor==2.11.2
pytest==7.2.1
python-dateutil==2.8.2
python-dotenv==0.19.2
python-hdf4==0.10.0+dummy
python-json-logger==2.0.4
python-lsp-black==1.2.1
python-lsp-jsonrpc==1.0.0
python-lsp-server==1.7.2
python-multipart==0.0.5
python-picard==0.7
python-slugify==6.1.2
python-snappy==0.6.1
pythonnet==3.0.2
PythonQwt==0.10.2
pytomlpp==1.0.13
pytoolconfig==1.2.4
pytwin==0.6.0
pytz==2022.4
pytz-deprecation-shim==0.1.0.post0
pyvista==0.40.0
pyviz-comms==2.2.1
PyWavelets==1.4.1
pywin32==305
pywin32-ctypes==0.2.0
pywinpty==2.0.9
pywinusb==0.4.2
PyYAML==6.0
pyzmq==25.0.2
pyzo==4.12.7
pyzstd==0.15.4
QDarkStyle==3.1
qdldl==0.1.7
qpsolvers==3.1.0
qstylizer==0.2.2
QtAwesome==1.2.3
qtconsole==5.4.3
QtPy==2.3.1
quadprog==0.1.11
quantecon==0.5.3
quart==0.18.3
rasterio==1.2.10
readme-renderer==35.0
redis==4.3.1
regex==2022.9.13
reportlab==3.6.12
requests==2.31.0
requests-negotiate-sspi==0.5.2
requests-ntlm==1.1.0
requests-toolbelt==0.10.1
retrying==1.3.4
rfc3339-validator==0.1.4
rfc3986==1.5.0
rfc3986-validator==0.1.1
rich==12.4.4
rope==1.6.0
rpyc==6.0.0
rsa==4.9
Rtree==1.2.0
ruamel.yaml==0.17.21
ruamel.yaml.clib==0.2.6
Rx==3.1.1
scikit-fuzzy==0.4.1
scikit-image==0.20.0
scikit-learn==1.2.2
scikit-optimize==0.9.0
scikit-rf==1.3.0
scilab2py==0.6.2
scipy==1.10.1
scooby==0.7.2
scramp==1.4.1
scs==3.2.3
seaborn==0.13.0.dev0
Send2Trash==1.8.0
shapely==2.0.1
simplegeneric==0.8.1
simplejson==3.17.6
simpy==4.0.1
six==1.16.0
sklearn-contrib-lightning==0.6.2.post0
slicerator==1.1.0
smart-open==5.2.1
smmap==5.0.0
snakeviz==2.1.0
sniffio==1.2.0
snowballstemmer==2.2.0
snuggs==1.4.7
sortedcontainers==2.4.0
sounddevice==0.4.4
soupsieve==2.3.2.post1
spacy==3.5.2
spacy-legacy==3.0.12
spacy-loggers==1.0.3
spatialpandas==0.4.7
Sphinx==6.1.3
sphinx-rtd-theme==1.2.0
sphinxcontrib-applehelp==1.0.2
sphinxcontrib-devhelp==1.0.2
sphinxcontrib-htmlhelp==2.0.0
sphinxcontrib-jquery==4.1
sphinxcontrib-jsmath==1.0.1
sphinxcontrib-qthelp==1.0.3
sphinxcontrib-serializinghtml==1.1.5
spyder==5.4.3
spyder-kernels==2.4.3
SQLAlchemy==1.4.47
sqlite-bro==0.12.2
sqlite-fts4==1.0.3
sqlite-utils==3.31
sqlparse==0.4.3
srsly==2.4.5
sspyrs==0.3
stack-data==0.6.1
starlette==0.26.1
statsmodels==0.14.0
streamlit==1.22.0
streamz==0.6.3
supersmoother==0.4
swifter==1.3.4
sympy==1.12
tables==3.7.0
tabulate==0.9.0
tbats==1.1.0
tblib==1.7.0
tenacity==8.1.0
termcolor==1.1.0
terminado==0.17.0
text-unidecode==1.3
textdistance==4.5.0
textwrap3==0.9.2
thinc==8.1.9
threadpoolctl==3.1.0
three-merge==0.1.1
tifffile==2022.5.4
tinycss2==1.1.1
tokenizers==0.13.3
toml==0.10.2
tomli==2.0.1
tomli_w==1.0.0
tomlkit==0.11.6
toolz==0.12.0
torch==2.0.1
torchaudio==2.0.2
torchvision==0.15.2
tornado==6.3.1
tqdm==4.64.0
traitlets==5.7.1
traittypes==0.2.1
transformers==4.29.1
trio==0.22.0
trio-asyncio==0.12.0
twine==4.0.1
twitter==1.19.2
typer==0.7.0
typing_extensions==4.12.2
tzdata==2022.7
tzlocal==4.2
uc-micro-py==1.0.1
ujson==5.3.0
umap-learn==0.5.1
uncertainties==3.1.6
uri-template==1.2.0
uritemplate==4.1.1
urllib3==1.26.10
uvicorn==0.20.0
validators==0.18.2
vega-datasets==0.9.0
virtualenv==20.19.0
ViTables==3.0.2
vtk==9.2.6
waitress==2.1.2
wasabi==0.10.1
wasmer==1.1.0
wasmer_compiler_cranelift==1.1.0
wasmer_compiler_singlepass==1.1.0
watchdog==2.2.0
wcwidth==0.2.5
webcolors==1.12
webencodings==0.5.1
websocket-client==1.4.2
Werkzeug==2.2.2
whatthepatch==1.0.2
widgetsnbextension==4.0.7
winpython==6.1.20230527
wordcloud==1.8.1
wrapt==1.14.1
wsproto==1.2.0
xarray==2023.4.2
xarray-einstats==0.5.1
xgboost==1.6.1
XlsxWriter==3.0.3
xlwings==0.24.7
xmlschema==2.5.1
xmltodict==0.13.0
xyzservices==2022.6.0
y-py==0.5.5
yapf==0.32.0
yarl==1.7.2
ypy-websocket==0.8.2
zarr==2.11.3
zict==2.2.0
zipp==3.9.0
zstandard==0.20.0

@Garpurinn Garpurinn added the bug Something isn't working label Oct 25, 2024
@Samuelopez-ansys
Copy link
Member

Hi @Garpurinn ,

This is a pyedb issue.

I will transfer it.

@Samuelopez-ansys Samuelopez-ansys transferred this issue from ansys/pyaedt Oct 25, 2024
@svandenb-dev
Copy link
Collaborator

Hi @Garpurinn,
we will try to reproduce this issue on our test case and will keep you posted.
thanks For contact us.

@svandenb-dev
Copy link
Collaborator

svandenb-dev commented Oct 25, 2024

@Garpurinn meanwhile if you are looking at a way to create ports on rlc components by deactivating them you might want using this method

https://edb.docs.pyansys.com/version/stable/api/_autosummary/pyedb.dotnet.edb_core.components.Components.deactivate_rlc_component.html

from ansys.aedt.core.edb import Edb
from ansys.aedt.core.generic.general_methods import generate_unique_folder_name
import pyedb.misc.downloads as downloads

temp_folder = generate_unique_folder_name()
targetfile = downloads.download_file("edb/ANSYS-HSD_V1.aedb", destination=temp_folder)
edbapp = Edb(edbpath=targetfile, edbversion="2024.2")

for refdes, resistor in edbapp.components.resistors.items():
edbapp.components.deactivate_rlc_component(component=resistor, create_circuit_port=True, pec_boundary=False)
edbapp.save()
edbapp.close()

also for getting component pins I would recommend using the property like:
pins = edb.components.instances["your_refdes"].pins
this will return the pins dict.

@Garpurinn
Copy link
Author

Hi @svandenb-dev,
Thanks for the tip on the RLC component port creation. I tried to run it using the sample above from pyedb.misc.downloads but when I try to import the resulting edb file in SIwave I get the following warning for each resistor:
"Warning: Skipping port creation - name "R117" is already in use"
And no ports created in the design when looking into the port section.

But it would be great to get the siwave.create_circuit_port_on_pin function to work, I have also plans for adding later some diode and larger IC in my script, that I believe that the RLC function can not handle if I am correct?

@svandenb-dev
Copy link
Collaborator

@Garpurinn yes we will fix create_circuit_port_on_pin for sure.

@hui-zhou-a
Copy link
Collaborator

@Garpurinn you may want to consider using EDB Configuration for this purpose.
https://edb.docs.pyansys.com/version/stable/examples/use_configuration/import_ports.html

@Garpurinn
Copy link
Author

Hi @hui-zhou-a, thanks for the good suggestion - I can see that this method looks more suitable for my use.
There is though also some issues with this function, but only when I want to add more than one port. I get a message that the terminal already exists:
Exception: Failed to create terminal. Terminal 1 already exists.

My code looks like this:

print("- Adding series matching component")
        PortName = str(PortCounter) + "_SeriesMatch"  # Naming the port incrimentally 
        
        # Get the pins that are going to be used    
        DictionaryOfFESeriesPins = edb.components.get_pins(SeriesMatch)
        SeriesMatchPins = list(DictionaryOfSeriesMatchPins.keys())
        print(f"  - Using following pins: {SeriesMatchPins[0]}, {SeriesMatchPins[1]}")
        
        # Create the port from the aquired information
        PortSeriesMatch = {
            "name": PortName,
            "reference_designator": SeriesMatch,
            "type": "circuit",
            "positive_terminal": {"pin": SeriesMatchPins[0]},
            "negative_terminal": {"pin": SeriesMatchPins[1]},
        }
        edb.components.disable_rlc_component(SeriesMatch)    # disable the component that was changed to port

I can create a new ticket with this error if preferred?

@hui-zhou-a
Copy link
Collaborator

@Garpurinn,

It is likely the terminal already exists in your design from your previous script.

You can list all terminals by

edb.layout.terminals

If you want to place two ports on the component pins, the two ports share the same terminals. It is not supported now. Please let me know if it is the case.

@Garpurinn
Copy link
Author

Hi @hui-zhou-a, I am not sure if that is the issue in my case. I can try to sketch how my PCB setup looks like. In the picture below, if I only add one port on e.g. C1, that is not a problem. Neither does it give an error if i add only one port on component C2. However if I try to add port both on C1 and C2, then I get the error that the terminal already exists.

Image

Extract of the code I use for creating the ports is like this:

# First shunt component of the front end matching
print("- Adding first shunt matching component")
PortName = str(PortCounter) + "_FE_1stShunt"  # Naming the port incrimentally 

# Get the pins that are going to be used    
DictionaryOfFE1stSHPins = edb.components.get_pins(FE_1stSH_component)
FE1stSHPins = list(DictionaryOfFE1stSHPins.keys())
print(f"  - Using following pins: {FE1stSHPins[0]}, {FE1stSHPins[1]}")

# Create the port from the aquired information
PortFE1stSH = {
    "name": PortName,
    "reference_designator": FE_1stSH_component,
    "type": "circuit",
    "positive_terminal": {"pin": FE1stSHPins[0]},
    "negative_terminal": {"pin": FE1stSHPins[1]},
}
edb.components.disable_rlc_component(FE_SER_component)    # disable the component that was changed to port
PortCounter += 1   # Incriment the port numbering

# Second shunt component of the front end matching
print("- Adding second shunt matching component")
PortName = str(PortCounter) + "_FE_2ndShunt"  # Naming the port incrimentally 

# Get the pins that are going to be used    
DictionaryOfFE2ndSHPins = edb.components.get_pins(FE_2ndSH_component)
FE2ndSHPins = list(DictionaryOfFE2ndSHPins.keys())
print(f"  - Using following pins: {FE2ndSHPins[0]}, {FE2ndSHPins[1]}")

# Create the port from the aquired information
PortFE2ndShunt= {
    "name": PortName,
    "reference_designator": FE_2ndSH_component,
    "type": "circuit",
    "positive_terminal": {"pin": FE2ndSHPins[0]},
    "negative_terminal": {"pin": FE2ndSHPins[1]},
}
edb.components.disable_rlc_component(FE_2ndSH_component)    # disable the component that was changed to port
PortCounter += 1   # Incriment the port numbering

# Now go through the config file and apply it
cfg["ports"] = [PortFE1stSH, PortFE2ndShunt]

# Write configuration into as json file
file_port_json = Path(aedb_path) / "Port_configuration.json"
with open(file_port_json, "w") as f:
    json.dump(cfg, f, indent=4, ensure_ascii=False)

# Import configuration into example layout
edb.configuration.load(config_file=file_port_json)
edb.configuration.run()

it stops at the last line (edb.configuration.run()) is where I get the error and if I look into the "port_configuration.json" file, I get the following:

{
    "ports": [
        {
            "name": "1_FE_1stShunt",
            "reference_designator": "C1",
            "type": "circuit",
            "positive_terminal": {
                "pin": "2"
            },
            "negative_terminal": {
                "pin": "1"
            }
        },
        {
            "name": "2_FE_2ndShunt",
            "reference_designator": "C2",
            "type": "circuit",
            "positive_terminal": {
                "pin": "2"
            },
            "negative_terminal": {
                "pin": "1"
            }
        }
    ]
}

I hope that gives better idea of the issue

@hui-zhou-a hui-zhou-a self-assigned this Dec 5, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working
Projects
None yet
Development

No branches or pull requests

4 participants