from PySide6.QtCore import QTimer
from PySide6.QtWidgets import QApplication, QWidget, QStackedWidget, QPushButton, QLineEdit, QLabel
from PySide6.QtUiTools import QUiLoader
from snap7 import client,util
def scale(goal,cur,adv):
if cur>goal:
return 0
if cur<=goal-adv:
return 2
if cur>goal-adv:
return 1
def output(data,bytes,index,bit1,bit2):
if data == 0:
util.set_bool(bytes, index, bit1, 0)
util.set_bool(bytes, index, bit2, 0)
return True
elif data==1:
util.set_bool(bytes,index,bit1,1)
util.set_bool(bytes,index,bit2,0)
return False
elif data == 2:
util.set_bool(bytes,index,bit1,1)
util.set_bool(bytes,index,bit2,1)
return False
class Window(QWidget):
def __init__(self):
super().__init__()
self.__init_ui()
def __init_ui(self):
# 加载界面ui文件
loader = QUiLoader()
# loader.registerCustomWidget(Widget) #注册自定义控件
self.ui = loader.load("page.ui")
self.__rename()
self._bind_slots()
self.__add_plc()
self.timer = QTimer(self)
self.timer.timeout.connect(self.on_timer)
self.timer.start(100)
self.bytes = bytearray(1)
def __add_plc(self):
self.plc = client.Client()
self.plc.set_connection_type(3)
# 更改ui名#更改ui名
def __rename(self):
self.btn_connect: QPushButton = self.ui.btn_connect
self.btn1: QPushButton = self.ui.btn1
self.btn2: QPushButton = self.ui.btn2
self.btn3: QPushButton = self.ui.btn3
self.le1: QLineEdit = self.ui.le1
self.le2: QLineEdit = self.ui.le2
self.le3: QLineEdit = self.ui.le3
self.le_connect: QLineEdit = self.ui.le_connect
self.lab1: QLabel = self.ui.lab1
self.lab2: QLabel = self.ui.lab2
self.lab3: QLabel = self.ui.lab3
self.lab4: QLabel = self.ui.lab4
self.lab5: QLabel = self.ui.lab5
self.lab6: QLabel = self.ui.lab6
# 绑定槽函数
def _bind_slots(self):
for btn in [self.btn1,self.btn2,self.btn3]:
btn.clicked.connect(self.on_btn_click)
self.btn_connect.clicked.connect(self.btn_connect_plc)
def btn_connect_plc(self):
if self.plc.get_connected():
return
self.plc.connect(self.le_connect.text(), 0, 1)
print(self.plc.get_connected())
def on_btn_click(self):
print(222)
def on_timer(self):
if self.plc.get_connected():
byts = self.plc.db_read(1,0,20)
qbyt = self.plc.read_area(client.Areas.PA,1,0,2)
one = util.get_word(byts,0)
two = util.get_word(byts,2)
three = util.get_word(byts,4)
sacle1 = scale(100,int(self.le1.text()),30)
sacle2 = scale(100,int(self.le2.text()),30)
sacle3 = scale(100,int(self.le3.text()),30)
# self.lab1.setStyleSheet("background-color:green") if util.get_bool(qbyt,0,0) else \
# self.lab1.setStyleSheet("background-color:red")
# self.lab2.setStyleSheet("background-color:green") if util.get_bool(qbyt, 0, 1) else \
# # self.lab2.setStyleSheet("background-color:red")
# self.lab3.setStyleSheet("background-color:green") if util.get_bool(qbyt, 0, 2) else \
# self.lab3.setStyleSheet("background-color:red")
# self.lab4.setStyleSheet("background-color:green") if util.get_bool(qbyt, 0, 3) else \
# self.lab4.setStyleSheet("background-color:red")
# self.lab5.setStyleSheet("background-color:green") if util.get_bool(qbyt, 0, 4) else \
# self.lab5.setStyleSheet("background-color:red")
# self.lab6.setStyleSheet("background-color:green") if util.get_bool(qbyt, 0, 5) else \
# self.lab6.setStyleSheet("background-color:red")
for i in range(6):
self.lab_change(f"lab{i+1}","green")if util.get_bool(qbyt,0,i) else\
self.lab_change(f"lab{i+1}","red")
temp1 = output(sacle1,self.bytes,0,0,1)
temp2 = output(sacle2,self.bytes,0,2,3)
temp3 =output(sacle3,self.bytes,0,4,5)
print(temp1,temp2,temp3)
if all([temp1,temp2,temp3]):
print("开始下一个流程")
self.plc.write_area(client.Areas.PA,1,0,self.bytes)
#更改标签 颜色
def lab_change(self,name,col):
colors = {"red":"red","green":"green"}
style = f"background-color:{colors.get(col)}"
self.__getattribute__(name).setStyleSheet(style)
if __name__ == '__main__':
import sys
loader = QUiLoader()
app = QApplication(sys.argv)
win = Window()
win.ui.show()
sys.exit(app.exec())
demo笔记
最新推荐文章于 2024-07-20 16:46:53 发布