Hacktoberfest 2026 : les issues que les mainteneurs ont marquées pour octobre, ouvertes et accessibles aux débutants. Parcourir les issues Hacktoberfest

Mixing an nidmm PXI-407x session and niswitch sessions causes unexpected failures finding the NI-SWITCH Functions on Linux

Ouverte
#2,001 2 commentaires 0 réactions 0 personnes assignées Voir sur GitHub

Personne n'a encore pris cette issue.

Évaluation

Difficulté
4/5
Temps estimé
3-5 jours
Accessibilité débutants
30/100
Type d'issue
Bug
Clarté
Plutôt claire
Activité
À l'abandon
Stack technique
python
Domaine
backend

Piste de recherche

Commencez par la séquence reproduite dans l’issue avec Python 3.9/Linux, puis examinez niswitch/_library.py, niswitch/_library_interpreter.py et le chemin d’initialisation de la session affiché dans le traceback. Comparez l’effet du chargement de NI-DMM ou de NI-CPower avant NI-SWITCH sur la recherche de symboles. Le travail est terminé lorsque le reproducteur peut ouvrir les deux sessions simulées après dmm_session.initiate() sans le DriverTooOldError trompeur.

Rédigé par le modèle d'indexation à partir du texte de l'issue.

Description

Description of issue

Using Python 3.9.15, NI-DMM 23.5 and the nidmm 1.4.5 python package, I get weird behavior when using a 407x device and mixing usage of NI-DMM and NI-SWITCH sessions (used the niswitch 1.4.5 package, but I also reproduced with the nidcpower 1.4.5 package).

Specifically after running a very small program (listed below in the steps to reproduce) that includes opening an NI-DMM session, calling dmm.initiate(), and then opening an NI-SWITCH Session, I get the following error:

Traceback (most recent call last):
  File "/home/user/.pyenv/versions/3.9.15/lib/python3.9/site-packages/niswitch/_library.py", line 65, in _get_library_function
    function = getattr(self._library, name)
  File "/home/user/.pyenv/versions/3.9.15/lib/python3.9/ctypes/__init__.py", line 387, in __getattr__
    func = self.__getitem__(name)
  File "/home/user/.pyenv/versions/3.9.15/lib/python3.9/ctypes/__init__.py", line 392, in __getitem__
    func = self._FuncPtr((name_or_ordinal, self))
AttributeError: /home/user/.pyenv/versions/3.9.15/bin/python: undefined symbol: niSwitch_InitWithTopology

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/home/user/./switch_reproducer.py", line 6, in <module>
    with niswitch.Session(resource_name="", topology="2535/1-Wire 4x136 Matrix", simulate=True) as session1:
  File "/home/user/.pyenv/versions/3.9.15/lib/python3.9/site-packages/niswitch/session.py", line 1377, in __init__
    self._interpreter.set_session_handle(self._init_with_topology(resource_name, topology, simulate, reset_device))
  File "/home/user/.pyenv/versions/3.9.15/lib/python3.9/site-packages/niswitch/session.py", line 1993, in _init_with_topology
    vi = self._interpreter.init_with_topology(resource_name, topology, simulate, reset_device)
  File "/home/user/.pyenv/versions/3.9.15/lib/python3.9/site-packages/niswitch/_library_interpreter.py", line 293, in init_with_topology
    error_code = self._library.niSwitch_InitWithTopology(resource_name_ctype, topology_ctype, simulate_ctype, reset_device_ctype, None if vi_ctype is None else (ctypes.pointer(vi_ctype)))
  File "/home/user/.pyenv/versions/3.9.15/lib/python3.9/site-packages/niswitch/_library.py", line 225, in niSwitch_InitWithTopology
    self.niSwitch_InitWithTopology_cfunc = self._get_library_function('niSwitch_InitWithTopology')
  File "/home/user/.pyenv/versions/3.9.15/lib/python3.9/site-packages/niswitch/_library.py", line 67, in _get_library_function
    raise errors.DriverTooOldError() from e
niswitch.errors.DriverTooOldError: A function was not found in the NI-SWITCH runtime. Please visit http://www.ni.com/downloads/drivers/ to download a newer version and install it.

The error is clearly misleading. I shouldn't have any issues opening a session to both devices.

I am using IVI simulated devices, so no hardware is required.
If I simulate a 4081 DMM instead of a 4071, the error doesn't happen.
If I remove the dmm.initiate() call then the error doesn't happen.
If I use Python 3.10.8 then even the reproducing example as written doesn't reproduce.
I have also rewritten the example using a simulated nidcpower.Session (using a 4190), and that DOES reproduce (so I think that nidmm must be at fault).

I have found that this is very particular, and if I modify the code slightly I can stop seeing the error (move the dmm.initiate() after opening the niswitch.Session and its fine).

System report

python -c "import nidmm; nidmm.print_diagnostic_information()" output:

OS:
    Name:      Linux
    Version:   #26~22.04.1-Ubuntu SMP PREEMPT_DYNAMIC Thu Jul 13 16:27:29 UTC 2
    Bits:      64
Driver:
    Name:      NI-DMM
    Version:   Unknown
Module:
    Name:      nidmm
    Version:   1.4.5
Python:
    Version:   3.9.15 (main, Aug 11 2023, 09:46:20)
[GCC 11.4.0]
    Bits:      64
    Is_Venv:   False
    Installed Packages:
        virtualenv==20.24.2
        setuptools==58.1.0
        platformdirs==3.10.0
        pip==22.0.4
        niswitch==1.4.5
        nidmm==1.4.5
        nidcpower==1.4.5
        hightime==0.2.1
        filelock==3.12.2
        distlib==0.3.7
Steps to reproduce issue
import niswitch
import nidmm

with nidmm.Session(resource_name="", options= { "simulate": True, "driver_setup": { "Model": "4071" } }) as dmm_session:
    dmm_session.initiate()
    with niswitch.Session(resource_name="", topology="2535/1-Wire 4x136 Matrix", simulate=True) as session1:
        pass

Run the above code using python 3.9.15 on Linux

Langage dominant
Python
Étoiles
129
Forks
110
Merge moyen
4 j 3 h
PR mergées (30 j)
1

Préparer son environnement

Par où commencer

  1. Lisez l'issue en entier, puis le guide de contribution du projet.
  2. Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
  3. Forkez le dépôt et travaillez sur une branche.
  4. Ouvrez une pull request qui référence le numéro de l'issue.

Autres issues de ni/nimi-python

Toutes les issues de ni/nimi-python

Issues similaires

Plus d'issues Python

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.