Esempio n. 1
0
class Ui_SplashScreen(object):
    def setupUi(self, SplashScreen):
        SplashScreen.setObjectName("SplashScreen")
        SplashScreen.resize(400, 300)
        SplashScreen.setWindowIcon(Hariku_Style.getIcon())
        self.centralwidget = QWidget(SplashScreen)
        self.centralwidget.setObjectName("centralwidget")
        self.verticalLayout = QVBoxLayout(self.centralwidget)
        self.verticalLayout.setContentsMargins(10, 10, 10, 10)
        self.verticalLayout.setSpacing(0)
        self.verticalLayout.setObjectName("verticalLayout")

        self.dropShadowFrame = QFrame(self.centralwidget)
        self.dropShadowFrame.setFont(Hariku_Style.get_font(6))
        self.dropShadowFrame.setStyleSheet(
            Hariku_Style.get_drop_shadow_stylesheet())
        self.dropShadowFrame.setFrameShape(QFrame.StyledPanel)
        self.dropShadowFrame.setFrameShadow(QFrame.Raised)
        self.dropShadowFrame.setObjectName("dropShadowFrame")

        self.verticalLayout_2 = QVBoxLayout(self.dropShadowFrame)
        self.verticalLayout_2.setObjectName("verticalLayout_2")

        self.label_pic = QLabel(self.dropShadowFrame)
        self.label_pic.setEnabled(True)
        self.label_pic.setMaximumSize(QtCore.QSize(50, 60))
        self.label_pic.setTextFormat(QtCore.Qt.AutoText)
        self.label_pic.setPixmap(
            QtGui.QPixmap("splashsceen\\../assets/Hariku-logo.png"))
        self.label_pic.setScaledContents(True)
        self.label_pic.setStyleSheet("QLabel { margin-top:10px }")
        self.label_pic.setAlignment(QtCore.Qt.AlignCenter)
        self.label_pic.setObjectName("label_pic")
        self.verticalLayout_2.addWidget(self.label_pic, 0,
                                        QtCore.Qt.AlignHCenter)

        self.label_desc = QLabel(self.dropShadowFrame)
        self.label_desc.setFont(Hariku_Style.get_font(10))
        self.label_desc.setStyleSheet("")
        self.label_desc.setObjectName("label_desc")
        self.verticalLayout_2.addWidget(self.label_desc)

        self.progressBar = QProgressBar(self.dropShadowFrame)
        self.progressBar.setStyleSheet(
            Hariku_Style.get_progressbar_stylesheet())
        self.progressBar.setProperty("value", 24)
        self.progressBar.setObjectName("progressBar")
        self.verticalLayout_2.addWidget(self.progressBar)

        self.label_loading = QLabel(self.dropShadowFrame)
        self.label_loading.setFont(Hariku_Style.get_font(8))
        self.label_loading.setStyleSheet("")
        self.label_loading.setObjectName("label_loading")
        self.verticalLayout_2.addWidget(self.label_loading)
        self.verticalLayout.addWidget(self.dropShadowFrame)

        SplashScreen.setCentralWidget(self.centralwidget)

        self.retranslateUi(SplashScreen)
        QtCore.QMetaObject.connectSlotsByName(SplashScreen)

    def retranslateUi(self, SplashScreen):
        _translate = QtCore.QCoreApplication.translate
        SplashScreen.setWindowTitle(_translate("SplashScreen", "MainWindow"))
        self.label_desc.setText(
            _translate("SplashScreen",
                       "<center> Loading <Strong> Apps</Strong> </center>"))
        self.label_loading.setText(
            _translate("SplashScreen",
                       "<center><Strong> loading .</Strong></center>"))
