1.调用pyqt5做界面, ip标签 ,IP输入框,链接按钮,6个标签, 6个输入框,一个写入按钮,一个退出按钮
2.在IP输入框,输入IP地址,点击链接按钮,链接至PLC,链接成功或失败,弹出提示框。连接成功读取PLC vb100开始的六个字节的值写入对应的六个输入框。在6个输入框中写入要修改的值,点击写入按钮,将6个输入框的内容写入VB100开始的连续的6个字节。(输入为整数)写入成功或失败,弹出提示框。
3.点击退出按钮,断开链接,关闭窗口
# -*- coding: utf-8 -*-
from PyQt5.QtWidgets import *
import snap7
class MainWindow(QWidget):
def __init__(self):
super().__init__()
self.setWindowTitle("一线IP:192,168.10.12 二线IP:192.168.10.11")
self.resize(500, 500)
self.initUI()
def initUI(self):
# IP地址输入框
self.ipLineEdit = QLineEdit(self)
self.ipLineEdit.move(50, 50)
self.ipLineEdit.resize(300, 30)
# 连接按钮
self.connectButton = QPushButton("连接", self)
self.connectButton.move(370, 50)
self.connectButton.clicked.connect(self.onConnectClick)
# 标签和输入框
self.label1 = QLabel("水泥2间隔时间", self)
self.label2 = QLabel("水泥2运行时间", self)
self.label3 = QLabel("水泥4间隔时间", self)
self.label4 = QLabel("水泥4运行时间", self)
self.label5 = QLabel("煤灰2间隔时间", self)
self.label6 = QLabel("煤灰2运行时间", self)
self.lineEdit1 = QLineEdit(self)
self.lineEdit2 = QLineEdit(self)
self.lineEdit3 = QLineEdit(self)
self.lineEdit4 = QLineEdit(self)
self.lineEdit5 = QLineEdit(self)
self.lineEdit6 = QLineEdit(self)
self.label1.move(50, 100)
self.label2.move(50, 150)
self.label3.move(50, 200)
self.label4.move(50, 250)
self.label5.move(50, 300)
self.label6.move(50, 350)
self.lineEdit1.move(250, 100)
self.lineEdit2.move(250, 150)
self.lineEdit3.move(250, 200)
self.lineEdit4.move(250, 250)
self.lineEdit5.move(250, 300)
self.lineEdit6.move(250, 350)
# 写入按钮
self.writeButton = QPushButton("写入", self)
self.writeButton.move(50, 400)
self.writeButton.clicked.connect(self.onWriteClick)
# 退出按钮
self.exitButton = QPushButton("退出", self)
self.exitButton.move(370, 400)
self.exitButton.clicked.connect(self.close)
self.show()
def onConnectClick(self):
ip = self.ipLineEdit.text()
try:
self.client = plc_connect(ip, 2)
self.readData()
QMessageBox.information(self, "连接成功", "连接成功!")
except:
QMessageBox.warning(self, "连接失败", "连接失败,请检查IP地址、网络连接是否正常!")
def onWriteClick(self):
try:
self.wrideData()
QMessageBox.information(self, "写入成功", "写入成功!")
except:
QMessageBox.warning(self, "写入失败", "写入失败,请检查PLC连接是否正常!")
def readData(self):
data1 = str(read_VB(self.client, 100))
data2 = str(read_VB(self.client, 101))
data3 = str(read_VB(self.client, 102))
data4 = str(read_VB(self.client, 103))
data5 = str(read_VB(self.client, 104))
data6 = str(read_VB(self.client, 105))
self.lineEdit1.setText(data1)
self.lineEdit2.setText(data2)
self.lineEdit3.setText(data3)
self.lineEdit4.setText(data4)
self.lineEdit5.setText(data5)
self.lineEdit6.setText(data6)
def wrideData(self):
data1 = self.lineEdit1.text()
data2 = self.lineEdit2.text()
data3 = self.lineEdit3.text()
data4 = self.lineEdit4.text()
data5 = self.lineEdit5.text()
data6 = self.lineEdit6.text()
wride_VB(self.client, 100, data1)
wride_VB(self.client, 101, data2)
wride_VB(self.client, 102, data3)
wride_VB(self.client, 103, data4)
wride_VB(self.client, 104, data5)
wride_VB(self.client, 105, data6)
def plc_connect(ip, type, rack=0, slot=1):
client = snap7.client.Client()
client.set_connection_type(type)
client.connect(ip, rack, slot)
return client
def plc_con_close(client):
client.disconnect()
def read_VB(client, offset):
vb_data = client.db_read(1, offset, 1)
return vb_data[0]
def wride_VB(client, offset, data):
data = int(data)
temp = hex(int(data))[2:]
if data < 0 or data > 255:
print('请输入0-255之间的数')
else:
if data < 16:
temp = '0' + temp
client.db_write(1, offset, bytes.fromhex(temp))
if __name__ == "__main__":
app = QApplication([])
window = MainWindow()
app.exec_()
plc_con_close(window.client)