Cours:Oscillogbf : Différence entre versions

De troyesGEII
Aller à : navigation, rechercher
(Mise en place avec QtCreator)
(Mise en place avec QtCreator)
Ligne 5 : Ligne 5 :
 
*créer un nouveau projet :
 
*créer un nouveau projet :
 
**Application (Qt for Python)  {{Rouge|Window UI}}
 
**Application (Qt for Python)  {{Rouge|Window UI}}
**choisir {{Rouge|PySide2}}
+
**pas d'importance pour PySide2 ou PySide6, on va remplacer après
 
**choisir la version {{Rouge|Python 3.x.x}} {{Vert|<big>'''sans'''</big>}} Virtual Environnement
 
**choisir la version {{Rouge|Python 3.x.x}} {{Vert|<big>'''sans'''</big>}} Virtual Environnement
 +
*ouvrir le fichier {{Rouge|widget.py}}
 +
*remplacer par :
 +
<source lang=python>
 +
import sys
 +
# communication avec le matériel de mesure
 +
import pyvisa
 +
# modules QT que l'on souhaite utiliser
 +
# à compléter en fonction des besoins
 +
from PySide2 import QtCore, QtGui, QtWidgets
 +
from PySide2.QtWidgets import QApplication, QWidget, QFileDialog, QPushButton, QDial, QAbstractSlider
 +
from PySide2.QtUiTools import QUiLoader
 +
 +
 +
if __name__ == "__main__":
 +
    # chargement du fichier form.ui
 +
    # qui correspond à l'interface graphique
 +
    loader = QUiLoader()
 +
    app = QtWidgets.QApplication(sys.argv)
 +
    window = loader.load("form.ui", None)
 +
    window.show()
 +
 +
    # initialisation de la librairie pyVisa
 +
    materiel=pyvisa.ResourceManager()
 +
    # print(materiel.list_resources())
 +
 +
    # exemple pour se connecter sur un appareil par IP
 +
    # gbf=materiel.open_resource('TCPIP::192.168.0.236::INSTR')
 +
 +
    sys.exit(app.exec_())
 +
 +
</source>
  
 
==QPushButton==
 
==QPushButton==

Version du 5 février 2025 à 10:09

python et Qt

Mise en place avec QtCreator

  • créer un nouveau projet :
    • Application (Qt for Python) Window UI
    • pas d'importance pour PySide2 ou PySide6, on va remplacer après
    • choisir la version Python 3.x.x sans Virtual Environnement
  • ouvrir le fichier widget.py
  • remplacer par :
import sys
# communication avec le matériel de mesure
import pyvisa
# modules QT que l'on souhaite utiliser
# à compléter en fonction des besoins
from PySide2 import QtCore, QtGui, QtWidgets
from PySide2.QtWidgets import QApplication, QWidget, QFileDialog, QPushButton, QDial, QAbstractSlider
from PySide2.QtUiTools import QUiLoader


if __name__ == "__main__":
    # chargement du fichier form.ui
    # qui correspond à l'interface graphique
    loader = QUiLoader()
    app = QtWidgets.QApplication(sys.argv)
    window = loader.load("form.ui", None)
    window.show()

    # initialisation de la librairie pyVisa
    materiel=pyvisa.ResourceManager()
    # print(materiel.list_resources())

    # exemple pour se connecter sur un appareil par IP
    # gbf=materiel.open_resource('TCPIP::192.168.0.236::INSTR')

    sys.exit(app.exec_())

QPushButton

import sys
import pyvisa

from PySide2 import QtCore, QtGui, QtWidgets
from PySide2.QtWidgets import QApplication, QWidget, QFileDialog, QPushButton
from PySide2.QtUiTools import QUiLoader


def appui_bouton():
    print("Appui sur le bouton")
    print(gbf.query('*IDN?'))


loader = QUiLoader()
app = QtWidgets.QApplication(sys.argv)
window = loader.load("form.ui", None)
window.my_push_button = window.findChild(QPushButton, "pushButton_2")
window.show()

window.my_push_button.clicked.connect(appui_bouton)

materiel=pyvisa.ResourceManager()
print(materiel.list_resources())
gbf=materiel.open_resource('TCPIP::10.98.35.144::INSTR')

app.exec_()

liens

Tests

banc de mesure  : 1 scope DS1074 + 1 gbf DG822


le script (basique ...) qui gère le tout :


#!/bin/bash

IPSCOPE=192.168.1.111

freq=100

while true; do
      # 1 sinus ampl=5V, offset nul, dephasage nul
      ./dg822_write.py ":sour1:appl:harm $freq,5,0,0"
      sleep 2
      # demande un AUTo mode au scope
      lxi scpi -a $IPSCOPE "AUT"
      sleep 5
      let "freq += 100"
      done

les commandes python :


#!/usr/bin/python3

import sys
import pyvisa
rm=pyvisa.ResourceManager()
inst=rm.open_resource('USB0::6833::1603::DG8A231301537::0::INSTR')

print("commande = ",sys.argv[1])
commande=sys.argv[1]

inst.write(commande)