Esempio n. 2
0
class App(QMainWindow):
    def __init__(self):
        super().__init__()
        self.initUI()

    def initUI(self):

        global flList
        global datatypes
        self.versionPr = 'FOTON OPC v 0.10'
        self.setGeometry(400, 200, 1000, 520)
        self.setWindowTitle(self.versionPr)
        #self.setWindowIcon(QIcon(self.imgPath + 'gnome-monitor.png'))
        self.h = self.frameGeometry().height()

        font = QFont()
        font.setPointSize(12)

        self.label0 = QLabel(self)
        self.label0.setFont(font)
        self.label0.move(50, 20)
        self.label0.resize(300, 25)
        self.label0.setText("IP сервера:")

        self.tty = QLineEdit(self)
        self.tty.setFont(font)
        self.tty.move(50, 50)
        self.tty.resize(150, 25)

        self.label0 = QLabel(self)
        self.label0.setFont(font)
        self.label0.move(50, 80)
        self.label0.resize(300, 25)
        self.label0.setText("Порт:")

        self.port = QLineEdit(self)
        self.port.setFont(font)
        self.port.move(50, 110)
        self.port.resize(150, 25)

        self.labelv = QLabel(self)
        self.labelv.setFont(font)
        self.labelv.move(50, 140)
        self.labelv.resize(300, 25)
        self.labelv.setText("Переменная:")

        self.labelv = QLabel(self)
        self.labelv.setFont(font)
        self.labelv.move(50, 220)
        self.labelv.resize(300, 25)
        self.labelv.setText("Значение:")

        self.labelt = QLabel(self)
        self.labelt.setFont(font)
        self.labelt.move(520, 200)
        self.labelt.resize(300, 25)
        self.labelt.setText("Тип данных:")

        self.modlabel = QLabel(self)
        self.modlabel.setFont(font)
        self.modlabel.move(520, 20)
        self.modlabel.resize(300, 25)
        self.modlabel.setText("Modbus устройство:")

        self.modlabel2 = QLabel(self)
        self.modlabel2.setFont(font)
        self.modlabel2.move(520, 120)
        self.modlabel2.resize(300, 25)
        self.modlabel2.setText("Название переменной:")

        self.variable = QLineEdit(self)
        self.variable.setFont(font)
        self.variable.move(520, 160)
        self.variable.resize(150, 25)

        self.modlabel3 = QLabel(self)
        self.modlabel3.setFont(font)
        self.modlabel3.move(720, 120)
        self.modlabel3.resize(300, 25)
        self.modlabel3.setText("Начальный регистр:")

        self.startr = QLineEdit(self)
        self.startr.setFont(font)
        self.startr.move(720, 160)
        self.startr.resize(150, 25)

        self.value = QLineEdit(self)
        self.value.setFont(font)
        self.value.move(50, 250)
        self.value.resize(150, 25)

        self.button1 = QPushButton("Start", self)
        self.button1.move(50, 290)
        self.button1.clicked.connect(self.button_click)

        self.button2 = QPushButton("Stop", self)
        self.button2.move(150, 290)
        self.button2.clicked.connect(self.button_click2)

        self.buttonadd = QPushButton("Add", self)
        self.buttonadd.move(250, 290)
        self.buttonadd.clicked.connect(self.button_add)

        self.buttonsave = QPushButton("Save", self)
        self.buttonsave.move(350, 290)
        self.buttonsave.clicked.connect(self.button_save)

        self.buttonmod = QPushButton("Listen Modbus", self)
        self.buttonmod.move(650, 290)
        self.buttonmod.clicked.connect(self.startModbus)

        self.buttonaddm = QPushButton("Add register", self)
        self.buttonaddm.move(750, 240)
        self.buttonaddm.clicked.connect(self.addvariable)

        self.buttoncon = QPushButton("Connect", self)
        self.buttoncon.move(550, 290)
        self.buttoncon.clicked.connect(self.connect)

        self.buttonupd = QPushButton("Update", self)
        self.buttonupd.move(750, 290)
        self.buttonupd.clicked.connect(self.Update)

        self.datatypes = QComboBox(self)
        self.datatypes.move(520, 230)
        self.datatypes.setFont(font)
        self.datatypes.resize(120, 25)
        self.datatypes.addItems(datatypes2)

        self.ports = QComboBox(self)
        self.ports.move(550, 50)
        self.ports.setFont(font)
        self.ports.resize(120, 25)
        self.ports.addItems(PortsList)

        self.velocity = QComboBox(self)
        self.velocity.move(550, 80)
        self.velocity.setFont(font)
        self.velocity.resize(120, 25)
        self.velocity.addItems(VeloList)

        #self.regs = QLineEdit(self)
        #self.regs.setFont(font)
        #self.regs.move(550, 150)
        #self.regs.resize(150, 25)

        self.frameTable = QFrame(self)
        self.frameTable.move(50, 350)
        self.frameTable.setFont(font)
        self.frameTable.resize(1350, 950)
        self.frameTable.setVisible(True)
        self.treeTable = QTableWidget(self.frameTable)
        fontTable = QFont()
        fontTable.setPointSize(10)
        self.treeTable.setFont(fontTable)
        self.treeTable.resize(1000, 200)
        self.treeTable.setColumnCount(4)
        self.treeTable.setRowCount(1)
        self.treeTable.setHorizontalHeaderLabels(
            ['Имя переменной', 'Начальный регистр', 'Тип данных', 'Значение'])
        self.treeTable.resizeColumnsToContents()
        self.treeTable.setColumnWidth(0, 250)
        self.treeTable.setColumnWidth(1, 250)
        self.treeTable.setColumnWidth(2, 250)
        self.treeTable.setColumnWidth(3, 250)
        #self.thread = QThread()
        #self.thread.started.connect(self.getModbus)
        #self.thread.start()

        openFile = QAction(QIcon('open.png'), 'Open', self)
        openFile.setShortcut('Ctrl+O')
        openFile.setStatusTip('Open new File')
        openFile.triggered.connect(self.showDialog)

        menubar = self.menuBar()
        fileMenu = menubar.addMenu('&File')

        fileMenu.addAction(openFile)

        self.show()

    def showDialog(self):
        global typesfromfl
        global namesfromfl

        fname = QFileDialog.getOpenFileName(self, 'Open file', '/home')[0]

        f = open(fname, 'r')

        e = ET.parse(fname)
        doc = e.getroot()

        for v in e.findall('var'):
            typesfromfl.append(v.get('type'))
            namesfromfl.append(v.get('name'))
            new_var = [v.get('name'), 'value', v.get('type')]
            variables.append(new_var)
        print(variables)
        self.treeTable.setRowCount(len(variables))
        for i in range(0, len(variables)):
            self.treeTable.setItem(i, 0, QTableWidgetItem(variables[i][0]))
            self.treeTable.setItem(i, 1, QTableWidgetItem(variables[i][1]))
            self.treeTable.setItem(i, 2, QTableWidgetItem(variables[i][2]))

        #with f:
        #data = f.read()
        #print(data)
    def button_click(self):

        a = self.port.text()
        print(a)
        global status
        status = True
        print(status)

    def connect(self):
        ind = self.ports.currentIndex()
        port = PortsList[ind]
        baud = self.velocity.currentIndex()
        portbaud = int(VeloList[baud])
        connect(port, portbaud)

    def button_click2(self):
        global status
        status = False
        print(status)
        disconnect()

    datatypes2 = [
        'Boolean', 'Byte', 'Double', 'String', 'UInt16', 'UInt32', 'Float'
    ]

    def addvariable(self):
        global registersnum
        global variables
        global myobj
        global idx

        idt = self.datatypes.currentText()
        name = self.variable.text()
        startr = self.startr.text()
        new_var = [name, startr, idt, 0]
        variables.append(new_var)
        print(variables)
        registers.append(int(startr))
        print(registers)
        registersnum = registersnum + 2
        print(registersnum)

        myobj.add_variable(idx, name, 0.0)

        self.treeTable.setRowCount(len(variables))
        for i in range(len(variables)):
            self.treeTable.setItem(i, 0, QTableWidgetItem(variables[i][0]))
            self.treeTable.setItem(i, 1, QTableWidgetItem(variables[i][1]))
            self.treeTable.setItem(i, 2, QTableWidgetItem(variables[i][2]))

    def startModbus(self):
        self.myThread = ModbusThread(registersnum, min(registers), 1)
        self.myThread.start()

    def button_save(self):
        createXML()

    def Update(self):
        bytes = self.regs.text()
        print(bytes)
        try:
            self.myThread.quant = int(bytes)
            values_for_transmit.append(0)
        except Exception as ex:
            print(ex)

    def button_add(self):
        global idx
        global objects
        global datatype
        global variable
        global variables
        global values_for_transmit
        indexdt = self.datatypes.currentIndex()
        name = self.variable.text()
        a = name

        print(name)
        value = self.value.text()
        print(value)

        index = self.folders.currentIndex()

        if indexdt == 0:
            value = bool(value)
            a = flListopc[index].add_variable(idx, name, value,
                                              ua.VariantType.Boolean)
            datatype = 'bool'
        if indexdt == 1:
            value = int(value)
            a = flListopc[index].add_variable(idx, name, value,
                                              ua.VariantType.Byte)
            datatype = 'byte'
        if indexdt == 2:
            value = int(value)
            a = flListopc[index].add_variable(idx, name, value,
                                              ua.VariantType.Double)
            a.set_writable()
            datatype = 'double'
        if indexdt == 3:
            value = str(value)
            a = flListopc[index].add_variable(idx, name, value,
                                              ua.VariantType.String)

            datatype = 'string'
        if indexdt == 4:
            value = int(value)
            a = flListopc[index].add_variable(idx, name, value,
                                              ua.VariantType.UInt16)
            datatype = 'UInt16'

        if indexdt == 5:
            value = int(value)
            a = flListopc[index].add_variable(idx, name, value,
                                              ua.VariantType.UInt32)
            datatype = 'UInt32'

        if indexdt == 6:

            try:
                for val in values_for_transmit:

                    a = flListopc[index].add_variable(
                        idx, 'value' + str(values_for_transmit.index(val)),
                        val, ua.VariantType.Float)
                    datatype = 'Float'
            except Exception as e:
                print(e)
        print(a, value, name, datatype)
        new_var = [name, value, datatype]
        variables.append(new_var)
        print(variables)
        self.treeTable.setRowCount(len(variables))
        for i in range(len(variables)):
            self.treeTable.setItem(i, 0, QTableWidgetItem(variables[i][0]))
            self.treeTable.setItem(i, 1, QTableWidgetItem(variables[i][1]))
            self.treeTable.setItem(i, 2, QTableWidgetItem(variables[i][2]))
