HOME Prise de donnees MML Controle commande Simulations Notes Hardware Ligne X Laser Interaction Diagnostiques Synchronisation
Hardware
  Notes sur les differents appareils (Klystron, Etuves, Sondes Etuve, Temperature, Modulateur,...), Page 1 of 2  Not logged in ThomX    logo
ID Date Author Status Type Category Importantdown Subject Icon
  16   Wed Sep 16 12:22:18 2020 Entered by Hayg Guler from 134.158.195.145 on Wed Sep 16 12:17:51 2020Under ProcessInfoTemperature Tests chiller canon, entered from 134.158.195.145 

Tests avec nouvelle pt100 sur la structure du Canon

Consigne 30°C

Température entrée canon : 28.6 °C (pt100 sur l'eau)

Température sur la structure : 33.9°C

 

Il semblerait que l'écart de température est constant (environ 5°C) 

 

Attachment 1: Selection_011.png
Selection_011.png
  17   Thu Sep 17 17:15:24 2020 Entered by Hayg Guler from 134.158.195.145 on Thu Sep 17 17:02:47 2020Under ProcessInfoTemperature Chiller Canon , entered from 134.158.195.145 

Tests de calibration pour les températures du Chiller canon

Problematique :

températude de consigne en V. Or la conversion dans le chiller pour avoir des °C n'est pas correcte vis à vis des mesures :

  • PT100 au niveau de la clarinette (courbe jaune)
  • PT100 sur la stucture du Canon (courbe bleue)

Nous refaisons la calibration, et les courbes de calibration (linéaire mais ne passant pas par zero) seront utilisés pour les consignes.

Temperatures_canon_vs_consigne
Consigne (V) Temp (Corps canon) Temp (Eau, Clarinette)
          5 23.40 23.50
          7 32.40 33.60
          8 36.70 38.60

Consigne (V) = 4.3*Consigne(°C) +2.3

Attachment 1: Selection_012.png
Selection_012.png
  18   Wed Jul 21 17:17:14 2021 Entered by Hayg Guler from 134.158.195.141 on Wed Jul 21 17:16:56 2021Not FixedLinacRF D1 Probleme Redpitaya 2 et 4  

Soucis RPY 2 et 4

voies :

  • RPY 2 voie 2
  • RPY4 voie 1

signal déformé, cf impression d'écran.

 

Attachment 1: rpy2voie2Pb.png
rpy2voie2Pb.png
  1   Thu Jun 6 10:58:43 2019 Miwiwi QuestionDocs , entered from 134.158.195.143 
coucou loulou
Attachment 1: index.jpeg
index.jpeg
  2   Thu Jun 6 11:53:24 2019 nfalcoz QuestionDocs , entered from 134.158.195.143 
Coucou Test
Attachment 1: index.jpeg
index.jpeg
  3   Thu Jun 6 11:54:08 2019 nfalcoz QuestionDocs , entered from 134.158.195.143 
Coucou Test
Attachment 1: index.jpeg
index.jpeg
  4   Thu Jun 6 12:00:33 2019 nfalcoz QuestionDocs , entered from 134.158.195.143 
Coucou Test2
Attachment 1: index.jpeg
index.jpeg
  Draft   Tue Jun 11 12:25:21 2019 Entered by Falcoz Nicolas from 134.158.195.143 on Tue Jun 11 11:55:34 2019      
  6   Wed Jun 12 11:04:46 2019 nfalcoz InfoDocs , entered from 134.158.195.143 
Essai 1 sans piece jointe
Attachment 1: index.jpeg
index.jpeg
  7   Wed Jun 12 11:09:26 2019 nfalcoz ProblemSondes Etuve , entered from 134.158.195.143 
Essai 2 sans pièe jointe
  8   Wed Jun 12 11:24:05 2019 nfalcoz ProblemSondes Etuve , entered from 134.158.195.143 
/self.saisieTexte.toPlainText()
  9   Wed Jun 12 11:45:26 2019 nfalcoz UrgentTemperature , entered from 134.158.195.143 
Essai 3 sans pièce jointe (-_/!?éèêü)
  10   Wed Jun 12 14:15:20 2019 Entered by Falcoz Nicolas from 134.158.195.143 on Wed Jun 12 14:15:07 2019 ProblemEtuves Test accent éè 

Test accent éè

  11   Wed Jun 12 14:23:38 2019 nfalcoz ProblemTemperature , entered from 134.158.195.143 
éééééèèè
  12   Fri Jun 14 13:55:33 2019 nfalcoz FixSondes Etuve , entered from 134.158.195.143 
Test 3 screens
Attachment 1: screen.png
screen.png
Attachment 2: Laser.png
Laser.png
Attachment 3: LaserAvance.png
LaserAvance.png
  13   Thu Jun 27 14:26:55 2019 nfalcoz FixKlystron , entered from 134.158.195.143 
Test IHMLogBook
Attachment 1: screen.png
screen.png
Attachment 2: Laser.png
Laser.png
  14   Thu Jul 11 11:14:46 2019 nfalcoz OtherDocs , entered from 134.158.195.143 
Test
Attachment 1: screenshot.py
#!/usr/bin/env python
# Python screenshot tool (fullscreen/area selection)
# Tested on:
# Lubuntu 13.04 x86_64
# Gentoo 4.1.7-hardened-r1 x86_64

import sys
from PyQt4 import QtCore, QtGui
from commands import getoutput
from StringIO import StringIO
from Xlib import X, display, Xutil


# Documentation for python-xlib here:
# http://python-xlib.sourceforge.net/doc/html/index.html

class XSelect:
    def __init__(self, display):
        # X display
        self.d = display

        # Screen
        self.screen = self.d.screen()

        # Draw on the root window (desktop surface)
        self.window = self.screen.root

        # If only I could get this working...
        #cursor = xobject.cursor.Cursor(self.d, Xcursorfont.crosshair)
        #cursor = self.d.create_resource_object('cursor', Xcursorfont.X_cursor)
        cursor = X.NONE

        self.window.grab_pointer(1, X.PointerMotionMask|X.ButtonReleaseMask|X.ButtonPressMask,
                X.GrabModeAsync, X.GrabModeAsync, X.NONE, cursor, X.CurrentTime)

        self.window.grab_keyboard(1, X.GrabModeAsync, X.GrabModeAsync, X.CurrentTime)

        colormap = self.screen.default_colormap
        color = colormap.alloc_color(0, 0, 0)
        # Xor it because we'll draw with X.GXxor function
        xor_color = color.pixel ^ 0xffffff

        self.gc = self.window.create_gc(
            line_width = 1,
            line_style = X.LineSolid,
            fill_style = X.FillOpaqueStippled,
            fill_rule  = X.WindingRule,
            cap_style  = X.CapButt,
            join_style = X.JoinMiter,
            foreground = xor_color,
            background = self.screen.black_pixel,
            function = X.GXxor,
            graphics_exposures = False,
            subwindow_mode = X.IncludeInferiors,
        )

        done    = False
        started = False
        start   = dict(x=0, y=0)
        end     = dict(x=0, y=0)
        last    = None
        drawlimit = 10
        i = 0

        while done == False:
            e = self.d.next_event()

            # Window has been destroyed, quit
            if e.type == X.DestroyNotify:
                sys.exit(0)

            # Mouse button press
            elif e.type == X.ButtonPress:
                # Left mouse button?
                if e.detail == 1:
                    start = dict(x=e.root_x, y=e.root_y)
                    started = True

                # Right mouse button?
                elif e.detail == 3:
                    sys.exit(0)

            # Mouse button release
            elif e.type == X.ButtonRelease:
                end = dict(x=e.root_x, y=e.root_y)
                if last:
                    self.draw_rectangle(start, last)
                done = True
                pass

            # Mouse movement
            elif e.type == X.MotionNotify and started:
                i = i + 1
                if i % drawlimit != 0:
                    continue

                if last:
                    self.draw_rectangle(start, last)
                    last = None

                last = dict(x=e.root_x, y=e.root_y)
                self.draw_rectangle(start, last)
                pass

            # Keyboard key
            elif e.type == X.KeyPress:
                sys.exit(0)

        self.d.flush()

        coords = self.get_coords(start, end)
        if coords['width'] <= 1 or coords['height'] <= 1:
            sys.exit(0)
        else:
            print "%d %d %d %d" % (coords['start']['x'], coords['start']['y'], coords['width'], coords['height'])

    def get_coords(self, start, end):
        safe_start = dict(x=0, y=0)
        safe_end   = dict(x=0, y=0)

        if start['x'] > end['x']:
            safe_start['x'] = end['x']
            safe_end['x']   = start['x']
        else:
            safe_start['x'] = start['x']
            safe_end['x']   = end['x']

        if start['y'] > end['y']:
            safe_start['y'] = end['y']
            safe_end['y']   = start['y']
        else:
            safe_start['y'] = start['y']
            safe_end['y']   = end['y']

        return {
            'start': {
                'x': safe_start['x'],
                'y': safe_start['y'],
            },
            'end': {
                'x': safe_end['x'],
                'y': safe_end['y'],
            },
            'width' : safe_end['x'] - safe_start['x'],
            'height': safe_end['y'] - safe_start['y'],
        }

    def draw_rectangle(self, start, end):
        coords = self.get_coords(start, end)
        self.window.rectangle(self.gc,
            coords['start']['x'],
            coords['start']['y'],
            coords['end']['x'] - coords['start']['x'],
            coords['end']['y'] - coords['start']['y']
        )


class Screenshot(QtGui.QWidget):
    def __init__(self):
        super(Screenshot, self).__init__()

        self.screenshotLabel = QtGui.QLabel()
        self.screenshotLabel.setSizePolicy(QtGui.QSizePolicy.Expanding,
                QtGui.QSizePolicy.Expanding)
        self.screenshotLabel.setAlignment(QtCore.Qt.AlignCenter)
        self.screenshotLabel.setMinimumSize(240, 160)

        self.createOptionsGroupBox()
        self.createButtonsLayout()

        mainLayout = QtGui.QVBoxLayout()
        mainLayout.addWidget(self.screenshotLabel)
        mainLayout.addWidget(self.optionsGroupBox)
        mainLayout.addLayout(self.buttonsLayout)
        self.setLayout(mainLayout)

        self.area = None
        self.shootScreen()
        self.delaySpinBox.setValue(1)

        self.setWindowTitle("Screenshot")
        self.resize(300, 200)

    def resizeEvent(self, event):
        scaledSize = self.originalPixmap.size()
        scaledSize.scale(self.screenshotLabel.size(), QtCore.Qt.KeepAspectRatio)
        if not self.screenshotLabel.pixmap() or scaledSize != self.screenshotLabel.pixmap().size():
            self.updateScreenshotLabel()

    def selectArea(self):
        self.hide()

        #print sys.argv[0]
        resArea = getoutput('python ./screenshot.py -A') #TODO horrible 1/2 !
        if resArea and resArea != '0 0 0 0':
            print resArea.split()
            self.area = xo, yo, x, y = resArea.split()
            self.areaLabel.setText("Area: x%s y%s to x%s y%s" % (xo, yo, x, y))
            self.shootScreen()
            # print 'OK', self.area #DEBUG
        elif self.area is not None:
            self.area = None
            self.areaLabel.setText("Area: fullscreen")
            self.shootScreen()

        self.show()

    def newScreenshot(self):
        if self.hideThisWindowCheckBox.isChecked():
            self.hide()
        self.newScreenshotButton.setDisabled(True)

        QtCore.QTimer.singleShot(self.delaySpinBox.value() * 1000, self.shootScreen)

    def saveScreenshot(self):
        format = 'png'
        initialPath = QtCore.QDir.currentPath() + "/untitled." + format

        fileName = QtGui.QFileDialog.getSaveFileName(self, "Save As",
                initialPath,
                "%s Files (*.%s);;All Files (*)" % (format.upper(), format))
        if fileName:
            self.originalPixmap.save(fileName, format)

    def shootScreen(self):
        if self.delaySpinBox.value() != 0:
            QtGui.qApp.beep()

        # Garbage collect any existing image first.
        self.originalPixmap = None
        self.originalPixmap = QtGui.QPixmap.grabWindow(QtGui.QApplication.desktop().winId())
        if self.area is not None:
            qi = self.originalPixmap.toImage()
            size = qi.size()
            qi = qi.copy(int(self.area[0]), int(self.area[1]), int(self.area[2]), int(self.area[3]))
            self.originalPixmap = None
            self.originalPixmap = QtGui.QPixmap.fromImage(qi)

        self.updateScreenshotLabel()

        self.newScreenshotButton.setDisabled(False)
        if self.hideThisWindowCheckBox.isChecked():
            self.show()

    def updateCheckBox(self):
        if self.delaySpinBox.value() == 0:
            self.hideThisWindowCheckBox.setDisabled(True)
        else:
            self.hideThisWindowCheckBox.setDisabled(False)

    def createOptionsGroupBox(self):
        self.optionsGroupBox = QtGui.QGroupBox("Options")

        self.delaySpinBox = QtGui.QSpinBox()
        self.delaySpinBox.setSuffix(" s")
        self.delaySpinBox.setMaximum(60)
        self.delaySpinBox.valueChanged.connect(self.updateCheckBox)

        self.delaySpinBoxLabel = QtGui.QLabel("Screenshot Delay:")

        self.hideThisWindowCheckBox = QtGui.QCheckBox("Hide This Window")
        self.hideThisWindowCheckBox.setChecked(True)
        
        self.areaLabel = QtGui.QLabel("Area: fullscreen")

        optionsGroupBoxLayout = QtGui.QGridLayout()
        optionsGroupBoxLayout.addWidget(self.delaySpinBoxLabel, 0, 0)
        optionsGroupBoxLayout.addWidget(self.delaySpinBox, 0, 1)
        optionsGroupBoxLayout.addWidget(self.hideThisWindowCheckBox, 1, 0)
        optionsGroupBoxLayout.addWidget(self.areaLabel, 1, 1)
        self.optionsGroupBox.setLayout(optionsGroupBoxLayout)

    def createButtonsLayout(self):
        self.selectAreaButton = self.createButton("Select Area",
                self.selectArea)

        self.newScreenshotButton = self.createButton("New Screenshot",
                self.newScreenshot)

        self.saveScreenshotButton = self.createButton("Save Screenshot",
                self.saveScreenshot)

        self.quitScreenshotButton = self.createButton("Quit", self.close)

        self.buttonsLayout = QtGui.QHBoxLayout()
        self.buttonsLayout.addStretch()
        self.buttonsLayout.addWidget(self.selectAreaButton)
        self.buttonsLayout.addWidget(self.newScreenshotButton)
        self.buttonsLayout.addWidget(self.saveScreenshotButton)
        self.buttonsLayout.addWidget(self.quitScreenshotButton)

    def createButton(self, text, member):
        button = QtGui.QPushButton(text)
        button.clicked.connect(member)
        return button

    def updateScreenshotLabel(self):
        self.screenshotLabel.setPixmap(self.originalPixmap.scaled(
                self.screenshotLabel.size(), QtCore.Qt.KeepAspectRatio,
                QtCore.Qt.SmoothTransformation))
... 19 more lines ...
Attachment 2: RFCanon.png
RFCanon.png
Attachment 3: RFSection.png
RFSection.png
  15   Mon Jul 22 14:45:32 2019 Entered by Kevin Dupraz from 193.55.29.169 on Mon Jul 22 14:45:10 2019FixedInfoInfra Mot de passe Cameras Surveillance 

Les caméras sont des HIKVISION :

HIKVISION DS-2DE4A404IW-DE(2.8-12MM)

Caméra IP HIKVISION PTZ 4MP + IR 50m

  

  • CMOS à balayage progressif 1 / 1.9 "
  • Résolution jusqu'à 2560 × 1440
  • Ultra-faible lumière:
  •     Couleur: 0.002 Lux @ (F1.6, AGC ON) 

    N / B: 0.0002 Lux @ (F1.6, AGC ON) 
    0 Lux avec IR

  • Zoom optique 4 ×, zoom numérique 16 ×
  • Désembuage numérique, EIS, 3D DNR, BLC, HLC, WDR, exposition régionale, focus régional
  • Jusqu'à 50 m de distance IR
  • 12 VDC & PoE + (802.3at, classe 4)
  • Prise en charge de la compression vidéo H.265 + / H.265

 

Le mot de passe pour accerde à l'interface de configuration des caméras de surveillance est :

user: admin
pass: Th0mx_CAM

user: SDC
pass: thomx_123

elles sont sous l'adresse IP: 192.168.1.10 à 192.168.1.15

docs IP keyboard C400-I:
https: //youtu.be/mdsnin-pcSg

Ajoutée le 10 janv. 2019
The C400 keyboard works well with Hikvision PTZs. For other brand PTZs, it requires call special function preset to set up and call patrol and pattern. If there is any question with installation, please send detailed problems to lefteksupport@163.com

 

Attachment 1: C400-I_User_Manual.pdf
Attachment 2: UD14905B_Baseline_User-Manual-of-Network-Speed-Dome_V5.6.12_20190802.pdf
  19   Tue Oct 12 12:07:22 2021 Entered by Viktor Soskov from 134.158.195.153 on Tue Oct 12 12:06:17 2021FixedInfo | LinacLaser Attenuator_11_10_201 

mesures faites avec 180 uJ et Iris entièrement ouverte. Puissance mesurée au niveau du shutter (après atténuateur)

Attachment 1: Attenuator_11_10_21.pdf
  Draft   Tue Oct 26 18:31:38 2021 Entered by Viktor Soskov from 134.158.195.153 on Tue Oct 26 18:30:49 2021FixedLinac  Laser_Cathode_PulseWidth_Compressor 
Attachment 1: SR_20200824_1-9460.pdf
ELOG V3.1.4-395e101