python按钮模拟测转速上传新大陆云平台

 

首先确定代码总体思路:

1.Qt5写出界面

2.写出转速计算逻辑

3.soket连接发送数据

然后补充细节:

界面:

1.创建两个按钮,创建三个文本信息:“转速测量模拟器”“当前转速:”“转速状态”

(转速状态根据转速变化,未开始旋转时不显示)

 文字不必特别死板,可以自定义自己喜欢的字体颜色等,文本框默认为空所以不显示。位置也自定义即可

 2.转速计算逻辑:

根据题意,单独按下A或B不进行任何计算,必须先按下A再按下B算一个旋转周期,则按下A时使一个变量赋值为1并记录当前时间,按下B时判断该变量是否为1,如果为1则记录当前时间,然后后者时间-前者时间得出两次按钮之间的差值即旋转一圈所用的时间,然后用1除去旋转一圈的时间即转速r/s

import sys
import time
import socket
from PyQt5.QtWidgets import *
from PyQt5 import uic
import threading
# 本次要用到的第三方模块
# 声明转速变量为float
zhuan_s = float()

# 创建Qt类
class MyWindow(QWidget):
    def __init__(self):
        global zhuan_s
        self.a = 0
        super().__init__()      # 调用父类所有属性
        self.qt()

    def qt(self):
        # 提取ui文件
        self.ui = uic.loadUi("./hello.ui")
        print(self.ui.__dict__)
        # 选择要提取的控件
        self.btn1 = self.ui.pushButton
        self.btn2 = self.ui.pushButton_2
        self.label1 = self.ui.label
        self.label4 = self.ui.label_5

        # 绑定信号与槽
        self.btn1.clicked.connect(self.login)   # 按钮A
        self.btn2.clicked.connect(self.login2)   # 按钮B

    def login(self):        # 按钮下按钮A,变量a赋值1,time1.time()记录当前时间
        self.a = 1
        self.time1 = time.time()
        return self.a

    def login2(self, a):       # 按钮下按钮B,time2计时,time2.time()记录当前时间
        global zhuan_s      # zhuan_s 为全局变量,否则socket无法传输值
        if self.a == 1:     # 按钮A先按下时才执行
            self.time2 = time.time()
            self.time_differrence = self.time2 - self.time1     # 计算时间差
            zhuan_s = 1/self.time_differrence       # 计算转速,1s的时间除时间差
            self.label4.setText(f"{zhuan_s}")

            if zhuan_s < 1:
                self.label1.setText("转速过慢")
            elif zhuan_s > 5:
                self.label1.setText("转速过快")
            else:
                self.label1.setText("转速正常")
            self.a = 0  # a清零,结束一次旋转周期

3.socket连接到新大陆的云平台

  找到TCP的地址,然后在命令提示符ping出ip

 在传感器界面找到设备标识,传输密钥,标识名

 

 

发送数据必须比请求晚一点,否则会接收不到数据,所以加上了1s的延迟,同时也决定了更新数据的速度

# 创建socket实例对象,创建链接对象
socket_dui = socket.socket()
socket_dui.connect(("121.37.241.174", 8600))       # 到云平台首页找到网址和端口,在命令提示符中ping出ip地址,注意内部是元组

# 发送请求
def fasong():   # 发送请求命令
    # 到文件传输协议寻找请求标准,到云平台找设备标识(device)和传输密钥(key),其他为固定值
    request1 = '{"t": 1,"device": "1122__33", "key":"d2e24c8b805f4a4ea456e2d12cfb8d4e", "ver":"v1.1"}'
    socket_dui.send(request1.encode())  # socket发送请求

# 发送数据
def send():
    global zhuan_s
    while True:
        time.sleep(1)
        # t,msgid固定值,datetype和datas自定义,datas中填写设备名和发送的值,都以键值对
        request2 = '{"t": 3,"datatype":1,"datas": {"a0403":'+str(zhuan_s)+' },"msgid": 123}'
        socket_dui.send(request2.encode())

 注意转速在方法中的调用需要global,否则只是局部变量

socket发送的都是json格式,记得encode成utf-8

最后,main函数中创建线程,让发送请求和发送数据在不同线程中进行,否则程序会卡死

if __name__ == '__main__':
    app = QApplication(sys.argv)
    w = MyWindow()
    # 展示窗口
    w.ui.show()
    # 创建线程
    fasong_thread = threading.Thread(target=fasong)
    fasong_thread.start()
    send_thread = threading.Thread(target=send)
    send_thread.start()
    # 挂住窗口
    app.exec_()

该程序未必完美,如果有误请指出

  • 2
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值