Esempio n. 3
0
class App(QMainWindow):
    def __init__(self):
        super().__init__()
        self.initUI()

    def initUI(self):

         self.srvList=["",
                               "master_mercury230",
                               "master_modbusRTU",
                               "master_modbusTCP",
                               "master_http",
                               "master_dcon",
                               "master_ping"]
         self.slvList=["","opcUA","modbusTCP"]

         if(os.name=='nt'):

             self.appPath=os.path.abspath(sys.argv[0]).replace(os.path.basename(__file__),'')


             self.imgPath=self.appPath+"img\\"
             self.dbPath=self.appPath+"db\\srvDb.db"

         else:
             self.appPath=os.path.abspath(sys.argv[0]).replace(os.path.basename(__file__),'')
             self.imgPath=self.appPath+"img/"
             self.dbPath=self.appPath+"db/srvDb.db"


         self.versionPr='ScadaPy Конфигуратор сервера v.3.11'
         self.setGeometry(400, 200, 1000, 520)
         self.setWindowTitle(self.versionPr)
         self.setWindowIcon(QIcon( self.imgPath+'gnome-monitor.png'))
         self.h=self.frameGeometry().height()

         font = QFont()
         font.setPointSize(12)


         self.label0=QLabel(self)
         self.label0.setFont(font)
         self.label0.move(400, 60)
         self.label0.resize(300,25)
         self.label0.setText("ID сервера")
         self.label00=QLabel(self)
         self.label00.setFont(font)
         self.label00.move(550, 60)
         self.label00.resize(300,25)
         self.label00.setText("")

         self.label1=QLabel(self)
         self.label1.setFont(font)
         self.label1.move(400, 90)
         self.label1.resize(140,25)
         self.label1.setText("Название сервера")
         self.srvName = QLineEdit(self)
         self.srvName.setToolTip('Пример: Сервер Маш.Зала №1')
         self.srvName.move(550, 90)
         self.srvName.setFont(font)
         self.srvName.resize(300,25)

         self.label2=QLabel(self)
         self.label2.setFont(font)
         self.label2.move(400, 120)
         self.label2.resize(140,25)
         self.label2.setText("Slave IP address")
         self.slaveIP = QLineEdit(self)
         self.slaveIP.setToolTip('Пример: 192.168.0.111')
         self.slaveIP.move(550, 120)
         self.slaveIP.setFont(font)
         self.slaveIP.resize(300,25)


         self.label2=QLabel(self)
         self.label2.setFont(font)
         self.label2.move(400, 150)
         self.label2.resize(140,25)
         self.label2.setText("Slave Port")
         self.slavePort = QLineEdit(self)
         self.slavePort.setToolTip('Пример modbus: 502\nПример opcua: 4840')
         self.slavePort.move(550, 150)
         self.slavePort.setFont(font)
         self.slavePort.resize(100,25)

         self.label7=QLabel(self)
         self.label7.setFont(font)
         self.label7.move(680, 150)
         self.label7.resize(140,25)
         self.label7.setText("Timeout")
         self.serverTimeout = QLineEdit(self)
         self.serverTimeout.setToolTip('Пример ms: 1 ')
         self.serverTimeout.move(750, 150)
         self.serverTimeout.setFont(font)
         self.serverTimeout.resize(100,25)




         self.label3=QLabel(self)
         self.label3.setFont(font)
         self.label3.move(400, 180)
         self.label3.resize(140,25)
         self.label3.setText("Тип Master")
         self.label3=QLabel(self)
         self.label3.setFont(font)
         self.label3.move(550, 180)
         self.label3.resize(340,25)
         self.label3.setText("---")

         self.combo1 = QComboBox(self)
         self.combo1.move(550, 210)
         self.combo1.setFont(font)
         self.combo1.resize(320,25)
         self.combo1.addItems(self.srvList)

         self.label4=QLabel(self)
         self.label4.setFont(font)
         self.label4.move(400, 240)
         self.label4.resize(140,25)
         self.label4.setText("Тип Slave")
         self.label4=QLabel(self)
         self.label4.setFont(font)
         self.label4.move(550, 240)
         self.label4.resize(340,25)
         self.label4.setText("---")

         self.combo2 = QComboBox(self)
         self.combo2.move(550, 270)
         self.combo2.setFont(font)
         self.combo2.resize(320,25)
         self.combo2.addItems(self.slvList)

         self.label5=QLabel(self)
         self.label5.setFont(font)
         self.label5.move(400, 300)
         self.label5.resize(140,25)
         self.label5.setText("Порт /dev/tty*")
         self.tty=QLineEdit(self)
         self.tty.setToolTip('Пример linux: /dev/ttyUSB0\nПример windows: com19')
         self.tty.setFont(font)
         self.tty.move(550, 300)
         self.tty.resize(150,25)

         self.label6=QLabel(self)
         self.label6.setFont(font)
         self.label6.move(720, 300)
         self.label6.resize(140,25)
         self.label6.setText("скорость")
         self.ttySpeed=QLineEdit(self)
         self.ttySpeed.setToolTip('Пример : 9600')
         self.ttySpeed.setFont(font)
         self.ttySpeed.move(800, 300)
         self.ttySpeed.resize(150,25)



         exitAction = QAction(QIcon( self.imgPath+'exit.png'), '&Выход', self)
         exitAction.setShortcut('Ctrl+Q')
         exitAction.setStatusTip('Выход из программы')
         exitAction.triggered.connect(qApp.quit)


         addServerAction = QAction(QIcon(self.imgPath+'add.png'), '&Добавить', self)
         addServerAction.setStatusTip('Добавить сервер')
         addServerAction.triggered.connect(self.addNewServer)

         delServerAction = QAction(QIcon(self.imgPath+'button_cancel.png'), '&Удалить', self)
         delServerAction.setStatusTip('Удалить сервер')
         delServerAction.triggered.connect(self.delServer)


         saveServerAction = QAction(QIcon(self.imgPath+'filesave.png'), '&Сохранить', self)
         saveServerAction.setStatusTip('Сохранить сервер')
         saveServerAction.triggered.connect(self.saveServer)

         saveScr = QAction(QIcon(self.imgPath+'bottom.png'), '&Сохранить скрипт', self)
         saveScr.setStatusTip('Сохранить скрипт')
         saveScr.triggered.connect(self.saveScr)

         runScr = QAction(QIcon(self.imgPath+'run.png'), '&Запустить скрипт', self)
         runScr.setStatusTip('Запустить скрипт')
         runScr.triggered.connect(self.runScr)


         menubar = self.menuBar()
         fileMenu = menubar.addMenu('&Команды')
         fileMenu.addAction(addServerAction)
         fileMenu.addAction(delServerAction)
         fileMenu.addAction(saveServerAction)
         fileMenu.addAction(saveScr)
         fileMenu.addAction(runScr)
         fileMenu.addAction(exitAction)


         self.toolbar = self.addToolBar('Выход')
         self.toolbar.addAction(exitAction)
         self.toolbar.addAction(addServerAction)
         self.toolbar.addAction(delServerAction)
         self.toolbar.addAction(saveServerAction)
         self.toolbar.addAction(saveScr)
         self.toolbar.addAction(runScr)




        # self.statusBar().showMessage('Загрузка данных')

         self.treeView = QTreeView(self)
         self.treeView.setFont(font)
         self.treeView.setObjectName("treeView")
         self.model = QStandardItemModel()
         self.treeView.setModel(self.model)
         self.header = ['Название сервера']
         self.model.setHorizontalHeaderLabels(self.header)

         self.sqlLoad()
         self.treeView.clicked.connect(self.onClickItem)





         self.frameTable = QFrame(self)
         self.frameTable.move(380, 350)
         self.frameTable.setFont(font)
         self.frameTable.resize(1350,950)
         self.frameTable.setVisible(True)

         self.addRow = QPushButton(self.frameTable)
         self.addRow.setIcon(QIcon(self.imgPath+'add.png'))
         self.addRow.move(10, 10)
         self.addRow.resize(30,30)
         self.addRow.clicked.connect(self.addRowTable)

         self.saveTable = QPushButton(self.frameTable)
         self.saveTable.setIcon(QIcon(self.imgPath+'filesave.png'))
         self.saveTable.resize(30,30)
         self.saveTable.move(50, 10)
         self.saveTable.clicked.connect(self.saveRowTable)


         self.treeTable = QTableWidget(self.frameTable)
         fontTable = QFont()
         fontTable.setPointSize(10)
         self.treeTable.setFont(fontTable)

         self.show()









    def addRowTable(self):
         self.treeTable.insertRow(self.treeTable.rowCount())


    def getDataPing(self):
             self.treeTable.clear()
             self.treeTable.setColumnCount(2)
             self.treeTable.setRowCount(1)
             self.treeTable.setHorizontalHeaderLabels(['IP адрес сервера','Имя переменной'])
             self.treeTable.resizeColumnsToContents()
             self.treeTable.setColumnWidth(0, 380)
             self.treeTable.setColumnWidth(1, 400)



             connDb = sqlite3.connect(self.dbPath)
             cursor = connDb.cursor()
             cursor.execute("select ip,name from  master_ping where serverId = "+self.label00.text())
             dt=cursor.fetchall()
             self.treeTable.setRowCount(len(dt))
             for i in range(0,len(dt)):
                 self.treeTable.setItem(i, 0, QTableWidgetItem(dt[i][0]))
                 self.treeTable.setItem(i, 1, QTableWidgetItem(dt[i][1]))
                 i+=1

    def getDataMercury(self):
             self.treeTable.clear()
             self.treeTable.setColumnCount(2)
             self.treeTable.setRowCount(1)
             self.treeTable.setHorizontalHeaderLabels(['Сетевой адрес счетчика','Имя переменной'])
             self.treeTable.resizeColumnsToContents()
             self.treeTable.setColumnWidth(0, 380)
             self.treeTable.setColumnWidth(1, 400)



             connDb = sqlite3.connect(self.dbPath)
             cursor = connDb.cursor()
             cursor.execute("select netAdr, serNum from  master_mercury230 where serverId = "+self.label00.text())
             dt=cursor.fetchall()
             self.treeTable.setRowCount(len(dt))
             for i in range(0,len(dt)):
                 self.treeTable.setItem(i, 0, QTableWidgetItem(dt[i][0]))
                 self.treeTable.setItem(i, 1, QTableWidgetItem(dt[i][1]))
                 i+=1

    def getDataModbusTCP(self):
             self.treeTable.clear()
             self.treeTable.setColumnCount(8)
             self.treeTable.setRowCount(1)
             self.treeTable.setHorizontalHeaderLabels(['IP адрес','Порт','Адрес\nRTU','Название регистра','Адрес\nячейки','Кол-во\nячеек','Адрес на\nсервере','Имя переменной'])
             self.treeTable.resizeColumnsToContents()
             self.treeTable.setColumnWidth(0, 110)
             self.treeTable.setColumnWidth(1, 50)
             self.treeTable.setColumnWidth(2, 80)
             self.treeTable.setColumnWidth(3, 220)
             self.treeTable.setColumnWidth(4, 80)
             self.treeTable.setColumnWidth(5, 80)
             self.treeTable.setColumnWidth(6, 80)
             self.treeTable.setColumnWidth(7, 160)



             connDb = sqlite3.connect(self.dbPath)
             cursor = connDb.cursor()
             cursor.execute("select ip,port,adrRtu,reg,fromAdr,fromCount,toAdr,comment serNum from  master_modbusTCP where serverId = "+self.label00.text())
             dt=cursor.fetchall()
             self.treeTable.setRowCount(len(dt))
             for i in range(0,len(dt)):
                 self.treeTable.setItem(i, 0, QTableWidgetItem(dt[i][0]))
                 self.treeTable.setItem(i, 1, QTableWidgetItem(dt[i][1]))
                 self.treeTable.setItem(i, 2, QTableWidgetItem(dt[i][2]))
                 self.treeTable.setItem(i, 3, QTableWidgetItem(dt[i][3]))
                 self.treeTable.setItem(i, 4, QTableWidgetItem(dt[i][4]))
                 self.treeTable.setItem(i, 5, QTableWidgetItem(dt[i][5]))
                 self.treeTable.setItem(i, 6, QTableWidgetItem(dt[i][6]))
                 self.treeTable.setItem(i, 7, QTableWidgetItem(dt[i][7]))
                 i+=1


    def getDataHttp(self):
             self.treeTable.clear()
             self.treeTable.setColumnCount(7)
             self.treeTable.setRowCount(1)
             self.treeTable.setHorizontalHeaderLabels(['Адрес http','Название регистра','modbus-Адрес ячейки\nopc-тип переменной','Количество \nячеек','Объект','Login','Password'])
             self.treeTable.resizeColumnsToContents()
             self.treeTable.setColumnWidth(0, 310)
             self.treeTable.setColumnWidth(1, 160)
             self.treeTable.setColumnWidth(2, 150)
             self.treeTable.setColumnWidth(3, 120)
             self.treeTable.setColumnWidth(4, 120)
             self.treeTable.setColumnWidth(5, 120)
             self.treeTable.setColumnWidth(6, 120)


             connDb = sqlite3.connect(self.dbPath)
             cursor = connDb.cursor()
             cursor.execute("select ip,reg,toAdr,fromCount,comment,login,password from  master_http where serverId = "+self.label00.text())
             dt=cursor.fetchall()
             self.treeTable.setRowCount(len(dt))
             for i in range(0,len(dt)):
                 self.treeTable.setItem(i, 0, QTableWidgetItem(dt[i][0]))
                 self.treeTable.setItem(i, 1, QTableWidgetItem(dt[i][1]))
                 self.treeTable.setItem(i, 2, QTableWidgetItem(dt[i][2]))
                 self.treeTable.setItem(i, 3, QTableWidgetItem(dt[i][3]))
                 self.treeTable.setItem(i, 4, QTableWidgetItem(dt[i][4]))
                 self.treeTable.setItem(i, 5, QTableWidgetItem(dt[i][5]))
                 self.treeTable.setItem(i, 6, QTableWidgetItem(dt[i][6]))


                 i+=1




    def getDataDcon(self):
             self.treeTable.clear()
             self.treeTable.setColumnCount(4)
             self.treeTable.setRowCount(1)
             self.treeTable.setHorizontalHeaderLabels(['Модель','Адрес\nRTU','Адрес ячейки на\nсервере','Имя переменной'])
             self.treeTable.resizeColumnsToContents()
             self.treeTable.setColumnWidth(0, 110)
             self.treeTable.setColumnWidth(1, 80)
             self.treeTable.setColumnWidth(2, 120)
             self.treeTable.setColumnWidth(3, 320)



             connDb = sqlite3.connect(self.dbPath)
             cursor = connDb.cursor()
             cursor.execute("select model,adrRtu,toAdr,comment from  master_dcon where serverId = "+self.label00.text())
             dt=cursor.fetchall()
             self.treeTable.setRowCount(len(dt))
             for i in range(0,len(dt)):
                 self.treeTable.setItem(i, 0, QTableWidgetItem(dt[i][0]))
                 self.treeTable.setItem(i, 1, QTableWidgetItem(dt[i][1]))
                 self.treeTable.setItem(i, 2, QTableWidgetItem(dt[i][2]))
                 self.treeTable.setItem(i, 3, QTableWidgetItem(dt[i][3]))
                 i+=1

    def getDataModbusRTU(self):
             self.treeTable.clear()
             self.treeTable.setColumnCount(6)
             self.treeTable.setRowCount(1)
             self.treeTable.setHorizontalHeaderLabels(['Адрес\nRTU','Название регистра','Адрес\nячейки','Кол-во\nячеек','Адрес на\nсервере','Имя переменной'])
             self.treeTable.resizeColumnsToContents()
             self.treeTable.setColumnWidth(0, 50)
             self.treeTable.setColumnWidth(1, 220)
             self.treeTable.setColumnWidth(2, 80)
             self.treeTable.setColumnWidth(3, 80)
             self.treeTable.setColumnWidth(4, 80)
             self.treeTable.setColumnWidth(5, 220)




             connDb = sqlite3.connect(self.dbPath)
             cursor = connDb.cursor()
             cursor.execute("select adrRtu,reg,fromAdr,fromCount,toAdr,comment serNum from  master_modbusRTU where serverId = "+self.label00.text())
             dt=cursor.fetchall()
             self.treeTable.setRowCount(len(dt))
             for i in range(0,len(dt)):
                 self.treeTable.setItem(i, 0, QTableWidgetItem(dt[i][0]))
                 self.treeTable.setItem(i, 1, QTableWidgetItem(dt[i][1]))
                 self.treeTable.setItem(i, 2, QTableWidgetItem(dt[i][2]))
                 self.treeTable.setItem(i, 3, QTableWidgetItem(dt[i][3]))
                 self.treeTable.setItem(i, 4, QTableWidgetItem(dt[i][4]))
                 self.treeTable.setItem(i, 5, QTableWidgetItem(dt[i][5]))
                 i+=1

    def saveRowTable(self):
             connDb = sqlite3.connect(self.dbPath)
             cursor = connDb.cursor()


             if(self.label3.text()=="master_ping"):
                 cursor.execute("delete from master_ping where serverId= '"+self.label00.text()+"'" )
                 connDb.commit()

                 for i in range(0,self.treeTable.rowCount()):

                     try:
                         if(     len(self.treeTable.item(i,0).text()) > 0 and
                                 len(self.treeTable.item(i,1).text()) > 0 ):

                             cursor.execute("INSERT INTO master_ping(serverId,ip,name,valid)\
                             VALUES('"+self.label00.text()+"','"+self.treeTable.item(i,0).text()+"'\
                             ,'"+self.treeTable.item(i,1).text()+"',1)" )
                             connDb.commit()
                     except Exception as e:
                     #print(e)
                         pass
                     i+=1
                 self.getDataPing()





             if(self.label3.text()=="master_mercury230"):
                 cursor.execute("delete from master_mercury230 where serverId= '"+self.label00.text()+"'" )
                 connDb.commit()

                 for i in range(0,self.treeTable.rowCount()):
                     try:
                         if(     len(self.treeTable.item(i,0).text()) > 0 and
                                 len(self.treeTable.item(i,1).text()) > 0 ):

                             cursor.execute("INSERT INTO master_mercury230(serverId,netAdr,serNum,valid)\
                             VALUES('"+self.label00.text()+"','"+self.treeTable.item(i,0).text()+"'\
                             ,'"+self.treeTable.item(i,1).text()+"',1)" )
                             connDb.commit()
                     except Exception as e:
                     #print(e)
                         pass
                     i+=1
                 self.getDataMercury()


             if(self.label3.text()=="master_modbusTCP"):
                 cursor.execute("delete from master_modbusTCP where serverId= '"+self.label00.text()+"'" )
                 connDb.commit()

                 for i in range(0,self.treeTable.rowCount()):
                         try:
                             if(     len(self.treeTable.item(i,0).text()) > 0 and
                                     len(self.treeTable.item(i,1).text()) > 0 and
                                     len(self.treeTable.item(i,2).text()) > 0 and
                                     len(self.treeTable.item(i,3).text()) > 0 and
                                     len(self.treeTable.item(i,4).text()) > 0 and
                                     len(self.treeTable.item(i,5).text()) > 0 and
                                     len(self.treeTable.item(i,6).text()) > 0 and
                                     len(self.treeTable.item(i,7).text()) > 0 ):

                                 cursor.execute("INSERT INTO master_modbusTCP(serverId,ip,port,adrRtu,reg,fromAdr,fromCount,toAdr,comment,valid)\
                                 VALUES('"+self.label00.text()+"',\
                                 '"+self.treeTable.item(i,0).text()+"',\
                                 '"+self.treeTable.item(i,1).text()+"',\
                                 '"+self.treeTable.item(i,2).text()+"',\
                                 '"+self.treeTable.item(i,3).text()+"',\
                                 '"+self.treeTable.item(i,4).text()+"',\
                                 '"+self.treeTable.item(i,5).text()+"',\
                                 '"+self.treeTable.item(i,6).text()+"',\
                                 '"+self.treeTable.item(i,7).text()+"',\
                                 1)" )
                                 connDb.commit()
                         except Exception as e:
                             #print(e)
                             pass
                         i+=1
                 self.getDataModbusTCP()

             if(self.label3.text()=="master_modbusRTU"):
                 cursor.execute("delete from master_modbusRTU where serverId= '"+self.label00.text()+"'" )
                 connDb.commit()

                 for i in range(0,self.treeTable.rowCount()):
                         try:
                             if(     len(self.treeTable.item(i,0).text()) > 0 and
                                     len(self.treeTable.item(i,1).text()) > 0 and
                                     len(self.treeTable.item(i,2).text()) > 0 and
                                     len(self.treeTable.item(i,3).text()) > 0 and
                                     len(self.treeTable.item(i,4).text()) > 0 and
                                     len(self.treeTable.item(i,5).text()) > 0 ):

                                 cursor.execute("INSERT INTO master_modbusRTU(serverId,adrRtu,reg,fromAdr,fromCount,toAdr,comment,valid)\
                                 VALUES('"+self.label00.text()+"',\
                                 '"+self.treeTable.item(i,0).text()+"',\
                                 '"+self.treeTable.item(i,1).text()+"',\
                                 '"+self.treeTable.item(i,2).text()+"',\
                                 '"+self.treeTable.item(i,3).text()+"',\
                                 '"+self.treeTable.item(i,4).text()+"',\
                                 '"+self.treeTable.item(i,5).text()+"',\
                                 1)" )
                                 connDb.commit()
                         except Exception as e:
                             #print(e)
                             pass
                         i+=1
                 self.getDataModbusRTU()


             if(self.label3.text()=="master_dcon"):
                 cursor.execute("delete from master_dcon where serverId= '"+self.label00.text()+"'" )
                 connDb.commit()

                 for i in range(0,self.treeTable.rowCount()):
                         try:
                             if(     len(self.treeTable.item(i,0).text()) > 0 and
                                     len(self.treeTable.item(i,1).text()) > 0 and
                                     len(self.treeTable.item(i,2).text()) > 0 and
                                     len(self.treeTable.item(i,3).text()) > 0  ):

                                 cursor.execute("INSERT INTO master_dcon (serverId,model,adrRtu,toAdr,comment,valid)\
                                 VALUES('"+self.label00.text()+"',\
                                 '"+self.treeTable.item(i,0).text()+"',\
                                 '"+self.treeTable.item(i,1).text()+"',\
                                 '"+self.treeTable.item(i,2).text()+"',\
                                 '"+self.treeTable.item(i,3).text()+"',\
                                 1)" )
                                 connDb.commit()
                         except Exception as e:
                             #print(e)
                             pass
                         i+=1
                 self.getDataDcon()

             if(self.label3.text()=="master_http"):
                 cursor.execute("delete from master_http where serverId= '"+self.label00.text()+"'" )
                 connDb.commit()

                 for i in range(0,self.treeTable.rowCount()):
                         try:
                             if(     len(self.treeTable.item(i,0).text()) > 0 and
                                     len(self.treeTable.item(i,1).text()) > 0 and
                                     len(self.treeTable.item(i,2).text()) > 0 and
                                     len(self.treeTable.item(i,3).text()) > 0  ):

                                 cursor.execute("INSERT INTO master_http (serverId,ip,reg,toAdr,fromCount,comment,login,password,valid)\
                                 VALUES('"+self.label00.text()+"',\
                                 '"+self.treeTable.item(i,0).text()+"',\
                                 '"+self.treeTable.item(i,1).text()+"',\
                                 '"+self.treeTable.item(i,2).text()+"',\
                                 '"+self.treeTable.item(i,3).text()+"',\
                                 '"+self.treeTable.item(i,4).text()+"',\
                                 '"+self.treeTable.item(i,5).text()+"',\
                                 '"+self.treeTable.item(i,6).text()+"',\
                                 1)" )
                                 connDb.commit()
                         except Exception as e:
                             print(e)
                             pass
                         i+=1
                 self.getDataHttp()







    def truePanel (self,index):
         if(index == 'master_ping'):
             self.getDataPing()

         if(index == 'master_mercury230'):
             self.getDataMercury()
         if(index == 'master_modbusTCP'):
             self.getDataModbusTCP()
         if(index == 'master_modbusRTU'):
             self.getDataModbusRTU()
         if(index == 'master_dcon'):
             self.getDataDcon()
         if(index == 'master_http'):
             self.getDataHttp()



    def onClickItem (self):
         self.treeTable.clear()
         self.treeTable.setRowCount(0)
         self.srvName.setText("")
         self.label00.setText("")
         self.slaveIP.setText("")
         self.slavePort.setText("")
         self.label3.setText("")
         self.tty.setText("")
         self.ttySpeed.setText("")
         self.label4.setText("")
         self.serverTimeout.setText("")



         try:

             self.slaveIP.setEnabled(True)
             self.slavePort.setEnabled(True)
             self.tty.setEnabled(True)
             self.ttySpeed.setEnabled(True)

             index_list =[i.data() for i in self.treeView.selectedIndexes()]
             s=index_list[0].split(':')
             self.srvName.setText(s[1])
             self.label00.setText(s[0])

             connDb = sqlite3.connect(self.dbPath)
             cursor = connDb.cursor()
             cursor.execute("select ip, port,stype,mtype,tty,speed,timeout from  servers where id = "+s[0])
             dt=cursor.fetchone()
             self.slaveIP.setText(dt[0])
             self.slavePort.setText(dt[1])
             self.label4.setText(dt[2])
             self.label3.setText(dt[3])
             self.tty.setText(dt[4])
             self.ttySpeed.setText(dt[5])
             self.serverTimeout.setText(dt[6])

             self.slvList[0]=dt[2]
             self.srvList[0]=dt[3]
             self.truePanel (self.label3.text())



         except Exception as e:
             index_list =[i.data() for i in self.treeView.selectedIndexes()]
             self.srvName.setText(index_list[0])
             self.slaveIP.setEnabled(False)
             self.slavePort.setEnabled(False)
             self.tty.setEnabled(False)
             self.ttySpeed.setEnabled(False)
            # print(e)

         self.combo1.clear()
         self.combo1.addItems(self.srvList)
         self.combo2.clear()
         self.combo2.addItems(self.slvList)



    def addNewServer(self):
         sender = self.sender()
         self.statusBar().showMessage('Добавление нового сервера')
         self.model.appendRow(QStandardItem("Новый Сервер "))






    def closeEvent(self, event):
         reply = QMessageBox.question(self, 'Сообщение', "Вы уверены, что хотите выйти?", QMessageBox.Yes | QMessageBox.No, QMessageBox.No)
         if reply == QMessageBox.Yes:
            event.accept()
         else:
             event.ignore()

    def resizeEvent(self,event):
         self.h=self.frameGeometry().height()
         self.treeView.setGeometry(QtCore.QRect(0, 60, 350, self.h-120))
         self.treeTable.setGeometry(QtCore.QRect(10, 50, 1140, self.h-460))
         self.frameTable.setGeometry(QtCore.QRect(380, 350, 1150, self.h-400))



    def sqlLoad(self):
         connDb = sqlite3.connect(self.dbPath)
         cursor = connDb.cursor()
         for row in cursor.execute('SELECT name, id FROM servers where valid=1 ORDER BY id'):
             self.model.appendRow(QStandardItem(str(row[1])+":"+row[0]))

    def saveServer(self):
         self.treeTable.clear()
         self.truePanel ("")
         connDb = sqlite3.connect(self.dbPath)
         cursor = connDb.cursor()
         if(len(self.label00.text())>0 and int(self.label00.text()) >0):
             if(len(self.srvName.text()) > 1):
                 connDb.execute("update servers set name ='"+self.srvName.text()+ "', ip = '"+self.slaveIP.text()+"', port = '"+self.slavePort.text()+"'\
                 ,mtype='"+self.combo1.currentText()+"',stype='"+self.combo2.currentText()+"',tty='"+self.tty.text()+"'\
                 ,speed='"+self.ttySpeed.text()+"',timeout='"+self.serverTimeout.text()+"' where id = "+self.label00.text()+" ")
                 connDb.commit()
                 cursor.execute("select ip, port, mtype,stype,tty,speed,timeout from  servers where id = "+self.label00.text())
                 dt=cursor.fetchone()
                 self.slaveIP.setText(dt[0])
                 self.slavePort.setText(dt[1])
                 self.label3.setText(dt[2])
                 self.label4.setText(dt[3])
                 self.tty.setText(dt[4])
                 self.ttySpeed.setText(dt[5])
                 self.slvList[0]=dt[3]
                 self.srvList[0]=dt[2]
                 self.serverTimeout.setText(dt[6])

         else:
             try:
                 if(len(self.srvName.text()) > 1):
                     cursor.execute("INSERT INTO servers(name,valid)  VALUES( '"+self.srvName.text()+"',1)" )



                     connDb.commit()
             except Exception as e:
                 print(e)
                 pass

         self.model.clear()
         self.model.setHorizontalHeaderLabels(self.header)
         cursor = connDb.cursor()
         for row in cursor.execute('SELECT name, id FROM servers where valid=1 ORDER BY id'):
             self.model.appendRow(QStandardItem(str(row[1])+":"+row[0]))
         self.combo1.clear()
         self.combo1.addItems(self.srvList)
         self.combo2.clear()
         self.combo2.addItems(self.slvList)
         self.truePanel (self.label3.text())

    def saveScr(self):
             pathFolder = self.appPath
             if(os.name=='nt'):
                 slash='\\'
                 bat='.bat'
                 rem ='rem '
                 command = 'start '
             else:
                 slash='/'
                 bat='.sh'
                 rem='# '
                 command=''

             f=open(pathFolder +'scr'+slash+'start_'+self.label00.text() + bat,'w')
             f.write(rem+'Скрипт создан в программе \''+self.versionPr+'\'\n')
             f.write(rem+'Название сервера \''+self.srvName.text()+'\'\n')
             f.write(rem+'Slave адрес \''+self.slaveIP.text()+'\'\n')
             f.write(rem+'Slave порт \''+self.slavePort.text()+'\'\n')
             f.write(rem+'Тип master \''+self.label3.text()+'\'\n')
             f.write(rem+'Тип slave \''+self.label4.text()+'\'\n')
             f.write(rem+'Интерфейс tty \''+self.tty.text()+'\'\n')
             f.write(rem+'Скорость tty \''+self.ttySpeed.text()+'\'\n')

             if(self.label4.text() == 'opcUA' and self.label3.text() =='master_modbusTCP'):
                 f.write(command+sys.executable+' '+pathFolder +'source'+slash+'opcua_master_tcp.py '+self.label00.text() +' '+pathFolder +'db'+slash+'srvDb.db')
             if(self.label4.text() == 'opcUA' and self.label3.text() =='master_ping'):
                 f.write(command+sys.executable+' '+pathFolder +'source'+slash+'opcua_master_ping.py '+self.label00.text() +' '+pathFolder +'db'+slash+'srvDb.db')
             if(self.label4.text() == 'opcUA' and self.label3.text() =='master_dcon'):
                 f.write(command+sys.executable+' '+pathFolder +'source'+slash+'opcua_master_dcon.py '+self.label00.text() +' '+pathFolder +'db'+slash+'srvDb.db')
             if(self.label4.text() == 'opcUA' and self.label3.text() =='master_mercury230'):
                 f.write(command+sys.executable+' '+pathFolder +'source'+slash+'opcua_master_mercury230.py '+self.label00.text() +' '+pathFolder +'db'+slash+'srvDb.db')
             if(self.label4.text() == 'opcUA' and self.label3.text() =='master_modbusRTU'):
                 f.write(command+sys.executable+' '+pathFolder +'source'+slash+'opcua_master_rtu.py '+self.label00.text() +' '+pathFolder +'db'+slash+'srvDb.db')
             if(self.label4.text() == 'opcUA' and self.label3.text() =='master_http'):
                 f.write(command+sys.executable+' '+pathFolder +'source'+slash+'opcua_master_http.py '+self.label00.text() +' '+pathFolder +'db'+slash+'srvDb.db')


             if(self.label4.text() == 'modbusTCP' and self.label3.text() =='master_modbusTCP'):
                 f.write(command+sys.executable+' '+pathFolder +'source'+slash+'modbustcp_master_tcp.py '+self.label00.text() +' '+pathFolder +'db'+slash+'srvDb.db')
             if(self.label4.text() == 'modbusTCP' and self.label3.text() =='master_ping'):
                 f.write(command+sys.executable+' '+pathFolder +'source'+slash+'modbustcp_master_ping.py '+self.label00.text() +' '+pathFolder +'db'+slash+'srvDb.db')
             if(self.label4.text() == 'modbusTCP' and self.label3.text() =='master_dcon'):
                 f.write(command+sys.executable+' '+pathFolder +'source'+slash+'modbustcp_master_dcon.py '+self.label00.text() +' '+pathFolder +'db'+slash+'srvDb.db')
             if(self.label4.text() == 'modbusTCP' and self.label3.text() =='master_mercury230'):
                 f.write(command+sys.executable+' '+pathFolder +'source'+slash+'modbustcp_master_mercury230.py '+self.label00.text() +' '+pathFolder +'db'+slash+'srvDb.db')
             if(self.label4.text() == 'modbusTCP' and self.label3.text() =='master_modbusRTU'):
                 f.write(command+sys.executable+' '+pathFolder +'source'+slash+'modbustcp_master_rtu.py '+self.label00.text() +' '+pathFolder +'db'+slash+'srvDb.db')
             if(self.label4.text() == 'modbusTCP' and self.label3.text() =='master_http'):
                 f.write(command+sys.executable+' '+pathFolder +'source'+slash+'modbustcp_master_http.py '+self.label00.text() +' '+pathFolder +'db'+slash+'srvDb.db')



             f.close()
             ret = pathFolder +''+slash+'scr'+slash+'start_'+self.label00.text() + bat
             return ret

    def runScr(self):

             if(os.name=='nt'):
                 os.system(self.saveScr())
             else:
                 os.system('chmod 777 '+self.saveScr())
                 os.system('xfce4-terminal --command=\'sudo '+self.saveScr()+'\'')





    def delServer(self):
         self.treeTable.clear()
         self.treeTable.setRowCount(0)
         connDb = sqlite3.connect(self.dbPath)

         if(len(self.label00.text())>0 and int(self.label00.text()) >0):
             if(len(self.srvName.text()) > 1):
                 connDb.execute("update servers set valid=0 where id = "+self.label00.text()+" ")
                 connDb.commit()


         self.model.clear()
         self.model.setHorizontalHeaderLabels(self.header)
         cursor = connDb.cursor()
         for row in cursor.execute('SELECT name, id FROM servers where valid=1 ORDER BY id'):
             self.model.appendRow(QStandardItem(str(row[1])+":"+row[0]))

         self.slaveIP.setText("")
         self.slavePort.setText("")
         self.label3.setText("")
         self.srvName.setText("")