Программирование через TCP / сокет для лазера - PullRequest
0 голосов
/ 06 ноября 2018

У меня есть задача запрограммировать все команды от лазерного GUI до python, чтобы мы могли использовать python вместо GUI для управления лазером. Проблема: я не знаю, с чего начать. У меня нет никакого опыта программирования сокетов, и при этом я не знаю сетей, но я немного знаю программирование. Чтобы дать вам представление о том, что мне нужно сделать, вот PDF-файл о том, что мне нужно программировать. PDF (p.s. если у вас нет Dropbox, вы можете просто скачать pdf)

Вот и вся повестка дня. Я должен определить класс и использовать там команды, чтобы сделать все доступным в Python.

Мой советник уже запустил программу, но я не уверен, что на самом деле означает этот код. Я спросил его, куда идти отсюда, но он настаивает на том, что все описано в PDF. Код ниже.

Я надеялся, что кто-то может указать мне правильное направление того, что я должен читать / смотреть, чтобы понять, как кодировать остальное. Я прочитал некоторые вводные сокеты и вводные TCP / IP, и я понимаю суть. Дело в том, что программирование сокетов - огромная область, и я не знаю, где вырезать пшеницу из соломы. Примечание: оператор if в конце уже сделан, то есть добавить больше нечего (так говорит мой руководитель). Мне нужно только работать в классе. Код на самом деле не зацементирован. Если я найду лучший / более простой способ работы с командами, то я мог бы обновить код. Любая помощь с благодарностью.

Вот код:

#!/usr/bin/env python

import PySide.QtNetwork as Network
import PySide.QtCore as Core
import configparser


class Spitlight():
    """The classe spitlight provides an interface so that we can the Innolas Spitlight Laser from python parameterize and operate.
    """
    def __init__(self, *args, **kwargs):
        """constructor"""
        pass

    def ReadConfig(self, ConfigFile):
        """The parameters to operate the laser will come from the configurations file with the file ending *.ini"""
        self.config = configparser.ConfigParser()
        self.config.read(ConfigFile)

        """ here the single parameters will be read and the parameters thoroughly checked. Later we will add parameter value limits so the laser will not function without being within the value limits. 

        Initial relevant options are:
            flashbulb voltage, Repetition rate, pump duration, pockels cell control (Balance, Holdoff), delays 

        Futhermore the communication information is in the IP/Port of the laser server
        return 0 """


    def Start(self):
        """
        Open socket with information from configuration

        Send parameters to the laser and confirm that everything is in order  e.g:
        send SET_OSCILLATOR_AMPLITUDE with FLHighvoltage aus Config
        """
        self.initSocket()

        self.set_oscillator_amplitude()


    def set_oscillator_amplitude(self):
        self.tcpSocket.write("SET_OSCILLATOR_AMPLITUDE={}".format(self.Config['Laser parameter']['FLHighvoltage ']))

    def set_oscillator_delay(self):
        self.tcpSocket.write("SET_OSCILLATOR_DELAY={}".format(self.Config['Laser parameter']['FLDelay']))


    def initSocket(self):
        """ Socket initialize"""
        self.tcpSocket = Network.QTcpSocket()
        self.tcpSocket.disconnected.connect(self.connectSocket)
        self.tcpSocket.readyRead.connect(self.readData)
        self.connectSocket()

        #  regularly reconnect is stabilerregelmäßiger reconnect is more stable as leaving the socket the entire time open
        self.reconnectTimer = Core.QTimer()
        self.reconnectTimer.setInterval(120000)  # 2 minutes
        self.reconnectTimer.timeout.connect(self.reconnectSocket)
        self.reconnectTimer.start()
        return 0

    @Core.Slot()
    def connectSocket(self):
        """Socket connect"""
        return self.tcpSocket.connectToHost(self.proxyAddress, self.proxyPort)
    @Core.Slot()
    def reconnectSocket(self):
        """Socket Status verify and again connect"""
        """ Available states of tcpSocket.state() are:
        QAbstractSocket.UnconnectedState    The socket is not connected.
        QAbstractSocket.HostLookupState     The socket is performing a host name lookup.
        QAbstractSocket.ConnectingState     The socket has started establishing a connection.
        QAbstractSocket.ConnectedState      A connection is established.
        QAbstractSocket.BoundState          The socket is bound to an address and port (for servers).
        QAbstractSocket.ClosingState        The socket is about to close (data may still be waiting to be written).
        QAbstractSocket.ListeningState      For internal use only.
        """
        if self.tcpSocket.state() in [ Network.QAbstractSocket.HostLookupState, Network.QAbstractSocket.ConnectingState, Network.QAbstractSocket.ListeningState ]:
            return 0
        if self.tcpSocket.state() == Network.QAbstractSocket.ConnectedState:
            return self.tcpSocket.disconnectFromHost()

    @Core.Slot()
    def readData(self):
        data = self.tcpSocket.readAll()
        if str(data).startswith("ERROR="):
            pass
        elif str(data).startswith("WARNING="):
            pass
        elif:
            pass

    def FlOn(self):
        """send FLASHLAMP ON
        verify with GET_LASER_STATE"""

        return 0

"""testing framework:
laser start, parametrierize, flashbulb on, shutter off, shutter closed, flashbulb off, every of the functions gives a 0 when they were successful and a error message when not
"""
if __name__ == "__main__":
    SpitligthControl = Spitlight()
    SpitligthControl.ReadConfig('SpitlightConfig.ini')
    SpitligthControl.Start()
    SpitligthControl.FlOn()
    SpitligthControl.StartEmission()
    SpitligthControl.StopEmission()
    SpitligthControl.FlOff()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...