2015-01-15 4 views
0

Я пытаюсь разработать приложение python gui, которое связывается с ПЛК с использованием pymodbus. Используя документацию с сайта &, что я нашел онлайн, я могу легко связаться & все работает отлично. Я борюсь с тем, как объединить все это в класс gui различными способами. Я новичок в программировании python &, так как мой фон в машиностроении.Python pymodbus в классе gui

Пожалуйста, посмотрите на код ниже. Я хочу подключиться к устройству с помощью метода modbusConnect, когда пользователь нажимает кнопку &. Поэтому я создал экземпляр «client» для ModbusTcpClient.

Как я могу ссылаться на этот экземпляр в методе 'dialValueChanged' для чтения или записи в регистр. Сообщите мне, если структура моего кода неверна & Я должен был иметь различные классы & и т.д.

Спасибо заранее.

Дэвид

from pymodbus.client.sync import ModbusTcpClient 
import struct 
import sys 
from PyQt4 import QtCore, QtGui, uic 

form_class = uic.loadUiType("C:\Users\David\.PyCharm30\VC-22D Modbus TCP\UI Design\Modbus-  MainScreen.ui")[0] 
form_class2 = uic.loadUiType("C:\Users\David\.PyCharm30\VC-22D Modbus TCP\UI Design\Modbus- ConnectMenu.ui")[0] 

class MyWindowClass(QtGui.QMainWindow, form_class): 
    def __init__(self, parent=None): 
     QtGui.QMainWindow.__init__(self, parent) 
     self.setupUi(self) 
     self.setFixedSize(1500,1200) 
     self.dial.valueChanged.connect(self.dialValueChanged) 
     self.pushButton_Connect.clicked.connect(self.modbusConnect) 
     self.label.setAlignment(QtCore.Qt.AlignCenter) 
     self.setWindowIcon(QtGui.QIcon("C:\Users\David\.PyCharm30\VC-22D Modbus TCP\UI Design\Cla-Val_30px.png")) 

    def modbusConnect(self): 
     #modbus connection 
     ipaddress = str(self.lineEdit_IP.text()) 
     client = ModbusTcpClient(ipaddress) 
     testconnection = client.connect() 
     if testconnection == True: 
      print ("Connection Successful") 
     else: 
      print ("Connection Not Successful") 
      print (self.lineEdit_IP.text()) 
      exit() 

    def dialValueChanged(self): 
     setvalue = float(self.label.text()) 
     if setvalue == 0: 
      setvalueint = 0 
     else: 
      setvaluehex = str(hex(struct.unpack('<I', struct.pack('<f', setvalue))[0])) 
      setvaluehexstr = setvaluehex[:-4] 
      setvalueint = int(setvaluehexstr, 16) 


app = QtGui.QApplication(sys.argv) 
myWindow = MyWindowClass(None) 
myWindow.show() 
app.exec_() 

ответ

0

Включите client в атрибут экземпляра этого графического интерфейса:

def modbusConnect(self): 
    #modbus connection 
    ipaddress = str(self.lineEdit_IP.text()) 
    self.client = ModbusTcpClient(ipaddress) 

Вы можете ссылаться на него из dialValueChanged:

def dialValueChanged(self): 
    [... 7 lines omitted from output ...] 
    self.client.write_coil(some_register, setvalueint) #write_coil or write_register, depends on your communication 

Однако это означает, класс GUI не создается полностью при его создании. Вы должны добавить некоторые отказоустойчивые файлы, если снова нажать кнопку pushButtonConnect.

+0

Имеет смысл! Благодарим вас за ответ. Очень признателен! - Дэвид –

Смежные вопросы