pyqt连接plc

import modbus_tk.modbus_tcp as mt
import  modbus_tk.defines as md

plc = mt.TcpMaster('192.168.1.15')

def set_06(addr,y):
    plc.execute(slave=1, function_code=6, starting_address=addr, output_value=y)


def get_03(adr,num):
    db=plc.execute(slave=1,function_code=3, starting_address=adr,quantity_of_x=num)
    return db





from PyQt5.Qt import *



class Window(QWidget):
    def __init__(self):
        super().__init__()
        self.setWindowTitle("的学习")
        self.resize(1000,500)
        self.labels = []

        self.setup_ui()
        self.a=0
        self.b =0

        self.timer = QTimer(self)
        self.timer.timeout.connect(self.fun)
        self.timer.start(200)



    def setup_ui(self):
        for i in range(16):
            btn=QPushButton(f'btn-{i}',self)
            btn.setFixedSize(50,30)
            btn.move(20+50*i,50)
            btn.setProperty('id',i)
            btn.clicked[bool].connect(self.btn_click)
            btn.setCheckable(True)

        for i in range(16,32):
            btn = QPushButton(f'btn-{i}', self)
            btn.setFixedSize(50, 30)
            btn.move(20 + 50 * (i-16),100)
            btn.setProperty('id', i)
            btn.clicked[bool].connect(self.btn_click)
            btn.setCheckable(True)

        for i in range(32):
            label=QLabel(self)
            label.setFixedSize(40,40)
            label.setStyleSheet('background-color:red;border-radius:20px')
            label.setProperty('id',i)
            self.labels.append(label)

            if i<16:
                label.move(20+50*i,250)
            elif i<32:
                label.move(20+50*(i-16),350)




    def btn_click(self,state):
        sender = self.sender()

        print(sender.property('id'))

        if sender.property('id')<16:
            key = 1 << sender.property('id')
            if state:
                self.a = self.a | key
            else:
                self.a = self.a & ~key

        elif sender.property('id')<32:
            key = 1<<sender.property('id')-16
            if state:
                self.b= self.b | key
            else:
                self.b = self.b & ~key

        set_06(0xa7a8,self.a)
        set_06(0xa7a9,self.b)






    def fun(self):
        db = get_03(0xa7b8, 1)
        db2 = get_03(1064, 1)

        # bin_db = bin(db[0])[2:].zfill(16)
        # print(bin_db)
        # bin_da2 = bin(db2[0])[2:].zfill(16)


        for i in range(16):
            if db[0] & (1 << i) > 0:
                self.labels[i].setStyleSheet('background-color:green;border-radius:20px')
            else:
                self.labels[i].setStyleSheet('background-color:red;border-radius:20px')

        for i in range(16):
            if db2[0] & (1 << i) > 0:
                self.labels[i+16].setStyleSheet('background-color:green;border-radius:20px')
            else:
                self.labels[i+16].setStyleSheet('background-color:red;border-radius:20px')













    def closeEvent(self, a0) -> None:
        set_06(0xa7a8, 0)
        set_06(0xa7a9, 0)


if __name__ == '__main__':
    import sys
    app=QApplication(sys.argv)

    win=Window()
    win.show()





    sys.exit(app.exec_())






  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值