第一次提交

This commit is contained in:
DESKTOP-2QGM7IR\Lab01 2025-04-09 09:49:42 +08:00
commit 5de3c3cc90
1690 changed files with 987235 additions and 0 deletions

3
.idea/.gitignore generated vendored Normal file
View File

@ -0,0 +1,3 @@
# Default ignored files
/shelf/
/workspace.xml

View File

@ -0,0 +1,6 @@
<component name="InspectionProjectProfileManager">
<settings>
<option name="USE_PROJECT_PROFILE" value="false" />
<version value="1.0" />
</settings>
</component>

7
.idea/misc.xml generated Normal file
View File

@ -0,0 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="Black">
<option name="sdkName" value="Python 3.10 (频响测试)" />
</component>
<component name="ProjectRootManager" version="2" project-jdk-name="Python 3.10 (频响测试)" project-jdk-type="Python SDK" />
</project>

8
.idea/modules.xml generated Normal file
View File

@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectModuleManager">
<modules>
<module fileurl="file://$PROJECT_DIR$/.idea/频响测试.iml" filepath="$PROJECT_DIR$/.idea/频响测试.iml" />
</modules>
</component>
</project>

10
.idea/频响测试.iml generated Normal file
View File

@ -0,0 +1,10 @@
<?xml version="1.0" encoding="UTF-8"?>
<module type="PYTHON_MODULE" version="4">
<component name="NewModuleRootManager">
<content url="file://$MODULE_DIR$">
<excludeFolder url="file://$MODULE_DIR$/venv" />
</content>
<orderEntry type="jdk" jdkName="Python 3.10 (频响测试)" jdkType="Python SDK" />
<orderEntry type="sourceFolder" forTests="false" />
</component>
</module>

3
20231202/频响测试/.idea/.gitignore generated vendored Normal file
View File

@ -0,0 +1,3 @@
# Default ignored files
/shelf/
/workspace.xml

View File

@ -0,0 +1,6 @@
<component name="InspectionProjectProfileManager">
<settings>
<option name="USE_PROJECT_PROFILE" value="false" />
<version value="1.0" />
</settings>
</component>

4
20231202/频响测试/.idea/misc.xml generated Normal file
View File

@ -0,0 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectRootManager" version="2" project-jdk-name="Python 3.9" project-jdk-type="Python SDK" />
</project>

8
20231202/频响测试/.idea/modules.xml generated Normal file
View File

@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectModuleManager">
<modules>
<module fileurl="file://$PROJECT_DIR$/.idea/频响测试.iml" filepath="$PROJECT_DIR$/.idea/频响测试.iml" />
</modules>
</component>
</project>

View File

@ -0,0 +1,10 @@
<?xml version="1.0" encoding="UTF-8"?>
<module type="PYTHON_MODULE" version="4">
<component name="NewModuleRootManager">
<content url="file://$MODULE_DIR$">
<excludeFolder url="file://$MODULE_DIR$/venv" />
</content>
<orderEntry type="jdk" jdkName="Python 3.9" jdkType="Python SDK" />
<orderEntry type="sourceFolder" forTests="false" />
</component>
</module>

File diff suppressed because it is too large Load Diff

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

View File

@ -0,0 +1,70 @@
#!/usr/bin/python3
# -*- coding: utf-8 -*-
import pyvisa
import time
from pyvisa.constants import *
class AFG3000():
def __init__(self):
self.rm = pyvisa.ResourceManager()
def init(self):
#importlib.reload(sys)
res = self.rm.list_resources()
return res;
# self.mydev = self.rm.open_resource(res[0])
# print(mydev.query("*OPT?"))
def SetAmpl(self, ampl):
#self.mydev.write("VOLTAGE:AMPLITUDE {0}".format(ampl)) #AFG3000
self.mydev.write(":SOUR1:VOLT {0}".format(ampl))
#self.mydev.write("*SAV 1")
#self.mydev.write("*RCL 1")
def SetFrequency(self, Fre):
#self.mydev.write("FREQUENCY {0}".format(Fre)) #AFG3000
#self.mydev.write("*SAV 1") #AFG3000
self.mydev.write(":SOUR1:FREQ {0}".format(Fre)) # DG1002
#self.mydev.write("*RCL 1")
def Open(self):
#return self.mydev.write("OUTPut1:STATe ON") #AFG3000
return self.mydev.write(":OUTP1 ON")
def Connect(self,dev):
self.mydev = self.rm.open_resource(dev)
def ConnectMultimeter(self,dev):
self.multimeterdev = self.rm.open_resource(dev)
self.multimeterdev.timeout = 10000
def SetAC(self):
#self.multimeterdev.write("CONF:VOLT:AC") # DG1002
self.multimeterdev.write("*CLS")
time.sleep(1)
res = self.multimeterdev.query("MEAS:VOLT:AC? 1,2.0e-5") # DG1002
#print(float(res))
def measure(self):
#print('==========measure=========')
time.sleep(0.2)
res = self.multimeterdev.query("MEAS:VOLT:AC? 1,2.0e-5")
res = float(res)*1000
#print(res)
return float(res)
def Close(self):
#self.mydev.write("OUTPut1:STATe OFF") #AFG3000
self.mydev.write(":OUTP1 OFF") # DG1002
def query(self, Param):
res = self.mydev.query(str(Param))
res = float(res)
return res

View File

@ -0,0 +1,46 @@
#!/usr/bin/python3
# -*- coding: utf-8 -*-
import sys
import pyvisa
from pyvisa.constants import *
import importlib
class AFG3000():
def __init__(self):
self.rm = pyvisa.ResourceManager()
def init(self):
#importlib.reload(sys)
res = self.rm.list_resources()
return res;
# self.mydev = self.rm.open_resource(res[0])
# print(mydev.query("*OPT?"))
def SetAmpl(self, ampl):
self.mydev.write("VOLTAGE:AMPLITUDE {0}".format(ampl))
#self.mydev.write("*SAV 1")
#self.mydev.write("*RCL 1")
def SetFrequency(self, Fre):
self.mydev.write("FREQUENCY {0}".format(Fre))
self.mydev.write("*SAV 1")
#self.mydev.write("*RCL 1")
def Open(self):
return self.mydev.write("OUTPut1:STATe ON")
def Connect(self,dev):
self.mydev = self.rm.open_resource(dev)
def Close(self):
self.mydev.write("OUTPut1:STATe OFF")
def query(self, Param):
res = self.mydev.query(str(Param))
res = float(res)
return res

View File

@ -0,0 +1,561 @@
from ctypes import *
import time
class Nfc_Reader(object):
def __init__(self, nfc_dev):
self.nfc_reader = nfc_dev
# self.nfc_reader = serial.Serial("com6")
self.dev_info = NFC_INFO()
self.dev_conf = NFC_CONF()
self.init_nfc_message()
self.rfidm_c2_wpack = RFIDM_C2_WRITE_HEADER()
self.rfidm_c2_rpack = RFIDM_C2_READ_HEADER()
self.nfc_uuid = None
def write_info(self, info_data):
info_bytes = bytes(info_data) +b'\x00'
ret = self.rfidm_c2_multi_write(0, 10, info_bytes)
return ret
def write_conf(self, conf_data):
conf_bytes = bytes(conf_data) + bytes([0, 0, 0])
print("配置信息", conf_bytes)
ret1 = self.rfidm_c2_multi_write(16, 15, conf_bytes[:60])
ret2 = self.rfidm_c2_multi_write(31, 15, conf_bytes[60:])
return ret1&ret2
def read_info(self):
# info_pack = NFC_INFO()
ret = self.rfidm_c2_multi_read(0, 10, timout=2)
# print("nfc info:", str(ret))
if ret:
memmove(addressof(self.dev_info), ret, sizeof(self.dev_info))
# self.dev_info_analysis()
return True
else:
return False
def read_conf(self):
# conf_pack = NFC_CONF()
ret1 = self.rfidm_c2_multi_read(16, 15, timout=2)
ret2 = self.rfidm_c2_multi_read(31, 15, timout=2)
# print("nfc info:", str(ret1), str(ret2))
if ret1:
if ret2:
ret = ret1+ret2
memmove(addressof(self.dev_conf), ret, sizeof(self.dev_conf))
print("测点名称:", list(self.dev_conf.node_name))
# self.dev_conf_analysis()
return True
return False
def close(self):
self.nfc_reader.close()
def default(self):
conf_file = open("conf.txt", 'r')
def rfidm_c2_single_write(self, cmd, data):
pass
def rfidm_c2_multi_write(self, block_index, block_count, wdata, timeout=2):
wpack = self.rfidm_c2_multi_write_pack(block_index, block_count, wdata)
self.nfc_reader.reset_input_buffer()
self.nfc_reader.reset_output_buffer()
self.nfc_reader.write(wpack)
#检查返回的信息,是否写入成功
retpack = RFIDM_C2_RET_PACK()
ret = self.nfc_reader.read(sizeof(retpack))
memmove(addressof(retpack), ret, sizeof(retpack))
if retpack.sucess_flag == 0xE7:
return False
else:
return True
def rfidm_c2_multi_read(self, block_index, block_count, timout=0.5):
read_info_cmd = self.rfidm_c2_multi_read_pack(block_index, block_count)
self.nfc_reader.reset_input_buffer()
self.nfc_reader.reset_output_buffer()
self.nfc_reader.write(read_info_cmd)
print("read info cmd:", [hex(data) for data in list(read_info_cmd)])
self.nfc_reader.timeout = timout
ret = self.nfc_reader.read(4*block_count+4)
print(ret)
if len(ret) == (4*block_count+4):
return ret[3:-1]
else:
return None
def rfidm_c2_single_read(self, cmd, retlen, timout=0.5):
cmdpack = RFIDM_C2_WRITE_HEADER()
cmdpack.adress = 0
cmdpack.dlen = 0x02
cmdpack.cmd = cmd
crc = self.bcc_check(bytes(cmdpack)[2:-1])
cmdpack.crc = crc
self.nfc_reader.reset_input_buffer()
self.nfc_reader.reset_output_buffer()
self.nfc_reader.write(bytes(cmdpack))
self.nfc_reader.timeout = 0.5
ret = self.nfc_reader.read(retlen)
if len(ret)==retlen:
return ret
else:
print(ret)
return None
def get_uuid(self):
tagpack = RFIDM_C2_TAG_INFO_PACK()
ret = self.rfidm_c2_single_read(0x11, sizeof(tagpack)) #获取标签命令
if ret:
memmove(addressof(tagpack), ret, sizeof(tagpack))
self.nfc_uuid = tagpack.uuid
else:
self.nfc_uuid = False
def rfidm_c2_multi_write_pack(self, start_block, block_count, data):
"""
写多个block 数据格式
:param start_block: 起始块序号
:param block_count: 一共要写的块
:param data: 要写的数据
:return: bytes格式数据包
"""
mwrite_pack = RFIDM_C2_MULTI_WRITE_PACK()
wpack = RFIDM_C2_WRITE_HEADER()
wpack.address = 0
wpack.dlen = sizeof(wpack) + sizeof(mwrite_pack) + len(data) - 3
wpack.cmd = 0x24
# memmove(addressof(mwrite_pack.uuid), self.nfc_uuid, sizeof(mwrite_pack.uuid))
mwrite_pack.uuid = self.nfc_uuid
mwrite_pack.flag = 0x22
mwrite_pack.start_block = start_block
mwrite_pack.block_len = block_count
wdata = bytes(wpack)[:-1] + bytes(mwrite_pack)+data
crc = self.bcc_check(wdata[2:])
wpack.crc = crc
wdata = bytes(wpack)[:-1] + bytes(mwrite_pack) + data + bytes(wpack)[-1:]
return wdata
def rfidm_c2_single_write_pack(self, block_index, data):
"""
写入单个数据块
:param block_index: 块序号
:param data: 要写入的数据
:return: bytes数据包
"""
wpack = RFIDM_C2_SINGLE_WRITE_PACK()
wpack.address = 0
wpack.dlen = 0x10
wpack.cmd = 0x21
# memmove(addressof(wpack.uuid), self.nfc_uuid, sizeof(wpack.uuid))
wpack.uuid = self.nfc_uuid
wpack.flag = 0x22
wpack.block_index = block_index
memmove(addressof(wpack.data), data, sizeof(wpack.data))
crc = self.bcc_check(bytes(wpack[2:-1]))
wpack.crc = crc
return bytes(wpack)
def rfidm_c2_multi_read_pack(self, block_index, block_count):
rpack = RFIDM_C2_MULTI_READ_PACK()
rpack.address = 0
rpack.dlen = 0x0C
rpack.cmd = 0x23
rpack.uuid = self.nfc_uuid
rpack.block_index = block_index
rpack.block_count = block_count
crc = self.bcc_check(bytes(rpack)[2:-1])
rpack.crc = crc
return bytes(rpack)
def rfidm_c2_single_read_pack(self, block_index):
rpack = RFIDM_C2_SINGLE_READ_PACK()
rpack.address = 0
rpack.dlen = 0x0B
rpack.cmd = 0x20
memmove(addressof(rpack.uuid), self.nfc_uuid, sizeof(rpack.uuid))
rpack.block_index = block_index
crc = self.bcc_check(bytes(rpack[2:-1]))
rpack.crc = crc
return bytes(rpack)
def bcc_check(self, data):
bcc = 0
for d in data:
bcc = bcc^d
return bcc
def rfidm_c2_init(self):
wpack = RFIDM_C2_CMD_PACK()
wpack.address = 0
wpack.dlen = 0x03
wpack.cmd = 0x02
wpack.conf = 0x01
wpack.crc = 0x00
self.nfc_reader.reset_input_buffer()
self.nfc_reader.reset_output_buffer()
self.nfc_reader.write(bytes(wpack))
time.sleep(0.2)
wpack.cmd = 0x0D
wpack.conf = 0x01
wpack.crc = 0x0F
self.nfc_reader.reset_input_buffer()
self.nfc_reader.reset_output_buffer()
self.nfc_reader.write(bytes(wpack))
time.sleep(0.2)
wpack.cmd = 0x0E
wpack.conf = 100
wpack.crc = self.bcc_check(bytes(wpack)[2:-1])
self.nfc_reader.reset_input_buffer()
self.nfc_reader.reset_output_buffer()
self.nfc_reader.write(bytes(wpack))
time.sleep(0.2)
def dev_info_analysis(self):
self.dev_info_msg["初始化标志"] = self.dev_info.uInitFlag
self.dev_info_msg["加速度传感器状态"] = self.dev_info.uAccSta
self.dev_info_msg["Zigbee模块状态"] = self.dev_info.uZigbeeSta
self.dev_info_msg["设备温度传感器状态"] = self.dev_info.uLowerTempSta
self.dev_info_msg["环境温度传感器状态"] = self.dev_info.uUpperTempSta
self.dev_info_msg["设备运行状态"] = self.dev_info.uRunningFlag
self.dev_info_msg["MAC地址"] = hex(self.dev_info.zigbeeMac)[2:]
self.dev_info_msg["硬件版本"] = self.dev_info.hwVersion/10
self.dev_info_msg["软件版本"] = self.dev_info.sfVersion/10
self.dev_info_msg["生产批号"] = self.dev_info.pn
self.dev_info_msg["生产序列号"] = self.dev_info.sn
self.dev_info_msg["首次上电日期"] = self.dev_info.sTime
self.dev_info_msg["唤醒次数"] = self.dev_info.wakeupTimes
self.dev_info_msg["特征值发送次数"] = self.dev_info.tzTimes
self.dev_info_msg["原始波形发送次数"] = self.dev_info.wvTimes
self.dev_info_msg["电池电压"] = self.dev_info.batVol
self.dev_info_msg["产品型号"] = self.dev_info.productType
self.dev_info_msg["无线信号强度"] = self.dev_info.rss
print(bytes(self.dev_conf.node_name))
try:
self.dev_info_msg["测点名称"] = bytes(self.dev_conf.node_name).decode('GB18030')
except:
self.dev_info_msg["测点名称"] = "解析错误"
def dev_conf_analysis(self):
self.dev_conf_msg["配置标志"] = self.dev_conf.active_flag
self.dev_conf_msg["唤醒周期"] = self.dev_conf.wakeup_period
self.dev_conf_msg["原始波形发送周期"] = self.dev_conf.wave_period
self.dev_conf_msg["Zigbee PID"] = hex(self.dev_conf.zig_panid)[2:]
self.dev_conf_msg["Zigbee 信道"] = self.dev_conf.zig_channel
self.dev_conf_msg["Zigbee 本地地址"] = hex(self.dev_conf.zig_local_addr)[2:]
self.dev_conf_msg["Zigbee 目标地址"] = hex(self.dev_conf.zig_dst_addr)[2:]
self.dev_conf_msg["Zigbee 发射功率"] = self.dev_conf.zig_power_level
self.dev_conf_msg["Zigbee 重试次数"] = self.dev_conf.zig_retry_num
self.dev_conf_msg["Zigbee 重试间隔"] = self.dev_conf.zig_retry_time
self.dev_conf_msg["ACC采样率"] = self.acc_freq_cal(self.dev_conf.acc_acq_freq)
self.dev_conf_msg["ACC量程"] = self.acc_range_cal(self.dev_conf.acc_acq_range)
self.dev_conf_msg["ACC采样率时间"] = self.dev_conf.acc_acq_time
self.dev_conf_msg["频带能量参数1 START"] = self.dev_conf.freq_power1_start
self.dev_conf_msg["频带能量参数1 END"] = self.dev_conf.freq_power1_stop
self.dev_conf_msg["频带能量参数2 START"] = self.dev_conf.freq_power2_start
self.dev_conf_msg["频带能量参数2 END"] = self.dev_conf.freq_power2_stop
self.dev_conf_msg["频带能量参数3 START"] = self.dev_conf.freq_power3_start
self.dev_conf_msg["频带能量参数3 END"] = self.dev_conf.freq_power3_stop
self.dev_conf_msg["频带能量参数4 START"] = self.dev_conf.freq_power4_start
self.dev_conf_msg["频带能量参数4 END"] = self.dev_conf.freq_power4_stop
self.dev_conf_msg["频带能量参数5 START"] = self.dev_conf.freq_power5_start
self.dev_conf_msg["频带能量参数5 END"] = self.dev_conf.freq_power5_stop
self.dev_conf_msg["冲击带通频率START"] = self.dev_conf.envel_freq_start
self.dev_conf_msg["冲击带通频率END"] = self.dev_conf.envel_freq_stop
self.dev_conf_msg["故障频率1"] = self.dev_conf.fail_freq1
self.dev_conf_msg["故障频率2"] = self.dev_conf.fail_freq2
self.dev_conf_msg["故障频率3"] = self.dev_conf.fail_freq3
self.dev_conf_msg["故障频率4"] = self.dev_conf.fail_freq4
self.dev_conf_msg["配置时间"] = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(self.dev_conf.conf_date))
self.dev_conf_msg["速度积分滤波频率"] = self.dev_conf.speed_freq_start
def init_nfc_message(self):
self.dev_info_msg = {"测点名称": None,
"初始化标志": None,
"加速度传感器状态": None,
"Zigbee模块状态": None,
"设备温度传感器状态": None,
"环境温度传感器状态": None,
"设备运行状态": None,
"MAC地址": None,
"硬件版本": None,
"软件版本": None,
"生产批号": None,
"生产序列号": None,
"首次上电日期": None,
"唤醒次数": None,
"特征值发送次数": None,
"原始波形发送次数": None,
"电池电压": None,
"产品型号": None,
"无线信号强度": None,
}
self.dev_conf_msg = {"配置标志": None,
"唤醒周期": None,
"原始波形发送周期": None,
"Zigbee PID": None,
"Zigbee 信道": None,
"Zigbee 本地地址": None,
"Zigbee 目标地址": None,
"Zigbee 发射功率": None,
"Zigbee 重试次数": None,
"Zigbee 重试间隔": None,
"ACC采样率": None,
"ACC量程": None,
"ACC采样率时间": None,
"频带能量参数1 START": None,
"频带能量参数1 END": None,
"频带能量参数2 START": None,
"频带能量参数2 END": None,
"频带能量参数3 START": None,
"频带能量参数3 END": None,
"频带能量参数4 START": None,
"频带能量参数4 END": None,
"频带能量参数5 START": None,
"频带能量参数5 END": None,
"冲击带通频率START": None,
"冲击带通频率END": None,
"故障频率1": None,
"故障频率2": None,
"故障频率3": None,
"故障频率4": None,
"配置时间": None,
"速度积分滤波频率": None
}
def acc_range_cal(self, sdata):
if sdata == 0b00:
return "±8g"
elif sdata == 0b01:
return "±16g"
elif sdata == 0b10:
return "±32g"
elif sdata == 0b11:
return "±64g"
def acc_freq_cal(self, sdata):
if sdata == 0b00:
return "3.2kHz"
elif sdata == 0b01:
return "6.4kHz"
elif sdata == 0b10:
return "12.8kHz"
elif sdata == 0b11:
return "25.6kHz"
#传感器信息
class NFC_INFO(BigEndianStructure):
_pack_ = 1
_fields_ = [
#设备状态标志
('uInitFlag', c_ubyte, 1),
('uAccSta', c_ubyte, 1),
('uZigbeeSta', c_ubyte, 1),
('uLowerTempSta', c_ubyte, 1),
('uUpperTempSta', c_ubyte, 1),
('uRunningFlag', c_ubyte, 1),
('zigbeeMac', c_uint64), #Zigbee MAC地址
('hwVersion', c_uint8), #硬件版本
('sfVersion', c_uint8), #软件版本
('pn', c_uint32), #批号
('sn', c_uint32), #序列号
('sTime', c_uint32), #首次上电时间
('wakeupTimes', c_uint32), #唤醒次数
('tzTimes', c_uint32), #特征值发送次数
('wvTimes', c_uint32), #原始波形发送次数
('batVol', c_uint16), #电池电压
('productType', c_uint8), #产品型号
('rss', c_uint8), #Zigbee信号强度
]
class NFC_CONF(BigEndianStructure):
_pack_ = 1
_fields_ = [
('active_flag', c_uint8), # 激活标志
('wakeup_period', c_uint8), # 唤醒周期
('wave_period', c_uint16), # 原始波形发送周期
('zig_panid', c_uint16), # zigbee panid
('zig_channel', c_uint8), # zigbee channel
('zig_local_addr', c_uint16), # zigbee本地地址
('zig_dst_addr', c_uint16), # zigbee目标地址
('zig_power_level', c_uint8), # zigbee发射功率
("zig_retry_num", c_uint8), # 重试次数
("zig_retry_time", c_uint8), # 重试间隔
("reserve", c_ubyte, 4),
("acc_acq_range", c_ubyte, 2), # 量程
("acc_acq_freq", c_ubyte, 2), # 采样率
("acc_acq_time", c_uint8), # 采样时长
("freq_power1_start", c_uint16), # 频带能量参数1
("freq_power1_stop", c_uint16), # 频带能量参数1
("freq_power2_start", c_uint16), # 频带能量参数2
("freq_power2_stop", c_uint16), # 频带能量参数2
("freq_power3_start", c_uint16), # 频带能量参数3
("freq_power3_stop", c_uint16), # 频带能量参数3
("freq_power4_start", c_uint16), # 频带能量参数4
("freq_power4_stop", c_uint16), # 频带能量参数4
("freq_power5_start", c_uint16), # 频带能量参数5
("freq_power5_stop", c_uint16), # 频带能量参数5
("envel_freq_start", c_uint16), # 包络带通频率
("envel_freq_stop", c_uint16), # 包络带通频率
("fail_freq1", c_uint16), # 故障频率1
("fail_freq2", c_uint16), # 故障频率2
("fail_freq3", c_uint16), # 故障频率3
("fail_freq4", c_uint16), # 故障频率4
("conf_date", c_uint32), # 配置时间
("speed_freq_start", c_uint8), # 速度积分起始频率
("node_name", c_uint16*32), # 节点名称
]
class RFIDM_C2_WRITE_HEADER(BigEndianStructure):
_pack_ = 1
_fields_ = [
('address', c_uint16), # 模块地址
('dlen', c_uint8), # 长度
('cmd', c_uint8), # 命令
('crc', c_uint8)
]
class RFIDM_C2_READ_HEADER(BigEndianStructure):
_pack_ = 1
_fields_ = [
('cmd', c_uint8), # 模块地址
('dlen', c_uint8), # 长度
('flag', c_uint8), # 命令
('crc', c_uint8)
]
class RFIDM_C2_MULTI_WRITE_PACK(BigEndianStructure):
_pack_ = 1
_fields_ = [
('uuid', c_uint64), # UUID
('flag', c_uint8), # 标志字节固定值0x22
('start_block', c_uint8), # 起始块号
('block_len', c_uint8), #块数
]
class RFIDM_C2_SINGLE_WRITE_PACK(BigEndianStructure):
_pack_ = 1
_fields_ = [
('address', c_uint16), # 模块地址
('dlen', c_uint8), # 长度0x10
('cmd', c_uint8), # 命令 0x21
('uuid', c_uint64), # UUID
('flag', c_uint8), # 标志字节固定值0x22
('block_index', c_uint8), # 起始块号
('data', c_uint8*4), # 写入的数据
('crc', c_uint8)
]
class RFIDM_C2_MULTI_READ_PACK(BigEndianStructure):
_pack_ = 1
_fields_ = [
('address', c_uint16), # 模块地址
('dlen', c_uint8), # 长度0x10
('cmd', c_uint8), # 命令 0x21
('uuid', c_uint64), # UUID
('block_index', c_uint8), # 起始块号
('block_count', c_uint8), # 块数
('crc', c_uint8)
]
class RFIDM_C2_SINGLE_READ_PACK(BigEndianStructure):
_pack_ = 1
_fields_ = [
('address', c_uint16), # 模块地址
('dlen', c_uint8), # 长度0x10
('cmd', c_uint8), # 命令 0x21
('uuid', c_uint64), # UUID
('block_index', c_uint8), # 数据块号
('crc', c_uint8)
]
class RFIDM_C2_TAG_INFO_PACK(BigEndianStructure):
_pack_ = 1
_fields_ = [
('cmd', c_uint8), # 命令头 0xFE
('dlen', c_uint8), # 长度 0x0C
('sucess_flag', c_uint8), # 成功:0x11, 失败0xE2
('flag', c_uint8), # flag
('dsfid', c_uint8), # DSFID信息
('uuid', c_uint64), # UUID
('crc', c_uint8)
]
class RFIDM_C2_RET_PACK(BigEndianStructure):
_pack_ = 1
_fields_ = [
('cmd', c_uint8), # 命令头 0xFE
('dlen', c_uint8), # 长度 0x02
('sucess_flag', c_uint8), # 成功:0x11, 失败0xE2
('crc', c_uint8)
]
class RFIDM_C2_CMD_PACK(BigEndianStructure):
_pack_ = 1
_fields_ = [
('address', c_uint16), # 模块地址
('dlen', c_uint8), # 长度
('cmd', c_uint8), # 命令
('conf', c_uint8), # 设置
('crc', c_uint8)
]

View File

@ -0,0 +1,486 @@
from ctypes import *
import numpy as np
import datetime
from zigbee_message_pack import *
SENSER_INF_PACK1 = 0x01
SENSER_INF_PACK2 = 0x07
EVEL_DATA_PACK1 = 0x02
EVEL_DATA_PACK2 = 0x06
WAVE_X_PACK = 0x03
WAVE_Y_PACK = 0x04
WAVE_Z_PACK = 0x05
class EvelPack(LittleEndianStructure):
_fields_ = [
# 特征值
("temp_dev", c_uint16),
("temp_env", c_uint16),
("angle", c_uint16),
("bat_vol", c_uint16),
("acc_x_pk", c_uint16),
("acc_x_rms", c_uint16),
("speed_x_pk", c_uint16),
("speed_x_rms", c_uint16),
("fpower_x_1", c_uint16),
("fpower_x_2", c_uint16),
("fpower_x_3", c_uint16),
("fpower_x_4", c_uint16),
("fpower_x_5", c_uint16),
("envepower_x", c_uint16),
("errpower_x_1", c_uint16),
("errpower_x_2", c_uint16),
("errpower_x_3", c_uint16),
("errpower_x_4", c_uint16),
("acc_y_pk", c_uint16),
("acc_y_rms", c_uint16),
("speed_y_pk", c_uint16),
("speed_y_rms", c_uint16),
("fpower_y_1", c_uint16),
("fpower_y_2", c_uint16),
("fpower_y_3", c_uint16),
("fpower_y_4", c_uint16),
("fpower_y_5", c_uint16),
("envepower_y", c_uint16),
("errpower_y_1", c_uint16),
("errpower_y_2", c_uint16),
("errpower_y_3", c_uint16),
("errpower_y_4", c_uint16),
("acc_z_pk", c_uint16),
("acc_z_rms", c_uint16),
("speed_z_pk", c_uint16),
("speed_z_rms", c_uint16),
("fpower_z_1", c_uint16),
("fpower_z_2", c_uint16),
("fpower_z_3", c_uint16),
("fpower_z_4", c_uint16),
("fpower_z_5", c_uint16),
("envepower_z", c_uint16),
("errpower_z_1", c_uint16),
("errpower_z_2", c_uint16),
("errpower_z_3", c_uint16),
("errpower_z_4", c_uint16),
]
class WavePack(Structure):
_fields_ = [
("wvdata", c_uint16 * 46), # 原始波形
]
# 传感器设备信息
class DevInfo1(BigEndianStructure):
_pack_ = 1
_fields_ = [
# 设备状态标志
('uInitFlag', c_ubyte, 1),
('uAccSta', c_ubyte, 1),
('uZigbeeSta', c_ubyte, 1),
('uLowerTempSta', c_ubyte, 1),
('uUpperTempSta', c_ubyte, 1),
('uRunningFlag', c_ubyte, 1),
("reserve", c_ubyte, 2),
('zigbeeMac', c_uint64), # Zigbee MAC地址
('hwVersion', c_uint8), # 硬件版本
('sfVersion', c_uint8), # 软件版本
('pn', c_uint32), # 批号
('sn', c_uint32), # 序列号
('sTime', c_uint32), # 首次上电时间
('wakeupTimes', c_uint32), # 唤醒次数
('tzTimes', c_uint32), # 特征值发送次数
('wvTimes', c_uint32), # 原始波形发送次数
('batVol', c_uint16), # 电池电压
('productType', c_uint8), # 产品型号
('rss', c_uint8), # Zigbee信号强度
('active_flag', c_uint8), # 激活标志
('wakeup_period', c_uint8), # 唤醒周期
('wave_period', c_uint16), # 原始波形发送周期
('zig_panid', c_uint16), # zigbee panid
('zig_channel', c_uint8), # zigbee channel
('zig_local_addr', c_uint16), # zigbee本地地址
('zig_dst_addr', c_uint16), # zigbee目标地址
('zig_power_level', c_uint8), # zigbee发射功率
("zig_retry_num", c_uint8), # 重试次数
("zig_retry_time", c_uint8), # 重试间隔
("reserve", c_ubyte, 4),
("acc_acq_range", c_ubyte, 2), # 量程
("acc_acq_freq", c_ubyte, 2), # 采样率
("acc_acq_time", c_uint8), # 采样时长
("freq_power1_start", c_uint16), # 频带能量参数1
("freq_power1_stop", c_uint16), # 频带能量参数1
("freq_power2_start", c_uint16), # 频带能量参数2
("freq_power2_stop", c_uint16), # 频带能量参数2
("freq_power3_start", c_uint16), # 频带能量参数3
("freq_power3_stop", c_uint16), # 频带能量参数3
("freq_power4_start", c_uint16), # 频带能量参数4
("freq_power4_stop", c_uint16), # 频带能量参数4
("freq_power5_start", c_uint16), # 频带能量参数5
("freq_power5_stop", c_uint16), # 频带能量参数5
("envel_freq_start", c_uint16), # 包络带通频率
("envel_freq_stop", c_uint16), # 包络带通频率
("fail_freq1", c_uint16), # 故障频率1
("fail_freq2", c_uint16), # 故障频率2
("fail_freq3", c_uint16), # 故障频率3
("fail_freq4", c_uint16), # 故障频率4
("conf_date", c_int32), # 配置时间
("speed_freq_start", c_int8), # 速度积分起始频率
]
# 传感器信息2
class DevInfo2(Structure):
_fields_ = [
# 特征值
("node_name", c_int16 * 32), # 节点名称
("reserve", c_int8 * 28), # 保留
]
class ZigPack(Structure):
_fields_ = [
("msg_header", c_uint8 * 3), # 帧头
("msg_addr", c_uint8 * 2), # 源地址
("msg_type", c_uint8), # 数据类型
("msg_index", c_uint8), # 包序号
("data", c_uint8 * 92), # 数据
("crc", c_uint8), # 校验
]
class Zig_Reader(object):
def __init__(self, zig_dev):
self.evelpack = EvelPack()
self.wavepack = WavePack()
self.prev_index = 0
self.zig_reader = zig_dev # 串口设备
# self.zig_reader = serial.Serial('com5')
self.recv_data_buf = b''
self.zigpack = ZigPack()
self.senser_info1 = DevInfo1()
self.senser_info2 = DevInfo2()
self.senser_evel = EvelPack()
self.senser_wave = WavePack()
self.init_zigbee_message()
def read(self):
sdata = self.zig_reader.read(self.zig_reader.inWaiting())
self.recv_data_buf = self.recv_data_buf + sdata
ret = self.data_analysis()
return ret
def data_analysis(self):
if (len(self.recv_data_buf) >= 100): # 缓存中数据量大于等于数据包
if ((self.recv_data_buf[:3] == b'\xaaU\xaa') | (self.crc_check(self.recv_data_buf[:100]))):
memmove(addressof(self.zigpack), self.recv_data_buf, sizeof(self.zigpack))
if self.zigpack.msg_type == SENSER_INF_PACK1:
memmove(addressof(self.senser_info1), self.zigpack.data, sizeof(self.senser_info1))
elif self.zigpack.msg_type == SENSER_INF_PACK2:
memmove(addressof(self.senser_info2), self.zigpack.data, sizeof(self.senser_info2))
self.dev_info_analysis()
self.dev_conf_analysis()
elif (self.zigpack.msg_type == EVEL_DATA_PACK1) | (self.zigpack.msg_type == EVEL_DATA_PACK2):
memmove(addressof(self.senser_evel), self.zigpack.data, sizeof(self.senser_evel))
self.evel_data_analysis()
elif self.zigpack.msg_type == WAVE_X_PACK:
memmove(addressof(self.senser_wave), self.zigpack.data, sizeof(self.senser_wave))
elif self.zigpack.msg_type == WAVE_Y_PACK:
memmove(addressof(self.senser_wave), self.zigpack.data, sizeof(self.senser_wave))
elif self.zigpack.msg_type == WAVE_Z_PACK:
memmove(addressof(self.senser_wave), self.zigpack.data, sizeof(self.senser_wave))
self.recv_data_buf = self.recv_data_buf[100:]
return self.zigpack.msg_type
else:
self.recv_data_buf = self.recv_data_buf[1:]
return False
else:
return False
def crc_check(self, sdata):
sdata = [d for d in sdata]
sum_vl = np.sum(sdata[:-1])
if (sum_vl & 0xff) == sdata[-1]:
return True
else:
msg = self.get_date_time() + '\n'
msg = msg + "CRC Cal Error\n"
msg = msg + str([hex(d) for d in sdata]) + '\n'
print(msg)
return False
def get_date_time(self):
now_time = datetime.datetime.now()
time_str = now_time.strftime('%Y-%m-%d %H:%M:%S')
return time_str
def close(self):
self.zig_reader.close()
def dev_info_analysis(self):
self.dev_info_msg["初始化标志"] = self.senser_info1.uInitFlag
self.dev_info_msg["加速度传感器状态"] = self.senser_info1.uAccSta
self.dev_info_msg["Zigbee模块状态"] = self.senser_info1.uZigbeeSta
self.dev_info_msg["设备温度传感器状态"] = self.senser_info1.uLowerTempSta
self.dev_info_msg["环境温度传感器状态"] = self.senser_info1.uUpperTempSta
self.dev_info_msg["设备运行状态"] = self.senser_info1.uRunningFlag
self.dev_info_msg["MAC地址"] = hex(self.senser_info1.zigbeeMac)[2:]
self.dev_info_msg["硬件版本"] = self.senser_info1.hwVersion/10
self.dev_info_msg["软件版本"] = self.senser_info1.sfVersion/10
self.dev_info_msg["生产批号"] = self.senser_info1.pn
self.dev_info_msg["生产序列号"] = self.senser_info1.sn
self.dev_info_msg["首次上电日期"] = self.senser_info1.sTime
self.dev_info_msg["唤醒次数"] = self.senser_info1.wakeupTimes
self.dev_info_msg["特征值发送次数"] = self.senser_info1.tzTimes
self.dev_info_msg["原始波形发送次数"] = self.senser_info1.wvTimes
self.dev_info_msg["电池电压"] = self.senser_info1.batVol
self.dev_info_msg["产品型号"] = self.senser_info1.productType
self.dev_info_msg["无线信号强度"] = self.senser_info1.rss
self.dev_info_msg["测点名称"] = bytes(self.senser_info2.node_name).decode('GB18030')
def dev_conf_analysis(self):
self.dev_conf_msg["配置标志"] = self.senser_info1.active_flag
self.dev_conf_msg["唤醒周期"] = self.senser_info1.wakeup_period
self.dev_conf_msg["原始波形发送周期"] = self.senser_info1.wave_period
self.dev_conf_msg["Zigbee PID"] = hex(self.senser_info1.zig_panid)[2:]
self.dev_conf_msg["Zigbee 信道"] = self.senser_info1.zig_channel
self.dev_conf_msg["Zigbee 本地地址"] = hex(self.senser_info1.zig_local_addr)[2:]
self.dev_conf_msg["Zigbee 目标地址"] = hex(self.senser_info1.zig_dst_addr)[2:]
self.dev_conf_msg["Zigbee 发射功率"] = self.senser_info1.zig_power_level
self.dev_conf_msg["Zigbee 重试次数"] = self.senser_info1.zig_retry_num
self.dev_conf_msg["Zigbee 重试间隔"] = self.senser_info1.zig_retry_time
self.dev_conf_msg["ACC采样率"] = self.acc_freq_cal(self.senser_info1.acc_acq_freq)
self.dev_conf_msg["ACC量程"] = self.acc_range_cal(self.senser_info1.acc_acq_range)
self.dev_conf_msg["ACC采样率时间"] = self.senser_info1.acc_acq_time
self.dev_conf_msg["频带能量参数1 START"] = self.senser_info1.freq_power1_start
self.dev_conf_msg["频带能量参数1 END"] = self.senser_info1.freq_power1_stop
self.dev_conf_msg["频带能量参数2 START"] = self.senser_info1.freq_power2_start
self.dev_conf_msg["频带能量参数2 END"] = self.senser_info1.freq_power2_stop
self.dev_conf_msg["频带能量参数3 START"] = self.senser_info1.freq_power3_start
self.dev_conf_msg["频带能量参数3 END"] = self.senser_info1.freq_power3_stop
self.dev_conf_msg["频带能量参数4 START"] = self.senser_info1.freq_power4_start
self.dev_conf_msg["频带能量参数4 END"] = self.senser_info1.freq_power4_stop
self.dev_conf_msg["频带能量参数5 START"] = self.senser_info1.freq_power5_start
self.dev_conf_msg["频带能量参数5 END"] = self.senser_info1.freq_power5_stop
self.dev_conf_msg["冲击带通频率START"] = self.senser_info1.envel_freq_start
self.dev_conf_msg["冲击带通频率END"] = self.senser_info1.envel_freq_stop
self.dev_conf_msg["故障频率1"] = self.senser_info1.fail_freq1
self.dev_conf_msg["故障频率2"] = self.senser_info1.fail_freq2
self.dev_conf_msg["故障频率3"] = self.senser_info1.fail_freq3
self.dev_conf_msg["故障频率4"] = self.senser_info1.fail_freq4
self.dev_conf_msg["配置时间"] = self.senser_info1.conf_date
self.dev_conf_msg["速度积分滤波频率"] = self.senser_info1.speed_freq_start
def evel_data_analysis(self):
self.dev_evel_msg["传感器地址"] = hex((self.zigpack.msg_addr[0]<<8)+self.zigpack.msg_addr[1])[2:]
self.dev_evel_msg["采集时间"] = self.get_date_time()
self.dev_evel_msg["设备温度"] = temp_cal(self.senser_evel.temp_dev)
self.dev_evel_msg["环境温度"] = temp_cal(self.senser_evel.temp_env)
self.dev_evel_msg["倾角"] = self.senser_evel.angle
self.dev_evel_msg["电池电压"] = self.senser_evel.bat_vol
self.dev_evel_msg["X轴峰值"] = self.evel_cal(self.senser_evel.acc_x_pk)
self.dev_evel_msg["X轴有效值"] = self.evel_cal(self.senser_evel.acc_x_rms)
self.dev_evel_msg["X轴速度峰值"] = self.evel_cal(self.senser_evel.speed_x_pk)
self.dev_evel_msg["X轴速度有效值"] = self.evel_cal(self.senser_evel.speed_x_rms)
self.dev_evel_msg["X轴频带能量1"] = self.evel_cal(self.senser_evel.fpower_x_1)
self.dev_evel_msg["X轴频带能量2"] = self.evel_cal(self.senser_evel.fpower_x_2)
self.dev_evel_msg["X轴频带能量3"] = self.evel_cal(self.senser_evel.fpower_x_3)
self.dev_evel_msg["X轴频带能量4"] = self.evel_cal(self.senser_evel.fpower_x_4)
self.dev_evel_msg["X轴频带能量5"] = self.evel_cal(self.senser_evel.fpower_x_5)
self.dev_evel_msg["X轴冲击能量"] = self.evel_cal(self.senser_evel.envepower_x)
self.dev_evel_msg["X轴故障频率1"] = self.evel_cal(self.senser_evel.errpower_x_1)
self.dev_evel_msg["X轴故障频率2"] = self.evel_cal(self.senser_evel.errpower_x_2)
self.dev_evel_msg["X轴故障频率3"] = self.evel_cal(self.senser_evel.errpower_x_3)
self.dev_evel_msg["X轴故障频率4"] = self.evel_cal(self.senser_evel.errpower_x_4)
self.dev_evel_msg["Y轴峰值"] = self.evel_cal(self.senser_evel.acc_y_pk)
self.dev_evel_msg["Y轴有效值"] = self.evel_cal(self.senser_evel.acc_y_rms)
self.dev_evel_msg["Y轴速度峰值"] = self.evel_cal(self.senser_evel.speed_y_pk)
self.dev_evel_msg["Y轴速度有效值"] = self.evel_cal(self.senser_evel.speed_y_rms)
self.dev_evel_msg["Y轴频带能量1"] = self.evel_cal(self.senser_evel.fpower_y_1)
self.dev_evel_msg["Y轴频带能量2"] = self.evel_cal(self.senser_evel.fpower_y_2)
self.dev_evel_msg["Y轴频带能量3"] = self.evel_cal(self.senser_evel.fpower_y_3)
self.dev_evel_msg["Y轴频带能量4"] = self.evel_cal(self.senser_evel.fpower_y_4)
self.dev_evel_msg["Y轴频带能量5"] = self.evel_cal(self.senser_evel.fpower_y_5)
self.dev_evel_msg["Y轴冲击能量"] = self.evel_cal(self.senser_evel.envepower_y)
self.dev_evel_msg["Y轴故障频率1"] = self.evel_cal(self.senser_evel.errpower_y_1)
self.dev_evel_msg["Y轴故障频率2"] = self.evel_cal(self.senser_evel.errpower_y_2)
self.dev_evel_msg["Y轴故障频率3"] = self.evel_cal(self.senser_evel.errpower_y_3)
self.dev_evel_msg["Y轴故障频率4"] = self.evel_cal(self.senser_evel.errpower_y_4)
self.dev_evel_msg["Z轴峰值"] = self.evel_cal(self.senser_evel.acc_z_pk)
self.dev_evel_msg["Z轴有效值"] = self.evel_cal(self.senser_evel.acc_z_rms)
self.dev_evel_msg["Z轴速度峰值"] = self.evel_cal(self.senser_evel.speed_z_pk)
self.dev_evel_msg["Z轴速度有效值"] = self.evel_cal(self.senser_evel.speed_z_rms)
self.dev_evel_msg["Z轴频带能量1"] = self.evel_cal(self.senser_evel.fpower_z_1)
self.dev_evel_msg["Z轴频带能量2"] = self.evel_cal(self.senser_evel.fpower_z_2)
self.dev_evel_msg["Z轴频带能量3"] = self.evel_cal(self.senser_evel.fpower_z_3)
self.dev_evel_msg["Z轴频带能量4"] = self.evel_cal(self.senser_evel.fpower_z_4)
self.dev_evel_msg["Z轴频带能量5"] = self.evel_cal(self.senser_evel.fpower_z_5)
self.dev_evel_msg["Z轴冲击能量"] = self.evel_cal(self.senser_evel.envepower_z)
self.dev_evel_msg["Z轴故障频率1"] = self.evel_cal(self.senser_evel.errpower_z_1)
self.dev_evel_msg["Z轴故障频率2"] = self.evel_cal(self.senser_evel.errpower_z_2)
self.dev_evel_msg["Z轴故障频率3"] = self.evel_cal(self.senser_evel.errpower_z_3)
self.dev_evel_msg["Z轴故障频率4"] = self.evel_cal(self.senser_evel.errpower_z_4)
def temp_cal(self, sdata):
if sdata > 2048:
temp = -(256 - sdata * 0.0625)
else:
temp = sdata * 0.0625
return temp
def evel_cal(self, sdata):
s1 = sdata >> 14
s2 = sdata & (0xffff >> 2)
if s1 == 0:
vl = s2 * 0.0001
elif s1 == 1:
vl = s2 * 0.01
elif s1 == 2:
vl = s2
elif s1 == 3:
vl = s2 / 100
else:
vl = 16383
return vl
def acc_range_cal(self, sdata):
if sdata == 0b00:
return "±8g"
elif sdata == 0b01:
return "±16g"
elif sdata == 0b10:
return "±32g"
elif sdata == 0b11:
return "±64g"
def acc_freq_cal(self, sdata):
if sdata == 0b00:
return "3.2kHz"
elif sdata == 0b01:
return "6.4kHz"
elif sdata == 0b10:
return "12.8kHz"
elif sdata == 0b11:
return "25.6kHz"
def init_zigbee_message(self):
self.dev_info_msg = {"测点名称": None,
"初始化标志": None,
"加速度传感器状态": None,
"Zigbee模块状态": None,
"设备温度传感器状态": None,
"环境温度传感器状态": None,
"设备运行状态": None,
"MAC地址": None,
"硬件版本": None,
"软件版本": None,
"生产批号": None,
"生产序列号": None,
"唤醒次数": None,
"特征值发送次数": None,
"原始波形发送次数": None,
"电池电压": None,
"产品型号": None,
"无线信号强度": None,
}
self.dev_conf_msg = {"配置标志": None,
"唤醒周期": None,
"原始波形发送周期": None,
"Zigbee PID": None,
"Zigbee 信道": None,
"Zigbee 本地地址": None,
"Zigbee 目标地址": None,
"Zigbee 发射功率": None,
"Zigbee 重试次数": None,
"Zigbee 重试间隔": None,
"ACC采样率": None,
"ACC量程": None,
"ACC采样率时间": None,
"频带能量参数1 START": None,
"频带能量参数1 END": None,
"频带能量参数2 START": None,
"频带能量参数2 END": None,
"频带能量参数3 START": None,
"频带能量参数3 END": None,
"频带能量参数4 START": None,
"频带能量参数4 END": None,
"频带能量参数5 START": None,
"频带能量参数5 END": None,
"冲击带通频率START": None,
"冲击带通频率END": None,
"故障频率1": None,
"故障频率2": None,
"故障频率3": None,
"故障频率4": None,
"配置时间": None,
"速度积分滤波频率": None,
"原始数据": None
}
self.dev_evel_msg = {"传感器地址": None,
"采集时间": None,
"设备温度": None,
"环境温度": None,
"倾角": None,
"电池电压": None,
"X轴峰值": None,
"X轴有效值": None,
"X轴速度峰值": None,
"X轴速度有效值": None,
"Y轴峰值": None,
"Y轴有效值": None,
"Y轴速度峰值": None,
"Y轴速度有效值": None,
"Z轴峰值": None,
"Z轴有效值": None,
"Z轴速度峰值": None,
"Z轴速度有效值": None,
"X轴频带能量1": None,
"X轴频带能量2": None,
"X轴频带能量3": None,
"X轴频带能量4": None,
"X轴频带能量5": None,
"X轴冲击能量": None,
"X轴故障频率1": None,
"X轴故障频率2": None,
"X轴故障频率3": None,
"X轴故障频率4": None,
"Y轴频带能量1": None,
"Y轴频带能量2": None,
"Y轴频带能量3": None,
"Y轴频带能量4": None,
"Y轴频带能量5": None,
"Y轴冲击能量": None,
"Y轴故障频率1": None,
"Y轴故障频率2": None,
"Y轴故障频率3": None,
"Y轴故障频率4": None,
"Z轴频带能量1": None,
"Z轴频带能量2": None,
"Z轴频带能量3": None,
"Z轴频带能量4": None,
"Z轴频带能量5": None,
"Z轴冲击能量": None,
"Z轴故障频率1": None,
"Z轴故障频率2": None,
"Z轴故障频率3": None,
"Z轴故障频率4": None,
# "原始数据": None
}

View File

@ -0,0 +1,702 @@
#!/usr/bin/python3
# -*- coding: utf-8 -*-
import sys
from MainWindow import Ui_DataNodeFrequencyTest
from PyQt5.QtWidgets import QApplication, QMainWindow, QMessageBox
from AFG3000 import *
from Prologix import *
from DN101_NFC import *
from DN101_ZIGBEE import *
from Mysql import *
import serial, threading
import serial.tools.list_ports
from PyQt5.QtCore import QTimer, QThread, pyqtSignal
from PyQt5.QtGui import QIcon
from PyQt5.QtWidgets import *
import numpy as np
import matplotlib
import time
from sqlalchemy import create_engine
import pandas as pd
import tkinter as tk
from tkinter import filedialog
from playsound import playsound
matplotlib.use("Qt5Agg")
from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as FigureCanvas
from matplotlib.figure import Figure
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimHei'] # 指定默认字体
plt.rcParams['axes.unicode_minus'] = False # 解决保存图像是负号'-'显示为方块的问题
from matplotlib.backends.backend_qt5agg import NavigationToolbar2QT as NavigationToolbar
import win32con
from win32process import SuspendThread, ResumeThread
import ctypes
SENSER_INF_PACK1 = 0x01
SENSER_INF_PACK2 = 0x07
EVEL_DATA_PACK1 = 0x02
EVEL_DATA_PACK2 = 0x06
WAVE_X_PACK = 0x03
WAVE_Y_PACK = 0x04
WAVE_Z_PACK = 0x05
NFC_PORT_STR = 'Silicon Labs Dual CP210x USB to UART Bridge: Enhanced COM Port'
ZIG_PORT_STR = 'Silicon Labs Dual CP210x USB to UART Bridge: Standard COM Port'
AFG = AFG3000()
DMM = DMM_34401A(addr=22, port="COM13", baud=115200, ser_timeout=3, timeout=2)
db = Mysql()
Stop = 0
class Thread_01(QThread): # 线程1
trigger = pyqtSignal(str)
Voltage = pyqtSignal(str)
AmplSig = pyqtSignal(str)
TestOK = pyqtSignal(list)
ThreadStop = pyqtSignal()
TimeOut = pyqtSignal()
def __init__(self, Fredata):
super().__init__()
self.Fredata = Fredata
handle = -1
def run(self):
try:
self.handle = ctypes.windll.kernel32.OpenThread(
win32con.PROCESS_ALL_ACCESS, False, int(QThread.currentThreadId()))
except Exception as e:
print('get thread handle failed', e)
global StopThread
for i in range(0, len(self.Fredata)):
print(self.Fredata[i]['Frequency'])
ampl = 0.02
ampl_ins = 0.025
AFG.SetAmpl(ampl)
AFG.SetFrequency(str(self.Fredata[i]['Frequency']))
self.trigger.emit(str(self.Fredata[i]['Frequency']))
Voltage = str(DMM.measure())
self.Voltage.emit(Voltage)
retAmpl = AFG.query('VOLTAGE:AMPLITUDE?')
self.AmplSig.emit(str(retAmpl))
while (ampl < 1.3)&(float(self.Fredata[i]['Frequency'])<=160):
ampl += 0.05
AFG.SetAmpl(ampl)
time.sleep(0.1)
while (ampl < 1.6) & (float(self.Fredata[i]['Frequency']) > 160)& (float(self.Fredata[i]['Frequency']) <= 320):
ampl += 0.05
AFG.SetAmpl(ampl)
time.sleep(0.1)
while (ampl < 1.7) & (float(self.Fredata[i]['Frequency']) > 320)& (float(self.Fredata[i]['Frequency']) <= 640):
ampl += 0.05
AFG.SetAmpl(ampl)
time.sleep(0.1)
while (ampl < 1.7) & (float(self.Fredata[i]['Frequency']) > 640)& (float(self.Fredata[i]['Frequency']) <= 1000):
ampl += 0.05
AFG.SetAmpl(ampl)
time.sleep(0.1)
while (ampl < 1.2) & (float(self.Fredata[i]['Frequency']) > 1000)& (float(self.Fredata[i]['Frequency']) <= 2000):
ampl += 0.05
AFG.SetAmpl(ampl)
time.sleep(0.1)
while (ampl < 0.5) & (float(self.Fredata[i]['Frequency']) > 2000)& (float(self.Fredata[i]['Frequency']) <= 3000):
ampl += 0.05
AFG.SetAmpl(ampl)
time.sleep(0.1)
ampl_ins = 0.01
while (ampl < 0.05) & (float(self.Fredata[i]['Frequency']) > 3000)& (float(self.Fredata[i]['Frequency']) <= 4000):
ampl += 0.02
AFG.SetAmpl(ampl)
time.sleep(0.1)
ampl_ins = 0.01
while (ampl < 0.2) & (float(self.Fredata[i]['Frequency']) > 4000)& (float(self.Fredata[i]['Frequency']) <= 5000):
ampl += 0.05
AFG.SetAmpl(ampl)
time.sleep(0.1)
while (ampl < 0.4) & (float(self.Fredata[i]['Frequency']) > 5000)& (float(self.Fredata[i]['Frequency']) <= 7000):
ampl += 0.05
AFG.SetAmpl(ampl)
time.sleep(0.1)
try:
if(float(self.Fredata[i]['Frequency']) >= 1000):
DMM.set_measure_voltage_ac("AUTO", "200")
else:
DMM.set_measure_voltage_ac("AUTO", "20")
except:
print("DMM Set Error")
while float(Voltage) < 100:#调整电压到100mv
# if (float(self.Fredata[i]['Frequency']) >= 1000):
# Voltage = str(DMM.measure())
# ampl += 0.01
# self.Voltage.emit(Voltage)
# retAmpl = AFG.query('VOLTAGE:AMPLITUDE?')
# self.AmplSig.emit(str(retAmpl))
# AFG.SetAmpl(ampl)
# time.sleep(0.05)
# else:
Voltage = str(DMM.measure())
if float(Voltage) < 95:
ampl += ampl_ins
if (float(Voltage) > 95) and (float(Voltage) < 100):
ampl += 0.01
self.Voltage.emit(Voltage)
retAmpl = AFG.query('VOLTAGE:AMPLITUDE?')
self.AmplSig.emit(str(retAmpl))
AFG.SetAmpl(ampl)
if float(Voltage) > 100:
a = []
a.append('1')
a.append(self.Fredata[i]['Frequency'])
a.append(Voltage)
self.TestOK.emit(a)
timeCount = 0
while timeCount < 50:
global Stop
print(timeCount)
if Stop == 1:
time.sleep(1)
Stop = 0
break
timeCount += 1
time.sleep(1)
print(Voltage)
retAmpl = AFG.query('VOLTAGE:AMPLITUDE?')
#print(retAmpl)
while float(retAmpl) > 0.07:#微调ampl到最低值20mv
retAmpl -= 0.05
#print(retAmpl)
AFG.SetAmpl(retAmpl)
retAmpl = AFG.query('VOLTAGE:AMPLITUDE?')
time.sleep(0.05)
print(retAmpl)
time.sleep(1)
ampl = 0.02
AFG.SetAmpl(ampl)
AFG.SetFrequency('80')
AFG.Close()
self.ThreadStop.emit()
class MyFigureCanvas(FigureCanvas):
def __init__(self):
self.fig = Figure()
FigureCanvas.__init__(self, self.fig)
self.axes = self.fig.add_subplot(111)
#self.axes.set_ylim(ymin=0, ymax=30)
def plot(self, data,shortAddr):
self.axes.cla()
x = []
y1 = []
y2 = []
data1 = float(data[0]['rmsValue_Z']) * 1.41
for i in range(len(data)):
y1.append(float(data[i]['rmsValue_Z']))
x.append(data[i]['Frequency'])
y2.append(data1)
self.axes.plot(x, y1)
data1 = float(data[0]['rmsValue_Z']) * 1.41
self.axes.plot(x, y2)
self.axes.set_title('传感器短地址' + shortAddr)
self.axes.set_xlabel('Frequency(Hz)')
self.axes.set_ylabel('RMS(m/s^2)')
self.fig.subplots_adjust(left=0.15, bottom=0.2)
self.axes.grid()
self.fig.canvas.draw_idle()
path = 'G:/chaos/频响测试 - 副本/20230403/{0}.png'.format(shortAddr)
self.fig.savefig(path)
def clear(self):
self.axes.cla()
self.axes.grid()
self.fig.canvas.draw_idle()
class DataNodeFrequencyTest(QMainWindow, Ui_DataNodeFrequencyTest):
def __init__(self):
super(DataNodeFrequencyTest, self).__init__()
self.setupUi(self)
self.setWindowTitle("无线传感器频响测试")
self.NFCRead_Btn.clicked.connect(self.NFCRead)
self.Test_Btn.clicked.connect(self.StartTest)
self.ConnecDev_Btn.clicked.connect(self.ConnectDev)
self.Export_Btn.clicked.connect(self.Export2Excel)
self.timer_zig = QTimer(self)
self.timer_zig.timeout.connect(self.zig_update)
#self.timer_multimeter = QTimer(self)
#self.timer_multimeter.timeout.connect(self.multimeter_update)
self.timer_single = QTimer(self)
self.timer_nfc = QTimer(self)
self.Init()
def Init(self):
self.start = 0
self.Test = 0
self.Next = 0
self.TestOK = '0'
self.Fre = 0
self.Vol = '0'
# self.AFG3000 = AFG3000()
self.port_list = AFG.init()
for i in range(0, len(self.port_list)):
self.Signal_Box.addItem(self.port_list[i])
print(self.port_list)
self.AUDIO_PATH = self.get_resources_path(os.path.join('res', 'Finish.mp3'))
#playsound(self.AUDIO_PATH)
self.port_list_multimeter = list(serial.tools.list_ports.comports())
for i in range(0, len(self.port_list_multimeter)):
self.multimeter_Box.addItem(self.port_list_multimeter[i].description)
self.Fredata = db._Query('select * from t_data_frequency order by Frequency;');
thistime = time.strftime("%Y-%m-%d", time.localtime())
sql = "select count(*) from t_data_nfc"
data = db._Query(sql)
self.TotalCount.setText(str(data[0]['count(*)']))
sql = "select count(*) from t_data_nfc where TIME LIKE \'%{0}%\'".format(thistime)
data = db._Query(sql)
self.Count_Edit.setText(str(data[0]['count(*)']))
self.tabWidget.setCurrentIndex(2)
self.NFCList = self.tabWidget.widget(2)
layoutNFC = QVBoxLayout()
layoutNFC.addWidget(QLabel('频点列表(Hz)'))
for i in range(0, len(self.Fredata)):
layoutNFC.addWidget(QLabel(str(self.Fredata[i]['Frequency'])))
layoutNFC.addStretch(1)
self.NFCList.setLayout(layoutNFC)
self.plot = MyFigureCanvas()
self.gridlayout = QGridLayout(self.groupBox_3) # 继承容器groupBox
self.toolbar = NavigationToolbar(self.plot, self)
self.gridlayout.addWidget(self.toolbar, 0, 0)
self.gridlayout.addWidget(self.plot, 1, 0)
self.show()
data = []
# sql = "select rmsValue_Z,speedValue_Z, Frequency from t_data_zigbee where shortAddr = '450'"
# data = db._Query(sql)
# self.plot.plot(data, '450')
self.plot.clear()
def get_resources_path(self,relative_path):
if getattr(sys, 'frozen', False):
base_path = sys._MEIPASS
else:
base_path = os.path.abspath('.')
return os.path.join(base_path, relative_path)
def Export2Excel(self):
root = tk.Tk()
root.withdraw()
Filepath = filedialog.askdirectory() # 获得选择好的文件
engine = create_engine('mysql+pymysql://root:root@192.168.1.75:3306/datanodedb')
sql = 'SELECT * FROM t_data_zigbee'
df_read = pd.read_sql_query(sql, engine)
Filepath = Filepath + '/data.xlsx'
print(Filepath)
df_read.to_excel(Filepath, index=False)
QMessageBox.warning(self, "标题", "导出成功", QMessageBox.Yes | QMessageBox.No, QMessageBox.Yes)
def ConnectDev(self):
if self.start != 0:
self.Result_edit.clear()
self.start = 0
AFG.Close()
self.Result_edit.append('信号发生器断开成功!')
DMM.Close()
self.Result_edit.append('万用表断开成功!')
self.nfc_ser.close()
self.Result_edit.append('NFC模块断开成功')
self.zig_ser.close()
self.Result_edit.append('ZigBee模块断开成功')
return None
elif self.start == 0:
self.ConnecDev_Btn.setEnabled(False)
self.NFCRead_Btn.setEnabled(False)
self.Test_Btn.setEnabled(False)
try:
# 连接信号发生器
QApplication.processEvents()
self.Result_edit.clear()
#print(self.port_list[self.Signal_Box.currentIndex()])
# self.AFG3000.Open(self.port_list[self.Signal_Box.currentIndex()])
AFG.Connect('TCPIP0::192.168.1.140::inst0::INSTR')
self.Result_edit.append('信号发生器联机成功!')
# 连接万用表
# DMM = DMM_34401A(addr=22, port="COM8", baud=115200, ser_timeout=3, timeout=2)
# self.DMM = DMM_34401A(addr=22, port=self.port_list_multimeter[self.multimeter_Box.currentIndex()].name, \
# baud=115200, timeout=5)
print(DMM.cmdPoll("DETector:BANDwidth?"))
DMM.set_measure_voltage_ac()
# self.timer_multimeter.start(200) # 启动串口接收分析数据
self.Result_edit.append('万用表联机成功!')
nfc_port, zig_port = self.get_nfc_zig_port()
print(nfc_port, zig_port)
self.nfc_ser = serial.Serial(nfc_port, 19200, rtscts=False, dsrdtr=False)
self.zig_ser = serial.Serial(zig_port, 115200, rtscts=False, dsrdtr=False)
self.nfc_reader = Nfc_Reader(self.nfc_ser)
self.zig_reader = Zig_Reader(self.zig_ser)
self.timer_zig.start(100) # 启动串口接收分析数据
self.nfc_reader.rfidm_c2_init()
self.Result_edit.append('NFC、ZigBee模块联机成功')
self.ConnecDev_Btn.setEnabled(True)
self.ConnecDev_Btn.setText('断开')
self.NFCRead_Btn.setEnabled(True)
self.start = 1
except Exception as e:
print(e)
QMessageBox.warning(self, "标题", "连接失败", QMessageBox.Yes | QMessageBox.No, QMessageBox.Yes)
self.ConnecDev_Btn.setEnabled(True)
self.start = 0
return -1
def StartTest(self):
# self.thread_01 = Thread_01() # 创建线程
# self.thread_01.start() # 开始线程
# return 0
try:
if self.Test != 0:
self.Test = 0
ret = ctypes.windll.kernel32.TerminateThread(self.thread_01.handle, 0)
AFG.SetAmpl(0.02)
AFG.SetFrequency('80')
AFG.Close()
self.Test_Btn.setText('开始测试')
self.TestStatus.setText('测试结束')
return 0
elif self.Test == 0:
self.Test = 1
AFG.Open()
self.TestStatus.setText('正在测试中……')
self.ConnecDev_Btn.setEnabled(False)
self.NFCRead_Btn.setEnabled(False)
self.Test_Btn.setText('停止测试')
self.plot.clear()
self.thread_01 = Thread_01(self.Fredata) # 创建线程
self.thread_01.trigger.connect(self.deal)
self.thread_01.Voltage.connect(self.VoltageFun)
self.thread_01.TestOK.connect(self.TestOKFun)
self.thread_01.AmplSig.connect(self.AmplFun)
self.thread_01.ThreadStop.connect(self.ThreadStop)
self.thread_01.TimeOut.connect(self.TimeOut)
self.thread_01.start() # 开始线程
return 0
except Exception:
QMessageBox.warning(self, "标题", "测试异常", QMessageBox.Yes | QMessageBox.No, QMessageBox.Yes)
return -1
# self.AFG3000.SetFrequency('8k')
# self.AFG3000.query('FREQUENCY?');
def AmplFun(self,updateampl):
updateampl = float(updateampl)*1000
self.Ampl_Edit.setText(str(updateampl))
def deal(self, updatestr):
self.Frequency_Edit.setText(updatestr)
def VoltageFun(self, updateVoltage):
self.VOLTage_Edit.setText(updateVoltage)
def ThreadStop(self):
self.Test = 0
self.TestStatus.setText('测试结束')
self.Test_Btn.setText('开始测试')
self.NFCRead_Btn.setEnabled(True)
self.Ampl_Edit.setText('20')
self.Frequency_Edit.setText('80')
sql = "select rmsValue_Z,speedValue_Z, Frequency from t_data_zigbee where shortAddr = '{0}' order by Frequency".format(
self.ShortAddr)
data = db._Query(sql)
self.plot.plot(data,self.ShortAddr)
self.Test_Btn.setEnabled(False)
thistime = time.strftime("%Y-%m-%d", time.localtime())
sql = "select count(*) from t_data_nfc"
data = db._Query(sql)
self.TotalCount.setText(str(data[0]['count(*)']))
sql = "select count(*) from t_data_nfc where TIME LIKE \'%{0}%\'".format(thistime)
data = db._Query(sql)
self.Count_Edit.setText(str(data[0]['count(*)']))
#playsound(self.AUDIO_PATH)
def TimeOut(self):
self.Test = 0
ret = ctypes.windll.kernel32.TerminateThread(self.thread_01.handle, 0)
AFG.SetAmpl(0.02)
AFG.SetFrequency('80')
AFG.Close();
self.Test_Btn.setText('开始测试')
self.TestStatus.setText('测试结束')
QMessageBox.warning(self, "标题", "ZigBee接收超时请重新测试", QMessageBox.Yes | QMessageBox.No, QMessageBox.Yes)
def TestOKFun(self, updateTest):
print(updateTest)
self.TestOK = updateTest[0]
print(self.TestOK)
self.Fre = updateTest[1]
self.Vol = updateTest[2]
def get_nfc_zig_port(self):
serial_ports = self.get_serial_list()
for port in serial_ports:
port = list(port)
print(port)
if NFC_PORT_STR in port[1]:
nfc_port = port[0]
elif ZIG_PORT_STR in port[1]:
zig_port = port[0]
return (nfc_port, zig_port)
def get_serial_list(self):
serial_ports = serial.tools.list_ports.comports()
serial_list = []
for port in serial_ports:
serial_list.append(list(port))
return serial_list
#def multimeter_update(self):
#VOLTage = self.DMM.measure()
#print(VOLTage)
#self.VOLTage_Edit.setText(VOLTage)
def zig_update(self):
msg = ""
zig_info = self.zig_reader.read()
# 将解析的设备信息和特征值输出到界面上
if zig_info == SENSER_INF_PACK2:
for k, i in self.zig_reader.dev_info_msg.items():
msg = msg + k + ":" + str(i) + "\n"
for k, i in self.zig_reader.dev_conf_msg.items():
msg = msg + k + ":" + str(i) + "\n"
self.zig_conf_recv_flag = True
elif (zig_info == EVEL_DATA_PACK1) | (zig_info == EVEL_DATA_PACK2):
for k, i in self.zig_reader.dev_evel_msg.items():
# print(k, " :", i)
if isinstance(i, float):
msg = msg + k + ":" + format(i, ".4f") + "\n"
else:
msg = msg + k + ":" + str(i) + "\n"
if zig_info:
self.ZigBee_textEdit.setText(msg)
zig_recv_file_name = self.zig_reader.dev_evel_msg['采集时间'][:10]+".txt"
with open(zig_recv_file_name, "a") as zig_recv_file:
zig_recv_file.write(msg)
zig_recv_file.write(str(self.Fre))
zig_recv_file.write(self.Vol)
zig_recv_file.write("\n\n")
global Stop
try:
if int(self.TestOK) == 1 and (len(msg) > 0) and self.ShortAddr == self.zig_reader.dev_evel_msg['传感器地址']:
self.Next = 1
self.TestOK = '0'
print("OK1")
return
if (int(self.Next) == 1) and (len(msg) > 0) and self.ShortAddr == self.zig_reader.dev_evel_msg['传感器地址']:
print("OK2")
Stop = 1
self.Next = 0
sql = "select count(*) from t_data_zigbee where shortAddr = '{0}' and Frequency = '{1}';".format(
self.zig_reader.dev_evel_msg['传感器地址'],self.Fre)
data = db._Query(sql)
print(data[0]['count(*)'])
if data[0]['count(*)'] > 0:
sql = "update t_data_zigbee set sampleTime = '{0}',deviceTem = '{1}',\
environmentTem = '{2}',angle = '{3}',batteryV = '{4}',\
rmsPK_X = '{5}',rmsValue_X = '{6}',speedValue_X = '{7}',speedValue_X = '{8}',\
rmsPK_Y = '{9}',rmsValue_Y = '{10}',speedPK_Y = '{11}',speedValue_Y = '{12}',\
rmsPK_Z = '{13}',rmsValue_Z = '{14}',speedPK_Z = '{15}',speedValue_Z = '{16}',\
VOLTage = '{17}' \
where shortAddr = '{18}' and Frequency = '{19}';".format(self.zig_reader.dev_evel_msg['采集时间'],
self.zig_reader.dev_evel_msg['设备温度'],
self.zig_reader.dev_evel_msg['环境温度'],
self.zig_reader.dev_evel_msg['倾角'],
self.zig_reader.dev_evel_msg['电池电压'],
self.zig_reader.dev_evel_msg['X轴峰值'],
self.zig_reader.dev_evel_msg['X轴有效值'],
self.zig_reader.dev_evel_msg['X轴速度峰值'],
self.zig_reader.dev_evel_msg['X轴速度有效值'],
self.zig_reader.dev_evel_msg['Y轴峰值'],
self.zig_reader.dev_evel_msg['Y轴有效值'],
self.zig_reader.dev_evel_msg['Y轴速度峰值'],
self.zig_reader.dev_evel_msg['Y轴速度有效值'],
self.zig_reader.dev_evel_msg['Z轴峰值'],
self.zig_reader.dev_evel_msg['Z轴有效值'],
self.zig_reader.dev_evel_msg['Z轴速度峰值'],
self.zig_reader.dev_evel_msg['Z轴速度有效值'],self.Vol,
self.zig_reader.dev_evel_msg['传感器地址'],self.Fre)
print(sql)
data = db._Operate(sql)
else:
sql = "insert into t_data_zigbee(shortAddr,sampleTime,deviceTem,environmentTem,angle,batteryV,\
rmsPK_X,rmsValue_X,speedPK_X,speedValue_X,rmsPK_Y,rmsValue_Y,speedPK_Y,speedValue_Y,rmsPK_Z,\
rmsValue_Z,speedPK_Z,speedValue_Z,Frequency,VOLTage) values('{0}','{1}','{2}','{3}','{4}','{5}',\
'{6}','{7}','{8}','{9}','{10}','{11}','{12}','{13}','{14}','{15}','{16}','{17}',{18},'{19}'\
)".format(self.zig_reader.dev_evel_msg['传感器地址'],
self.zig_reader.dev_evel_msg['采集时间'],
self.zig_reader.dev_evel_msg['设备温度'],
self.zig_reader.dev_evel_msg['环境温度'],
self.zig_reader.dev_evel_msg['倾角'],
self.zig_reader.dev_evel_msg['电池电压'],
self.zig_reader.dev_evel_msg['X轴峰值'],
self.zig_reader.dev_evel_msg['X轴有效值'],
self.zig_reader.dev_evel_msg['X轴速度峰值'],
self.zig_reader.dev_evel_msg['X轴速度有效值'],
self.zig_reader.dev_evel_msg['Y轴峰值'],
self.zig_reader.dev_evel_msg['Y轴有效值'],
self.zig_reader.dev_evel_msg['Y轴速度峰值'],
self.zig_reader.dev_evel_msg['Y轴速度有效值'],
self.zig_reader.dev_evel_msg['Z轴峰值'],
self.zig_reader.dev_evel_msg['Z轴有效值'],
self.zig_reader.dev_evel_msg['Z轴速度峰值'],
self.zig_reader.dev_evel_msg['Z轴速度有效值'],self.Fre,self.Vol)
#print(sql)
data = db._Operate(sql)
self.TestOK = '0'
except Exception:
QMessageBox.warning(self, "标题", "数据存储异常", QMessageBox.Yes | QMessageBox.No, QMessageBox.Yes)
return -1
def nfc_update(self):
msg = ''
for k, i in self.nfc_reader.dev_info_msg.items():
msg = msg + k + ":" + str(i) + "\n"
for k, i in self.nfc_reader.dev_conf_msg.items():
msg = msg + k + ":" + str(i) + "\n"
thistime = time.strftime("%Y-%m-%d %H:%M:%S ", time.localtime())
sql = "select count(*) from t_data_nfc where shortAddr = '{0}';".format(
self.nfc_reader.dev_conf_msg['Zigbee 本地地址'])
self.ShortAddr = self.nfc_reader.dev_conf_msg['Zigbee 本地地址']
data = db._Query(sql)
print(data[0]['count(*)'])
if data[0]['count(*)'] > 0:
sql = "update t_data_nfc set dataNodeName = '{0}',dataNodeNo = '{1}',\
hardWareVersion = '{2}',softVersion = '{3}',productNo = '{4}',\
productSN = '{5}',productType = '{6}',RSSI = '{7}',\
firstPowerTime = '{8}',TIME = '{9}',batteryV = '{10}'\
where shortAddr = '{11}';".format(self.nfc_reader.dev_info_msg['测点名称'],
self.nfc_reader.dev_info_msg['MAC地址'], \
self.nfc_reader.dev_info_msg['硬件版本'],
self.nfc_reader.dev_info_msg['软件版本'], \
self.nfc_reader.dev_info_msg['生产批号'],
self.nfc_reader.dev_info_msg['生产序列号'], \
self.nfc_reader.dev_info_msg['产品型号'],
self.nfc_reader.dev_info_msg['无线信号强度'], \
self.nfc_reader.dev_info_msg['首次上电日期'], thistime, \
self.nfc_reader.dev_info_msg['电池电压'],
self.nfc_reader.dev_conf_msg['Zigbee 本地地址'])
#print(sql)
data = db._Operate(sql);
else:
sql = "insert into t_data_nfc(dataNodeName,dataNodeNo,shortAddr,hardWareVersion,softVersion,productNo,\
productType,RSSI,productSN,firstPowerTime,batteryV,TIME) values('{0}','{1}','{2}','{3}','{4}','{5}',\
'{6}','{7}','{8}','{9}','{10}','{11}')".format(self.nfc_reader.dev_info_msg['测点名称'],
self.nfc_reader.dev_info_msg['MAC地址'], \
self.nfc_reader.dev_conf_msg['Zigbee 本地地址'],
self.nfc_reader.dev_info_msg['硬件版本'], \
self.nfc_reader.dev_info_msg['软件版本'],
self.nfc_reader.dev_info_msg['生产批号'], \
self.nfc_reader.dev_info_msg['产品型号'],
self.nfc_reader.dev_info_msg['无线信号强度'], \
self.nfc_reader.dev_info_msg['生产序列号'],
self.nfc_reader.dev_info_msg['首次上电日期'], \
self.nfc_reader.dev_info_msg['电池电压'], thistime)
#print(sql)
data = db._Operate(sql);
self.NFC_textEdit.setText(msg)
def NFCRead(self):
try:
self.Test_Btn.setEnabled(True)
self.Result_edit.clear()
self.tabWidget.setCurrentIndex(0)
QApplication.processEvents()
self.nfc_reader.get_uuid()
if self.nfc_reader.nfc_uuid:
self.Result_edit.append("DN101 NFC UUID" + hex(self.nfc_reader.nfc_uuid)[2:])
time.sleep(0.5)
info = self.nfc_reader.read_info()
conf = self.nfc_reader.read_conf()
if info & conf:
self.nfc_reader.dev_info_analysis()
self.nfc_reader.dev_conf_analysis()
self.nfc_update()
self.Result_edit.append("DN101 NFC读取成功")
return info
else:
self.Result_edit.append("NFC读取失败")
return False
else:
self.Result_edit.append("NFC读取失败")
return False
except Exception:
QMessageBox.warning(self, "标题", "测试异常", QMessageBox.Yes | QMessageBox.No, QMessageBox.Yes)
return -1
if __name__ == '__main__':
app = QApplication(sys.argv)
MainWindow = QMainWindow()
ui = Ui_DataNodeFrequencyTest()
ui.setupUi(MainWindow)
View = DataNodeFrequencyTest()
View.show()
sys.exit(app.exec_())

View File

@ -0,0 +1,321 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE QtCreatorProject>
<!-- Written by QtCreator 4.15.0, 2022-05-26T09:27:12. -->
<qtcreator>
<data>
<variable>EnvironmentId</variable>
<value type="QByteArray">{168666bd-c3a3-4089-8a9e-043b6ddc15f8}</value>
</data>
<data>
<variable>ProjectExplorer.Project.ActiveTarget</variable>
<value type="int">0</value>
</data>
<data>
<variable>ProjectExplorer.Project.EditorSettings</variable>
<valuemap type="QVariantMap">
<value type="bool" key="EditorConfiguration.AutoIndent">true</value>
<value type="bool" key="EditorConfiguration.AutoSpacesForTabs">false</value>
<value type="bool" key="EditorConfiguration.CamelCaseNavigation">true</value>
<valuemap type="QVariantMap" key="EditorConfiguration.CodeStyle.0">
<value type="QString" key="language">Cpp</value>
<valuemap type="QVariantMap" key="value">
<value type="QByteArray" key="CurrentPreferences">CppGlobal</value>
</valuemap>
</valuemap>
<valuemap type="QVariantMap" key="EditorConfiguration.CodeStyle.1">
<value type="QString" key="language">QmlJS</value>
<valuemap type="QVariantMap" key="value">
<value type="QByteArray" key="CurrentPreferences">QmlJSGlobal</value>
</valuemap>
</valuemap>
<value type="int" key="EditorConfiguration.CodeStyle.Count">2</value>
<value type="QByteArray" key="EditorConfiguration.Codec">UTF-8</value>
<value type="bool" key="EditorConfiguration.ConstrainTooltips">false</value>
<value type="int" key="EditorConfiguration.IndentSize">4</value>
<value type="bool" key="EditorConfiguration.KeyboardTooltips">false</value>
<value type="int" key="EditorConfiguration.MarginColumn">80</value>
<value type="bool" key="EditorConfiguration.MouseHiding">true</value>
<value type="bool" key="EditorConfiguration.MouseNavigation">true</value>
<value type="int" key="EditorConfiguration.PaddingMode">1</value>
<value type="bool" key="EditorConfiguration.PreferSingleLineComments">false</value>
<value type="bool" key="EditorConfiguration.ScrollWheelZooming">true</value>
<value type="bool" key="EditorConfiguration.ShowMargin">false</value>
<value type="int" key="EditorConfiguration.SmartBackspaceBehavior">0</value>
<value type="bool" key="EditorConfiguration.SmartSelectionChanging">true</value>
<value type="bool" key="EditorConfiguration.SpacesForTabs">true</value>
<value type="int" key="EditorConfiguration.TabKeyBehavior">0</value>
<value type="int" key="EditorConfiguration.TabSize">8</value>
<value type="bool" key="EditorConfiguration.UseGlobal">true</value>
<value type="bool" key="EditorConfiguration.UseIndenter">false</value>
<value type="int" key="EditorConfiguration.Utf8BomBehavior">1</value>
<value type="bool" key="EditorConfiguration.addFinalNewLine">true</value>
<value type="bool" key="EditorConfiguration.cleanIndentation">true</value>
<value type="bool" key="EditorConfiguration.cleanWhitespace">true</value>
<value type="QString" key="EditorConfiguration.ignoreFileTypes">*.md, *.MD, Makefile</value>
<value type="bool" key="EditorConfiguration.inEntireDocument">false</value>
<value type="bool" key="EditorConfiguration.skipTrailingWhitespace">true</value>
</valuemap>
</data>
<data>
<variable>ProjectExplorer.Project.PluginSettings</variable>
<valuemap type="QVariantMap">
<valuemap type="QVariantMap" key="AutoTest.ActiveFrameworks">
<value type="bool" key="AutoTest.Framework.Boost">true</value>
<value type="bool" key="AutoTest.Framework.CTest">false</value>
<value type="bool" key="AutoTest.Framework.Catch">true</value>
<value type="bool" key="AutoTest.Framework.GTest">true</value>
<value type="bool" key="AutoTest.Framework.QtQuickTest">true</value>
<value type="bool" key="AutoTest.Framework.QtTest">true</value>
</valuemap>
<valuemap type="QVariantMap" key="AutoTest.CheckStates"/>
<value type="int" key="AutoTest.RunAfterBuild">0</value>
<value type="bool" key="AutoTest.UseGlobal">true</value>
<valuelist type="QVariantList" key="ClangCodeModel.CustomCommandLineKey">
<value type="QString">-fno-delayed-template-parsing</value>
</valuelist>
<value type="bool" key="ClangCodeModel.UseGlobalConfig">true</value>
<value type="QString" key="ClangCodeModel.WarningConfigId">Builtin.BuildSystem</value>
<valuemap type="QVariantMap" key="ClangTools">
<value type="bool" key="ClangTools.AnalyzeOpenFiles">true</value>
<value type="bool" key="ClangTools.BuildBeforeAnalysis">true</value>
<value type="QString" key="ClangTools.DiagnosticConfig">Builtin.DefaultTidyAndClazy</value>
<value type="int" key="ClangTools.ParallelJobs">3</value>
<valuelist type="QVariantList" key="ClangTools.SelectedDirs"/>
<valuelist type="QVariantList" key="ClangTools.SelectedFiles"/>
<valuelist type="QVariantList" key="ClangTools.SuppressedDiagnostics"/>
<value type="bool" key="ClangTools.UseGlobalSettings">true</value>
</valuemap>
</valuemap>
</data>
<data>
<variable>ProjectExplorer.Project.Target.0</variable>
<valuemap type="QVariantMap">
<value type="QString" key="DeviceType">Desktop</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Desktop Qt 5.12.11 MinGW 32-bit</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Desktop Qt 5.12.11 MinGW 32-bit</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">qt.qt5.51211.win32_mingw73_kit</value>
<value type="int" key="ProjectExplorer.Target.ActiveBuildConfiguration">0</value>
<value type="int" key="ProjectExplorer.Target.ActiveDeployConfiguration">0</value>
<value type="int" key="ProjectExplorer.Target.ActiveRunConfiguration">0</value>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.0">
<value type="int" key="EnableQmlDebugging">0</value>
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">E:\WorkSpace\测试工具\chaos\频响测试\build-DataNodeFrequencyTest-Desktop_Qt_5_12_11_MinGW_32_bit-Debug</value>
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory.shadowDir">E:/WorkSpace/测试工具/chaos/频响测试/build-DataNodeFrequencyTest-Desktop_Qt_5_12_11_MinGW_32_bit-Debug</value>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">QtProjectManager.QMakeBuildStep</value>
<value type="bool" key="QtProjectManager.QMakeBuildStep.QMakeForced">false</value>
<valuelist type="QVariantList" key="QtProjectManager.QMakeBuildStep.SelectedAbis"/>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.1">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">2</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Build</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Build</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments">clean</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Clean</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Clean</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
<value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.CustomParsers"/>
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Debug</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4BuildConfiguration</value>
<value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration">2</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.1">
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">E:\WorkSpace\测试工具\chaos\频响测试\build-DataNodeFrequencyTest-Desktop_Qt_5_12_11_MinGW_32_bit-Release</value>
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory.shadowDir">E:/WorkSpace/测试工具/chaos/频响测试/build-DataNodeFrequencyTest-Desktop_Qt_5_12_11_MinGW_32_bit-Release</value>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">QtProjectManager.QMakeBuildStep</value>
<value type="bool" key="QtProjectManager.QMakeBuildStep.QMakeForced">false</value>
<valuelist type="QVariantList" key="QtProjectManager.QMakeBuildStep.SelectedAbis"/>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.1">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">2</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Build</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Build</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments">clean</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Clean</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Clean</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
<value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.CustomParsers"/>
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Release</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4BuildConfiguration</value>
<value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration">0</value>
<value type="int" key="QtQuickCompiler">0</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.2">
<value type="int" key="EnableQmlDebugging">0</value>
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">E:\WorkSpace\测试工具\chaos\频响测试\build-DataNodeFrequencyTest-Desktop_Qt_5_12_11_MinGW_32_bit-Profile</value>
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory.shadowDir">E:/WorkSpace/测试工具/chaos/频响测试/build-DataNodeFrequencyTest-Desktop_Qt_5_12_11_MinGW_32_bit-Profile</value>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">QtProjectManager.QMakeBuildStep</value>
<value type="bool" key="QtProjectManager.QMakeBuildStep.QMakeForced">false</value>
<valuelist type="QVariantList" key="QtProjectManager.QMakeBuildStep.SelectedAbis"/>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.1">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">2</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Build</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Build</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments">clean</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Clean</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Clean</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
<value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.CustomParsers"/>
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Profile</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4BuildConfiguration</value>
<value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration">0</value>
<value type="int" key="QtQuickCompiler">0</value>
<value type="int" key="SeparateDebugInfo">0</value>
</valuemap>
<value type="int" key="ProjectExplorer.Target.BuildConfigurationCount">3</value>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.DeployConfiguration.0">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">0</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Deploy</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Deploy</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Deploy</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">1</value>
<valuemap type="QVariantMap" key="ProjectExplorer.DeployConfiguration.CustomData"/>
<value type="bool" key="ProjectExplorer.DeployConfiguration.CustomDataEnabled">false</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.DefaultDeployConfiguration</value>
</valuemap>
<value type="int" key="ProjectExplorer.Target.DeployConfigurationCount">1</value>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.RunConfiguration.0">
<value type="QString" key="Analyzer.Perf.CallgraphMode">dwarf</value>
<valuelist type="QVariantList" key="Analyzer.Perf.Events">
<value type="QString">cpu-cycles</value>
</valuelist>
<valuelist type="QVariantList" key="Analyzer.Perf.ExtraArguments"/>
<value type="int" key="Analyzer.Perf.Frequency">250</value>
<valuelist type="QVariantList" key="Analyzer.Perf.RecordArguments">
<value type="QString">-e</value>
<value type="QString">cpu-cycles</value>
<value type="QString">--call-graph</value>
<value type="QString">dwarf,4096</value>
<value type="QString">-F</value>
<value type="QString">250</value>
</valuelist>
<value type="QString" key="Analyzer.Perf.SampleMode">-F</value>
<value type="bool" key="Analyzer.Perf.Settings.UseGlobalSettings">true</value>
<value type="int" key="Analyzer.Perf.StackSize">4096</value>
<value type="bool" key="Analyzer.QmlProfiler.AggregateTraces">false</value>
<value type="bool" key="Analyzer.QmlProfiler.FlushEnabled">false</value>
<value type="uint" key="Analyzer.QmlProfiler.FlushInterval">1000</value>
<value type="QString" key="Analyzer.QmlProfiler.LastTraceFile"></value>
<value type="bool" key="Analyzer.QmlProfiler.Settings.UseGlobalSettings">true</value>
<valuelist type="QVariantList" key="Analyzer.Valgrind.AddedSuppressionFiles"/>
<value type="QString" key="Analyzer.Valgrind.Callgrind.Arguments"></value>
<value type="bool" key="Analyzer.Valgrind.Callgrind.CollectBusEvents">false</value>
<value type="bool" key="Analyzer.Valgrind.Callgrind.CollectSystime">false</value>
<value type="bool" key="Analyzer.Valgrind.Callgrind.EnableBranchSim">false</value>
<value type="bool" key="Analyzer.Valgrind.Callgrind.EnableCacheSim">false</value>
<value type="bool" key="Analyzer.Valgrind.Callgrind.EnableEventToolTips">true</value>
<value type="double" key="Analyzer.Valgrind.Callgrind.MinimumCostRatio">0.01</value>
<value type="double" key="Analyzer.Valgrind.Callgrind.VisualisationMinimumCostRatio">10</value>
<value type="bool" key="Analyzer.Valgrind.FilterExternalIssues">true</value>
<value type="QString" key="Analyzer.Valgrind.KCachegrindExecutable">kcachegrind</value>
<value type="int" key="Analyzer.Valgrind.LeakCheckOnFinish">1</value>
<value type="QString" key="Analyzer.Valgrind.Memcheck.Arguments"></value>
<value type="int" key="Analyzer.Valgrind.NumCallers">25</value>
<valuelist type="QVariantList" key="Analyzer.Valgrind.RemovedSuppressionFiles"/>
<value type="int" key="Analyzer.Valgrind.SelfModifyingCodeDetection">1</value>
<value type="bool" key="Analyzer.Valgrind.Settings.UseGlobalSettings">true</value>
<value type="bool" key="Analyzer.Valgrind.ShowReachable">false</value>
<value type="bool" key="Analyzer.Valgrind.TrackOrigins">true</value>
<value type="QString" key="Analyzer.Valgrind.ValgrindArguments"></value>
<value type="QString" key="Analyzer.Valgrind.ValgrindExecutable">valgrind</value>
<valuelist type="QVariantList" key="Analyzer.Valgrind.VisibleErrorKinds">
<value type="int">0</value>
<value type="int">1</value>
<value type="int">2</value>
<value type="int">3</value>
<value type="int">4</value>
<value type="int">5</value>
<value type="int">6</value>
<value type="int">7</value>
<value type="int">8</value>
<value type="int">9</value>
<value type="int">10</value>
<value type="int">11</value>
<value type="int">12</value>
<value type="int">13</value>
<value type="int">14</value>
</valuelist>
<valuelist type="QVariantList" key="CustomOutputParsers"/>
<value type="int" key="PE.EnvironmentAspect.Base">2</value>
<valuelist type="QVariantList" key="PE.EnvironmentAspect.Changes"/>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4RunConfiguration:E:/WorkSpace/测试工具/chaos/频响测试/DataNodeFrequencyTest/DataNodeFrequencyTest.pro</value>
<value type="QString" key="ProjectExplorer.RunConfiguration.BuildKey">E:/WorkSpace/测试工具/chaos/频响测试/DataNodeFrequencyTest/DataNodeFrequencyTest.pro</value>
<value type="bool" key="RunConfiguration.UseCppDebugger">false</value>
<value type="bool" key="RunConfiguration.UseCppDebuggerAuto">true</value>
<value type="bool" key="RunConfiguration.UseLibrarySearchPath">true</value>
<value type="bool" key="RunConfiguration.UseQmlDebugger">false</value>
<value type="bool" key="RunConfiguration.UseQmlDebuggerAuto">true</value>
<value type="QString" key="RunConfiguration.WorkingDirectory.default">E:/WorkSpace/测试工具/chaos/频响测试/build-DataNodeFrequencyTest-Desktop_Qt_5_12_11_MinGW_32_bit-Debug</value>
</valuemap>
<value type="int" key="ProjectExplorer.Target.RunConfigurationCount">1</value>
</valuemap>
</data>
<data>
<variable>ProjectExplorer.Project.TargetCount</variable>
<value type="int">1</value>
</data>
<data>
<variable>ProjectExplorer.Project.Updater.FileVersion</variable>
<value type="int">22</value>
</data>
<data>
<variable>Version</variable>
<value type="int">22</value>
</data>
</qtcreator>

View File

@ -0,0 +1,203 @@
# -*- coding: utf-8 -*-
# Form implementation generated from reading ui file 'form.ui'
#
# Created by: PyQt5 UI code generator 5.15.6
#
# WARNING: Any manual changes made to this file will be lost when pyuic5 is
# run again. Do not edit this file unless you know what you are doing.
from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_DataNodeFrequencyTest(object):
def setupUi(self, DataNodeFrequencyTest):
DataNodeFrequencyTest.setObjectName("DataNodeFrequencyTest")
DataNodeFrequencyTest.resize(997, 796)
self.groupBox = QtWidgets.QGroupBox(DataNodeFrequencyTest)
self.groupBox.setGeometry(QtCore.QRect(10, 560, 541, 161))
self.groupBox.setStyleSheet("font: 12pt \"宋体\";")
self.groupBox.setObjectName("groupBox")
self.multimeter_Box = QtWidgets.QComboBox(self.groupBox)
self.multimeter_Box.setGeometry(QtCore.QRect(150, 20, 241, 41))
self.multimeter_Box.setStyleSheet("font: 12pt \"宋体\";")
self.multimeter_Box.setObjectName("multimeter_Box")
self.Signal_Box = QtWidgets.QComboBox(self.groupBox)
self.Signal_Box.setGeometry(QtCore.QRect(150, 100, 241, 41))
self.Signal_Box.setStyleSheet("font: 12pt \"宋体\";")
self.Signal_Box.setObjectName("Signal_Box")
self.label = QtWidgets.QLabel(self.groupBox)
self.label.setGeometry(QtCore.QRect(10, 20, 91, 41))
self.label.setStyleSheet("font: 12pt \"宋体\";")
self.label.setObjectName("label")
self.label_2 = QtWidgets.QLabel(self.groupBox)
self.label_2.setGeometry(QtCore.QRect(10, 100, 121, 41))
self.label_2.setStyleSheet("font: 12pt \"宋体\";")
self.label_2.setObjectName("label_2")
self.layoutWidget = QtWidgets.QWidget(self.groupBox)
self.layoutWidget.setGeometry(QtCore.QRect(440, 20, 77, 121))
self.layoutWidget.setObjectName("layoutWidget")
self.gridLayout = QtWidgets.QGridLayout(self.layoutWidget)
self.gridLayout.setContentsMargins(0, 0, 0, 0)
self.gridLayout.setObjectName("gridLayout")
self.ConnecDev_Btn = QtWidgets.QPushButton(self.layoutWidget)
self.ConnecDev_Btn.setStyleSheet("font: 12pt \"宋体\";")
self.ConnecDev_Btn.setObjectName("ConnecDev_Btn")
self.gridLayout.addWidget(self.ConnecDev_Btn, 0, 0, 1, 1)
self.NFCRead_Btn = QtWidgets.QPushButton(self.layoutWidget)
self.NFCRead_Btn.setEnabled(False)
self.NFCRead_Btn.setStyleSheet("font: 12pt \"宋体\";")
self.NFCRead_Btn.setObjectName("NFCRead_Btn")
self.gridLayout.addWidget(self.NFCRead_Btn, 5, 0, 1, 1)
spacerItem = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)
self.gridLayout.addItem(spacerItem, 1, 0, 1, 1)
spacerItem1 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)
self.gridLayout.addItem(spacerItem1, 6, 0, 1, 1)
self.Test_Btn = QtWidgets.QPushButton(self.layoutWidget)
self.Test_Btn.setEnabled(False)
self.Test_Btn.setStyleSheet("font: 12pt \"宋体\";")
self.Test_Btn.setObjectName("Test_Btn")
self.gridLayout.addWidget(self.Test_Btn, 7, 0, 1, 1)
self.groupBox_2 = QtWidgets.QGroupBox(DataNodeFrequencyTest)
self.groupBox_2.setGeometry(QtCore.QRect(570, 10, 381, 231))
self.groupBox_2.setStyleSheet("font: 12pt \"Agency FB\";")
self.groupBox_2.setObjectName("groupBox_2")
self.label_3 = QtWidgets.QLabel(self.groupBox_2)
self.label_3.setGeometry(QtCore.QRect(10, 20, 121, 41))
self.label_3.setStyleSheet("font: 12pt \"Agency FB\";")
self.label_3.setObjectName("label_3")
self.label_4 = QtWidgets.QLabel(self.groupBox_2)
self.label_4.setGeometry(QtCore.QRect(10, 70, 131, 41))
self.label_4.setStyleSheet("font: 12pt \"Agency FB\";")
self.label_4.setObjectName("label_4")
self.label_5 = QtWidgets.QLabel(self.groupBox_2)
self.label_5.setGeometry(QtCore.QRect(10, 120, 101, 41))
self.label_5.setStyleSheet("font: 12pt \"Agency FB\";")
self.label_5.setObjectName("label_5")
self.Frequency_Edit = QtWidgets.QLineEdit(self.groupBox_2)
self.Frequency_Edit.setEnabled(False)
self.Frequency_Edit.setGeometry(QtCore.QRect(140, 20, 161, 41))
self.Frequency_Edit.setStyleSheet("font: 20pt \"宋体\";\n"
"color: rgb(0, 170, 0);")
self.Frequency_Edit.setObjectName("Frequency_Edit")
self.Ampl_Edit = QtWidgets.QLineEdit(self.groupBox_2)
self.Ampl_Edit.setEnabled(False)
self.Ampl_Edit.setGeometry(QtCore.QRect(140, 70, 161, 41))
self.Ampl_Edit.setStyleSheet("font: 20pt \"宋体\";\n"
"color: rgb(0, 170, 0);")
self.Ampl_Edit.setObjectName("Ampl_Edit")
self.VOLTage_Edit = QtWidgets.QLineEdit(self.groupBox_2)
self.VOLTage_Edit.setEnabled(False)
self.VOLTage_Edit.setGeometry(QtCore.QRect(140, 120, 161, 41))
self.VOLTage_Edit.setStyleSheet("font: 20pt \"宋体\";\n"
"color: rgb(0, 170, 0);")
self.VOLTage_Edit.setObjectName("VOLTage_Edit")
self.label_9 = QtWidgets.QLabel(self.groupBox_2)
self.label_9.setGeometry(QtCore.QRect(320, 132, 54, 20))
self.label_9.setStyleSheet("font: 12pt \"宋体\";")
self.label_9.setObjectName("label_9")
self.label_10 = QtWidgets.QLabel(self.groupBox_2)
self.label_10.setGeometry(QtCore.QRect(320, 30, 54, 20))
self.label_10.setStyleSheet("font: 12pt \"宋体\";")
self.label_10.setObjectName("label_10")
self.label_11 = QtWidgets.QLabel(self.groupBox_2)
self.label_11.setGeometry(QtCore.QRect(320, 80, 54, 20))
self.label_11.setStyleSheet("font: 12pt \"宋体\";")
self.label_11.setObjectName("label_11")
self.label_7 = QtWidgets.QLabel(self.groupBox_2)
self.label_7.setGeometry(QtCore.QRect(10, 180, 131, 31))
self.label_7.setStyleSheet("font: 12pt \"Agency FB\";")
self.label_7.setObjectName("label_7")
self.Count_Edit = QtWidgets.QLineEdit(self.groupBox_2)
self.Count_Edit.setEnabled(False)
self.Count_Edit.setGeometry(QtCore.QRect(140, 170, 161, 41))
self.Count_Edit.setStyleSheet("font: 20pt \"宋体\";\n"
"color: rgb(0, 170, 0);")
self.Count_Edit.setObjectName("Count_Edit")
self.label_12 = QtWidgets.QLabel(self.groupBox_2)
self.label_12.setGeometry(QtCore.QRect(320, 180, 54, 20))
self.label_12.setStyleSheet("font: 12pt \"宋体\";")
self.label_12.setObjectName("label_12")
self.groupBox_3 = QtWidgets.QGroupBox(DataNodeFrequencyTest)
self.groupBox_3.setGeometry(QtCore.QRect(10, 10, 541, 391))
self.groupBox_3.setStyleSheet("font: 12pt \"Agency FB\";")
self.groupBox_3.setObjectName("groupBox_3")
self.tabWidget = QtWidgets.QTabWidget(DataNodeFrequencyTest)
self.tabWidget.setGeometry(QtCore.QRect(570, 250, 381, 471))
self.tabWidget.setStyleSheet("font: 12pt \"宋体\";")
self.tabWidget.setTabBarAutoHide(False)
self.tabWidget.setObjectName("tabWidget")
self.tab = QtWidgets.QWidget()
self.tab.setObjectName("tab")
self.NFC_textEdit = QtWidgets.QTextEdit(self.tab)
self.NFC_textEdit.setGeometry(QtCore.QRect(10, 10, 351, 421))
self.NFC_textEdit.setObjectName("NFC_textEdit")
self.tabWidget.addTab(self.tab, "")
self.tab_2 = QtWidgets.QWidget()
self.tab_2.setObjectName("tab_2")
self.ZigBee_textEdit = QtWidgets.QTextEdit(self.tab_2)
self.ZigBee_textEdit.setGeometry(QtCore.QRect(10, 10, 351, 421))
self.ZigBee_textEdit.setObjectName("ZigBee_textEdit")
self.tabWidget.addTab(self.tab_2, "")
self.tab_5 = QtWidgets.QWidget()
self.tab_5.setObjectName("tab_5")
self.tabWidget.addTab(self.tab_5, "")
self.Result_edit = QtWidgets.QTextEdit(DataNodeFrequencyTest)
self.Result_edit.setGeometry(QtCore.QRect(10, 420, 541, 121))
self.Result_edit.setStyleSheet("font: 16pt \"宋体\";")
self.Result_edit.setObjectName("Result_edit")
self.TestStatus = QtWidgets.QLabel(DataNodeFrequencyTest)
self.TestStatus.setGeometry(QtCore.QRect(240, 740, 251, 41))
self.TestStatus.setStyleSheet("font: 28pt \"Agency FB\";\n"
"color: rgb(0, 170, 0);")
self.TestStatus.setObjectName("TestStatus")
self.Export_Btn = QtWidgets.QPushButton(DataNodeFrequencyTest)
self.Export_Btn.setGeometry(QtCore.QRect(810, 730, 81, 51))
self.Export_Btn.setStyleSheet("font: 12pt \"Agency FB\";")
self.Export_Btn.setObjectName("Export_Btn")
self.label_6 = QtWidgets.QLabel(DataNodeFrequencyTest)
self.label_6.setGeometry(QtCore.QRect(20, 740, 171, 41))
self.label_6.setStyleSheet("font: 28pt \"宋体\";")
self.label_6.setObjectName("label_6")
self.label_8 = QtWidgets.QLabel(DataNodeFrequencyTest)
self.label_8.setGeometry(QtCore.QRect(510, 750, 131, 31))
self.label_8.setStyleSheet("font: 12pt \"Agency FB\";")
self.label_8.setObjectName("label_8")
self.TotalCount = QtWidgets.QLabel(DataNodeFrequencyTest)
self.TotalCount.setGeometry(QtCore.QRect(640, 740, 131, 41))
self.TotalCount.setStyleSheet("font: 28pt \"宋体\";\n"
"color: rgb(0, 170, 0);")
self.TotalCount.setText("")
self.TotalCount.setObjectName("TotalCount")
self.retranslateUi(DataNodeFrequencyTest)
self.tabWidget.setCurrentIndex(1)
QtCore.QMetaObject.connectSlotsByName(DataNodeFrequencyTest)
def retranslateUi(self, DataNodeFrequencyTest):
_translate = QtCore.QCoreApplication.translate
DataNodeFrequencyTest.setWindowTitle(_translate("DataNodeFrequencyTest", "DataNodeFrequencyTest"))
self.groupBox.setTitle(_translate("DataNodeFrequencyTest", "端口"))
self.label.setText(_translate("DataNodeFrequencyTest", "万用表:"))
self.label_2.setText(_translate("DataNodeFrequencyTest", "信号发生器:"))
self.ConnecDev_Btn.setText(_translate("DataNodeFrequencyTest", "联机"))
self.NFCRead_Btn.setText(_translate("DataNodeFrequencyTest", "NFC读取"))
self.Test_Btn.setText(_translate("DataNodeFrequencyTest", "开始测试"))
self.groupBox_2.setTitle(_translate("DataNodeFrequencyTest", "实时数据"))
self.label_3.setText(_translate("DataNodeFrequencyTest", "信号发生器频率:"))
self.label_4.setText(_translate("DataNodeFrequencyTest", "信号发生器幅值:"))
self.label_5.setText(_translate("DataNodeFrequencyTest", "万用表电压:"))
self.label_9.setText(_translate("DataNodeFrequencyTest", "mv"))
self.label_10.setText(_translate("DataNodeFrequencyTest", "Hz"))
self.label_11.setText(_translate("DataNodeFrequencyTest", "mv"))
self.label_7.setText(_translate("DataNodeFrequencyTest", "今天测试 个数:"))
self.label_12.setText(_translate("DataNodeFrequencyTest", ""))
self.groupBox_3.setTitle(_translate("DataNodeFrequencyTest", "频响曲线"))
self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab), _translate("DataNodeFrequencyTest", "NFC"))
self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab_2), _translate("DataNodeFrequencyTest", "ZigBee"))
self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab_5), _translate("DataNodeFrequencyTest", " 频点"))
self.TestStatus.setText(_translate("DataNodeFrequencyTest", "未测试"))
self.Export_Btn.setText(_translate("DataNodeFrequencyTest", "导出数据"))
self.label_6.setText(_translate("DataNodeFrequencyTest", "测试状态:"))
self.label_8.setText(_translate("DataNodeFrequencyTest", "累计测试个数:"))

View File

@ -0,0 +1,231 @@
# -*- coding: utf-8 -*-
# Form implementation generated from reading ui file 'mainwindow.ui'
#
# Created by: PyQt5 UI code generator 5.15.6
#
# WARNING: Any manual changes made to this file will be lost when pyuic5 is
# run again. Do not edit this file unless you know what you are doing.
from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_DataNodeFrequencyTest(object):
def setupUi(self, DataNodeFrequencyTest):
DataNodeFrequencyTest.setObjectName("DataNodeFrequencyTest")
DataNodeFrequencyTest.resize(850, 600)
self.centralwidget = QtWidgets.QWidget(DataNodeFrequencyTest)
self.centralwidget.setObjectName("centralwidget")
self.verticalLayout = QtWidgets.QVBoxLayout(self.centralwidget)
self.verticalLayout.setObjectName("verticalLayout")
self.widget = QtWidgets.QWidget(self.centralwidget)
self.widget.setObjectName("widget")
self.horizontalLayout = QtWidgets.QHBoxLayout(self.widget)
self.horizontalLayout.setObjectName("horizontalLayout")
self.widget_3 = QtWidgets.QWidget(self.widget)
self.widget_3.setMinimumSize(QtCore.QSize(500, 0))
self.widget_3.setObjectName("widget_3")
self.verticalLayout_3 = QtWidgets.QVBoxLayout(self.widget_3)
self.verticalLayout_3.setObjectName("verticalLayout_3")
self.widget_7 = QtWidgets.QWidget(self.widget_3)
self.widget_7.setMinimumSize(QtCore.QSize(0, 300))
self.widget_7.setObjectName("widget_7")
self.horizontalLayout_8 = QtWidgets.QHBoxLayout(self.widget_7)
self.horizontalLayout_8.setObjectName("horizontalLayout_8")
self.groupBox_3 = QtWidgets.QGroupBox(self.widget_7)
self.groupBox_3.setObjectName("groupBox_3")
self.horizontalLayout_8.addWidget(self.groupBox_3)
self.verticalLayout_3.addWidget(self.widget_7)
self.widget_9 = QtWidgets.QWidget(self.widget_3)
self.widget_9.setMinimumSize(QtCore.QSize(120, 0))
self.widget_9.setObjectName("widget_9")
self.horizontalLayout_12 = QtWidgets.QHBoxLayout(self.widget_9)
self.horizontalLayout_12.setObjectName("horizontalLayout_12")
self.verticalLayout_5 = QtWidgets.QVBoxLayout()
self.verticalLayout_5.setObjectName("verticalLayout_5")
self.horizontalLayout_9 = QtWidgets.QHBoxLayout()
self.horizontalLayout_9.setObjectName("horizontalLayout_9")
self.label = QtWidgets.QLabel(self.widget_9)
self.label.setMinimumSize(QtCore.QSize(100, 0))
self.label.setObjectName("label")
self.horizontalLayout_9.addWidget(self.label)
self.sensorType_Box = QtWidgets.QComboBox(self.widget_9)
self.sensorType_Box.setMinimumSize(QtCore.QSize(120, 0))
self.sensorType_Box.setObjectName("sensorType_Box")
self.horizontalLayout_9.addWidget(self.sensorType_Box)
self.verticalLayout_5.addLayout(self.horizontalLayout_9)
self.horizontalLayout_10 = QtWidgets.QHBoxLayout()
self.horizontalLayout_10.setObjectName("horizontalLayout_10")
self.label_2 = QtWidgets.QLabel(self.widget_9)
self.label_2.setMinimumSize(QtCore.QSize(120, 0))
self.label_2.setObjectName("label_2")
self.horizontalLayout_10.addWidget(self.label_2)
self.Signal_Edit = QtWidgets.QLineEdit(self.widget_9)
self.Signal_Edit.setMinimumSize(QtCore.QSize(120, 0))
self.Signal_Edit.setObjectName("Signal_Edit")
self.horizontalLayout_10.addWidget(self.Signal_Edit)
self.verticalLayout_5.addLayout(self.horizontalLayout_10)
self.horizontalLayout_11 = QtWidgets.QHBoxLayout()
self.horizontalLayout_11.setObjectName("horizontalLayout_11")
self.label_7 = QtWidgets.QLabel(self.widget_9)
self.label_7.setMinimumSize(QtCore.QSize(100, 0))
self.label_7.setObjectName("label_7")
self.horizontalLayout_11.addWidget(self.label_7)
self.multimeter_Box = QtWidgets.QComboBox(self.widget_9)
self.multimeter_Box.setMinimumSize(QtCore.QSize(120, 0))
self.multimeter_Box.setObjectName("multimeter_Box")
self.horizontalLayout_11.addWidget(self.multimeter_Box)
self.verticalLayout_5.addLayout(self.horizontalLayout_11)
self.horizontalLayout_12.addLayout(self.verticalLayout_5)
spacerItem = QtWidgets.QSpacerItem(109, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
self.horizontalLayout_12.addItem(spacerItem)
self.verticalLayout_6 = QtWidgets.QVBoxLayout()
self.verticalLayout_6.setObjectName("verticalLayout_6")
self.ConnecDev_Btn = QtWidgets.QPushButton(self.widget_9)
self.ConnecDev_Btn.setObjectName("ConnecDev_Btn")
self.verticalLayout_6.addWidget(self.ConnecDev_Btn)
self.NFCRead_Btn = QtWidgets.QPushButton(self.widget_9)
self.NFCRead_Btn.setObjectName("NFCRead_Btn")
self.verticalLayout_6.addWidget(self.NFCRead_Btn)
self.Test_Btn = QtWidgets.QPushButton(self.widget_9)
self.Test_Btn.setObjectName("Test_Btn")
self.verticalLayout_6.addWidget(self.Test_Btn)
self.horizontalLayout_12.addLayout(self.verticalLayout_6)
self.verticalLayout_3.addWidget(self.widget_9)
self.horizontalLayout.addWidget(self.widget_3)
self.widget_4 = QtWidgets.QWidget(self.widget)
self.widget_4.setObjectName("widget_4")
self.verticalLayout_2 = QtWidgets.QVBoxLayout(self.widget_4)
self.verticalLayout_2.setObjectName("verticalLayout_2")
self.widget_5 = QtWidgets.QWidget(self.widget_4)
self.widget_5.setMinimumSize(QtCore.QSize(300, 240))
self.widget_5.setObjectName("widget_5")
self.horizontalLayout_2 = QtWidgets.QHBoxLayout(self.widget_5)
self.horizontalLayout_2.setObjectName("horizontalLayout_2")
self.groupBox_2 = QtWidgets.QGroupBox(self.widget_5)
self.groupBox_2.setObjectName("groupBox_2")
self.verticalLayout_4 = QtWidgets.QVBoxLayout(self.groupBox_2)
self.verticalLayout_4.setObjectName("verticalLayout_4")
self.horizontalLayout_4 = QtWidgets.QHBoxLayout()
self.horizontalLayout_4.setObjectName("horizontalLayout_4")
self.label_3 = QtWidgets.QLabel(self.groupBox_2)
self.label_3.setMinimumSize(QtCore.QSize(100, 0))
self.label_3.setObjectName("label_3")
self.horizontalLayout_4.addWidget(self.label_3)
self.Frequency_Edit = QtWidgets.QLineEdit(self.groupBox_2)
self.Frequency_Edit.setObjectName("Frequency_Edit")
self.horizontalLayout_4.addWidget(self.Frequency_Edit)
self.label_10 = QtWidgets.QLabel(self.groupBox_2)
self.label_10.setObjectName("label_10")
self.horizontalLayout_4.addWidget(self.label_10)
self.verticalLayout_4.addLayout(self.horizontalLayout_4)
self.horizontalLayout_5 = QtWidgets.QHBoxLayout()
self.horizontalLayout_5.setObjectName("horizontalLayout_5")
self.label_4 = QtWidgets.QLabel(self.groupBox_2)
self.label_4.setMinimumSize(QtCore.QSize(100, 0))
self.label_4.setObjectName("label_4")
self.horizontalLayout_5.addWidget(self.label_4)
self.Ampl_Edit = QtWidgets.QLineEdit(self.groupBox_2)
self.Ampl_Edit.setObjectName("Ampl_Edit")
self.horizontalLayout_5.addWidget(self.Ampl_Edit)
self.label_11 = QtWidgets.QLabel(self.groupBox_2)
self.label_11.setObjectName("label_11")
self.horizontalLayout_5.addWidget(self.label_11)
self.verticalLayout_4.addLayout(self.horizontalLayout_5)
self.horizontalLayout_6 = QtWidgets.QHBoxLayout()
self.horizontalLayout_6.setObjectName("horizontalLayout_6")
self.label_5 = QtWidgets.QLabel(self.groupBox_2)
self.label_5.setMinimumSize(QtCore.QSize(100, 0))
self.label_5.setObjectName("label_5")
self.horizontalLayout_6.addWidget(self.label_5)
self.VOLTage_Edit = QtWidgets.QLineEdit(self.groupBox_2)
self.VOLTage_Edit.setObjectName("VOLTage_Edit")
self.horizontalLayout_6.addWidget(self.VOLTage_Edit)
self.label_9 = QtWidgets.QLabel(self.groupBox_2)
self.label_9.setObjectName("label_9")
self.horizontalLayout_6.addWidget(self.label_9)
self.verticalLayout_4.addLayout(self.horizontalLayout_6)
self.horizontalLayout_7 = QtWidgets.QHBoxLayout()
self.horizontalLayout_7.setObjectName("horizontalLayout_7")
self.label_6 = QtWidgets.QLabel(self.groupBox_2)
self.label_6.setMinimumSize(QtCore.QSize(100, 0))
self.label_6.setObjectName("label_6")
self.horizontalLayout_7.addWidget(self.label_6)
self.Count_Edit = QtWidgets.QLineEdit(self.groupBox_2)
self.Count_Edit.setObjectName("Count_Edit")
self.horizontalLayout_7.addWidget(self.Count_Edit)
self.label_12 = QtWidgets.QLabel(self.groupBox_2)
self.label_12.setObjectName("label_12")
self.horizontalLayout_7.addWidget(self.label_12)
self.verticalLayout_4.addLayout(self.horizontalLayout_7)
self.horizontalLayout_2.addWidget(self.groupBox_2)
self.verticalLayout_2.addWidget(self.widget_5)
self.widget_6 = QtWidgets.QWidget(self.widget_4)
self.widget_6.setObjectName("widget_6")
self.horizontalLayout_3 = QtWidgets.QHBoxLayout(self.widget_6)
self.horizontalLayout_3.setObjectName("horizontalLayout_3")
self.tabWidget = QtWidgets.QTabWidget(self.widget_6)
self.tabWidget.setObjectName("tabWidget")
self.tab_3 = QtWidgets.QWidget()
self.tab_3.setObjectName("tab_3")
self.tabWidget.addTab(self.tab_3, "")
self.tab_6 = QtWidgets.QWidget()
self.tab_6.setObjectName("tab_6")
self.tabWidget.addTab(self.tab_6, "")
self.tab_4 = QtWidgets.QWidget()
self.tab_4.setObjectName("tab_4")
self.tabWidget.addTab(self.tab_4, "")
self.horizontalLayout_3.addWidget(self.tabWidget)
self.verticalLayout_2.addWidget(self.widget_6)
self.horizontalLayout.addWidget(self.widget_4)
self.verticalLayout.addWidget(self.widget)
self.widget_2 = QtWidgets.QWidget(self.centralwidget)
self.widget_2.setMinimumSize(QtCore.QSize(0, 80))
self.widget_2.setMaximumSize(QtCore.QSize(16777215, 80))
self.widget_2.setObjectName("widget_2")
self.label_8 = QtWidgets.QLabel(self.widget_2)
self.label_8.setGeometry(QtCore.QRect(30, 40, 71, 16))
self.label_8.setObjectName("label_8")
self.TestStatus = QtWidgets.QLabel(self.widget_2)
self.TestStatus.setGeometry(QtCore.QRect(150, 40, 54, 12))
self.TestStatus.setObjectName("TestStatus")
self.label_14 = QtWidgets.QLabel(self.widget_2)
self.label_14.setGeometry(QtCore.QRect(460, 40, 91, 16))
self.label_14.setObjectName("label_14")
self.TotalCount = QtWidgets.QLabel(self.widget_2)
self.TotalCount.setGeometry(QtCore.QRect(570, 40, 54, 12))
self.TotalCount.setObjectName("TotalCount")
self.verticalLayout.addWidget(self.widget_2)
DataNodeFrequencyTest.setCentralWidget(self.centralwidget)
self.retranslateUi(DataNodeFrequencyTest)
self.tabWidget.setCurrentIndex(0)
QtCore.QMetaObject.connectSlotsByName(DataNodeFrequencyTest)
def retranslateUi(self, DataNodeFrequencyTest):
_translate = QtCore.QCoreApplication.translate
DataNodeFrequencyTest.setWindowTitle(_translate("DataNodeFrequencyTest", "DataNodeFrequencyTest"))
self.groupBox_3.setTitle(_translate("DataNodeFrequencyTest", "GroupBox"))
self.label.setText(_translate("DataNodeFrequencyTest", " 传感器类型:"))
self.label_2.setText(_translate("DataNodeFrequencyTest", "信号发生器端口:"))
self.label_7.setText(_translate("DataNodeFrequencyTest", " 万用表端口:"))
self.ConnecDev_Btn.setText(_translate("DataNodeFrequencyTest", " 联机"))
self.NFCRead_Btn.setText(_translate("DataNodeFrequencyTest", "NFC读取"))
self.Test_Btn.setText(_translate("DataNodeFrequencyTest", "开始测试"))
self.groupBox_2.setTitle(_translate("DataNodeFrequencyTest", "实时数据"))
self.label_3.setText(_translate("DataNodeFrequencyTest", "信号发生器频率:"))
self.label_10.setText(_translate("DataNodeFrequencyTest", "Hz"))
self.label_4.setText(_translate("DataNodeFrequencyTest", "信号发生器幅值:"))
self.label_11.setText(_translate("DataNodeFrequencyTest", "mv"))
self.label_5.setText(_translate("DataNodeFrequencyTest", "万用表电压:"))
self.label_9.setText(_translate("DataNodeFrequencyTest", "mv"))
self.label_6.setText(_translate("DataNodeFrequencyTest", "今天测试个数:"))
self.label_12.setText(_translate("DataNodeFrequencyTest", ""))
self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab_3), _translate("DataNodeFrequencyTest", "Zigbee"))
self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab_6), _translate("DataNodeFrequencyTest", "NFC"))
self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab_4), _translate("DataNodeFrequencyTest", "Frequency"))
self.label_8.setText(_translate("DataNodeFrequencyTest", " 当前状态:"))
self.TestStatus.setText(_translate("DataNodeFrequencyTest", "TextLabel"))
self.label_14.setText(_translate("DataNodeFrequencyTest", "累计测试个数:"))
self.TotalCount.setText(_translate("DataNodeFrequencyTest", "TextLabel"))

View File

@ -0,0 +1,376 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>DataNodeFrequencyTest</class>
<widget class="QWidget" name="DataNodeFrequencyTest">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>803</width>
<height>660</height>
</rect>
</property>
<property name="windowTitle">
<string>DataNodeFrequencyTest</string>
</property>
<widget class="QGroupBox" name="groupBox">
<property name="geometry">
<rect>
<x>10</x>
<y>480</y>
<width>481</width>
<height>131</height>
</rect>
</property>
<property name="title">
<string>端口</string>
</property>
<widget class="QComboBox" name="multimeter_Box">
<property name="geometry">
<rect>
<x>90</x>
<y>20</y>
<width>241</width>
<height>41</height>
</rect>
</property>
</widget>
<widget class="QComboBox" name="Signal_Box">
<property name="geometry">
<rect>
<x>90</x>
<y>80</y>
<width>241</width>
<height>41</height>
</rect>
</property>
</widget>
<widget class="QLabel" name="label">
<property name="geometry">
<rect>
<x>10</x>
<y>20</y>
<width>61</width>
<height>41</height>
</rect>
</property>
<property name="text">
<string>万用表:</string>
</property>
</widget>
<widget class="QLabel" name="label_2">
<property name="geometry">
<rect>
<x>10</x>
<y>80</y>
<width>71</width>
<height>41</height>
</rect>
</property>
<property name="text">
<string>信号发生器:</string>
</property>
</widget>
<widget class="QWidget" name="layoutWidget">
<property name="geometry">
<rect>
<x>370</x>
<y>20</y>
<width>77</width>
<height>101</height>
</rect>
</property>
<layout class="QGridLayout" name="gridLayout">
<item row="5" column="0">
<widget class="QPushButton" name="NFCRead_Btn">
<property name="enabled">
<bool>false</bool>
</property>
<property name="text">
<string>NFC读取</string>
</property>
</widget>
</item>
<item row="0" column="0">
<widget class="QPushButton" name="ConnecDev_Btn">
<property name="text">
<string>联机</string>
</property>
</widget>
</item>
<item row="1" column="0">
<spacer name="verticalSpacer">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>40</height>
</size>
</property>
</spacer>
</item>
<item row="7" column="0">
<widget class="QPushButton" name="Test_Btn">
<property name="enabled">
<bool>false</bool>
</property>
<property name="text">
<string>开始测试</string>
</property>
</widget>
</item>
<item row="6" column="0">
<spacer name="verticalSpacer_2">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>40</height>
</size>
</property>
</spacer>
</item>
</layout>
</widget>
</widget>
<widget class="QGroupBox" name="groupBox_2">
<property name="geometry">
<rect>
<x>510</x>
<y>10</y>
<width>261</width>
<height>171</height>
</rect>
</property>
<property name="title">
<string>实时数据</string>
</property>
<widget class="QLabel" name="label_3">
<property name="geometry">
<rect>
<x>10</x>
<y>20</y>
<width>101</width>
<height>41</height>
</rect>
</property>
<property name="text">
<string>信号发生器频率:</string>
</property>
</widget>
<widget class="QLabel" name="label_4">
<property name="geometry">
<rect>
<x>10</x>
<y>70</y>
<width>101</width>
<height>41</height>
</rect>
</property>
<property name="text">
<string>信号发生器幅值:</string>
</property>
</widget>
<widget class="QLabel" name="label_5">
<property name="geometry">
<rect>
<x>10</x>
<y>120</y>
<width>101</width>
<height>41</height>
</rect>
</property>
<property name="text">
<string>万用表电压:</string>
</property>
</widget>
<widget class="QLineEdit" name="Frequency_Edit">
<property name="enabled">
<bool>false</bool>
</property>
<property name="geometry">
<rect>
<x>130</x>
<y>20</y>
<width>91</width>
<height>41</height>
</rect>
</property>
<property name="styleSheet">
<string notr="true">font: 28pt &quot;Agency FB&quot;;
color: rgb(0, 255, 0);</string>
</property>
</widget>
<widget class="QLineEdit" name="Ampl_Edit">
<property name="enabled">
<bool>false</bool>
</property>
<property name="geometry">
<rect>
<x>130</x>
<y>70</y>
<width>91</width>
<height>41</height>
</rect>
</property>
<property name="styleSheet">
<string notr="true">font: 28pt &quot;Agency FB&quot;;
color: rgb(0, 255, 0);</string>
</property>
</widget>
<widget class="QLineEdit" name="VOLTage_Edit">
<property name="enabled">
<bool>false</bool>
</property>
<property name="geometry">
<rect>
<x>130</x>
<y>120</y>
<width>91</width>
<height>41</height>
</rect>
</property>
<property name="styleSheet">
<string notr="true">font: 28pt &quot;Agency FB&quot;;
color: rgb(0, 255, 0);
color: rgb(85, 255, 0);</string>
</property>
</widget>
<widget class="QLabel" name="label_9">
<property name="geometry">
<rect>
<x>230</x>
<y>132</y>
<width>54</width>
<height>20</height>
</rect>
</property>
<property name="text">
<string>mv</string>
</property>
</widget>
<widget class="QLabel" name="label_10">
<property name="geometry">
<rect>
<x>230</x>
<y>30</y>
<width>54</width>
<height>20</height>
</rect>
</property>
<property name="text">
<string>Hz</string>
</property>
</widget>
<widget class="QLabel" name="label_11">
<property name="geometry">
<rect>
<x>230</x>
<y>80</y>
<width>54</width>
<height>20</height>
</rect>
</property>
<property name="text">
<string>mv</string>
</property>
</widget>
</widget>
<widget class="QGroupBox" name="groupBox_3">
<property name="geometry">
<rect>
<x>10</x>
<y>10</y>
<width>481</width>
<height>311</height>
</rect>
</property>
<property name="title">
<string>频响曲线</string>
</property>
</widget>
<widget class="QTabWidget" name="tabWidget">
<property name="geometry">
<rect>
<x>510</x>
<y>200</y>
<width>271</width>
<height>411</height>
</rect>
</property>
<property name="currentIndex">
<number>1</number>
</property>
<property name="tabBarAutoHide">
<bool>false</bool>
</property>
<widget class="QWidget" name="tab">
<attribute name="title">
<string>NFC</string>
</attribute>
<widget class="QTextEdit" name="NFC_textEdit">
<property name="geometry">
<rect>
<x>10</x>
<y>10</y>
<width>241</width>
<height>371</height>
</rect>
</property>
</widget>
</widget>
<widget class="QWidget" name="tab_2">
<attribute name="title">
<string>ZigBee</string>
</attribute>
<widget class="QTextEdit" name="ZigBee_textEdit">
<property name="geometry">
<rect>
<x>10</x>
<y>10</y>
<width>241</width>
<height>371</height>
</rect>
</property>
</widget>
</widget>
<widget class="QWidget" name="tab_5">
<attribute name="title">
<string> 频点</string>
</attribute>
</widget>
</widget>
<widget class="QTextEdit" name="Result_edit">
<property name="geometry">
<rect>
<x>10</x>
<y>340</y>
<width>481</width>
<height>121</height>
</rect>
</property>
</widget>
<widget class="QLabel" name="TestStatus">
<property name="geometry">
<rect>
<x>270</x>
<y>620</y>
<width>221</width>
<height>31</height>
</rect>
</property>
<property name="styleSheet">
<string notr="true">font: 28pt &quot;Agency FB&quot;;</string>
</property>
<property name="text">
<string/>
</property>
</widget>
</widget>
<resources/>
<connections/>
</ui>

View File

@ -0,0 +1,376 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>DataNodeFrequencyTest</class>
<widget class="QWidget" name="DataNodeFrequencyTest">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>803</width>
<height>660</height>
</rect>
</property>
<property name="windowTitle">
<string>DataNodeFrequencyTest</string>
</property>
<widget class="QGroupBox" name="groupBox">
<property name="geometry">
<rect>
<x>10</x>
<y>480</y>
<width>481</width>
<height>131</height>
</rect>
</property>
<property name="title">
<string>端口</string>
</property>
<widget class="QComboBox" name="multimeter_Box">
<property name="geometry">
<rect>
<x>90</x>
<y>20</y>
<width>241</width>
<height>41</height>
</rect>
</property>
</widget>
<widget class="QComboBox" name="Signal_Box">
<property name="geometry">
<rect>
<x>90</x>
<y>80</y>
<width>241</width>
<height>41</height>
</rect>
</property>
</widget>
<widget class="QLabel" name="label">
<property name="geometry">
<rect>
<x>10</x>
<y>20</y>
<width>61</width>
<height>41</height>
</rect>
</property>
<property name="text">
<string>万用表:</string>
</property>
</widget>
<widget class="QLabel" name="label_2">
<property name="geometry">
<rect>
<x>10</x>
<y>80</y>
<width>71</width>
<height>41</height>
</rect>
</property>
<property name="text">
<string>信号发生器:</string>
</property>
</widget>
<widget class="QWidget" name="layoutWidget">
<property name="geometry">
<rect>
<x>370</x>
<y>20</y>
<width>77</width>
<height>101</height>
</rect>
</property>
<layout class="QGridLayout" name="gridLayout">
<item row="5" column="0">
<widget class="QPushButton" name="NFCRead_Btn">
<property name="enabled">
<bool>false</bool>
</property>
<property name="text">
<string>NFC读取</string>
</property>
</widget>
</item>
<item row="0" column="0">
<widget class="QPushButton" name="ConnecDev_Btn">
<property name="text">
<string>联机</string>
</property>
</widget>
</item>
<item row="1" column="0">
<spacer name="verticalSpacer">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>40</height>
</size>
</property>
</spacer>
</item>
<item row="7" column="0">
<widget class="QPushButton" name="Test_Btn">
<property name="enabled">
<bool>false</bool>
</property>
<property name="text">
<string>开始测试</string>
</property>
</widget>
</item>
<item row="6" column="0">
<spacer name="verticalSpacer_2">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>40</height>
</size>
</property>
</spacer>
</item>
</layout>
</widget>
</widget>
<widget class="QGroupBox" name="groupBox_2">
<property name="geometry">
<rect>
<x>510</x>
<y>10</y>
<width>261</width>
<height>171</height>
</rect>
</property>
<property name="title">
<string>实时数据</string>
</property>
<widget class="QLabel" name="label_3">
<property name="geometry">
<rect>
<x>10</x>
<y>20</y>
<width>101</width>
<height>41</height>
</rect>
</property>
<property name="text">
<string>信号发生器频率:</string>
</property>
</widget>
<widget class="QLabel" name="label_4">
<property name="geometry">
<rect>
<x>10</x>
<y>70</y>
<width>101</width>
<height>41</height>
</rect>
</property>
<property name="text">
<string>信号发生器幅值:</string>
</property>
</widget>
<widget class="QLabel" name="label_5">
<property name="geometry">
<rect>
<x>10</x>
<y>120</y>
<width>101</width>
<height>41</height>
</rect>
</property>
<property name="text">
<string>万用表电压:</string>
</property>
</widget>
<widget class="QLineEdit" name="Frequency_Edit">
<property name="enabled">
<bool>false</bool>
</property>
<property name="geometry">
<rect>
<x>130</x>
<y>20</y>
<width>91</width>
<height>41</height>
</rect>
</property>
<property name="styleSheet">
<string notr="true">font: 28pt &quot;Agency FB&quot;;
color: rgb(0, 255, 0);</string>
</property>
</widget>
<widget class="QLineEdit" name="Ampl_Edit">
<property name="enabled">
<bool>false</bool>
</property>
<property name="geometry">
<rect>
<x>130</x>
<y>70</y>
<width>91</width>
<height>41</height>
</rect>
</property>
<property name="styleSheet">
<string notr="true">font: 28pt &quot;Agency FB&quot;;
color: rgb(0, 255, 0);</string>
</property>
</widget>
<widget class="QLineEdit" name="VOLTage_Edit">
<property name="enabled">
<bool>false</bool>
</property>
<property name="geometry">
<rect>
<x>130</x>
<y>120</y>
<width>91</width>
<height>41</height>
</rect>
</property>
<property name="styleSheet">
<string notr="true">font: 28pt &quot;Agency FB&quot;;
color: rgb(0, 255, 0);
color: rgb(85, 255, 0);</string>
</property>
</widget>
<widget class="QLabel" name="label_9">
<property name="geometry">
<rect>
<x>230</x>
<y>132</y>
<width>54</width>
<height>20</height>
</rect>
</property>
<property name="text">
<string>mv</string>
</property>
</widget>
<widget class="QLabel" name="label_10">
<property name="geometry">
<rect>
<x>230</x>
<y>30</y>
<width>54</width>
<height>20</height>
</rect>
</property>
<property name="text">
<string>Hz</string>
</property>
</widget>
<widget class="QLabel" name="label_11">
<property name="geometry">
<rect>
<x>230</x>
<y>80</y>
<width>54</width>
<height>20</height>
</rect>
</property>
<property name="text">
<string>mv</string>
</property>
</widget>
</widget>
<widget class="QGroupBox" name="groupBox_3">
<property name="geometry">
<rect>
<x>10</x>
<y>10</y>
<width>481</width>
<height>311</height>
</rect>
</property>
<property name="title">
<string>频响曲线</string>
</property>
</widget>
<widget class="QTabWidget" name="tabWidget">
<property name="geometry">
<rect>
<x>510</x>
<y>200</y>
<width>271</width>
<height>411</height>
</rect>
</property>
<property name="currentIndex">
<number>1</number>
</property>
<property name="tabBarAutoHide">
<bool>false</bool>
</property>
<widget class="QWidget" name="tab">
<attribute name="title">
<string>NFC</string>
</attribute>
<widget class="QTextEdit" name="NFC_textEdit">
<property name="geometry">
<rect>
<x>10</x>
<y>10</y>
<width>241</width>
<height>371</height>
</rect>
</property>
</widget>
</widget>
<widget class="QWidget" name="tab_2">
<attribute name="title">
<string>ZigBee</string>
</attribute>
<widget class="QTextEdit" name="ZigBee_textEdit">
<property name="geometry">
<rect>
<x>10</x>
<y>10</y>
<width>241</width>
<height>371</height>
</rect>
</property>
</widget>
</widget>
<widget class="QWidget" name="tab_5">
<attribute name="title">
<string> 频点</string>
</attribute>
</widget>
</widget>
<widget class="QTextEdit" name="Result_edit">
<property name="geometry">
<rect>
<x>10</x>
<y>340</y>
<width>481</width>
<height>121</height>
</rect>
</property>
</widget>
<widget class="QLabel" name="TestStatus">
<property name="geometry">
<rect>
<x>270</x>
<y>620</y>
<width>221</width>
<height>31</height>
</rect>
</property>
<property name="styleSheet">
<string notr="true">font: 28pt &quot;Agency FB&quot;;</string>
</property>
<property name="text">
<string/>
</property>
</widget>
</widget>
<resources/>
<connections/>
</ui>

View File

@ -0,0 +1,29 @@
# This Python file uses the following encoding: utf-8
import os
from pathlib import Path
import sys
from PySide2.QtWidgets import QApplication, QWidget
from PySide2.QtCore import QFile
from PySide2.QtUiTools import QUiLoader
class DataNodeFrequencyTest(QWidget):
def __init__(self):
super(DataNodeFrequencyTest, self).__init__()
self.load_ui()
def load_ui(self):
loader = QUiLoader()
path = os.fspath(Path(__file__).resolve().parent / "form.ui")
ui_file = QFile(path)
ui_file.open(QFile.ReadOnly)
loader.load(ui_file, self)
ui_file.close()
if __name__ == "__main__":
app = QApplication([])
widget = DataNodeFrequencyTest()
widget.show()
sys.exit(app.exec_())

View File

@ -0,0 +1,3 @@
{
"files": ["main.py", "form.ui"]
}

View File

@ -0,0 +1,204 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE QtCreatorProject>
<!-- Written by QtCreator 4.15.0, 2022-05-26T09:27:12. -->
<qtcreator>
<data>
<variable>EnvironmentId</variable>
<value type="QByteArray">{168666bd-c3a3-4089-8a9e-043b6ddc15f8}</value>
</data>
<data>
<variable>ProjectExplorer.Project.ActiveTarget</variable>
<value type="int">0</value>
</data>
<data>
<variable>ProjectExplorer.Project.EditorSettings</variable>
<valuemap type="QVariantMap">
<value type="bool" key="EditorConfiguration.AutoIndent">true</value>
<value type="bool" key="EditorConfiguration.AutoSpacesForTabs">false</value>
<value type="bool" key="EditorConfiguration.CamelCaseNavigation">true</value>
<valuemap type="QVariantMap" key="EditorConfiguration.CodeStyle.0">
<value type="QString" key="language">Cpp</value>
<valuemap type="QVariantMap" key="value">
<value type="QByteArray" key="CurrentPreferences">CppGlobal</value>
</valuemap>
</valuemap>
<valuemap type="QVariantMap" key="EditorConfiguration.CodeStyle.1">
<value type="QString" key="language">QmlJS</value>
<valuemap type="QVariantMap" key="value">
<value type="QByteArray" key="CurrentPreferences">QmlJSGlobal</value>
</valuemap>
</valuemap>
<value type="int" key="EditorConfiguration.CodeStyle.Count">2</value>
<value type="QByteArray" key="EditorConfiguration.Codec">UTF-8</value>
<value type="bool" key="EditorConfiguration.ConstrainTooltips">false</value>
<value type="int" key="EditorConfiguration.IndentSize">4</value>
<value type="bool" key="EditorConfiguration.KeyboardTooltips">false</value>
<value type="int" key="EditorConfiguration.MarginColumn">80</value>
<value type="bool" key="EditorConfiguration.MouseHiding">true</value>
<value type="bool" key="EditorConfiguration.MouseNavigation">true</value>
<value type="int" key="EditorConfiguration.PaddingMode">1</value>
<value type="bool" key="EditorConfiguration.PreferSingleLineComments">false</value>
<value type="bool" key="EditorConfiguration.ScrollWheelZooming">true</value>
<value type="bool" key="EditorConfiguration.ShowMargin">false</value>
<value type="int" key="EditorConfiguration.SmartBackspaceBehavior">0</value>
<value type="bool" key="EditorConfiguration.SmartSelectionChanging">true</value>
<value type="bool" key="EditorConfiguration.SpacesForTabs">true</value>
<value type="int" key="EditorConfiguration.TabKeyBehavior">0</value>
<value type="int" key="EditorConfiguration.TabSize">8</value>
<value type="bool" key="EditorConfiguration.UseGlobal">true</value>
<value type="bool" key="EditorConfiguration.UseIndenter">false</value>
<value type="int" key="EditorConfiguration.Utf8BomBehavior">1</value>
<value type="bool" key="EditorConfiguration.addFinalNewLine">true</value>
<value type="bool" key="EditorConfiguration.cleanIndentation">true</value>
<value type="bool" key="EditorConfiguration.cleanWhitespace">true</value>
<value type="QString" key="EditorConfiguration.ignoreFileTypes">*.md, *.MD, Makefile</value>
<value type="bool" key="EditorConfiguration.inEntireDocument">false</value>
<value type="bool" key="EditorConfiguration.skipTrailingWhitespace">true</value>
</valuemap>
</data>
<data>
<variable>ProjectExplorer.Project.PluginSettings</variable>
<valuemap type="QVariantMap">
<valuemap type="QVariantMap" key="AutoTest.ActiveFrameworks">
<value type="bool" key="AutoTest.Framework.Boost">true</value>
<value type="bool" key="AutoTest.Framework.CTest">false</value>
<value type="bool" key="AutoTest.Framework.Catch">true</value>
<value type="bool" key="AutoTest.Framework.GTest">true</value>
<value type="bool" key="AutoTest.Framework.QtQuickTest">true</value>
<value type="bool" key="AutoTest.Framework.QtTest">true</value>
</valuemap>
<valuemap type="QVariantMap" key="AutoTest.CheckStates"/>
<value type="int" key="AutoTest.RunAfterBuild">0</value>
<value type="bool" key="AutoTest.UseGlobal">true</value>
<valuelist type="QVariantList" key="ClangCodeModel.CustomCommandLineKey">
<value type="QString">-fno-delayed-template-parsing</value>
</valuelist>
<value type="bool" key="ClangCodeModel.UseGlobalConfig">true</value>
<value type="QString" key="ClangCodeModel.WarningConfigId">Builtin.BuildSystem</value>
<valuemap type="QVariantMap" key="ClangTools">
<value type="bool" key="ClangTools.AnalyzeOpenFiles">true</value>
<value type="bool" key="ClangTools.BuildBeforeAnalysis">true</value>
<value type="QString" key="ClangTools.DiagnosticConfig">Builtin.DefaultTidyAndClazy</value>
<value type="int" key="ClangTools.ParallelJobs">3</value>
<valuelist type="QVariantList" key="ClangTools.SelectedDirs"/>
<valuelist type="QVariantList" key="ClangTools.SelectedFiles"/>
<valuelist type="QVariantList" key="ClangTools.SuppressedDiagnostics"/>
<value type="bool" key="ClangTools.UseGlobalSettings">true</value>
</valuemap>
</valuemap>
</data>
<data>
<variable>ProjectExplorer.Project.Target.0</variable>
<valuemap type="QVariantMap">
<value type="QString" key="DeviceType">Desktop</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Desktop (x86-windows-msvc2019-pe-32bit)</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Desktop (x86-windows-msvc2019-pe-32bit)</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">{fa19fc04-f534-43b3-9bf0-1e4de7e3a94a}</value>
<value type="int" key="ProjectExplorer.Target.ActiveBuildConfiguration">-1</value>
<value type="int" key="ProjectExplorer.Target.ActiveDeployConfiguration">0</value>
<value type="int" key="ProjectExplorer.Target.ActiveRunConfiguration">0</value>
<value type="int" key="ProjectExplorer.Target.BuildConfigurationCount">0</value>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.DeployConfiguration.0">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">0</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Deploy</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Deploy</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Deploy</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">1</value>
<valuemap type="QVariantMap" key="ProjectExplorer.DeployConfiguration.CustomData"/>
<value type="bool" key="ProjectExplorer.DeployConfiguration.CustomDataEnabled">false</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.DefaultDeployConfiguration</value>
</valuemap>
<value type="int" key="ProjectExplorer.Target.DeployConfigurationCount">1</value>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.RunConfiguration.0">
<value type="QString" key="Analyzer.Perf.CallgraphMode">dwarf</value>
<valuelist type="QVariantList" key="Analyzer.Perf.Events">
<value type="QString">cpu-cycles</value>
</valuelist>
<valuelist type="QVariantList" key="Analyzer.Perf.ExtraArguments"/>
<value type="int" key="Analyzer.Perf.Frequency">250</value>
<valuelist type="QVariantList" key="Analyzer.Perf.RecordArguments">
<value type="QString">-e</value>
<value type="QString">cpu-cycles</value>
<value type="QString">--call-graph</value>
<value type="QString">dwarf,4096</value>
<value type="QString">-F</value>
<value type="QString">250</value>
</valuelist>
<value type="QString" key="Analyzer.Perf.SampleMode">-F</value>
<value type="bool" key="Analyzer.Perf.Settings.UseGlobalSettings">true</value>
<value type="int" key="Analyzer.Perf.StackSize">4096</value>
<value type="bool" key="Analyzer.QmlProfiler.AggregateTraces">false</value>
<value type="bool" key="Analyzer.QmlProfiler.FlushEnabled">false</value>
<value type="uint" key="Analyzer.QmlProfiler.FlushInterval">1000</value>
<value type="QString" key="Analyzer.QmlProfiler.LastTraceFile"></value>
<value type="bool" key="Analyzer.QmlProfiler.Settings.UseGlobalSettings">true</value>
<valuelist type="QVariantList" key="Analyzer.Valgrind.AddedSuppressionFiles"/>
<value type="QString" key="Analyzer.Valgrind.Callgrind.Arguments"></value>
<value type="bool" key="Analyzer.Valgrind.Callgrind.CollectBusEvents">false</value>
<value type="bool" key="Analyzer.Valgrind.Callgrind.CollectSystime">false</value>
<value type="bool" key="Analyzer.Valgrind.Callgrind.EnableBranchSim">false</value>
<value type="bool" key="Analyzer.Valgrind.Callgrind.EnableCacheSim">false</value>
<value type="bool" key="Analyzer.Valgrind.Callgrind.EnableEventToolTips">true</value>
<value type="double" key="Analyzer.Valgrind.Callgrind.MinimumCostRatio">0.01</value>
<value type="double" key="Analyzer.Valgrind.Callgrind.VisualisationMinimumCostRatio">10</value>
<value type="bool" key="Analyzer.Valgrind.FilterExternalIssues">true</value>
<value type="QString" key="Analyzer.Valgrind.KCachegrindExecutable">kcachegrind</value>
<value type="int" key="Analyzer.Valgrind.LeakCheckOnFinish">1</value>
<value type="QString" key="Analyzer.Valgrind.Memcheck.Arguments"></value>
<value type="int" key="Analyzer.Valgrind.NumCallers">25</value>
<valuelist type="QVariantList" key="Analyzer.Valgrind.RemovedSuppressionFiles"/>
<value type="int" key="Analyzer.Valgrind.SelfModifyingCodeDetection">1</value>
<value type="bool" key="Analyzer.Valgrind.Settings.UseGlobalSettings">true</value>
<value type="bool" key="Analyzer.Valgrind.ShowReachable">false</value>
<value type="bool" key="Analyzer.Valgrind.TrackOrigins">true</value>
<value type="QString" key="Analyzer.Valgrind.ValgrindArguments"></value>
<value type="QString" key="Analyzer.Valgrind.ValgrindExecutable">valgrind</value>
<valuelist type="QVariantList" key="Analyzer.Valgrind.VisibleErrorKinds">
<value type="int">0</value>
<value type="int">1</value>
<value type="int">2</value>
<value type="int">3</value>
<value type="int">4</value>
<value type="int">5</value>
<value type="int">6</value>
<value type="int">7</value>
<value type="int">8</value>
<value type="int">9</value>
<value type="int">10</value>
<value type="int">11</value>
<value type="int">12</value>
<value type="int">13</value>
<value type="int">14</value>
</valuelist>
<valuelist type="QVariantList" key="CustomOutputParsers"/>
<value type="int" key="PE.EnvironmentAspect.Base">2</value>
<valuelist type="QVariantList" key="PE.EnvironmentAspect.Changes"/>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">E:/WorkSpace/测试工具/chaos/频响测试/DataNodeFrequencyTest/main.py</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">PythonEditor.RunConfiguration.E:/WorkSpace/测试工具/chaos/频响测试/DataNodeFrequencyTest/main.py</value>
<value type="QString" key="ProjectExplorer.RunConfiguration.BuildKey">E:/WorkSpace/测试工具/chaos/频响测试/DataNodeFrequencyTest/main.py</value>
<value type="QString" key="PythonEditor.RunConfiguation.Interpreter">{d245bd83-529a-4496-be6d-3c8c4bcbfa45}</value>
<value type="QString" key="PythonEditor.RunConfiguation.Script">E:\WorkSpace\测试工具\chaos\频响测试\DataNodeFrequencyTest\main.py</value>
<value type="bool" key="RunConfiguration.UseCppDebugger">false</value>
<value type="bool" key="RunConfiguration.UseCppDebuggerAuto">true</value>
<value type="bool" key="RunConfiguration.UseQmlDebugger">false</value>
<value type="bool" key="RunConfiguration.UseQmlDebuggerAuto">true</value>
<value type="QString" key="RunConfiguration.WorkingDirectory.default">E:/WorkSpace/测试工具/chaos/频响测试/DataNodeFrequencyTest</value>
</valuemap>
<value type="int" key="ProjectExplorer.Target.RunConfigurationCount">1</value>
</valuemap>
</data>
<data>
<variable>ProjectExplorer.Project.TargetCount</variable>
<value type="int">1</value>
</data>
<data>
<variable>ProjectExplorer.Project.Updater.FileVersion</variable>
<value type="int">22</value>
</data>
<data>
<variable>Version</variable>
<value type="int">22</value>
</data>
</qtcreator>

View File

@ -0,0 +1,11 @@
#include "mainwindow.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
w.show();
return a.exec();
}

View File

@ -0,0 +1,15 @@
#include "mainwindow.h"
#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
}
MainWindow::~MainWindow()
{
delete ui;
}

View File

@ -0,0 +1,21 @@
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = nullptr);
~MainWindow();
private:
Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H

View File

@ -0,0 +1,301 @@
# -*- coding: utf-8 -*-
# Form implementation generated from reading ui file 'mainwindow.ui'
#
# Created by: PyQt5 UI code generator 5.15.6
#
# WARNING: Any manual changes made to this file will be lost when pyuic5 is
# run again. Do not edit this file unless you know what you are doing.
from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_DataNodeFrequencyTest(object):
def setupUi(self, DataNodeFrequencyTest):
DataNodeFrequencyTest.setObjectName("DataNodeFrequencyTest")
DataNodeFrequencyTest.resize(850, 600)
self.centralwidget = QtWidgets.QWidget(DataNodeFrequencyTest)
self.centralwidget.setObjectName("centralwidget")
self.verticalLayout = QtWidgets.QVBoxLayout(self.centralwidget)
self.verticalLayout.setObjectName("verticalLayout")
self.widget = QtWidgets.QWidget(self.centralwidget)
self.widget.setObjectName("widget")
self.horizontalLayout = QtWidgets.QHBoxLayout(self.widget)
self.horizontalLayout.setObjectName("horizontalLayout")
self.widget_3 = QtWidgets.QWidget(self.widget)
self.widget_3.setMinimumSize(QtCore.QSize(500, 0))
self.widget_3.setObjectName("widget_3")
self.verticalLayout_3 = QtWidgets.QVBoxLayout(self.widget_3)
self.verticalLayout_3.setObjectName("verticalLayout_3")
self.widget_7 = QtWidgets.QWidget(self.widget_3)
self.widget_7.setMinimumSize(QtCore.QSize(0, 300))
self.widget_7.setObjectName("widget_7")
self.horizontalLayout_8 = QtWidgets.QHBoxLayout(self.widget_7)
self.horizontalLayout_8.setObjectName("horizontalLayout_8")
self.groupBox_3 = QtWidgets.QGroupBox(self.widget_7)
self.groupBox_3.setObjectName("groupBox_3")
self.horizontalLayout_8.addWidget(self.groupBox_3)
self.verticalLayout_3.addWidget(self.widget_7)
self.widget_9 = QtWidgets.QWidget(self.widget_3)
self.widget_9.setMinimumSize(QtCore.QSize(120, 0))
self.widget_9.setObjectName("widget_9")
self.horizontalLayout_12 = QtWidgets.QHBoxLayout(self.widget_9)
self.horizontalLayout_12.setObjectName("horizontalLayout_12")
self.verticalLayout_4 = QtWidgets.QVBoxLayout()
self.verticalLayout_4.setObjectName("verticalLayout_4")
self.horizontalLayout_11 = QtWidgets.QHBoxLayout()
self.horizontalLayout_11.setObjectName("horizontalLayout_11")
self.label = QtWidgets.QLabel(self.widget_9)
self.label.setMinimumSize(QtCore.QSize(100, 0))
self.label.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter)
self.label.setObjectName("label")
self.horizontalLayout_11.addWidget(self.label)
self.sensorType_Box = QtWidgets.QComboBox(self.widget_9)
self.sensorType_Box.setMinimumSize(QtCore.QSize(220, 0))
self.sensorType_Box.setMaximumSize(QtCore.QSize(220, 16777215))
self.sensorType_Box.setObjectName("sensorType_Box")
self.horizontalLayout_11.addWidget(self.sensorType_Box)
self.verticalLayout_4.addLayout(self.horizontalLayout_11)
self.horizontalLayout_10 = QtWidgets.QHBoxLayout()
self.horizontalLayout_10.setObjectName("horizontalLayout_10")
self.label_7 = QtWidgets.QLabel(self.widget_9)
self.label_7.setMinimumSize(QtCore.QSize(120, 0))
self.label_7.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter)
self.label_7.setObjectName("label_7")
self.horizontalLayout_10.addWidget(self.label_7)
self.multimeter_Box = QtWidgets.QComboBox(self.widget_9)
self.multimeter_Box.setMinimumSize(QtCore.QSize(220, 0))
self.multimeter_Box.setMaximumSize(QtCore.QSize(220, 16777215))
self.multimeter_Box.setObjectName("multimeter_Box")
self.horizontalLayout_10.addWidget(self.multimeter_Box)
self.verticalLayout_4.addLayout(self.horizontalLayout_10)
self.horizontalLayout_9 = QtWidgets.QHBoxLayout()
self.horizontalLayout_9.setObjectName("horizontalLayout_9")
self.label_2 = QtWidgets.QLabel(self.widget_9)
self.label_2.setMinimumSize(QtCore.QSize(120, 0))
self.label_2.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter)
self.label_2.setObjectName("label_2")
self.horizontalLayout_9.addWidget(self.label_2)
self.Signal_Edit = QtWidgets.QLineEdit(self.widget_9)
self.Signal_Edit.setMinimumSize(QtCore.QSize(220, 0))
self.Signal_Edit.setMaximumSize(QtCore.QSize(220, 16777215))
self.Signal_Edit.setObjectName("Signal_Edit")
self.horizontalLayout_9.addWidget(self.Signal_Edit)
self.verticalLayout_4.addLayout(self.horizontalLayout_9)
self.horizontalLayout_12.addLayout(self.verticalLayout_4)
spacerItem = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
self.horizontalLayout_12.addItem(spacerItem)
self.verticalLayout_6 = QtWidgets.QVBoxLayout()
self.verticalLayout_6.setObjectName("verticalLayout_6")
self.ConnecDev_Btn = QtWidgets.QPushButton(self.widget_9)
self.ConnecDev_Btn.setObjectName("ConnecDev_Btn")
self.verticalLayout_6.addWidget(self.ConnecDev_Btn)
self.NFCRead_Btn = QtWidgets.QPushButton(self.widget_9)
self.NFCRead_Btn.setEnabled(False)
self.NFCRead_Btn.setObjectName("NFCRead_Btn")
self.verticalLayout_6.addWidget(self.NFCRead_Btn)
self.Test_Btn = QtWidgets.QPushButton(self.widget_9)
self.Test_Btn.setEnabled(False)
self.Test_Btn.setObjectName("Test_Btn")
self.verticalLayout_6.addWidget(self.Test_Btn)
self.horizontalLayout_12.addLayout(self.verticalLayout_6)
self.verticalLayout_3.addWidget(self.widget_9)
self.horizontalLayout.addWidget(self.widget_3)
self.widget_4 = QtWidgets.QWidget(self.widget)
self.widget_4.setObjectName("widget_4")
self.verticalLayout_2 = QtWidgets.QVBoxLayout(self.widget_4)
self.verticalLayout_2.setObjectName("verticalLayout_2")
self.widget_5 = QtWidgets.QWidget(self.widget_4)
self.widget_5.setMinimumSize(QtCore.QSize(300, 240))
self.widget_5.setObjectName("widget_5")
self.horizontalLayout_2 = QtWidgets.QHBoxLayout(self.widget_5)
self.horizontalLayout_2.setObjectName("horizontalLayout_2")
self.groupBox_2 = QtWidgets.QGroupBox(self.widget_5)
self.groupBox_2.setObjectName("groupBox_2")
self.widget1 = QtWidgets.QWidget(self.groupBox_2)
self.widget1.setGeometry(QtCore.QRect(10, 22, 259, 32))
self.widget1.setObjectName("widget1")
self.horizontalLayout_4 = QtWidgets.QHBoxLayout(self.widget1)
self.horizontalLayout_4.setContentsMargins(0, 0, 0, 0)
self.horizontalLayout_4.setObjectName("horizontalLayout_4")
self.label_3 = QtWidgets.QLabel(self.widget1)
self.label_3.setMinimumSize(QtCore.QSize(100, 0))
self.label_3.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter)
self.label_3.setObjectName("label_3")
self.horizontalLayout_4.addWidget(self.label_3)
self.Frequency_Edit = QtWidgets.QLineEdit(self.widget1)
self.Frequency_Edit.setEnabled(False)
self.Frequency_Edit.setMinimumSize(QtCore.QSize(0, 30))
self.Frequency_Edit.setStyleSheet("font: 75 20pt \"微软雅黑\";\n"
"color: rgb(255, 170, 0);")
self.Frequency_Edit.setObjectName("Frequency_Edit")
self.horizontalLayout_4.addWidget(self.Frequency_Edit)
self.label_10 = QtWidgets.QLabel(self.widget1)
self.label_10.setObjectName("label_10")
self.horizontalLayout_4.addWidget(self.label_10)
self.widget2 = QtWidgets.QWidget(self.groupBox_2)
self.widget2.setGeometry(QtCore.QRect(10, 71, 259, 32))
self.widget2.setObjectName("widget2")
self.horizontalLayout_5 = QtWidgets.QHBoxLayout(self.widget2)
self.horizontalLayout_5.setContentsMargins(0, 0, 0, 0)
self.horizontalLayout_5.setObjectName("horizontalLayout_5")
self.label_4 = QtWidgets.QLabel(self.widget2)
self.label_4.setMinimumSize(QtCore.QSize(100, 0))
self.label_4.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter)
self.label_4.setObjectName("label_4")
self.horizontalLayout_5.addWidget(self.label_4)
self.Ampl_Edit = QtWidgets.QLineEdit(self.widget2)
self.Ampl_Edit.setEnabled(False)
self.Ampl_Edit.setMinimumSize(QtCore.QSize(0, 30))
self.Ampl_Edit.setStyleSheet("font: 75 20pt \"微软雅黑\";\n"
"color: rgb(255, 170, 0);")
self.Ampl_Edit.setObjectName("Ampl_Edit")
self.horizontalLayout_5.addWidget(self.Ampl_Edit)
self.label_11 = QtWidgets.QLabel(self.widget2)
self.label_11.setObjectName("label_11")
self.horizontalLayout_5.addWidget(self.label_11)
self.widget3 = QtWidgets.QWidget(self.groupBox_2)
self.widget3.setGeometry(QtCore.QRect(10, 120, 259, 32))
self.widget3.setObjectName("widget3")
self.horizontalLayout_6 = QtWidgets.QHBoxLayout(self.widget3)
self.horizontalLayout_6.setContentsMargins(0, 0, 0, 0)
self.horizontalLayout_6.setObjectName("horizontalLayout_6")
self.label_5 = QtWidgets.QLabel(self.widget3)
self.label_5.setMinimumSize(QtCore.QSize(100, 0))
self.label_5.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter)
self.label_5.setObjectName("label_5")
self.horizontalLayout_6.addWidget(self.label_5)
self.VOLTage_Edit = QtWidgets.QLineEdit(self.widget3)
self.VOLTage_Edit.setEnabled(False)
self.VOLTage_Edit.setMinimumSize(QtCore.QSize(0, 30))
self.VOLTage_Edit.setStyleSheet("font: 75 20pt \"微软雅黑\";\n"
"color: rgb(255, 170, 0);")
self.VOLTage_Edit.setObjectName("VOLTage_Edit")
self.horizontalLayout_6.addWidget(self.VOLTage_Edit)
self.label_9 = QtWidgets.QLabel(self.widget3)
self.label_9.setObjectName("label_9")
self.horizontalLayout_6.addWidget(self.label_9)
self.widget4 = QtWidgets.QWidget(self.groupBox_2)
self.widget4.setGeometry(QtCore.QRect(10, 169, 259, 32))
self.widget4.setObjectName("widget4")
self.horizontalLayout_7 = QtWidgets.QHBoxLayout(self.widget4)
self.horizontalLayout_7.setContentsMargins(0, 0, 0, 0)
self.horizontalLayout_7.setObjectName("horizontalLayout_7")
self.label_6 = QtWidgets.QLabel(self.widget4)
self.label_6.setMinimumSize(QtCore.QSize(100, 0))
self.label_6.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter)
self.label_6.setObjectName("label_6")
self.horizontalLayout_7.addWidget(self.label_6)
self.Count_Edit = QtWidgets.QLineEdit(self.widget4)
self.Count_Edit.setEnabled(False)
self.Count_Edit.setMinimumSize(QtCore.QSize(0, 30))
self.Count_Edit.setStyleSheet("font: 75 20pt \"微软雅黑\";\n"
"color: rgb(255, 170, 0);")
self.Count_Edit.setObjectName("Count_Edit")
self.horizontalLayout_7.addWidget(self.Count_Edit)
self.label_12 = QtWidgets.QLabel(self.widget4)
self.label_12.setObjectName("label_12")
self.horizontalLayout_7.addWidget(self.label_12)
self.horizontalLayout_2.addWidget(self.groupBox_2)
self.verticalLayout_2.addWidget(self.widget_5)
self.widget_6 = QtWidgets.QWidget(self.widget_4)
self.widget_6.setObjectName("widget_6")
self.horizontalLayout_3 = QtWidgets.QHBoxLayout(self.widget_6)
self.horizontalLayout_3.setObjectName("horizontalLayout_3")
self.tabWidget = QtWidgets.QTabWidget(self.widget_6)
self.tabWidget.setObjectName("tabWidget")
self.tab_3 = QtWidgets.QWidget()
self.tab_3.setObjectName("tab_3")
self.horizontalLayout_15 = QtWidgets.QHBoxLayout(self.tab_3)
self.horizontalLayout_15.setObjectName("horizontalLayout_15")
self.ZigBee_Edit = QtWidgets.QTextEdit(self.tab_3)
self.ZigBee_Edit.setObjectName("ZigBee_Edit")
self.horizontalLayout_15.addWidget(self.ZigBee_Edit)
self.tabWidget.addTab(self.tab_3, "")
self.tab_6 = QtWidgets.QWidget()
self.tab_6.setObjectName("tab_6")
self.horizontalLayout_16 = QtWidgets.QHBoxLayout(self.tab_6)
self.horizontalLayout_16.setObjectName("horizontalLayout_16")
self.NFC_Edit = QtWidgets.QTextEdit(self.tab_6)
self.NFC_Edit.setObjectName("NFC_Edit")
self.horizontalLayout_16.addWidget(self.NFC_Edit)
self.tabWidget.addTab(self.tab_6, "")
self.tab_4 = QtWidgets.QWidget()
self.tab_4.setObjectName("tab_4")
self.tabWidget.addTab(self.tab_4, "")
self.horizontalLayout_3.addWidget(self.tabWidget)
self.verticalLayout_2.addWidget(self.widget_6)
self.horizontalLayout.addWidget(self.widget_4)
self.verticalLayout.addWidget(self.widget)
self.widget_2 = QtWidgets.QWidget(self.centralwidget)
self.widget_2.setMinimumSize(QtCore.QSize(0, 80))
self.widget_2.setMaximumSize(QtCore.QSize(16777215, 80))
self.widget_2.setObjectName("widget_2")
self.horizontalLayout_17 = QtWidgets.QHBoxLayout(self.widget_2)
self.horizontalLayout_17.setObjectName("horizontalLayout_17")
self.horizontalLayout_13 = QtWidgets.QHBoxLayout()
self.horizontalLayout_13.setObjectName("horizontalLayout_13")
self.label_8 = QtWidgets.QLabel(self.widget_2)
self.label_8.setObjectName("label_8")
self.horizontalLayout_13.addWidget(self.label_8)
self.TestStatus = QtWidgets.QLabel(self.widget_2)
self.TestStatus.setStyleSheet("font: 75 28pt \"微软雅黑\";\n"
"color: rgb(255, 170, 0);")
self.TestStatus.setObjectName("TestStatus")
self.horizontalLayout_13.addWidget(self.TestStatus)
self.horizontalLayout_17.addLayout(self.horizontalLayout_13)
spacerItem1 = QtWidgets.QSpacerItem(56, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
self.horizontalLayout_17.addItem(spacerItem1)
self.horizontalLayout_14 = QtWidgets.QHBoxLayout()
self.horizontalLayout_14.setObjectName("horizontalLayout_14")
self.label_14 = QtWidgets.QLabel(self.widget_2)
self.label_14.setObjectName("label_14")
self.horizontalLayout_14.addWidget(self.label_14)
self.TotalCount = QtWidgets.QLabel(self.widget_2)
self.TotalCount.setStyleSheet("font: 75 28pt \"微软雅黑\";\n"
"color: rgb(255, 170, 0);")
self.TotalCount.setObjectName("TotalCount")
self.horizontalLayout_14.addWidget(self.TotalCount)
self.horizontalLayout_17.addLayout(self.horizontalLayout_14)
spacerItem2 = QtWidgets.QSpacerItem(55, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
self.horizontalLayout_17.addItem(spacerItem2)
self.encourage_label = QtWidgets.QLabel(self.widget_2)
self.encourage_label.setStyleSheet("font: 75 28pt \"微软雅黑\";\n"
"color: rgb(255, 170, 0);")
self.encourage_label.setObjectName("encourage_label")
self.horizontalLayout_17.addWidget(self.encourage_label)
self.verticalLayout.addWidget(self.widget_2)
DataNodeFrequencyTest.setCentralWidget(self.centralwidget)
self.retranslateUi(DataNodeFrequencyTest)
self.tabWidget.setCurrentIndex(0)
QtCore.QMetaObject.connectSlotsByName(DataNodeFrequencyTest)
def retranslateUi(self, DataNodeFrequencyTest):
_translate = QtCore.QCoreApplication.translate
DataNodeFrequencyTest.setWindowTitle(_translate("DataNodeFrequencyTest", "DataNodeFrequencyTest"))
self.groupBox_3.setTitle(_translate("DataNodeFrequencyTest", "频响曲线"))
self.label.setText(_translate("DataNodeFrequencyTest", " 传感器类型:"))
self.label_7.setText(_translate("DataNodeFrequencyTest", " 万用表端口:"))
self.label_2.setText(_translate("DataNodeFrequencyTest", "信号发生器端口:"))
self.ConnecDev_Btn.setText(_translate("DataNodeFrequencyTest", " 联机"))
self.NFCRead_Btn.setText(_translate("DataNodeFrequencyTest", "NFC读取"))
self.Test_Btn.setText(_translate("DataNodeFrequencyTest", "开始测试"))
self.groupBox_2.setTitle(_translate("DataNodeFrequencyTest", "实时数据"))
self.label_3.setText(_translate("DataNodeFrequencyTest", "信号发生器频率:"))
self.label_10.setText(_translate("DataNodeFrequencyTest", "Hz"))
self.label_4.setText(_translate("DataNodeFrequencyTest", "信号发生器幅值:"))
self.label_11.setText(_translate("DataNodeFrequencyTest", "mv"))
self.label_5.setText(_translate("DataNodeFrequencyTest", "万用表电压:"))
self.label_9.setText(_translate("DataNodeFrequencyTest", "mv"))
self.label_6.setText(_translate("DataNodeFrequencyTest", "今天测试个数:"))
self.label_12.setText(_translate("DataNodeFrequencyTest", ""))
self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab_3), _translate("DataNodeFrequencyTest", "Zigbee"))
self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab_6), _translate("DataNodeFrequencyTest", "NFC"))
self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab_4), _translate("DataNodeFrequencyTest", "Frequency"))
self.label_8.setText(_translate("DataNodeFrequencyTest", " 当前状态:"))
self.TestStatus.setText(_translate("DataNodeFrequencyTest", "TextLabel"))
self.label_14.setText(_translate("DataNodeFrequencyTest", "累计测试个数:"))
self.TotalCount.setText(_translate("DataNodeFrequencyTest", "TextLabel"))
self.encourage_label.setText(_translate("DataNodeFrequencyTest", "TextLabel"))

View File

@ -0,0 +1,598 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>DataNodeFrequencyTest</class>
<widget class="QMainWindow" name="DataNodeFrequencyTest">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>850</width>
<height>600</height>
</rect>
</property>
<property name="windowTitle">
<string>DataNodeFrequencyTest</string>
</property>
<widget class="QWidget" name="centralwidget">
<layout class="QVBoxLayout" name="verticalLayout">
<item>
<widget class="QWidget" name="widget" native="true">
<layout class="QHBoxLayout" name="horizontalLayout">
<item>
<widget class="QWidget" name="widget_3" native="true">
<property name="minimumSize">
<size>
<width>500</width>
<height>0</height>
</size>
</property>
<layout class="QVBoxLayout" name="verticalLayout_3">
<item>
<widget class="QWidget" name="widget_7" native="true">
<property name="minimumSize">
<size>
<width>0</width>
<height>300</height>
</size>
</property>
<layout class="QHBoxLayout" name="horizontalLayout_8">
<item>
<widget class="QGroupBox" name="groupBox_3">
<property name="title">
<string>频响曲线</string>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item>
<widget class="QWidget" name="widget_9" native="true">
<property name="minimumSize">
<size>
<width>120</width>
<height>0</height>
</size>
</property>
<layout class="QHBoxLayout" name="horizontalLayout_12">
<item>
<layout class="QVBoxLayout" name="verticalLayout_4">
<item>
<layout class="QHBoxLayout" name="horizontalLayout_11">
<item>
<widget class="QLabel" name="label">
<property name="minimumSize">
<size>
<width>100</width>
<height>0</height>
</size>
</property>
<property name="text">
<string> 传感器类型:</string>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
</widget>
</item>
<item>
<widget class="QComboBox" name="sensorType_Box">
<property name="minimumSize">
<size>
<width>220</width>
<height>0</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>220</width>
<height>16777215</height>
</size>
</property>
</widget>
</item>
</layout>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout_10">
<item>
<widget class="QLabel" name="label_7">
<property name="minimumSize">
<size>
<width>120</width>
<height>0</height>
</size>
</property>
<property name="text">
<string> 万用表端口:</string>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
</widget>
</item>
<item>
<widget class="QComboBox" name="multimeter_Box">
<property name="minimumSize">
<size>
<width>220</width>
<height>0</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>220</width>
<height>16777215</height>
</size>
</property>
</widget>
</item>
</layout>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout_9">
<item>
<widget class="QLabel" name="label_2">
<property name="minimumSize">
<size>
<width>120</width>
<height>0</height>
</size>
</property>
<property name="text">
<string>信号发生器端口:</string>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
</widget>
</item>
<item>
<widget class="QLineEdit" name="Signal_Edit">
<property name="minimumSize">
<size>
<width>220</width>
<height>0</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>220</width>
<height>16777215</height>
</size>
</property>
</widget>
</item>
</layout>
</item>
</layout>
</item>
<item>
<spacer name="horizontalSpacer">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item>
<layout class="QVBoxLayout" name="verticalLayout_6">
<item>
<widget class="QPushButton" name="ConnecDev_Btn">
<property name="text">
<string> 联机</string>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="NFCRead_Btn">
<property name="enabled">
<bool>false</bool>
</property>
<property name="text">
<string>NFC读取</string>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="Test_Btn">
<property name="enabled">
<bool>false</bool>
</property>
<property name="text">
<string>开始测试</string>
</property>
</widget>
</item>
</layout>
</item>
</layout>
</widget>
</item>
</layout>
</widget>
</item>
<item>
<widget class="QWidget" name="widget_4" native="true">
<layout class="QVBoxLayout" name="verticalLayout_2">
<item>
<widget class="QWidget" name="widget_5" native="true">
<property name="minimumSize">
<size>
<width>300</width>
<height>240</height>
</size>
</property>
<layout class="QHBoxLayout" name="horizontalLayout_2">
<item>
<widget class="QGroupBox" name="groupBox_2">
<property name="title">
<string>实时数据</string>
</property>
<widget class="QWidget" name="">
<property name="geometry">
<rect>
<x>10</x>
<y>22</y>
<width>259</width>
<height>32</height>
</rect>
</property>
<layout class="QHBoxLayout" name="horizontalLayout_4">
<item>
<widget class="QLabel" name="label_3">
<property name="minimumSize">
<size>
<width>100</width>
<height>0</height>
</size>
</property>
<property name="text">
<string>信号发生器频率:</string>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
</widget>
</item>
<item>
<widget class="QLineEdit" name="Frequency_Edit">
<property name="enabled">
<bool>false</bool>
</property>
<property name="minimumSize">
<size>
<width>0</width>
<height>30</height>
</size>
</property>
<property name="styleSheet">
<string notr="true">font: 75 20pt &quot;微软雅黑&quot;;
color: rgb(255, 170, 0);</string>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="label_10">
<property name="text">
<string>Hz</string>
</property>
</widget>
</item>
</layout>
</widget>
<widget class="QWidget" name="">
<property name="geometry">
<rect>
<x>10</x>
<y>71</y>
<width>259</width>
<height>32</height>
</rect>
</property>
<layout class="QHBoxLayout" name="horizontalLayout_5">
<item>
<widget class="QLabel" name="label_4">
<property name="minimumSize">
<size>
<width>100</width>
<height>0</height>
</size>
</property>
<property name="text">
<string>信号发生器幅值:</string>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
</widget>
</item>
<item>
<widget class="QLineEdit" name="Ampl_Edit">
<property name="enabled">
<bool>false</bool>
</property>
<property name="minimumSize">
<size>
<width>0</width>
<height>30</height>
</size>
</property>
<property name="styleSheet">
<string notr="true">font: 75 20pt &quot;微软雅黑&quot;;
color: rgb(255, 170, 0);</string>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="label_11">
<property name="text">
<string>mv</string>
</property>
</widget>
</item>
</layout>
</widget>
<widget class="QWidget" name="">
<property name="geometry">
<rect>
<x>10</x>
<y>120</y>
<width>259</width>
<height>32</height>
</rect>
</property>
<layout class="QHBoxLayout" name="horizontalLayout_6">
<item>
<widget class="QLabel" name="label_5">
<property name="minimumSize">
<size>
<width>100</width>
<height>0</height>
</size>
</property>
<property name="text">
<string>万用表电压:</string>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
</widget>
</item>
<item>
<widget class="QLineEdit" name="VOLTage_Edit">
<property name="enabled">
<bool>false</bool>
</property>
<property name="minimumSize">
<size>
<width>0</width>
<height>30</height>
</size>
</property>
<property name="styleSheet">
<string notr="true">font: 75 20pt &quot;微软雅黑&quot;;
color: rgb(255, 170, 0);</string>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="label_9">
<property name="text">
<string>mv</string>
</property>
</widget>
</item>
</layout>
</widget>
<widget class="QWidget" name="">
<property name="geometry">
<rect>
<x>10</x>
<y>169</y>
<width>259</width>
<height>32</height>
</rect>
</property>
<layout class="QHBoxLayout" name="horizontalLayout_7">
<item>
<widget class="QLabel" name="label_6">
<property name="minimumSize">
<size>
<width>100</width>
<height>0</height>
</size>
</property>
<property name="text">
<string>今天测试个数:</string>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
</widget>
</item>
<item>
<widget class="QLineEdit" name="Count_Edit">
<property name="enabled">
<bool>false</bool>
</property>
<property name="minimumSize">
<size>
<width>0</width>
<height>30</height>
</size>
</property>
<property name="styleSheet">
<string notr="true">font: 75 20pt &quot;微软雅黑&quot;;
color: rgb(255, 170, 0);</string>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="label_12">
<property name="text">
<string>个</string>
</property>
</widget>
</item>
</layout>
</widget>
</widget>
</item>
</layout>
</widget>
</item>
<item>
<widget class="QWidget" name="widget_6" native="true">
<layout class="QHBoxLayout" name="horizontalLayout_3">
<item>
<widget class="QTabWidget" name="tabWidget">
<property name="currentIndex">
<number>0</number>
</property>
<widget class="QWidget" name="tab_3">
<attribute name="title">
<string>Zigbee</string>
</attribute>
<layout class="QHBoxLayout" name="horizontalLayout_15">
<item>
<widget class="QTextEdit" name="ZigBee_Edit"/>
</item>
</layout>
</widget>
<widget class="QWidget" name="tab_6">
<attribute name="title">
<string>NFC</string>
</attribute>
<layout class="QHBoxLayout" name="horizontalLayout_16">
<item>
<widget class="QTextEdit" name="NFC_Edit"/>
</item>
</layout>
</widget>
<widget class="QWidget" name="tab_4">
<attribute name="title">
<string>Frequency</string>
</attribute>
</widget>
</widget>
</item>
</layout>
</widget>
</item>
</layout>
</widget>
</item>
</layout>
</widget>
</item>
<item>
<widget class="QWidget" name="widget_2" native="true">
<property name="minimumSize">
<size>
<width>0</width>
<height>80</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>16777215</width>
<height>80</height>
</size>
</property>
<layout class="QHBoxLayout" name="horizontalLayout_17">
<item>
<layout class="QHBoxLayout" name="horizontalLayout_13">
<item>
<widget class="QLabel" name="label_8">
<property name="text">
<string> 当前状态:</string>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="TestStatus">
<property name="styleSheet">
<string notr="true">font: 75 28pt &quot;微软雅黑&quot;;
color: rgb(255, 170, 0);</string>
</property>
<property name="text">
<string>TextLabel</string>
</property>
</widget>
</item>
</layout>
</item>
<item>
<spacer name="horizontalSpacer_2">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>56</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout_14">
<item>
<widget class="QLabel" name="label_14">
<property name="text">
<string>累计测试个数:</string>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="TotalCount">
<property name="styleSheet">
<string notr="true">font: 75 28pt &quot;微软雅黑&quot;;
color: rgb(255, 170, 0);</string>
</property>
<property name="text">
<string>TextLabel</string>
</property>
</widget>
</item>
</layout>
</item>
<item>
<spacer name="horizontalSpacer_3">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>55</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item>
<widget class="QLabel" name="encourage_label">
<property name="styleSheet">
<string notr="true">font: 75 28pt &quot;微软雅黑&quot;;
color: rgb(255, 170, 0);</string>
</property>
<property name="text">
<string>TextLabel</string>
</property>
</widget>
</item>
</layout>
</widget>
</item>
</layout>
</widget>
</widget>
<resources/>
<connections/>
</ui>

View File

@ -0,0 +1,598 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>DataNodeFrequencyTest</class>
<widget class="QMainWindow" name="DataNodeFrequencyTest">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>860</width>
<height>600</height>
</rect>
</property>
<property name="windowTitle">
<string>DataNodeFrequencyTest</string>
</property>
<widget class="QWidget" name="centralwidget">
<layout class="QVBoxLayout" name="verticalLayout">
<item>
<widget class="QWidget" name="widget" native="true">
<layout class="QHBoxLayout" name="horizontalLayout">
<item>
<widget class="QWidget" name="widget_3" native="true">
<property name="minimumSize">
<size>
<width>500</width>
<height>0</height>
</size>
</property>
<layout class="QVBoxLayout" name="verticalLayout_3">
<item>
<widget class="QWidget" name="widget_7" native="true">
<property name="minimumSize">
<size>
<width>0</width>
<height>300</height>
</size>
</property>
<layout class="QHBoxLayout" name="horizontalLayout_8">
<item>
<widget class="QGroupBox" name="groupBox_3">
<property name="title">
<string>频响曲线</string>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item>
<widget class="QWidget" name="widget_9" native="true">
<property name="minimumSize">
<size>
<width>120</width>
<height>0</height>
</size>
</property>
<layout class="QHBoxLayout" name="horizontalLayout_12">
<item>
<layout class="QVBoxLayout" name="verticalLayout_4">
<item>
<layout class="QHBoxLayout" name="horizontalLayout_11">
<item>
<widget class="QLabel" name="label">
<property name="minimumSize">
<size>
<width>100</width>
<height>0</height>
</size>
</property>
<property name="text">
<string> 传感器类型:</string>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
</widget>
</item>
<item>
<widget class="QComboBox" name="sensorType_Box">
<property name="minimumSize">
<size>
<width>220</width>
<height>0</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>220</width>
<height>16777215</height>
</size>
</property>
</widget>
</item>
</layout>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout_10">
<item>
<widget class="QLabel" name="label_7">
<property name="minimumSize">
<size>
<width>120</width>
<height>0</height>
</size>
</property>
<property name="text">
<string> 万用表端口:</string>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
</widget>
</item>
<item>
<widget class="QComboBox" name="multimeter_Box">
<property name="minimumSize">
<size>
<width>220</width>
<height>0</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>220</width>
<height>16777215</height>
</size>
</property>
</widget>
</item>
</layout>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout_9">
<item>
<widget class="QLabel" name="label_2">
<property name="minimumSize">
<size>
<width>120</width>
<height>0</height>
</size>
</property>
<property name="text">
<string>信号发生器端口:</string>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
</widget>
</item>
<item>
<widget class="QLineEdit" name="Signal_Edit">
<property name="minimumSize">
<size>
<width>220</width>
<height>0</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>220</width>
<height>16777215</height>
</size>
</property>
</widget>
</item>
</layout>
</item>
</layout>
</item>
<item>
<spacer name="horizontalSpacer">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item>
<layout class="QVBoxLayout" name="verticalLayout_6">
<item>
<widget class="QPushButton" name="ConnecDev_Btn">
<property name="text">
<string> 联机</string>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="NFCRead_Btn">
<property name="enabled">
<bool>false</bool>
</property>
<property name="text">
<string>NFC读取</string>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="Test_Btn">
<property name="enabled">
<bool>false</bool>
</property>
<property name="text">
<string>开始测试</string>
</property>
</widget>
</item>
</layout>
</item>
</layout>
</widget>
</item>
</layout>
</widget>
</item>
<item>
<widget class="QWidget" name="widget_4" native="true">
<layout class="QVBoxLayout" name="verticalLayout_2">
<item>
<widget class="QWidget" name="widget_5" native="true">
<property name="minimumSize">
<size>
<width>300</width>
<height>240</height>
</size>
</property>
<layout class="QHBoxLayout" name="horizontalLayout_2">
<item>
<widget class="QGroupBox" name="groupBox_2">
<property name="title">
<string>实时数据</string>
</property>
<widget class="QWidget" name="layoutWidget">
<property name="geometry">
<rect>
<x>10</x>
<y>22</y>
<width>259</width>
<height>32</height>
</rect>
</property>
<layout class="QHBoxLayout" name="horizontalLayout_4">
<item>
<widget class="QLabel" name="label_3">
<property name="minimumSize">
<size>
<width>100</width>
<height>0</height>
</size>
</property>
<property name="text">
<string>信号发生器频率:</string>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
</widget>
</item>
<item>
<widget class="QLineEdit" name="Frequency_Edit">
<property name="enabled">
<bool>false</bool>
</property>
<property name="minimumSize">
<size>
<width>0</width>
<height>30</height>
</size>
</property>
<property name="styleSheet">
<string notr="true">font: 75 20pt &quot;微软雅黑&quot;;
color: rgb(255, 170, 0);</string>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="label_10">
<property name="text">
<string>Hz</string>
</property>
</widget>
</item>
</layout>
</widget>
<widget class="QWidget" name="layoutWidget">
<property name="geometry">
<rect>
<x>10</x>
<y>71</y>
<width>259</width>
<height>32</height>
</rect>
</property>
<layout class="QHBoxLayout" name="horizontalLayout_5">
<item>
<widget class="QLabel" name="label_4">
<property name="minimumSize">
<size>
<width>100</width>
<height>0</height>
</size>
</property>
<property name="text">
<string>信号发生器幅值:</string>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
</widget>
</item>
<item>
<widget class="QLineEdit" name="Ampl_Edit">
<property name="enabled">
<bool>false</bool>
</property>
<property name="minimumSize">
<size>
<width>0</width>
<height>30</height>
</size>
</property>
<property name="styleSheet">
<string notr="true">font: 75 20pt &quot;微软雅黑&quot;;
color: rgb(255, 170, 0);</string>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="label_11">
<property name="text">
<string>mv</string>
</property>
</widget>
</item>
</layout>
</widget>
<widget class="QWidget" name="layoutWidget">
<property name="geometry">
<rect>
<x>10</x>
<y>120</y>
<width>259</width>
<height>32</height>
</rect>
</property>
<layout class="QHBoxLayout" name="horizontalLayout_6">
<item>
<widget class="QLabel" name="label_5">
<property name="minimumSize">
<size>
<width>100</width>
<height>0</height>
</size>
</property>
<property name="text">
<string>万用表电压:</string>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
</widget>
</item>
<item>
<widget class="QLineEdit" name="VOLTage_Edit">
<property name="enabled">
<bool>false</bool>
</property>
<property name="minimumSize">
<size>
<width>0</width>
<height>30</height>
</size>
</property>
<property name="styleSheet">
<string notr="true">font: 75 20pt &quot;微软雅黑&quot;;
color: rgb(255, 170, 0);</string>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="label_9">
<property name="text">
<string>mv</string>
</property>
</widget>
</item>
</layout>
</widget>
<widget class="QWidget" name="layoutWidget">
<property name="geometry">
<rect>
<x>10</x>
<y>169</y>
<width>259</width>
<height>32</height>
</rect>
</property>
<layout class="QHBoxLayout" name="horizontalLayout_7">
<item>
<widget class="QLabel" name="label_6">
<property name="minimumSize">
<size>
<width>100</width>
<height>0</height>
</size>
</property>
<property name="text">
<string>今天测试个数:</string>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
</widget>
</item>
<item>
<widget class="QLineEdit" name="Count_Edit">
<property name="enabled">
<bool>false</bool>
</property>
<property name="minimumSize">
<size>
<width>0</width>
<height>30</height>
</size>
</property>
<property name="styleSheet">
<string notr="true">font: 75 20pt &quot;微软雅黑&quot;;
color: rgb(255, 170, 0);</string>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="label_12">
<property name="text">
<string>个</string>
</property>
</widget>
</item>
</layout>
</widget>
</widget>
</item>
</layout>
</widget>
</item>
<item>
<widget class="QWidget" name="widget_6" native="true">
<layout class="QHBoxLayout" name="horizontalLayout_3">
<item>
<widget class="QTabWidget" name="tabWidget">
<property name="currentIndex">
<number>0</number>
</property>
<widget class="QWidget" name="tab_3">
<attribute name="title">
<string>Zigbee</string>
</attribute>
<layout class="QHBoxLayout" name="horizontalLayout_15">
<item>
<widget class="QTextEdit" name="ZigBee_Edit"/>
</item>
</layout>
</widget>
<widget class="QWidget" name="tab_6">
<attribute name="title">
<string>NFC</string>
</attribute>
<layout class="QHBoxLayout" name="horizontalLayout_16">
<item>
<widget class="QTextEdit" name="NFC_Edit"/>
</item>
</layout>
</widget>
<widget class="QWidget" name="tab_4">
<attribute name="title">
<string>Frequency</string>
</attribute>
</widget>
</widget>
</item>
</layout>
</widget>
</item>
</layout>
</widget>
</item>
</layout>
</widget>
</item>
<item>
<widget class="QWidget" name="widget_2" native="true">
<property name="minimumSize">
<size>
<width>0</width>
<height>80</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>16777215</width>
<height>80</height>
</size>
</property>
<layout class="QHBoxLayout" name="horizontalLayout_17">
<item>
<layout class="QHBoxLayout" name="horizontalLayout_13">
<item>
<widget class="QLabel" name="label_8">
<property name="text">
<string> 当前状态:</string>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="TestStatus">
<property name="styleSheet">
<string notr="true">font: 75 28pt &quot;微软雅黑&quot;;
color: rgb(255, 170, 0);</string>
</property>
<property name="text">
<string>TextLabel</string>
</property>
</widget>
</item>
</layout>
</item>
<item>
<spacer name="horizontalSpacer_2">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>56</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout_14">
<item>
<widget class="QLabel" name="label_14">
<property name="text">
<string>累计测试个数:</string>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="TotalCount">
<property name="styleSheet">
<string notr="true">font: 75 28pt &quot;微软雅黑&quot;;
color: rgb(255, 170, 0);</string>
</property>
<property name="text">
<string>TextLabel</string>
</property>
</widget>
</item>
</layout>
</item>
<item>
<spacer name="horizontalSpacer_3">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>55</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item>
<widget class="QLabel" name="encourage_label">
<property name="styleSheet">
<string notr="true">font: 75 28pt &quot;微软雅黑&quot;;
color: rgb(255, 170, 0);</string>
</property>
<property name="text">
<string>TextLabel</string>
</property>
</widget>
</item>
</layout>
</widget>
</item>
</layout>
</widget>
</widget>
<resources/>
<connections/>
</ui>

View File

@ -0,0 +1,24 @@
QT += core gui
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
CONFIG += c++11
# You can make your code fail to compile if it uses deprecated APIs.
# In order to do so, uncomment the following line.
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0
SOURCES += \
main.cpp \
mainwindow.cpp
HEADERS += \
mainwindow.h
FORMS += \
mainwindow.ui
# Default rules for deployment.
qnx: target.path = /tmp/$${TARGET}/bin
else: unix:!android: target.path = /opt/$${TARGET}/bin
!isEmpty(target.path): INSTALLS += target

View File

@ -0,0 +1,288 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE QtCreatorProject>
<!-- Written by QtCreator 4.15.0, 2023-11-28T10:35:31. -->
<qtcreator>
<data>
<variable>EnvironmentId</variable>
<value type="QByteArray">{168666bd-c3a3-4089-8a9e-043b6ddc15f8}</value>
</data>
<data>
<variable>ProjectExplorer.Project.ActiveTarget</variable>
<value type="int">0</value>
</data>
<data>
<variable>ProjectExplorer.Project.EditorSettings</variable>
<valuemap type="QVariantMap">
<value type="bool" key="EditorConfiguration.AutoIndent">true</value>
<value type="bool" key="EditorConfiguration.AutoSpacesForTabs">false</value>
<value type="bool" key="EditorConfiguration.CamelCaseNavigation">true</value>
<valuemap type="QVariantMap" key="EditorConfiguration.CodeStyle.0">
<value type="QString" key="language">Cpp</value>
<valuemap type="QVariantMap" key="value">
<value type="QByteArray" key="CurrentPreferences">CppGlobal</value>
</valuemap>
</valuemap>
<valuemap type="QVariantMap" key="EditorConfiguration.CodeStyle.1">
<value type="QString" key="language">QmlJS</value>
<valuemap type="QVariantMap" key="value">
<value type="QByteArray" key="CurrentPreferences">QmlJSGlobal</value>
</valuemap>
</valuemap>
<value type="int" key="EditorConfiguration.CodeStyle.Count">2</value>
<value type="QByteArray" key="EditorConfiguration.Codec">UTF-8</value>
<value type="bool" key="EditorConfiguration.ConstrainTooltips">false</value>
<value type="int" key="EditorConfiguration.IndentSize">4</value>
<value type="bool" key="EditorConfiguration.KeyboardTooltips">false</value>
<value type="int" key="EditorConfiguration.MarginColumn">80</value>
<value type="bool" key="EditorConfiguration.MouseHiding">true</value>
<value type="bool" key="EditorConfiguration.MouseNavigation">true</value>
<value type="int" key="EditorConfiguration.PaddingMode">1</value>
<value type="bool" key="EditorConfiguration.PreferSingleLineComments">false</value>
<value type="bool" key="EditorConfiguration.ScrollWheelZooming">true</value>
<value type="bool" key="EditorConfiguration.ShowMargin">false</value>
<value type="int" key="EditorConfiguration.SmartBackspaceBehavior">0</value>
<value type="bool" key="EditorConfiguration.SmartSelectionChanging">true</value>
<value type="bool" key="EditorConfiguration.SpacesForTabs">true</value>
<value type="int" key="EditorConfiguration.TabKeyBehavior">0</value>
<value type="int" key="EditorConfiguration.TabSize">8</value>
<value type="bool" key="EditorConfiguration.UseGlobal">true</value>
<value type="bool" key="EditorConfiguration.UseIndenter">false</value>
<value type="int" key="EditorConfiguration.Utf8BomBehavior">1</value>
<value type="bool" key="EditorConfiguration.addFinalNewLine">true</value>
<value type="bool" key="EditorConfiguration.cleanIndentation">true</value>
<value type="bool" key="EditorConfiguration.cleanWhitespace">true</value>
<value type="QString" key="EditorConfiguration.ignoreFileTypes">*.md, *.MD, Makefile</value>
<value type="bool" key="EditorConfiguration.inEntireDocument">false</value>
<value type="bool" key="EditorConfiguration.skipTrailingWhitespace">true</value>
</valuemap>
</data>
<data>
<variable>ProjectExplorer.Project.Target.0</variable>
<valuemap type="QVariantMap">
<value type="QString" key="DeviceType">Desktop</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Desktop Qt 5.12.11 MinGW 32-bit</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Desktop Qt 5.12.11 MinGW 32-bit</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">qt.qt5.51211.win32_mingw73_kit</value>
<value type="int" key="ProjectExplorer.Target.ActiveBuildConfiguration">0</value>
<value type="int" key="ProjectExplorer.Target.ActiveDeployConfiguration">0</value>
<value type="int" key="ProjectExplorer.Target.ActiveRunConfiguration">0</value>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.0">
<value type="int" key="EnableQmlDebugging">0</value>
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">E:\WorkSpace\测试工具\chaos\频响测试\DataNodeFrequencyTest\build-untitled-Desktop_Qt_5_12_11_MinGW_32_bit-Debug</value>
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory.shadowDir">E:/WorkSpace/测试工具/chaos/频响测试/DataNodeFrequencyTest/build-untitled-Desktop_Qt_5_12_11_MinGW_32_bit-Debug</value>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">QtProjectManager.QMakeBuildStep</value>
<value type="bool" key="QtProjectManager.QMakeBuildStep.QMakeForced">false</value>
<valuelist type="QVariantList" key="QtProjectManager.QMakeBuildStep.SelectedAbis"/>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.1">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">2</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Build</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Build</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments">clean</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Clean</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Clean</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
<value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.CustomParsers"/>
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Debug</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4BuildConfiguration</value>
<value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration">2</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.1">
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">E:\WorkSpace\测试工具\chaos\频响测试\DataNodeFrequencyTest\build-untitled-Desktop_Qt_5_12_11_MinGW_32_bit-Release</value>
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory.shadowDir">E:/WorkSpace/测试工具/chaos/频响测试/DataNodeFrequencyTest/build-untitled-Desktop_Qt_5_12_11_MinGW_32_bit-Release</value>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">QtProjectManager.QMakeBuildStep</value>
<value type="bool" key="QtProjectManager.QMakeBuildStep.QMakeForced">false</value>
<valuelist type="QVariantList" key="QtProjectManager.QMakeBuildStep.SelectedAbis"/>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.1">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">2</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Build</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Build</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments">clean</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Clean</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Clean</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
<value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.CustomParsers"/>
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Release</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4BuildConfiguration</value>
<value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration">0</value>
<value type="int" key="QtQuickCompiler">0</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.2">
<value type="int" key="EnableQmlDebugging">0</value>
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">E:\WorkSpace\测试工具\chaos\频响测试\DataNodeFrequencyTest\build-untitled-Desktop_Qt_5_12_11_MinGW_32_bit-Profile</value>
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory.shadowDir">E:/WorkSpace/测试工具/chaos/频响测试/DataNodeFrequencyTest/build-untitled-Desktop_Qt_5_12_11_MinGW_32_bit-Profile</value>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">QtProjectManager.QMakeBuildStep</value>
<value type="bool" key="QtProjectManager.QMakeBuildStep.QMakeForced">false</value>
<valuelist type="QVariantList" key="QtProjectManager.QMakeBuildStep.SelectedAbis"/>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.1">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">2</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Build</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Build</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments">clean</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Clean</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Clean</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
<value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.CustomParsers"/>
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Profile</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4BuildConfiguration</value>
<value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration">0</value>
<value type="int" key="QtQuickCompiler">0</value>
<value type="int" key="SeparateDebugInfo">0</value>
</valuemap>
<value type="int" key="ProjectExplorer.Target.BuildConfigurationCount">3</value>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.DeployConfiguration.0">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">0</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Deploy</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Deploy</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Deploy</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">1</value>
<valuemap type="QVariantMap" key="ProjectExplorer.DeployConfiguration.CustomData"/>
<value type="bool" key="ProjectExplorer.DeployConfiguration.CustomDataEnabled">false</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.DefaultDeployConfiguration</value>
</valuemap>
<value type="int" key="ProjectExplorer.Target.DeployConfigurationCount">1</value>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.RunConfiguration.0">
<value type="QString" key="Analyzer.Perf.CallgraphMode">dwarf</value>
<valuelist type="QVariantList" key="Analyzer.Perf.Events">
<value type="QString">cpu-cycles</value>
</valuelist>
<valuelist type="QVariantList" key="Analyzer.Perf.ExtraArguments"/>
<value type="int" key="Analyzer.Perf.Frequency">250</value>
<valuelist type="QVariantList" key="Analyzer.Perf.RecordArguments">
<value type="QString">-e</value>
<value type="QString">cpu-cycles</value>
<value type="QString">--call-graph</value>
<value type="QString">dwarf,4096</value>
<value type="QString">-F</value>
<value type="QString">250</value>
</valuelist>
<value type="QString" key="Analyzer.Perf.SampleMode">-F</value>
<value type="bool" key="Analyzer.Perf.Settings.UseGlobalSettings">true</value>
<value type="int" key="Analyzer.Perf.StackSize">4096</value>
<value type="bool" key="Analyzer.QmlProfiler.AggregateTraces">false</value>
<value type="bool" key="Analyzer.QmlProfiler.FlushEnabled">false</value>
<value type="uint" key="Analyzer.QmlProfiler.FlushInterval">1000</value>
<value type="QString" key="Analyzer.QmlProfiler.LastTraceFile"></value>
<value type="bool" key="Analyzer.QmlProfiler.Settings.UseGlobalSettings">true</value>
<valuelist type="QVariantList" key="Analyzer.Valgrind.AddedSuppressionFiles"/>
<value type="QString" key="Analyzer.Valgrind.Callgrind.Arguments"></value>
<value type="bool" key="Analyzer.Valgrind.Callgrind.CollectBusEvents">false</value>
<value type="bool" key="Analyzer.Valgrind.Callgrind.CollectSystime">false</value>
<value type="bool" key="Analyzer.Valgrind.Callgrind.EnableBranchSim">false</value>
<value type="bool" key="Analyzer.Valgrind.Callgrind.EnableCacheSim">false</value>
<value type="bool" key="Analyzer.Valgrind.Callgrind.EnableEventToolTips">true</value>
<value type="double" key="Analyzer.Valgrind.Callgrind.MinimumCostRatio">0.01</value>
<value type="double" key="Analyzer.Valgrind.Callgrind.VisualisationMinimumCostRatio">10</value>
<value type="bool" key="Analyzer.Valgrind.FilterExternalIssues">true</value>
<value type="QString" key="Analyzer.Valgrind.KCachegrindExecutable">kcachegrind</value>
<value type="int" key="Analyzer.Valgrind.LeakCheckOnFinish">1</value>
<value type="QString" key="Analyzer.Valgrind.Memcheck.Arguments"></value>
<value type="int" key="Analyzer.Valgrind.NumCallers">25</value>
<valuelist type="QVariantList" key="Analyzer.Valgrind.RemovedSuppressionFiles"/>
<value type="int" key="Analyzer.Valgrind.SelfModifyingCodeDetection">1</value>
<value type="bool" key="Analyzer.Valgrind.Settings.UseGlobalSettings">true</value>
<value type="bool" key="Analyzer.Valgrind.ShowReachable">false</value>
<value type="bool" key="Analyzer.Valgrind.TrackOrigins">true</value>
<value type="QString" key="Analyzer.Valgrind.ValgrindArguments"></value>
<value type="QString" key="Analyzer.Valgrind.ValgrindExecutable">valgrind</value>
<valuelist type="QVariantList" key="Analyzer.Valgrind.VisibleErrorKinds">
<value type="int">0</value>
<value type="int">1</value>
<value type="int">2</value>
<value type="int">3</value>
<value type="int">4</value>
<value type="int">5</value>
<value type="int">6</value>
<value type="int">7</value>
<value type="int">8</value>
<value type="int">9</value>
<value type="int">10</value>
<value type="int">11</value>
<value type="int">12</value>
<value type="int">13</value>
<value type="int">14</value>
</valuelist>
<valuelist type="QVariantList" key="CustomOutputParsers"/>
<value type="int" key="PE.EnvironmentAspect.Base">2</value>
<valuelist type="QVariantList" key="PE.EnvironmentAspect.Changes"/>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.CustomExecutableRunConfiguration</value>
<value type="QString" key="ProjectExplorer.RunConfiguration.BuildKey"></value>
<value type="bool" key="RunConfiguration.UseCppDebugger">false</value>
<value type="bool" key="RunConfiguration.UseCppDebuggerAuto">true</value>
<value type="bool" key="RunConfiguration.UseQmlDebugger">false</value>
<value type="bool" key="RunConfiguration.UseQmlDebuggerAuto">true</value>
</valuemap>
<value type="int" key="ProjectExplorer.Target.RunConfigurationCount">1</value>
</valuemap>
</data>
<data>
<variable>ProjectExplorer.Project.TargetCount</variable>
<value type="int">1</value>
</data>
<data>
<variable>ProjectExplorer.Project.Updater.FileVersion</variable>
<value type="int">22</value>
</data>
<data>
<variable>Version</variable>
<value type="int">22</value>
</data>
</qtcreator>

View File

@ -0,0 +1,786 @@
#!/usr/bin/python3
# -*- coding: utf-8 -*-
from MainWindow import Ui_DataNodeFrequencyTest
from PyQt5.QtWidgets import QApplication, QMainWindow, QMessageBox
from AFG3000 import *
from Prologix import *
from DN101_NFC import *
from DN101_ZIGBEE import *
from Mysql import *
import serial, threading
import serial.tools.list_ports
from PyQt5.QtCore import QTimer, QThread, pyqtSignal
from PyQt5.QtGui import QIcon
from PyQt5.QtWidgets import *
import numpy as np
import matplotlib
import time
from sqlalchemy import create_engine
import pandas as pd
import tkinter as tk
from tkinter import filedialog
from playsound import playsound
matplotlib.use("Qt5Agg")
from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as FigureCanvas
from matplotlib.figure import Figure
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimHei'] # 指定默认字体
plt.rcParams['axes.unicode_minus'] = False # 解决保存图像是负号'-'显示为方块的问题
from matplotlib.backends.backend_qt5agg import NavigationToolbar2QT as NavigationToolbar
import win32con
#from win32process import SuspendThread, ResumeThread
import ctypes
cfp = configparser.ConfigParser()
cfp.read("config.ini")
SENSER_INF_PACK1 = 0x01
SENSER_INF_PACK2 = 0x07
EVEL_DATA_PACK1 = 0x02
EVEL_DATA_PACK2 = 0x06
WAVE_X_PACK = 0x03
WAVE_Y_PACK = 0x04
WAVE_Z_PACK = 0x05
NFC_PORT_STR = 'Silicon Labs Dual CP210x USB to UART Bridge: Enhanced COM Port'
ZIG_PORT_STR = 'Silicon Labs Dual CP210x USB to UART Bridge: Standard COM Port'
AFG = AFG3000()
#DMM = DMM_34401A(addr=22, port="COM12", baud=115200, ser_timeout=3, timeout=2)
db = Mysql()
Stop = 0
sensorType = -1
#vol = {
# "160Hz":1.575,
# "320Hz":1.000,
# "640Hz":1.000,
# "1000Hz":2.620,
# "2000Hz":2.9,
# "3000Hz":2.7,
# "4000Hz":1.82,
# "5000Hz":1.33,
# "6000Hz":0.66
#}
class Thread_01(QThread): # 线程1
trigger = pyqtSignal(str)
Voltage = pyqtSignal(str)
AmplSig = pyqtSignal(str)
TestOK = pyqtSignal(list)
ThreadStop = pyqtSignal()
TimeOut = pyqtSignal()
def __init__(self, Fredata,vol):
super().__init__()
self.Fredata = Fredata
self.vol = vol
handle = -1
def run(self):
try:
self.handle = ctypes.windll.kernel32.OpenThread(
win32con.PROCESS_ALL_ACCESS, False, int(QThread.currentThreadId()))
except Exception as e:
print('get thread handle failed', e)
global StopThread
for i in range(0, len(self.Fredata)):
print(self.Fredata[i]['Frequency'])
a = []
a.append('0')
a.append(str(self.Fredata[i]['Frequency']))
a.append('0')
self.TestOK.emit(a)
ampl = 0.02
ampl_ins = 0.02
AFG.SetAmpl(ampl)
AFG.SetFrequency(str(self.Fredata[i]['Frequency']))
self.trigger.emit(str(self.Fredata[i]['Frequency']))
#Voltage = str(DMM.measure())
Voltage = (AFG.measure())
Voltage = str(round(Voltage, 2))
self.Voltage.emit(Voltage)
retAmpl = AFG.query('VOLTAGE:AMPLITUDE?')
retAmpl = round(retAmpl,2)
self.AmplSig.emit(str(retAmpl))
AFG.Open()
time.sleep(1)
current_freq = self.Fredata[i]['Frequency']
ampl_set = float(self.vol[current_freq])
while(ampl<ampl_set):
ampl = ampl + ampl_ins
AFG.SetAmpl(ampl)
time.sleep(0.1)
retry_times = 3
Voltage = (AFG.measure())
while retry_times:
vol_diff = 100-Voltage
vol_div = vol_diff/Voltage
vol_change = ampl*vol_div
ampl = ampl+vol_change
AFG.SetAmpl(ampl)
time.sleep(0.1)
Voltage = AFG.measure()
if(abs(Voltage-100)<1):
retry_times = 0
else:
retry_times = retry_times -1
try:
vol_str = str(round(Voltage, 2))
self.Voltage.emit(vol_str)
retAmpl = AFG.query(':SOUR1:VOLT?')
retAmpl = round(retAmpl, 2)
self.AmplSig.emit(str(retAmpl))
except:
pass
self.vol[current_freq] = str(ampl)
print(current_freq, ampl)
a = []
a.append('1')
a.append(str(self.Fredata[i]['Frequency']))
a.append(str(Voltage))
self.TestOK.emit(a)
timeCount = 0
while timeCount < 50:
global Stop
#print(timeCount)
if Stop == 1:
time.sleep(1)
Stop = 0
break
timeCount += 1
time.sleep(1)
if timeCount == 50:
self.TimeOut.emit()
#print(Voltage)
# retAmpl = AFG.query('VOLTAGE:AMPLITUDE?')
retAmpl = AFG.query(':SOUR1:VOLT?')
#print(retAmpl)
while float(retAmpl) > 0.07:#微调ampl到最低值20mv
retAmpl -= 0.05
#print(retAmpl)
AFG.SetAmpl(retAmpl)
# retAmpl = AFG.query('VOLTAGE:AMPLITUDE?')
retAmpl = AFG.query(':SOUR1:VOLT?')
time.sleep(0.05)
#print(retAmpl)
time.sleep(1)
AFG.Close()
ampl = 0.02
AFG.SetAmpl(ampl)
AFG.SetFrequency('80')
AFG.Close()
self.ThreadStop.emit()
class MyFigureCanvas(FigureCanvas):
def __init__(self):
self.fig = Figure()
FigureCanvas.__init__(self, self.fig)
self.axes = self.fig.add_subplot(111)
#self.axes.set_ylim(ymin=0, ymax=30)
def plot(self, data,shortAddr):
self.axes.cla()
x = []
y1 = []
y2 = []
data1 = float(data[0]['rmsValue_Z']) * 1.41
for i in range(len(data)):
y1.append(float(data[i]['rmsValue_Z']))
x.append(data[i]['Frequency'])
y2.append(data1)
self.axes.plot(x, y1)
data1 = float(data[0]['rmsValue_Z']) * 1.41
self.axes.plot(x, y2)
self.axes.set_title('传感器短地址' + shortAddr)
self.axes.set_xlabel('Frequency(Hz)')
self.axes.set_ylabel('RMS(m/s^2)')
self.fig.subplots_adjust(left=0.15, bottom=0.2)
self.axes.grid()
self.fig.canvas.draw_idle()
now_time = datetime.datetime.now()
time_str = now_time.strftime('%Y-%m-%d')
strPath = os.getcwd()
path = strPath + '\\{0}\\{1}.png'.format(time_str,shortAddr)
#if os.path.exists(path):
self.fig.savefig(path)
def clear(self):
self.axes.cla()
self.axes.grid()
self.fig.canvas.draw_idle()
class DataNodeFrequencyTest(QMainWindow, Ui_DataNodeFrequencyTest):
def __init__(self):
super(DataNodeFrequencyTest, self).__init__()
self.setupUi(self)
self.setWindowTitle("凯奥思无线传感器频响测试")
self.NFCRead_Btn.clicked.connect(self.NFCRead)
self.Test_Btn.clicked.connect(self.StartTest)
self.ConnecDev_Btn.clicked.connect(self.ConnectDev)
#self.Export_Btn.clicked.connect(self.Export2Excel)
self.timer_zig = QTimer(self)
self.timer_zig.timeout.connect(self.zig_update)
#self.timer_multimeter = QTimer(self)
#self.timer_multimeter.timeout.connect(self.multimeter_update)
self.timer_single = QTimer(self)
self.timer_nfc = QTimer(self)
self.Init()
self.vol = {}
def Init(self):
self.start = 0
self.Test = 0
self.Next = 0
self.TestOK = '0'
self.Fre = 0
self.Vol = '0'
# self.AFG3000 = AFG3000()
self.port_list = AFG.init()
ip = cfp.get("DB", "IP")
# for i in range(0, len(self.port_list)):
# self.Signal_Box.addItem(self.port_list[i])
# print(self.port_list)
#self.AUDIO_PATH = self.get_resources_path(os.path.join('res', 'Finish.mp3'))
#playsound(self.AUDIO_PATH)
self.port_list_multimeter = list(serial.tools.list_ports.comports())
for i in range(0, len(self.port_list_multimeter)):
self.multimeter_Box.addItem(self.port_list_multimeter[i].device)
self.sensorType_Box.addItem('mems无线传感器')
self.sensorType_Box.addItem('压电无线传感器')
thistime = time.strftime("%Y-%m-%d", time.localtime())
sql = "select count(*) from t_data_nfc"
data = db._Query(sql)
self.TotalCount.setText(str(data[0]['count(*)']))
sql = "select count(*) from t_data_nfc where TIME LIKE \'%{0}%\'".format(thistime)
data = db._Query(sql)
self.Count_Edit.setText(str(data[0]['count(*)']))
self.Signal_Edit.setText(cfp.get("Device", "deviceSignal"))
self.plot = MyFigureCanvas()
self.gridlayout = QGridLayout(self.groupBox_3) # 继承容器groupBox
self.toolbar = NavigationToolbar(self.plot, self)
self.gridlayout.addWidget(self.toolbar, 0, 0)
self.gridlayout.addWidget(self.plot, 1, 0)
self.show()
data = []
# sql = "select rmsValue_Z,speedValue_Z, Frequency from t_data_zigbee where shortAddr = '450'"
# data = db._Query(sql)
# self.plot.plot(data, '450')
self.plot.clear()
def get_resources_path(self,relative_path):
if getattr(sys, 'frozen', False):
base_path = sys._MEIPASS
else:
base_path = os.path.abspath('.')
return os.path.join(base_path, relative_path)
def Export2Excel(self):
root = tk.Tk()
root.withdraw()
Filepath = filedialog.askdirectory() # 获得选择好的文件
engine = create_engine('mysql+pymysql://root:root@192.168.1.75:3306/datanodedb')
sql = 'SELECT * FROM t_data_zigbee'
df_read = pd.read_sql_query(sql, engine)
Filepath = Filepath + '/data.xlsx'
print(Filepath)
df_read.to_excel(Filepath, index=False)
QMessageBox.warning(self, "标题", "导出成功", QMessageBox.Yes | QMessageBox.No, QMessageBox.Yes)
def ConnectDev(self):
if self.start != 0:
#self.Result_edit.clear()
self.start = 0
AFG.Close()
#self.Result_edit.append('信号发生器断开成功!')
#DMM.Close()
#self.Result_edit.append('万用表断开成功!')
self.nfc_ser.close()
#self.Result_edit.append('NFC模块断开成功')
self.zig_ser.close()
#self.Result_edit.append('ZigBee模块断开成功')
return None
elif self.start == 0:
self.ConnecDev_Btn.setEnabled(False)
self.NFCRead_Btn.setEnabled(False)
self.Test_Btn.setEnabled(False)
try:
# 连接信号发生器
QApplication.processEvents()
#self.Result_edit.clear()
#print(self.port_list[self.Signal_Box.currentIndex()])
# self.AFG3000.Open(self.port_list[self.Signal_Box.currentIndex()])
if self.sensorType_Box.currentText() == 'mems无线传感器':
sensorType = 0
self.Fredata = db._Query('select * from t_data_frequency WHERE sensorType = 0 order by Frequency;')
elif self.sensorType_Box.currentText() == '压电无线传感器':
sensorType = 1
self.Fredata = db._Query('select * from t_data_frequency order by Frequency;')
self.tabWidget.setCurrentIndex(2)
self.NFCList = self.tabWidget.widget(2)
layoutNFC = QVBoxLayout()
layoutNFC.addWidget(QLabel('频点列表(Hz)'))
for i in range(0, len(self.Fredata)):
layoutNFC.addWidget(QLabel(str(self.Fredata[i]['Frequency'])))
print(self.Fredata[i]['Frequency'])
self.vol[self.Fredata[i]['Frequency']] = cfp.get("Frequency", str(self.Fredata[i]['Frequency']))
layoutNFC.addStretch(1)
self.NFCList.setLayout(layoutNFC)
cfp.set("Device", "deviceSignal",self.Signal_Edit.text())
#cfp.set("Device", "deviceMultimeter", self.multimeter_Box.currentText())
signal = cfp.get("Device", "deviceSignal")
multimeter = cfp.get("Device", "deviceMultimeter")
#multimeter = 'USB0::0x2A8D::0xB318::MY62200139::0::INSTR'
AFG.Connect(signal)
self.TestStatus.setText('信号发生器联机成功!')
#self.Result_edit.append('信号发生器联机成功!')
# 连接万用表
# DMM = DMM_34401A(addr=22, port="COM8", baud=115200, ser_timeout=3, timeout=2)
# self.DMM = DMM_34401A(addr=22, port=self.port_list_multimeter[self.multimeter_Box.currentIndex()].name, \
# baud=115200, timeout=5)
#print(DMM.cmdPoll("DETector:BANDwidth?"))
#DMM.set_measure_voltage_ac()
# self.timer_multimeter.start(200) # 启动串口接收分析数据
AFG.ConnectMultimeter(multimeter)
AFG.SetAC()
#self.Result_edit.append('万用表联机成功!')
self.TestStatus.setText('万用表联机成功!')
nfc_port, zig_port = self.get_nfc_zig_port()
print(nfc_port, zig_port)
self.nfc_ser = serial.Serial(nfc_port, 19200, rtscts=False, dsrdtr=False)
self.zig_ser = serial.Serial(zig_port, 115200, rtscts=False, dsrdtr=False)
self.nfc_reader = Nfc_Reader(self.nfc_ser)
self.zig_reader = Zig_Reader(self.zig_ser)
self.timer_zig.start(100) # 启动串口接收分析数据
self.nfc_reader.rfidm_c2_init()
#self.Result_edit.append('NFC、ZigBee模块联机成功')
self.TestStatus.setText('NFC、ZigBee模块联机成功')
self.ConnecDev_Btn.setEnabled(True)
self.ConnecDev_Btn.setText('断开')
self.NFCRead_Btn.setEnabled(True)
self.TestStatus.setText('联机成功!')
self.start = 1
thistime = time.strftime("%Y-%m-%d", time.localtime())
sql = "select count(*) from t_data_nfc where TIME LIKE \'%{0}%\'".format(thistime)
data = db._Query(sql)
self.Count_Edit.setText(str(data[0]['count(*)']))
if data[0]['count(*)'] < 10 :
self.encourage_label.setStyleSheet("font: 75 15pt \"微软雅黑\";\n"
"color: rgb(106, 168, 79);")
self.encourage_label.setText('今天是新的一天,加油!')
if data[0]['count(*)'] > 10 :
self.encourage_label.setStyleSheet("font: 75 15pt \"微软雅黑\";\n"
"color: rgb(255, 0, 0);")
self.encourage_label.setText('再接再厉!')
except Exception:
QMessageBox.warning(self, "标题", "连接失败", QMessageBox.Yes | QMessageBox.No, QMessageBox.Yes)
self.ConnecDev_Btn.setEnabled(True)
self.start = 0
return -1
def StartTest(self):
# self.thread_01 = Thread_01() # 创建线程
# self.thread_01.start() # 开始线程
# return 0
try:
if self.Test != 0:
self.Test = 0
ret = ctypes.windll.kernel32.TerminateThread(self.thread_01.handle, 0)
AFG.SetAmpl(0.02)
AFG.SetFrequency('80')
AFG.Close()
self.Test_Btn.setText('开始测试')
self.TestStatus.setText('测试结束')
return 0
elif self.Test == 0:
self.Test = 1
#AFG.Open()
thistime = time.strftime("%Y-%m-%d", time.localtime())
sql = "select count(*) from t_data_nfc where TIME LIKE \'%{0}%\'".format(thistime)
data = db._Query(sql)
self.Count_Edit.setText(str(data[0]['count(*)']))
if data[0]['count(*)'] < 10:
self.encourage_label.setStyleSheet("font: 75 15pt \"微软雅黑\";\n"
"color: rgb(106, 168, 79);")
self.encourage_label.setText('今天是新的一天,加油!')
if data[0]['count(*)'] > 10:
self.encourage_label.setStyleSheet("font: 75 20pt \"微软雅黑\";\n"
"color: rgb(255, 0, 0);")
self.encourage_label.setText('再接再厉!')
self.TestStatus.setText('正在测试中……')
self.ConnecDev_Btn.setEnabled(False)
self.NFCRead_Btn.setEnabled(False)
self.Test_Btn.setText('停止测试')
self.plot.clear()
self.thread_01 = Thread_01(self.Fredata,self.vol) # 创建线程
self.thread_01.trigger.connect(self.deal)
self.thread_01.Voltage.connect(self.VoltageFun)
self.thread_01.TestOK.connect(self.TestOKFun)
self.thread_01.AmplSig.connect(self.AmplFun)
self.thread_01.ThreadStop.connect(self.ThreadStop)
self.thread_01.TimeOut.connect(self.TimeOut)
self.thread_01.start() # 开始线程
return 0
except Exception:
QMessageBox.warning(self, "标题", "测试异常", QMessageBox.Yes | QMessageBox.No, QMessageBox.Yes)
return -1
# self.AFG3000.SetFrequency('8k')
# self.AFG3000.query('FREQUENCY?');
def AmplFun(self,updateampl):
updateampl = float(updateampl)*1000
self.Ampl_Edit.setText(str(updateampl))
def deal(self, updatestr):
self.encourage_label.setText('')
self.Frequency_Edit.setText(updatestr)
def VoltageFun(self, updateVoltage):
self.VOLTage_Edit.setText(updateVoltage)
def ThreadStop(self):
self.Test = 0
self.TestStatus.setText('测试结束')
self.Test_Btn.setText('开始测试')
self.NFCRead_Btn.setEnabled(True)
self.Ampl_Edit.setText('20')
self.Frequency_Edit.setText('80')
sql = "select rmsValue_Z,speedValue_Z, Frequency from t_data_zigbee where shortAddr = '{0}' order by Frequency".format(
self.ShortAddr)
data = db._Query(sql)
self.plot.plot(data,self.ShortAddr)
self.Test_Btn.setEnabled(False)
thistime = time.strftime("%Y-%m-%d", time.localtime())
sql = "select count(*) from t_data_nfc"
data = db._Query(sql)
self.TotalCount.setText(str(data[0]['count(*)']))
sql = "select count(*) from t_data_nfc where TIME LIKE \'%{0}%\'".format(thistime)
data = db._Query(sql)
self.Count_Edit.setText(str(data[0]['count(*)']))
if 10 < data[0]['count(*)'] < 50:
self.encourage_label.setStyleSheet("font: 75 15pt \"微软雅黑\";\n"
"color: rgb(255, 0, 0);")
self.encourage_label.setText('再接再厉!')
elif 50 < data[0]['count(*)'] < 100:
self.encourage_label.setStyleSheet("font: 75 20pt \"微软雅黑\";\n"
"color: rgb(255, 0, 0);")
self.encourage_label.setText('GOOD')
elif 100 < data[0]['count(*)'] < 110:
self.encourage_label.setStyleSheet("font: 75 30pt \"微软雅黑\";\n"
"color: rgb(255, 0, 0);")
self.encourage_label.setText('GREAT')
elif data[0]['count(*)'] > 110 :
self.encourage_label.setStyleSheet("font: 75 35pt \"微软雅黑\";\n"
"color: rgb(255, 255, 0);")
self.encourage_label.setText('UNBELIEVABLE')
def TimeOut(self):
self.encourage_label.setStyleSheet("font: 75 15pt \"微软雅黑\";\n"
"color: rgb(0, 0, 0);")
self.encourage_label.setText('超时了')
Stop = 1
# self.Test = 0
# ret = ctypes.windll.kernel32.TerminateThread(self.thread_01.handle, 0)
#
# AFG.SetAmpl(0.02)
# AFG.SetFrequency('80')
# AFG.Close()
# self.Test_Btn.setText('开始测试')
# self.TestStatus.setText('测试结束')
# QMessageBox.warning(self, "标题", "ZigBee接收超时请重新测试", QMessageBox.Yes | QMessageBox.No, QMessageBox.Yes)
def TestOKFun(self, updateTest):
print(updateTest)
self.TestOK = updateTest[0]
print(self.TestOK)
self.Fre = updateTest[1]
self.Vol = updateTest[2]
def get_nfc_zig_port(self):
serial_ports = self.get_serial_list()
for port in serial_ports:
port = list(port)
print(port)
if NFC_PORT_STR in port[1]:
nfc_port = port[0]
elif ZIG_PORT_STR in port[1]:
zig_port = port[0]
return (nfc_port, zig_port)
def get_serial_list(self):
serial_ports = serial.tools.list_ports.comports()
serial_list = []
for port in serial_ports:
serial_list.append(list(port))
return serial_list
#def multimeter_update(self):
#VOLTage = self.DMM.measure()
#print(VOLTage)
#self.VOLTage_Edit.setText(VOLTage)
def zig_update(self):
msg = ""
zig_info = self.zig_reader.read()
# 将解析的设备信息和特征值输出到界面上
if zig_info == SENSER_INF_PACK2:
for k, i in self.zig_reader.dev_info_msg.items():
msg = msg + k + ":" + str(i) + "\n"
for k, i in self.zig_reader.dev_conf_msg.items():
msg = msg + k + ":" + str(i) + "\n"
self.zig_conf_recv_flag = True
elif (zig_info == EVEL_DATA_PACK1) | (zig_info == EVEL_DATA_PACK2):
for k, i in self.zig_reader.dev_evel_msg.items():
# print(k, " :", i)
if isinstance(i, float):
msg = msg + k + ":" + format(i, ".4f") + "\n"
else:
msg = msg + k + ":" + str(i) + "\n"
if zig_info:
self.ZigBee_Edit.setText(msg)
zig_recv_file_name = self.zig_reader.dev_evel_msg['采集时间'][:10]+".txt"
with open(zig_recv_file_name, "a") as zig_recv_file:
zig_recv_file.write(msg)
zig_recv_file.write(str(self.Fre))
zig_recv_file.write(self.Vol)
zig_recv_file.write("\n\n")
global Stop
try:
#print(self.TestOK,len(msg),self.zig_reader.dev_evel_msg['传感器地址'] )
if int(self.TestOK) == 1 and (len(msg) > 0) and self.ShortAddr == self.zig_reader.dev_evel_msg['传感器地址']:
self.Next = 1
self.TestOK = '0'
print("OK1")
self.encourage_label.setStyleSheet("font: 75 15pt \"微软雅黑\";\n"
"color: rgb(0, 0, 0);")
self.encourage_label.setText('第一次收到Zigbee信息')
return
if (int(self.Next) == 1) and (len(msg) > 0) and self.ShortAddr == self.zig_reader.dev_evel_msg['传感器地址']:
print("OK2")
self.encourage_label.setStyleSheet("font: 75 15pt \"微软雅黑\";\n"
"color: rgb(0, 0, 0);")
self.encourage_label.setText('第二次收到Zigbee信息')
Stop = 1
self.Next = 0
sql = "select count(*) from t_data_zigbee where shortAddr = '{0}' and Frequency = '{1}';".format(
self.zig_reader.dev_evel_msg['传感器地址'],self.Fre)
data = db._Query(sql)
print(data[0]['count(*)'])
if data[0]['count(*)'] > 0:
sql = "update t_data_zigbee set sampleTime = '{0}',deviceTem = '{1}',\
environmentTem = '{2}',angle = '{3}',batteryV = '{4}',\
rmsPK_X = '{5}',rmsValue_X = '{6}',speedValue_X = '{7}',speedValue_X = '{8}',\
rmsPK_Y = '{9}',rmsValue_Y = '{10}',speedPK_Y = '{11}',speedValue_Y = '{12}',\
rmsPK_Z = '{13}',rmsValue_Z = '{14}',speedPK_Z = '{15}',speedValue_Z = '{16}',\
VOLTage = '{17}' \
where shortAddr = '{18}' and Frequency = {19};".format(self.zig_reader.dev_evel_msg['采集时间'],
self.zig_reader.dev_evel_msg['设备温度'],
self.zig_reader.dev_evel_msg['环境温度'],
self.zig_reader.dev_evel_msg['倾角'],
self.zig_reader.dev_evel_msg['电池电压'],
self.zig_reader.dev_evel_msg['X轴峰值'],
self.zig_reader.dev_evel_msg['X轴有效值'],
self.zig_reader.dev_evel_msg['X轴速度峰值'],
self.zig_reader.dev_evel_msg['X轴速度有效值'],
self.zig_reader.dev_evel_msg['Y轴峰值'],
self.zig_reader.dev_evel_msg['Y轴有效值'],
self.zig_reader.dev_evel_msg['Y轴速度峰值'],
self.zig_reader.dev_evel_msg['Y轴速度有效值'],
self.zig_reader.dev_evel_msg['Z轴峰值'],
self.zig_reader.dev_evel_msg['Z轴有效值'],
self.zig_reader.dev_evel_msg['Z轴速度峰值'],
self.zig_reader.dev_evel_msg['Z轴速度有效值'],self.Vol,
self.zig_reader.dev_evel_msg['传感器地址'],self.Fre)
print(sql)
data = db._Operate(sql)
else:
sql = "insert into t_data_zigbee(shortAddr,sampleTime,deviceTem,environmentTem,angle,batteryV,\
rmsPK_X,rmsValue_X,speedPK_X,speedValue_X,rmsPK_Y,rmsValue_Y,speedPK_Y,speedValue_Y,rmsPK_Z,\
rmsValue_Z,speedPK_Z,speedValue_Z,Frequency,VOLTage) values('{0}','{1}','{2}','{3}','{4}','{5}',\
'{6}','{7}','{8}','{9}','{10}','{11}','{12}','{13}','{14}','{15}','{16}','{17}',{18},'{19}'\
)".format(self.zig_reader.dev_evel_msg['传感器地址'],
self.zig_reader.dev_evel_msg['采集时间'],
self.zig_reader.dev_evel_msg['设备温度'],
self.zig_reader.dev_evel_msg['环境温度'],
self.zig_reader.dev_evel_msg['倾角'],
self.zig_reader.dev_evel_msg['电池电压'],
self.zig_reader.dev_evel_msg['X轴峰值'],
self.zig_reader.dev_evel_msg['X轴有效值'],
self.zig_reader.dev_evel_msg['X轴速度峰值'],
self.zig_reader.dev_evel_msg['X轴速度有效值'],
self.zig_reader.dev_evel_msg['Y轴峰值'],
self.zig_reader.dev_evel_msg['Y轴有效值'],
self.zig_reader.dev_evel_msg['Y轴速度峰值'],
self.zig_reader.dev_evel_msg['Y轴速度有效值'],
self.zig_reader.dev_evel_msg['Z轴峰值'],
self.zig_reader.dev_evel_msg['Z轴有效值'],
self.zig_reader.dev_evel_msg['Z轴速度峰值'],
self.zig_reader.dev_evel_msg['Z轴速度有效值'],self.Fre,self.Vol)
#print(sql)
data = db._Operate(sql)
self.TestOK = '0'
self.plot.clear()
sql = "select rmsValue_Z,speedValue_Z, Frequency from t_data_zigbee where shortAddr = '{0}' order by Frequency".format(
self.ShortAddr)
data = db._Query(sql)
self.plot.plot(data, self.ShortAddr)
except Exception:
QMessageBox.warning(self, "标题", "数据存储异常", QMessageBox.Yes | QMessageBox.No, QMessageBox.Yes)
return -1
def nfc_update(self):
msg = ''
for k, i in self.nfc_reader.dev_info_msg.items():
msg = msg + k + ":" + str(i) + "\n"
for k, i in self.nfc_reader.dev_conf_msg.items():
msg = msg + k + ":" + str(i) + "\n"
thistime = time.strftime("%Y-%m-%d %H:%M:%S ", time.localtime())
sql = "select count(*) from t_data_nfc where shortAddr = '{0}';".format(
self.nfc_reader.dev_conf_msg['Zigbee 本地地址'])
self.ShortAddr = self.nfc_reader.dev_conf_msg['Zigbee 本地地址']
data = db._Query(sql)
print(data[0]['count(*)'])
if data[0]['count(*)'] > 0:
sql = "update t_data_nfc set dataNodeName = '{0}',dataNodeNo = '{1}',\
hardWareVersion = '{2}',softVersion = '{3}',productNo = '{4}',\
productSN = '{5}',productType = '{6}',RSSI = '{7}',\
firstPowerTime = '{8}',TIME = '{9}',batteryV = '{10}'\
where shortAddr = '{11}';".format(self.nfc_reader.dev_info_msg['测点名称'],
self.nfc_reader.dev_info_msg['MAC地址'], \
self.nfc_reader.dev_info_msg['硬件版本'],
self.nfc_reader.dev_info_msg['软件版本'], \
self.nfc_reader.dev_info_msg['生产批号'],
self.nfc_reader.dev_info_msg['生产序列号'], \
self.nfc_reader.dev_info_msg['产品型号'],
self.nfc_reader.dev_info_msg['无线信号强度'], \
self.nfc_reader.dev_info_msg['首次上电日期'], thistime, \
self.nfc_reader.dev_info_msg['电池电压'],
self.nfc_reader.dev_conf_msg['Zigbee 本地地址'])
#print(sql)
data = db._Operate(sql);
else:
sql = "insert into t_data_nfc(dataNodeName,dataNodeNo,shortAddr,hardWareVersion,softVersion,productNo,\
productType,RSSI,productSN,firstPowerTime,batteryV,TIME) values('{0}','{1}','{2}','{3}','{4}','{5}',\
'{6}','{7}','{8}','{9}','{10}','{11}')".format(self.nfc_reader.dev_info_msg['测点名称'],
self.nfc_reader.dev_info_msg['MAC地址'], \
self.nfc_reader.dev_conf_msg['Zigbee 本地地址'],
self.nfc_reader.dev_info_msg['硬件版本'], \
self.nfc_reader.dev_info_msg['软件版本'],
self.nfc_reader.dev_info_msg['生产批号'], \
self.nfc_reader.dev_info_msg['产品型号'],
self.nfc_reader.dev_info_msg['无线信号强度'], \
self.nfc_reader.dev_info_msg['生产序列号'],
self.nfc_reader.dev_info_msg['首次上电日期'], \
self.nfc_reader.dev_info_msg['电池电压'], thistime)
#print(sql)
data = db._Operate(sql)
self.NFC_Edit.setText(msg)
self.tabWidget.setCurrentIndex(1)
def NFCRead(self):
try:
self.Test_Btn.setEnabled(True)
#self.Result_edit.clear()
self.tabWidget.setCurrentIndex(0)
QApplication.processEvents()
self.nfc_reader.get_uuid()
if self.nfc_reader.nfc_uuid:
#self.Result_edit.append("DN101 NFC UUID" + hex(self.nfc_reader.nfc_uuid)[2:])
time.sleep(0.5)
info = self.nfc_reader.read_info()
conf = self.nfc_reader.read_conf()
if info & conf:
self.nfc_reader.dev_info_analysis()
self.nfc_reader.dev_conf_analysis()
self.nfc_update()
self.TestStatus.setText('NFC读取成功')
#self.Result_edit.append("DN101 NFC读取成功")
return info
else:
#self.Result_edit.append("NFC读取失败")
return False
else:
#self.Result_edit.append("NFC读取失败")
return False
except Exception:
QMessageBox.warning(self, "标题", "测试异常", QMessageBox.Yes | QMessageBox.No, QMessageBox.Yes)
return -1
if __name__ == '__main__':
app = QApplication(sys.argv)
MainWindow = QMainWindow()
ui = Ui_DataNodeFrequencyTest()
ui.setupUi(MainWindow)
View = DataNodeFrequencyTest()
View.show()
sys.exit(app.exec_())

View File

@ -0,0 +1,40 @@
# -*- mode: python ; coding: utf-8 -*-
block_cipher = None
a = Analysis(['DataNodeFrequencyTestnew.py'],
pathex=[],
binaries=[],
datas=[],
hiddenimports=[],
hookspath=[],
hooksconfig={},
runtime_hooks=[],
excludes=[],
win_no_prefer_redirects=False,
win_private_assemblies=False,
cipher=block_cipher,
noarchive=False)
pyz = PYZ(a.pure, a.zipped_data,
cipher=block_cipher)
exe = EXE(pyz,
a.scripts,
a.binaries,
a.zipfiles,
a.datas,
[],
name='DataNodeFrequencyTestnew',
debug=False,
bootloader_ignore_signals=False,
strip=False,
upx=True,
upx_exclude=[],
runtime_tmpdir=None,
console=False,
disable_windowed_traceback=False,
target_arch=None,
codesign_identity=None,
entitlements_file=None )

View File

@ -0,0 +1,809 @@
#!/usr/bin/python3
# -*- coding: utf-8 -*-
import sys
from MainWindow import Ui_DataNodeFrequencyTest
from PyQt5.QtWidgets import QApplication, QMainWindow, QMessageBox
from AFG3000old import *
from Prologix import *
from DN101_NFC import *
from DN101_ZIGBEE import *
from Mysql import *
import serial, threading
import serial.tools.list_ports
from PyQt5.QtCore import QTimer, QThread, pyqtSignal
from PyQt5.QtGui import QIcon
from PyQt5.QtWidgets import *
import numpy as np
import matplotlib
import time
from sqlalchemy import create_engine
import pandas as pd
import tkinter as tk
from tkinter import filedialog
from playsound import playsound
matplotlib.use("Qt5Agg")
from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as FigureCanvas
from matplotlib.figure import Figure
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimHei'] # 指定默认字体
plt.rcParams['axes.unicode_minus'] = False # 解决保存图像是负号'-'显示为方块的问题
from matplotlib.backends.backend_qt5agg import NavigationToolbar2QT as NavigationToolbar
import win32con
from win32process import SuspendThread, ResumeThread
import ctypes
SENSER_INF_PACK1 = 0x01
SENSER_INF_PACK2 = 0x07
EVEL_DATA_PACK1 = 0x02
EVEL_DATA_PACK2 = 0x06
WAVE_X_PACK = 0x03
WAVE_Y_PACK = 0x04
WAVE_Z_PACK = 0x05
NFC_PORT_STR = 'Silicon Labs Dual CP210x USB to UART Bridge: Enhanced COM Port'
ZIG_PORT_STR = 'Silicon Labs Dual CP210x USB to UART Bridge: Standard COM Port'
AFG = AFG3000()
cfp = configparser.ConfigParser()
cfp.read("config.ini")
signal = cfp.get("Device", "deviceSignal")
multimeter = cfp.get("Device", "deviceMultimeter")
DMM = DMM_34401A(addr=22, port=multimeter, baud=115200, ser_timeout=3, timeout=2)
db = Mysql()
Stop = 0
vol = {
"160Hz":1.575,
"320Hz":1.000,
"640Hz":1.000,
"1000Hz":2.620,
"2000Hz":2.9,
"3000Hz":2.7,
"4000Hz":1.82,
"5000Hz":1.33,
"6000Hz":0.66
}
class Thread_01(QThread): # 线程1
trigger = pyqtSignal(str)
Voltage = pyqtSignal(str)
AmplSig = pyqtSignal(str)
TestOK = pyqtSignal(list)
ThreadStop = pyqtSignal()
TimeOut = pyqtSignal()
def __init__(self, Fredata):
super().__init__()
self.Fredata = Fredata
handle = -1
def run(self):
# try:
# self.handle = ctypes.windll.kernel32.OpenThread(
# win32con.PROCESS_ALL_ACCESS, False, int(QThread.currentThreadId()))
# except Exception as e:
# print('get thread handle failed', e)
#
# global StopThread
# for i in range(0, len(self.Fredata)):
# print(self.Fredata[i]['Frequency'])
#
# ampl = 0.02
# ampl_ins = 0.025
# AFG.SetAmpl(ampl)
# AFG.SetFrequency(str(self.Fredata[i]['Frequency']))
# self.trigger.emit(str(self.Fredata[i]['Frequency']))
# Voltage = str(DMM.measure())
# self.Voltage.emit(Voltage)
# retAmpl = AFG.query('VOLTAGE:AMPLITUDE?')
# self.AmplSig.emit(str(retAmpl))
#
# current_freq = str(self.Fredata[i]['Frequency']) + "Hz"
# ampl_set = vol[current_freq]
# while (ampl < ampl_set):
# ampl = ampl + ampl_ins
# AFG.SetAmpl(ampl)
# time.sleep(0.1)
#
# retry_times = 3
# Voltage = float(DMM.measure())
# while retry_times:
# vol_diff = 100 - Voltage
# vol_div = vol_diff / Voltage
# vol_change = float(ampl * vol_div)
# ampl = ampl + vol_change
#
# AFG.SetAmpl(ampl)
# time.sleep(0.1)
#
# Voltage = DMM.measure()
# if (abs(Voltage - 100) < 1):
# retry_times = 0
# else:
# retry_times = retry_times - 1
#
# try:
# vol_str = str(round(Voltage, 2))
# self.Voltage.emit(vol_str)
# retAmpl = AFG.query('VOLTAGE:AMPLITUDE?')
# retAmpl = round(retAmpl, 2)
# self.AmplSig.emit(str(retAmpl))
# except:
# pass
#
# vol[current_freq] = ampl
# print(current_freq, ampl)
#
#
# a = []
# a.append('1')
# a.append(self.Fredata[i]['Frequency'])
# a.append(Voltage)
# self.TestOK.emit(a)
# timeCount = 0
# while timeCount < 50:
# global Stop
# print(timeCount)
# if Stop == 1:
# time.sleep(1)
# Stop = 0
# break
# timeCount += 1
# time.sleep(1)
#
# print(Voltage)
# retAmpl = AFG.query('VOLTAGE:AMPLITUDE?')
# #print(retAmpl)
# while float(retAmpl) > 0.07:#微调ampl到最低值20mv
# retAmpl -= 0.05
# #print(retAmpl)
# AFG.SetAmpl(retAmpl)
# retAmpl = AFG.query('VOLTAGE:AMPLITUDE?')
# time.sleep(0.05)
# print(retAmpl)
# time.sleep(1)
#
# ampl = 0.02
# AFG.SetAmpl(ampl)
# AFG.SetFrequency('80')
# AFG.Close()
try:
self.handle = ctypes.windll.kernel32.OpenThread(
win32con.PROCESS_ALL_ACCESS, False, int(QThread.currentThreadId()))
except Exception as e:
print('get thread handle failed', e)
global StopThread
for i in range(0, len(self.Fredata)):
print(self.Fredata[i]['Frequency'])
ampl = 0.02
ampl_ins = 0.025
AFG.SetAmpl(ampl)
AFG.SetFrequency(str(self.Fredata[i]['Frequency']))
self.trigger.emit(str(self.Fredata[i]['Frequency']))
Voltage = str(DMM.measure())
self.Voltage.emit(Voltage)
retAmpl = AFG.query('VOLTAGE:AMPLITUDE?')
self.AmplSig.emit(str(retAmpl))
while (ampl < 1.3)&(float(self.Fredata[i]['Frequency'])<=160):
ampl += 0.05
AFG.SetAmpl(ampl)
time.sleep(0.1)
while (ampl < 1.6) & (float(self.Fredata[i]['Frequency']) > 160)& (float(self.Fredata[i]['Frequency']) <= 320):
ampl += 0.05
AFG.SetAmpl(ampl)
time.sleep(0.1)
while (ampl < 1.7) & (float(self.Fredata[i]['Frequency']) > 320)& (float(self.Fredata[i]['Frequency']) <= 640):
ampl += 0.05
AFG.SetAmpl(ampl)
time.sleep(0.1)
while (ampl < 1.7) & (float(self.Fredata[i]['Frequency']) > 640)& (float(self.Fredata[i]['Frequency']) <= 1000):
ampl += 0.05
AFG.SetAmpl(ampl)
time.sleep(0.1)
while (ampl < 1.2) & (float(self.Fredata[i]['Frequency']) > 1000)& (float(self.Fredata[i]['Frequency']) <= 2000):
ampl += 0.05
AFG.SetAmpl(ampl)
time.sleep(0.1)
while (ampl < 0.5) & (float(self.Fredata[i]['Frequency']) > 2000)& (float(self.Fredata[i]['Frequency']) <= 3000):
ampl += 0.05
AFG.SetAmpl(ampl)
time.sleep(0.1)
ampl_ins = 0.01
while (ampl < 0.05) & (float(self.Fredata[i]['Frequency']) > 3000)& (float(self.Fredata[i]['Frequency']) <= 4000):
ampl += 0.02
AFG.SetAmpl(ampl)
time.sleep(0.1)
ampl_ins = 0.01
while (ampl < 0.2) & (float(self.Fredata[i]['Frequency']) > 4000)& (float(self.Fredata[i]['Frequency']) <= 5000):
ampl += 0.05
AFG.SetAmpl(ampl)
time.sleep(0.1)
while (ampl < 0.4) & (float(self.Fredata[i]['Frequency']) > 5000)& (float(self.Fredata[i]['Frequency']) <= 7000):
ampl += 0.05
AFG.SetAmpl(ampl)
time.sleep(0.1)
try:
if(float(self.Fredata[i]['Frequency']) >= 1000):
DMM.set_measure_voltage_ac("AUTO", "200")
else:
DMM.set_measure_voltage_ac("AUTO", "20")
except:
print("DMM Set Error")
while float(Voltage) < 100:#调整电压到100mv
# if (float(self.Fredata[i]['Frequency']) >= 1000):
# Voltage = str(DMM.measure())
# ampl += 0.01
# self.Voltage.emit(Voltage)
# retAmpl = AFG.query('VOLTAGE:AMPLITUDE?')
# self.AmplSig.emit(str(retAmpl))
# AFG.SetAmpl(ampl)
# time.sleep(0.05)
# else:
Voltage = str(DMM.measure())
if float(Voltage) < 95:
ampl += ampl_ins
if (float(Voltage) > 95) and (float(Voltage) < 100):
ampl += 0.01
self.Voltage.emit(Voltage)
retAmpl = AFG.query('VOLTAGE:AMPLITUDE?')
self.AmplSig.emit(str(retAmpl))
AFG.SetAmpl(ampl)
if float(Voltage) > 100:
a = []
a.append('1')
a.append(self.Fredata[i]['Frequency'])
a.append(Voltage)
self.TestOK.emit(a)
timeCount = 0
while timeCount < 50:
global Stop
print(timeCount)
if Stop == 1:
time.sleep(1)
Stop = 0
break
timeCount += 1
time.sleep(1)
print(Voltage)
retAmpl = AFG.query('VOLTAGE:AMPLITUDE?')
#print(retAmpl)
while float(retAmpl) > 0.07:#微调ampl到最低值20mv
retAmpl -= 0.05
#print(retAmpl)
AFG.SetAmpl(retAmpl)
retAmpl = AFG.query('VOLTAGE:AMPLITUDE?')
time.sleep(0.05)
print(retAmpl)
time.sleep(1)
ampl = 0.02
AFG.SetAmpl(ampl)
AFG.SetFrequency('80')
AFG.Close()
self.ThreadStop.emit()
class MyFigureCanvas(FigureCanvas):
def __init__(self):
self.fig = Figure()
FigureCanvas.__init__(self, self.fig)
self.axes = self.fig.add_subplot(111)
#self.axes.set_ylim(ymin=0, ymax=30)
def plot(self, data,shortAddr):
self.axes.cla()
x = []
y1 = []
y2 = []
data1 = float(data[0]['rmsValue_Z']) * 1.41
for i in range(len(data)):
y1.append(float(data[i]['rmsValue_Z']))
x.append(data[i]['Frequency'])
y2.append(data1)
self.axes.plot(x, y1)
data1 = float(data[0]['rmsValue_Z']) * 1.41
self.axes.plot(x, y2)
self.axes.set_title('传感器短地址' + shortAddr)
self.axes.set_xlabel('Frequency(Hz)')
self.axes.set_ylabel('RMS(m/s^2)')
self.fig.subplots_adjust(left=0.15, bottom=0.2)
self.axes.grid()
self.fig.canvas.draw_idle()
now_time = datetime.datetime.now()
time_str = now_time.strftime('%Y-%m-%d')
strPath = os.getcwd()
path = strPath + '\\{0}\\{1}.png'.format(time_str, shortAddr)
self.fig.savefig(path)
def clear(self):
self.axes.cla()
self.axes.grid()
self.fig.canvas.draw_idle()
class DataNodeFrequencyTest(QMainWindow, Ui_DataNodeFrequencyTest):
def __init__(self):
super(DataNodeFrequencyTest, self).__init__()
self.setupUi(self)
self.setWindowTitle("无线传感器频响测试")
self.NFCRead_Btn.clicked.connect(self.NFCRead)
self.Test_Btn.clicked.connect(self.StartTest)
self.ConnecDev_Btn.clicked.connect(self.ConnectDev)
self.Export_Btn.clicked.connect(self.Export2Excel)
self.timer_zig = QTimer(self)
self.timer_zig.timeout.connect(self.zig_update)
#self.timer_multimeter = QTimer(self)
#self.timer_multimeter.timeout.connect(self.multimeter_update)
self.timer_single = QTimer(self)
self.timer_nfc = QTimer(self)
self.Init()
def Init(self):
self.start = 0
self.Test = 0
self.Next = 0
self.TestOK = '0'
self.Fre = 0
self.Vol = '0'
# self.AFG3000 = AFG3000()
self.port_list = AFG.init()
for i in range(0, len(self.port_list)):
self.Signal_Box.addItem(self.port_list[i])
print(self.port_list)
self.AUDIO_PATH = self.get_resources_path(os.path.join('res', 'Finish.mp3'))
#playsound(self.AUDIO_PATH)
self.port_list_multimeter = list(serial.tools.list_ports.comports())
for i in range(0, len(self.port_list_multimeter)):
self.multimeter_Box.addItem(self.port_list_multimeter[i].description)
self.Fredata = db._Query('select * from t_data_frequency order by Frequency;');
thistime = time.strftime("%Y-%m-%d", time.localtime())
sql = "select count(*) from t_data_nfc"
data = db._Query(sql)
self.TotalCount.setText(str(data[0]['count(*)']))
sql = "select count(*) from t_data_nfc where TIME LIKE \'%{0}%\'".format(thistime)
data = db._Query(sql)
self.Count_Edit.setText(str(data[0]['count(*)']))
self.tabWidget.setCurrentIndex(2)
self.NFCList = self.tabWidget.widget(2)
layoutNFC = QVBoxLayout()
layoutNFC.addWidget(QLabel('频点列表(Hz)'))
for i in range(0, len(self.Fredata)):
layoutNFC.addWidget(QLabel(str(self.Fredata[i]['Frequency'])))
layoutNFC.addStretch(1)
self.NFCList.setLayout(layoutNFC)
self.plot = MyFigureCanvas()
self.gridlayout = QGridLayout(self.groupBox_3) # 继承容器groupBox
self.toolbar = NavigationToolbar(self.plot, self)
self.gridlayout.addWidget(self.toolbar, 0, 0)
self.gridlayout.addWidget(self.plot, 1, 0)
self.show()
data = []
sql = "select rmsValue_Z,speedValue_Z, Frequency from t_data_zigbee where shortAddr = '450'"
data = db._Query(sql)
self.plot.plot(data, '450')
self.plot.clear()
def get_resources_path(self,relative_path):
if getattr(sys, 'frozen', False):
base_path = sys._MEIPASS
else:
base_path = os.path.abspath('.')
return os.path.join(base_path, relative_path)
def Export2Excel(self):
root = tk.Tk()
root.withdraw()
Filepath = filedialog.askdirectory() # 获得选择好的文件
engine = create_engine('mysql+pymysql://root:root@192.168.1.75:3306/datanodedb')
sql = 'SELECT * FROM t_data_zigbee'
df_read = pd.read_sql_query(sql, engine)
Filepath = Filepath + '/data.xlsx'
print(Filepath)
df_read.to_excel(Filepath, index=False)
QMessageBox.warning(self, "标题", "导出成功", QMessageBox.Yes | QMessageBox.No, QMessageBox.Yes)
def ConnectDev(self):
if self.start != 0:
self.Result_edit.clear()
self.start = 0
AFG.Close()
self.Result_edit.append('信号发生器断开成功!')
DMM.Close()
self.Result_edit.append('万用表断开成功!')
self.nfc_ser.close()
self.Result_edit.append('NFC模块断开成功')
self.zig_ser.close()
self.Result_edit.append('ZigBee模块断开成功')
return None
elif self.start == 0:
self.ConnecDev_Btn.setEnabled(False)
self.NFCRead_Btn.setEnabled(False)
self.Test_Btn.setEnabled(False)
try:
# 连接信号发生器
QApplication.processEvents()
self.Result_edit.clear()
#print(self.port_list[self.Signal_Box.currentIndex()])
# self.AFG3000.Open(self.port_list[self.Signal_Box.currentIndex()])
AFG.Connect(signal)
self.Result_edit.append('信号发生器联机成功!')
# 连接万用表
# DMM = DMM_34401A(addr=22, port="COM8", baud=115200, ser_timeout=3, timeout=2)
# self.DMM = DMM_34401A(addr=22, port=self.port_list_multimeter[self.multimeter_Box.currentIndex()].name, \
# baud=115200, timeout=5)
print(DMM.cmdPoll("DETector:BANDwidth?"))
DMM.set_measure_voltage_ac()
# self.timer_multimeter.start(200) # 启动串口接收分析数据
self.Result_edit.append('万用表联机成功!')
nfc_port, zig_port = self.get_nfc_zig_port()
print(nfc_port, zig_port)
self.nfc_ser = serial.Serial(nfc_port, 19200, rtscts=False, dsrdtr=False)
self.zig_ser = serial.Serial(zig_port, 115200, rtscts=False, dsrdtr=False)
self.nfc_reader = Nfc_Reader(self.nfc_ser)
self.zig_reader = Zig_Reader(self.zig_ser)
self.timer_zig.start(100) # 启动串口接收分析数据
self.nfc_reader.rfidm_c2_init()
self.Result_edit.append('NFC、ZigBee模块联机成功')
self.ConnecDev_Btn.setEnabled(True)
self.ConnecDev_Btn.setText('断开')
self.NFCRead_Btn.setEnabled(True)
self.start = 1
except Exception:
QMessageBox.warning(self, "标题", "连接失败", QMessageBox.Yes | QMessageBox.No, QMessageBox.Yes)
self.ConnecDev_Btn.setEnabled(True)
self.start = 0
return -1
def StartTest(self):
# self.thread_01 = Thread_01() # 创建线程
# self.thread_01.start() # 开始线程
# return 0
try:
if self.Test != 0:
self.Test = 0
ret = ctypes.windll.kernel32.TerminateThread(self.thread_01.handle, 0)
AFG.SetAmpl(0.02)
AFG.SetFrequency('80')
AFG.Close()
self.Test_Btn.setText('开始测试')
self.TestStatus.setText('测试结束')
return 0
elif self.Test == 0:
self.Test = 1
AFG.Open()
self.TestStatus.setText('正在测试中……')
self.ConnecDev_Btn.setEnabled(False)
self.NFCRead_Btn.setEnabled(False)
self.Test_Btn.setText('停止测试')
self.plot.clear()
self.thread_01 = Thread_01(self.Fredata) # 创建线程
self.thread_01.trigger.connect(self.deal)
self.thread_01.Voltage.connect(self.VoltageFun)
self.thread_01.TestOK.connect(self.TestOKFun)
self.thread_01.AmplSig.connect(self.AmplFun)
self.thread_01.ThreadStop.connect(self.ThreadStop)
self.thread_01.TimeOut.connect(self.TimeOut)
self.thread_01.start() # 开始线程
return 0
except Exception:
QMessageBox.warning(self, "标题", "测试异常", QMessageBox.Yes | QMessageBox.No, QMessageBox.Yes)
return -1
# self.AFG3000.SetFrequency('8k')
# self.AFG3000.query('FREQUENCY?');
def AmplFun(self,updateampl):
updateampl = float(updateampl)*1000
self.Ampl_Edit.setText(str(updateampl))
def deal(self, updatestr):
self.Frequency_Edit.setText(updatestr)
def VoltageFun(self, updateVoltage):
self.VOLTage_Edit.setText(updateVoltage)
def ThreadStop(self):
self.Test = 0
self.TestStatus.setText('测试结束')
self.Test_Btn.setText('开始测试')
self.NFCRead_Btn.setEnabled(True)
self.Ampl_Edit.setText('20')
self.Frequency_Edit.setText('80')
sql = "select rmsValue_Z,speedValue_Z, Frequency from t_data_zigbee where shortAddr = '{0}' order by Frequency".format(
self.ShortAddr)
data = db._Query(sql)
self.plot.plot(data,self.ShortAddr)
self.Test_Btn.setEnabled(False)
thistime = time.strftime("%Y-%m-%d", time.localtime())
sql = "select count(*) from t_data_nfc"
data = db._Query(sql)
self.TotalCount.setText(str(data[0]['count(*)']))
sql = "select count(*) from t_data_nfc where TIME LIKE \'%{0}%\'".format(thistime)
data = db._Query(sql)
self.Count_Edit.setText(str(data[0]['count(*)']))
#playsound(self.AUDIO_PATH)
def TimeOut(self):
self.Test = 0
ret = ctypes.windll.kernel32.TerminateThread(self.thread_01.handle, 0)
AFG.SetAmpl(0.02)
AFG.SetFrequency('80')
AFG.Close();
self.Test_Btn.setText('开始测试')
self.TestStatus.setText('测试结束')
QMessageBox.warning(self, "标题", "ZigBee接收超时请重新测试", QMessageBox.Yes | QMessageBox.No, QMessageBox.Yes)
def TestOKFun(self, updateTest):
print(updateTest)
self.TestOK = updateTest[0]
print(self.TestOK)
self.Fre = updateTest[1]
self.Vol = updateTest[2]
def get_nfc_zig_port(self):
serial_ports = self.get_serial_list()
for port in serial_ports:
port = list(port)
print(port)
if NFC_PORT_STR in port[1]:
nfc_port = port[0]
elif ZIG_PORT_STR in port[1]:
zig_port = port[0]
return (nfc_port, zig_port)
def get_serial_list(self):
serial_ports = serial.tools.list_ports.comports()
serial_list = []
for port in serial_ports:
serial_list.append(list(port))
return serial_list
#def multimeter_update(self):
#VOLTage = self.DMM.measure()
#print(VOLTage)
#self.VOLTage_Edit.setText(VOLTage)
def zig_update(self):
msg = ""
zig_info = self.zig_reader.read()
# 将解析的设备信息和特征值输出到界面上
if zig_info == SENSER_INF_PACK2:
for k, i in self.zig_reader.dev_info_msg.items():
msg = msg + k + ":" + str(i) + "\n"
for k, i in self.zig_reader.dev_conf_msg.items():
msg = msg + k + ":" + str(i) + "\n"
self.zig_conf_recv_flag = True
elif (zig_info == EVEL_DATA_PACK1) | (zig_info == EVEL_DATA_PACK2):
for k, i in self.zig_reader.dev_evel_msg.items():
# print(k, " :", i)
if isinstance(i, float):
msg = msg + k + ":" + format(i, ".4f") + "\n"
else:
msg = msg + k + ":" + str(i) + "\n"
if zig_info:
self.ZigBee_textEdit.setText(msg)
# zig_recv_file_name = self.zig_reader.dev_evel_msg['采集时间'][:10]+".txt"
# with open(zig_recv_file_name, "a") as zig_recv_file:
# zig_recv_file.write(msg)
# zig_recv_file.write(str(self.Fre))
# zig_recv_file.write(self.Vol)
# zig_recv_file.write("\n\n")
global Stop
try:
if int(self.TestOK) == 1 and (len(msg) > 0) and self.ShortAddr == self.zig_reader.dev_evel_msg['传感器地址']:
self.Next = 1
self.TestOK = '0'
print("OK1")
return
if (int(self.Next) == 1) and (len(msg) > 0) and self.ShortAddr == self.zig_reader.dev_evel_msg['传感器地址']:
print("OK2")
Stop = 1
self.Next = 0
sql = "select count(*) from t_data_zigbee where shortAddr = '{0}' and Frequency = '{1}';".format(
self.zig_reader.dev_evel_msg['传感器地址'],self.Fre)
data = db._Query(sql)
print(data[0]['count(*)'])
if data[0]['count(*)'] > 0:
sql = "update t_data_zigbee set sampleTime = '{0}',deviceTem = '{1}',\
environmentTem = '{2}',angle = '{3}',batteryV = '{4}',\
rmsPK_X = '{5}',rmsValue_X = '{6}',speedValue_X = '{7}',speedValue_X = '{8}',\
rmsPK_Y = '{9}',rmsValue_Y = '{10}',speedPK_Y = '{11}',speedValue_Y = '{12}',\
rmsPK_Z = '{13}',rmsValue_Z = '{14}',speedPK_Z = '{15}',speedValue_Z = '{16}',\
VOLTage = '{17}' \
where shortAddr = '{18}' and Frequency = '{19}';".format(self.zig_reader.dev_evel_msg['采集时间'],
self.zig_reader.dev_evel_msg['设备温度'],
self.zig_reader.dev_evel_msg['环境温度'],
self.zig_reader.dev_evel_msg['倾角'],
self.zig_reader.dev_evel_msg['电池电压'],
self.zig_reader.dev_evel_msg['X轴峰值'],
self.zig_reader.dev_evel_msg['X轴有效值'],
self.zig_reader.dev_evel_msg['X轴速度峰值'],
self.zig_reader.dev_evel_msg['X轴速度有效值'],
self.zig_reader.dev_evel_msg['Y轴峰值'],
self.zig_reader.dev_evel_msg['Y轴有效值'],
self.zig_reader.dev_evel_msg['Y轴速度峰值'],
self.zig_reader.dev_evel_msg['Y轴速度有效值'],
self.zig_reader.dev_evel_msg['Z轴峰值'],
self.zig_reader.dev_evel_msg['Z轴有效值'],
self.zig_reader.dev_evel_msg['Z轴速度峰值'],
self.zig_reader.dev_evel_msg['Z轴速度有效值'],self.Vol,
self.zig_reader.dev_evel_msg['传感器地址'],self.Fre)
print(sql)
data = db._Operate(sql)
else:
sql = "insert into t_data_zigbee(shortAddr,sampleTime,deviceTem,environmentTem,angle,batteryV,\
rmsPK_X,rmsValue_X,speedPK_X,speedValue_X,rmsPK_Y,rmsValue_Y,speedPK_Y,speedValue_Y,rmsPK_Z,\
rmsValue_Z,speedPK_Z,speedValue_Z,Frequency,VOLTage) values('{0}','{1}','{2}','{3}','{4}','{5}',\
'{6}','{7}','{8}','{9}','{10}','{11}','{12}','{13}','{14}','{15}','{16}','{17}',{18},'{19}'\
)".format(self.zig_reader.dev_evel_msg['传感器地址'],
self.zig_reader.dev_evel_msg['采集时间'],
self.zig_reader.dev_evel_msg['设备温度'],
self.zig_reader.dev_evel_msg['环境温度'],
self.zig_reader.dev_evel_msg['倾角'],
self.zig_reader.dev_evel_msg['电池电压'],
self.zig_reader.dev_evel_msg['X轴峰值'],
self.zig_reader.dev_evel_msg['X轴有效值'],
self.zig_reader.dev_evel_msg['X轴速度峰值'],
self.zig_reader.dev_evel_msg['X轴速度有效值'],
self.zig_reader.dev_evel_msg['Y轴峰值'],
self.zig_reader.dev_evel_msg['Y轴有效值'],
self.zig_reader.dev_evel_msg['Y轴速度峰值'],
self.zig_reader.dev_evel_msg['Y轴速度有效值'],
self.zig_reader.dev_evel_msg['Z轴峰值'],
self.zig_reader.dev_evel_msg['Z轴有效值'],
self.zig_reader.dev_evel_msg['Z轴速度峰值'],
self.zig_reader.dev_evel_msg['Z轴速度有效值'],self.Fre,self.Vol)
#print(sql)
data = db._Operate(sql)
self.TestOK = '0'
except Exception:
QMessageBox.warning(self, "标题", "数据存储异常", QMessageBox.Yes | QMessageBox.No, QMessageBox.Yes)
return -1
def nfc_update(self):
msg = ''
for k, i in self.nfc_reader.dev_info_msg.items():
msg = msg + k + ":" + str(i) + "\n"
for k, i in self.nfc_reader.dev_conf_msg.items():
msg = msg + k + ":" + str(i) + "\n"
thistime = time.strftime("%Y-%m-%d %H:%M:%S ", time.localtime())
sql = "select count(*) from t_data_nfc where shortAddr = '{0}';".format(
self.nfc_reader.dev_conf_msg['Zigbee 本地地址'])
self.ShortAddr = self.nfc_reader.dev_conf_msg['Zigbee 本地地址']
data = db._Query(sql)
print(data[0]['count(*)'])
if data[0]['count(*)'] > 0:
sql = "update t_data_nfc set dataNodeName = '{0}',dataNodeNo = '{1}',\
hardWareVersion = '{2}',softVersion = '{3}',productNo = '{4}',\
productSN = '{5}',productType = '{6}',RSSI = '{7}',\
firstPowerTime = '{8}',TIME = '{9}',batteryV = '{10}'\
where shortAddr = '{11}';".format(self.nfc_reader.dev_info_msg['测点名称'],
self.nfc_reader.dev_info_msg['MAC地址'], \
self.nfc_reader.dev_info_msg['硬件版本'],
self.nfc_reader.dev_info_msg['软件版本'], \
self.nfc_reader.dev_info_msg['生产批号'],
self.nfc_reader.dev_info_msg['生产序列号'], \
self.nfc_reader.dev_info_msg['产品型号'],
self.nfc_reader.dev_info_msg['无线信号强度'], \
self.nfc_reader.dev_info_msg['首次上电日期'], thistime, \
self.nfc_reader.dev_info_msg['电池电压'],
self.nfc_reader.dev_conf_msg['Zigbee 本地地址'])
#print(sql)
data = db._Operate(sql);
else:
sql = "insert into t_data_nfc(dataNodeName,dataNodeNo,shortAddr,hardWareVersion,softVersion,productNo,\
productType,RSSI,productSN,firstPowerTime,batteryV,TIME) values('{0}','{1}','{2}','{3}','{4}','{5}',\
'{6}','{7}','{8}','{9}','{10}','{11}')".format(self.nfc_reader.dev_info_msg['测点名称'],
self.nfc_reader.dev_info_msg['MAC地址'], \
self.nfc_reader.dev_conf_msg['Zigbee 本地地址'],
self.nfc_reader.dev_info_msg['硬件版本'], \
self.nfc_reader.dev_info_msg['软件版本'],
self.nfc_reader.dev_info_msg['生产批号'], \
self.nfc_reader.dev_info_msg['产品型号'],
self.nfc_reader.dev_info_msg['无线信号强度'], \
self.nfc_reader.dev_info_msg['生产序列号'],
self.nfc_reader.dev_info_msg['首次上电日期'], \
self.nfc_reader.dev_info_msg['电池电压'], thistime)
#print(sql)
data = db._Operate(sql);
self.NFC_textEdit.setText(msg)
def NFCRead(self):
try:
self.Test_Btn.setEnabled(True)
self.Result_edit.clear()
self.tabWidget.setCurrentIndex(0)
QApplication.processEvents()
self.nfc_reader.get_uuid()
if self.nfc_reader.nfc_uuid:
self.Result_edit.append("DN101 NFC UUID" + hex(self.nfc_reader.nfc_uuid)[2:])
time.sleep(0.5)
info = self.nfc_reader.read_info()
conf = self.nfc_reader.read_conf()
if info & conf:
self.nfc_reader.dev_info_analysis()
self.nfc_reader.dev_conf_analysis()
self.nfc_update()
self.Result_edit.append("DN101 NFC读取成功")
return info
else:
self.Result_edit.append("NFC读取失败")
return False
else:
self.Result_edit.append("NFC读取失败")
return False
except Exception:
QMessageBox.warning(self, "标题", "测试异常", QMessageBox.Yes | QMessageBox.No, QMessageBox.Yes)
return -1
if __name__ == '__main__':
app = QApplication(sys.argv)
MainWindow = QMainWindow()
ui = Ui_DataNodeFrequencyTest()
ui.setupUi(MainWindow)
View = DataNodeFrequencyTest()
View.show()
sys.exit(app.exec_())

View File

@ -0,0 +1,40 @@
# -*- mode: python ; coding: utf-8 -*-
block_cipher = None
a = Analysis(['DataNodeFrequencyTestold.py'],
pathex=[],
binaries=[],
datas=[],
hiddenimports=[],
hookspath=[],
hooksconfig={},
runtime_hooks=[],
excludes=[],
win_no_prefer_redirects=False,
win_private_assemblies=False,
cipher=block_cipher,
noarchive=False)
pyz = PYZ(a.pure, a.zipped_data,
cipher=block_cipher)
exe = EXE(pyz,
a.scripts,
a.binaries,
a.zipfiles,
a.datas,
[],
name='DataNodeFrequencyTestold',
debug=False,
bootloader_ignore_signals=False,
strip=False,
upx=True,
upx_exclude=[],
runtime_tmpdir=None,
console=True,
disable_windowed_traceback=False,
target_arch=None,
codesign_identity=None,
entitlements_file=None )

View File

@ -0,0 +1,301 @@
# -*- coding: utf-8 -*-
# Form implementation generated from reading ui file 'mainwindow.ui'
#
# Created by: PyQt5 UI code generator 5.15.6
#
# WARNING: Any manual changes made to this file will be lost when pyuic5 is
# run again. Do not edit this file unless you know what you are doing.
from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_DataNodeFrequencyTest(object):
def setupUi(self, DataNodeFrequencyTest):
DataNodeFrequencyTest.setObjectName("DataNodeFrequencyTest")
DataNodeFrequencyTest.resize(850, 600)
self.centralwidget = QtWidgets.QWidget(DataNodeFrequencyTest)
self.centralwidget.setObjectName("centralwidget")
self.verticalLayout = QtWidgets.QVBoxLayout(self.centralwidget)
self.verticalLayout.setObjectName("verticalLayout")
self.widget = QtWidgets.QWidget(self.centralwidget)
self.widget.setObjectName("widget")
self.horizontalLayout = QtWidgets.QHBoxLayout(self.widget)
self.horizontalLayout.setObjectName("horizontalLayout")
self.widget_3 = QtWidgets.QWidget(self.widget)
self.widget_3.setMinimumSize(QtCore.QSize(500, 0))
self.widget_3.setObjectName("widget_3")
self.verticalLayout_3 = QtWidgets.QVBoxLayout(self.widget_3)
self.verticalLayout_3.setObjectName("verticalLayout_3")
self.widget_7 = QtWidgets.QWidget(self.widget_3)
self.widget_7.setMinimumSize(QtCore.QSize(0, 300))
self.widget_7.setObjectName("widget_7")
self.horizontalLayout_8 = QtWidgets.QHBoxLayout(self.widget_7)
self.horizontalLayout_8.setObjectName("horizontalLayout_8")
self.groupBox_3 = QtWidgets.QGroupBox(self.widget_7)
self.groupBox_3.setObjectName("groupBox_3")
self.horizontalLayout_8.addWidget(self.groupBox_3)
self.verticalLayout_3.addWidget(self.widget_7)
self.widget_9 = QtWidgets.QWidget(self.widget_3)
self.widget_9.setMinimumSize(QtCore.QSize(120, 0))
self.widget_9.setObjectName("widget_9")
self.horizontalLayout_12 = QtWidgets.QHBoxLayout(self.widget_9)
self.horizontalLayout_12.setObjectName("horizontalLayout_12")
self.verticalLayout_4 = QtWidgets.QVBoxLayout()
self.verticalLayout_4.setObjectName("verticalLayout_4")
self.horizontalLayout_11 = QtWidgets.QHBoxLayout()
self.horizontalLayout_11.setObjectName("horizontalLayout_11")
self.label = QtWidgets.QLabel(self.widget_9)
self.label.setMinimumSize(QtCore.QSize(100, 0))
self.label.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter)
self.label.setObjectName("label")
self.horizontalLayout_11.addWidget(self.label)
self.sensorType_Box = QtWidgets.QComboBox(self.widget_9)
self.sensorType_Box.setMinimumSize(QtCore.QSize(220, 0))
self.sensorType_Box.setMaximumSize(QtCore.QSize(220, 16777215))
self.sensorType_Box.setObjectName("sensorType_Box")
self.horizontalLayout_11.addWidget(self.sensorType_Box)
self.verticalLayout_4.addLayout(self.horizontalLayout_11)
self.horizontalLayout_10 = QtWidgets.QHBoxLayout()
self.horizontalLayout_10.setObjectName("horizontalLayout_10")
self.label_7 = QtWidgets.QLabel(self.widget_9)
self.label_7.setMinimumSize(QtCore.QSize(120, 0))
self.label_7.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter)
self.label_7.setObjectName("label_7")
self.horizontalLayout_10.addWidget(self.label_7)
self.multimeter_Box = QtWidgets.QComboBox(self.widget_9)
self.multimeter_Box.setMinimumSize(QtCore.QSize(220, 0))
self.multimeter_Box.setMaximumSize(QtCore.QSize(220, 16777215))
self.multimeter_Box.setObjectName("multimeter_Box")
self.horizontalLayout_10.addWidget(self.multimeter_Box)
self.verticalLayout_4.addLayout(self.horizontalLayout_10)
self.horizontalLayout_9 = QtWidgets.QHBoxLayout()
self.horizontalLayout_9.setObjectName("horizontalLayout_9")
self.label_2 = QtWidgets.QLabel(self.widget_9)
self.label_2.setMinimumSize(QtCore.QSize(120, 0))
self.label_2.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter)
self.label_2.setObjectName("label_2")
self.horizontalLayout_9.addWidget(self.label_2)
self.Signal_Edit = QtWidgets.QLineEdit(self.widget_9)
self.Signal_Edit.setMinimumSize(QtCore.QSize(220, 0))
self.Signal_Edit.setMaximumSize(QtCore.QSize(220, 16777215))
self.Signal_Edit.setObjectName("Signal_Edit")
self.horizontalLayout_9.addWidget(self.Signal_Edit)
self.verticalLayout_4.addLayout(self.horizontalLayout_9)
self.horizontalLayout_12.addLayout(self.verticalLayout_4)
spacerItem = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
self.horizontalLayout_12.addItem(spacerItem)
self.verticalLayout_6 = QtWidgets.QVBoxLayout()
self.verticalLayout_6.setObjectName("verticalLayout_6")
self.ConnecDev_Btn = QtWidgets.QPushButton(self.widget_9)
self.ConnecDev_Btn.setObjectName("ConnecDev_Btn")
self.verticalLayout_6.addWidget(self.ConnecDev_Btn)
self.NFCRead_Btn = QtWidgets.QPushButton(self.widget_9)
self.NFCRead_Btn.setEnabled(False)
self.NFCRead_Btn.setObjectName("NFCRead_Btn")
self.verticalLayout_6.addWidget(self.NFCRead_Btn)
self.Test_Btn = QtWidgets.QPushButton(self.widget_9)
self.Test_Btn.setEnabled(False)
self.Test_Btn.setObjectName("Test_Btn")
self.verticalLayout_6.addWidget(self.Test_Btn)
self.horizontalLayout_12.addLayout(self.verticalLayout_6)
self.verticalLayout_3.addWidget(self.widget_9)
self.horizontalLayout.addWidget(self.widget_3)
self.widget_4 = QtWidgets.QWidget(self.widget)
self.widget_4.setObjectName("widget_4")
self.verticalLayout_2 = QtWidgets.QVBoxLayout(self.widget_4)
self.verticalLayout_2.setObjectName("verticalLayout_2")
self.widget_5 = QtWidgets.QWidget(self.widget_4)
self.widget_5.setMinimumSize(QtCore.QSize(300, 240))
self.widget_5.setObjectName("widget_5")
self.horizontalLayout_2 = QtWidgets.QHBoxLayout(self.widget_5)
self.horizontalLayout_2.setObjectName("horizontalLayout_2")
self.groupBox_2 = QtWidgets.QGroupBox(self.widget_5)
self.groupBox_2.setObjectName("groupBox_2")
self.widget1 = QtWidgets.QWidget(self.groupBox_2)
self.widget1.setGeometry(QtCore.QRect(10, 22, 259, 32))
self.widget1.setObjectName("widget1")
self.horizontalLayout_4 = QtWidgets.QHBoxLayout(self.widget1)
self.horizontalLayout_4.setContentsMargins(0, 0, 0, 0)
self.horizontalLayout_4.setObjectName("horizontalLayout_4")
self.label_3 = QtWidgets.QLabel(self.widget1)
self.label_3.setMinimumSize(QtCore.QSize(100, 0))
self.label_3.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter)
self.label_3.setObjectName("label_3")
self.horizontalLayout_4.addWidget(self.label_3)
self.Frequency_Edit = QtWidgets.QLineEdit(self.widget1)
self.Frequency_Edit.setEnabled(False)
self.Frequency_Edit.setMinimumSize(QtCore.QSize(0, 30))
self.Frequency_Edit.setStyleSheet("font: 75 20pt \"微软雅黑\";\n"
"color: rgb(255, 170, 0);")
self.Frequency_Edit.setObjectName("Frequency_Edit")
self.horizontalLayout_4.addWidget(self.Frequency_Edit)
self.label_10 = QtWidgets.QLabel(self.widget1)
self.label_10.setObjectName("label_10")
self.horizontalLayout_4.addWidget(self.label_10)
self.widget2 = QtWidgets.QWidget(self.groupBox_2)
self.widget2.setGeometry(QtCore.QRect(10, 71, 259, 32))
self.widget2.setObjectName("widget2")
self.horizontalLayout_5 = QtWidgets.QHBoxLayout(self.widget2)
self.horizontalLayout_5.setContentsMargins(0, 0, 0, 0)
self.horizontalLayout_5.setObjectName("horizontalLayout_5")
self.label_4 = QtWidgets.QLabel(self.widget2)
self.label_4.setMinimumSize(QtCore.QSize(100, 0))
self.label_4.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter)
self.label_4.setObjectName("label_4")
self.horizontalLayout_5.addWidget(self.label_4)
self.Ampl_Edit = QtWidgets.QLineEdit(self.widget2)
self.Ampl_Edit.setEnabled(False)
self.Ampl_Edit.setMinimumSize(QtCore.QSize(0, 30))
self.Ampl_Edit.setStyleSheet("font: 75 20pt \"微软雅黑\";\n"
"color: rgb(255, 170, 0);")
self.Ampl_Edit.setObjectName("Ampl_Edit")
self.horizontalLayout_5.addWidget(self.Ampl_Edit)
self.label_11 = QtWidgets.QLabel(self.widget2)
self.label_11.setObjectName("label_11")
self.horizontalLayout_5.addWidget(self.label_11)
self.widget3 = QtWidgets.QWidget(self.groupBox_2)
self.widget3.setGeometry(QtCore.QRect(10, 120, 259, 32))
self.widget3.setObjectName("widget3")
self.horizontalLayout_6 = QtWidgets.QHBoxLayout(self.widget3)
self.horizontalLayout_6.setContentsMargins(0, 0, 0, 0)
self.horizontalLayout_6.setObjectName("horizontalLayout_6")
self.label_5 = QtWidgets.QLabel(self.widget3)
self.label_5.setMinimumSize(QtCore.QSize(100, 0))
self.label_5.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter)
self.label_5.setObjectName("label_5")
self.horizontalLayout_6.addWidget(self.label_5)
self.VOLTage_Edit = QtWidgets.QLineEdit(self.widget3)
self.VOLTage_Edit.setEnabled(False)
self.VOLTage_Edit.setMinimumSize(QtCore.QSize(0, 30))
self.VOLTage_Edit.setStyleSheet("font: 75 20pt \"微软雅黑\";\n"
"color: rgb(255, 170, 0);")
self.VOLTage_Edit.setObjectName("VOLTage_Edit")
self.horizontalLayout_6.addWidget(self.VOLTage_Edit)
self.label_9 = QtWidgets.QLabel(self.widget3)
self.label_9.setObjectName("label_9")
self.horizontalLayout_6.addWidget(self.label_9)
self.widget4 = QtWidgets.QWidget(self.groupBox_2)
self.widget4.setGeometry(QtCore.QRect(10, 169, 259, 32))
self.widget4.setObjectName("widget4")
self.horizontalLayout_7 = QtWidgets.QHBoxLayout(self.widget4)
self.horizontalLayout_7.setContentsMargins(0, 0, 0, 0)
self.horizontalLayout_7.setObjectName("horizontalLayout_7")
self.label_6 = QtWidgets.QLabel(self.widget4)
self.label_6.setMinimumSize(QtCore.QSize(100, 0))
self.label_6.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter)
self.label_6.setObjectName("label_6")
self.horizontalLayout_7.addWidget(self.label_6)
self.Count_Edit = QtWidgets.QLineEdit(self.widget4)
self.Count_Edit.setEnabled(False)
self.Count_Edit.setMinimumSize(QtCore.QSize(0, 30))
self.Count_Edit.setStyleSheet("font: 75 20pt \"微软雅黑\";\n"
"color: rgb(255, 170, 0);")
self.Count_Edit.setObjectName("Count_Edit")
self.horizontalLayout_7.addWidget(self.Count_Edit)
self.label_12 = QtWidgets.QLabel(self.widget4)
self.label_12.setObjectName("label_12")
self.horizontalLayout_7.addWidget(self.label_12)
self.horizontalLayout_2.addWidget(self.groupBox_2)
self.verticalLayout_2.addWidget(self.widget_5)
self.widget_6 = QtWidgets.QWidget(self.widget_4)
self.widget_6.setObjectName("widget_6")
self.horizontalLayout_3 = QtWidgets.QHBoxLayout(self.widget_6)
self.horizontalLayout_3.setObjectName("horizontalLayout_3")
self.tabWidget = QtWidgets.QTabWidget(self.widget_6)
self.tabWidget.setObjectName("tabWidget")
self.tab_3 = QtWidgets.QWidget()
self.tab_3.setObjectName("tab_3")
self.horizontalLayout_15 = QtWidgets.QHBoxLayout(self.tab_3)
self.horizontalLayout_15.setObjectName("horizontalLayout_15")
self.ZigBee_Edit = QtWidgets.QTextEdit(self.tab_3)
self.ZigBee_Edit.setObjectName("ZigBee_Edit")
self.horizontalLayout_15.addWidget(self.ZigBee_Edit)
self.tabWidget.addTab(self.tab_3, "")
self.tab_6 = QtWidgets.QWidget()
self.tab_6.setObjectName("tab_6")
self.horizontalLayout_16 = QtWidgets.QHBoxLayout(self.tab_6)
self.horizontalLayout_16.setObjectName("horizontalLayout_16")
self.NFC_Edit = QtWidgets.QTextEdit(self.tab_6)
self.NFC_Edit.setObjectName("NFC_Edit")
self.horizontalLayout_16.addWidget(self.NFC_Edit)
self.tabWidget.addTab(self.tab_6, "")
self.tab_4 = QtWidgets.QWidget()
self.tab_4.setObjectName("tab_4")
self.tabWidget.addTab(self.tab_4, "")
self.horizontalLayout_3.addWidget(self.tabWidget)
self.verticalLayout_2.addWidget(self.widget_6)
self.horizontalLayout.addWidget(self.widget_4)
self.verticalLayout.addWidget(self.widget)
self.widget_2 = QtWidgets.QWidget(self.centralwidget)
self.widget_2.setMinimumSize(QtCore.QSize(0, 80))
self.widget_2.setMaximumSize(QtCore.QSize(16777215, 80))
self.widget_2.setObjectName("widget_2")
self.horizontalLayout_17 = QtWidgets.QHBoxLayout(self.widget_2)
self.horizontalLayout_17.setObjectName("horizontalLayout_17")
self.horizontalLayout_13 = QtWidgets.QHBoxLayout()
self.horizontalLayout_13.setObjectName("horizontalLayout_13")
self.label_8 = QtWidgets.QLabel(self.widget_2)
self.label_8.setObjectName("label_8")
self.horizontalLayout_13.addWidget(self.label_8)
self.TestStatus = QtWidgets.QLabel(self.widget_2)
self.TestStatus.setStyleSheet("font: 75 28pt \"微软雅黑\";\n"
"color: rgb(255, 170, 0);")
self.TestStatus.setObjectName("TestStatus")
self.horizontalLayout_13.addWidget(self.TestStatus)
self.horizontalLayout_17.addLayout(self.horizontalLayout_13)
spacerItem1 = QtWidgets.QSpacerItem(56, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
self.horizontalLayout_17.addItem(spacerItem1)
self.horizontalLayout_14 = QtWidgets.QHBoxLayout()
self.horizontalLayout_14.setObjectName("horizontalLayout_14")
self.label_14 = QtWidgets.QLabel(self.widget_2)
self.label_14.setObjectName("label_14")
self.horizontalLayout_14.addWidget(self.label_14)
self.TotalCount = QtWidgets.QLabel(self.widget_2)
self.TotalCount.setStyleSheet("font: 75 28pt \"微软雅黑\";\n"
"color: rgb(255, 170, 0);")
self.TotalCount.setObjectName("TotalCount")
self.horizontalLayout_14.addWidget(self.TotalCount)
self.horizontalLayout_17.addLayout(self.horizontalLayout_14)
spacerItem2 = QtWidgets.QSpacerItem(55, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
self.horizontalLayout_17.addItem(spacerItem2)
self.encourage_label = QtWidgets.QLabel(self.widget_2)
self.encourage_label.setStyleSheet("font: 75 28pt \"微软雅黑\";\n"
"color: rgb(255, 170, 0);")
self.encourage_label.setObjectName("encourage_label")
self.horizontalLayout_17.addWidget(self.encourage_label)
self.verticalLayout.addWidget(self.widget_2)
DataNodeFrequencyTest.setCentralWidget(self.centralwidget)
self.retranslateUi(DataNodeFrequencyTest)
self.tabWidget.setCurrentIndex(0)
QtCore.QMetaObject.connectSlotsByName(DataNodeFrequencyTest)
def retranslateUi(self, DataNodeFrequencyTest):
_translate = QtCore.QCoreApplication.translate
DataNodeFrequencyTest.setWindowTitle(_translate("DataNodeFrequencyTest", "DataNodeFrequencyTest"))
self.groupBox_3.setTitle(_translate("DataNodeFrequencyTest", "频响曲线"))
self.label.setText(_translate("DataNodeFrequencyTest", " 传感器类型:"))
self.label_7.setText(_translate("DataNodeFrequencyTest", " 万用表端口:"))
self.label_2.setText(_translate("DataNodeFrequencyTest", "信号发生器端口:"))
self.ConnecDev_Btn.setText(_translate("DataNodeFrequencyTest", " 联机"))
self.NFCRead_Btn.setText(_translate("DataNodeFrequencyTest", "NFC读取"))
self.Test_Btn.setText(_translate("DataNodeFrequencyTest", "开始测试"))
self.groupBox_2.setTitle(_translate("DataNodeFrequencyTest", "实时数据"))
self.label_3.setText(_translate("DataNodeFrequencyTest", "信号发生器频率:"))
self.label_10.setText(_translate("DataNodeFrequencyTest", "Hz"))
self.label_4.setText(_translate("DataNodeFrequencyTest", "信号发生器幅值:"))
self.label_11.setText(_translate("DataNodeFrequencyTest", "mv"))
self.label_5.setText(_translate("DataNodeFrequencyTest", "万用表电压:"))
self.label_9.setText(_translate("DataNodeFrequencyTest", "mv"))
self.label_6.setText(_translate("DataNodeFrequencyTest", "今天测试个数:"))
self.label_12.setText(_translate("DataNodeFrequencyTest", ""))
self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab_3), _translate("DataNodeFrequencyTest", "Zigbee"))
self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab_6), _translate("DataNodeFrequencyTest", "NFC"))
self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab_4), _translate("DataNodeFrequencyTest", "Frequency"))
self.label_8.setText(_translate("DataNodeFrequencyTest", " 当前状态:"))
self.TestStatus.setText(_translate("DataNodeFrequencyTest", "未测试"))
self.label_14.setText(_translate("DataNodeFrequencyTest", "累计测试个数:"))
self.TotalCount.setText(_translate("DataNodeFrequencyTest", "TextLabel"))
self.encourage_label.setText(_translate("DataNodeFrequencyTest", ""))

View File

@ -0,0 +1,38 @@
#!/usr/bin/python3
# -*- coding: utf-8 -*-
import pymysql
import configparser
cfp = configparser.ConfigParser()
cfp.read("config.ini")
class Mysql():
def __init__(self):
ip = cfp.get("DB","IP")
self.conn = pymysql.connect(host=ip, user='root', password='root', port=3306, db='datanodedb',
charset='utf8');
print(self.conn)
try:
self.cursor = self.conn.cursor(cursor=pymysql.cursors.DictCursor)
except pymysql.err.MySQLError as _error:
raise _error
def _Query(self, sql):
print(sql)
try:
self.cursor.execute(sql)
data = self.cursor.fetchall()
return data
except pymysql.err.MySQLError as _error:
raise _error
def _Operate(self, sql):
try:
print(sql)
self.cursor.execute(sql)
# 提交数据
self.conn.commit()
except pymysql.err.MySQLError as _error:
raise _error

View File

@ -0,0 +1,181 @@
import serial
import datetime
import os
import time
from decimal import *
class prologix(object):
serial: object = None
debug: bool = False
timeout: float = 2.5
EOL: str = "\n"
def __init__(self, addr:int=22, port:str="com1", baud: int = 115200,
ser_timeout: float = 3, timeout: float = 2.5, debug: bool = False):
"""
:param port:
:param baud:
:param timeout:
:param debug:
"""
self.timeout = timeout
try:
self.serial = serial.Serial(port, baudrate=baud, timeout=ser_timeout)
except serial.SerialException:
print("!! Port " + port + " could not be opened")
self.serial = None
else:
timeout_str = str(int(self.timeout*1000))
self.cmdWrite("++addr "+str(addr)) #select instrument gpib address
self.cmdWrite("++mode 1") # Change to controller mode
self.cmdWrite("++auto 0") # Do not automatically read device after each command
self.cmdWrite("++eoi 1") #自动添加命令结束标识符
self.cmdWrite("++eos 2") #结束标识符为LF
self.cmdWrite("++read_tmo_ms "+timeout_str) # Transmission timeout
self.cmdWrite("++ifc")
#self.cmdWrite("++clr")
# Check for Prologix device
self.cmdWrite("++ver")
check = self.serial.readline()
if len(check) <= 0:
print("!! No responding device on port " + port + " found")
self.serial = None
return None
else:
info = "Device on Port : "+port
return info
def cmdWrite(self, cmd: str):
"""
通过串口写入数据无数据读回
:param cmd: 命令
:return: None
"""
self.serial.reset_output_buffer()
self.serial.write(str.encode(cmd+self.EOL))
self.serial.flush()
def cmdPoll(self, cmd: str):
"""
写入命令并读回返回值
:param cmd:
:return:
"""
self.serial.reset_input_buffer()
self.cmdWrite(cmd)
ret = self.cmdRead()
return ret
def cmdRead(self):
self.cmdWrite("++read eoi")
out = self.serial.readline()
#print("Read out: ", out)
if len(out) == 0:
return None
return out
def release(self):
"""
解除对仪器的控制
:return: None
"""
self.cmdWrite("++loc")
self.serial.close()
class DMM_34401A(prologix):
def __init__(self, addr:int=22, port:str="com1", baud: int = 115200,
ser_timeout: float=3, timeout: float=2.5,debug: bool = False ):
super(DMM_34401A,self).__init__(addr, port, baud, ser_timeout, timeout)
self.init_setup()
def init_setup(self):
#self.auto_disable
#self.clear_err()
#self.auto_enable
ret = self.cmdPoll("*IDN?")
#print(ret)
@property
def auto_enable(self):
self.cmdWrite("++auto 1")
mode = self.cmdPoll("++auto")
return mode
@property
def auto_disable(self):
self.cmdWrite("++auto 0")
mode = self.cmdPoll("++auto")
return mode
def close_dmm(self):
self.release()
def measure(self):
ret = self.cmdPoll("*CLS;:READ?")
#print(ret)
if ret==None:
return None
value = ret.decode().strip()
value = float(value)
value = (value*1000)
value = Decimal(value).quantize(Decimal('0.000'))
return value
def clear_err(self):
self.cmdWrite("*CLS")
def measure_multi(self, count):
measure_result = []
index = 0
while index < count:
ret = self.measure()
if ret:
measure_result.append(ret)
index += 1
return measure_result
def set_measure_voltage_ac(self, range:str="AUTO", band:str="20"):
"""
设置测量AC电压
:param range量程: AUTO, MIN, MAX
:param band带宽: 3, 20, 200
:return: Conf info
"""
self.cmdWrite("CONFigure:VOLTage:AC "+range)
ret = self.cmdPoll("CONFigure?")
print("测量模式:",ret.decode().strip())
self.cmdWrite("DETector:BANDwidth "+band)
ret = self.cmdPoll("DETector:BANDwidth?")
print("AC带宽:",ret.decode().strip())
def set_measure_voltage_dc(self, range:str="AUTO"):
"""
设置测量DC电压
:param range量程: AUTO, ...
:return:
"""
self.cmdWrite("CONFigure:VOLTage:DC "+range)
ret = self.cmdPoll("CONFigure?")
#print(ret)
def Close(self):
self.release()

View File

@ -0,0 +1,16 @@
from Prologix import *
#创建34401A 连接
DMM = DMM_34401A(addr=22, port="COM12", baud=115200, ser_timeout=3, timeout=2)
DMM.cmdWrite("*RST")
DMM.cmdWrite("CONFigure:VOLTage:AC AUTO")
print(DMM.cmdWrite("DETector:BANDwidth 20"))
print(DMM.cmdPoll("DETector:BANDwidth?"))
DMM.set_measure_voltage_ac()
print(DMM.cmdPoll("MEASure:VOLTage:AC?"))
for i in range(10):
print(DMM.measure())

Binary file not shown.

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,31 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<assemblyIdentity type="win32" name="DataNodeFrequencyTestnew" processorArchitecture="amd64" version="1.0.0.0"/>
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
<security>
<requestedPrivileges>
<requestedExecutionLevel level="asInvoker" uiAccess="false"/>
</requestedPrivileges>
</security>
</trustInfo>
<dependency>
<dependentAssembly>
<assemblyIdentity type="win32" name="Microsoft.Windows.Common-Controls" language="*" processorArchitecture="*" version="6.0.0.0" publicKeyToken="6595b64144ccf1df"/>
<compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1"/>
</dependentAssembly>
</dependency>
<compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">
<application>
<supportedOS Id="{e2011457-1546-43c5-a5fe-008deee3d3f0}"/>
<supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}"/>
<supportedOS Id="{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}"/>
<supportedOS Id="{1f676c76-80e1-4239-95bb-83d0f6d0da78}"/>
<supportedOS Id="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}"/>
</application>
</compatibility>
<application xmlns="urn:schemas-microsoft-com:asm.v3">
<windowsSettings>
<longPathAware xmlns="http://schemas.microsoft.com/SMI/2016/WindowsSettings">true</longPathAware>
</windowsSettings>
</application>
</assembly>

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,257 @@
('D:\\Program Files\\Python39\\tcl\\tk8.6',
'tk',
['demos', '*.lib', 'tkConfig.sh'],
'DATA',
[('tk\\bgerror.tcl',
'D:\\Program Files\\Python39\\tcl\\tk8.6\\bgerror.tcl',
'DATA'),
('tk\\button.tcl',
'D:\\Program Files\\Python39\\tcl\\tk8.6\\button.tcl',
'DATA'),
('tk\\choosedir.tcl',
'D:\\Program Files\\Python39\\tcl\\tk8.6\\choosedir.tcl',
'DATA'),
('tk\\clrpick.tcl',
'D:\\Program Files\\Python39\\tcl\\tk8.6\\clrpick.tcl',
'DATA'),
('tk\\comdlg.tcl',
'D:\\Program Files\\Python39\\tcl\\tk8.6\\comdlg.tcl',
'DATA'),
('tk\\console.tcl',
'D:\\Program Files\\Python39\\tcl\\tk8.6\\console.tcl',
'DATA'),
('tk\\dialog.tcl',
'D:\\Program Files\\Python39\\tcl\\tk8.6\\dialog.tcl',
'DATA'),
('tk\\entry.tcl',
'D:\\Program Files\\Python39\\tcl\\tk8.6\\entry.tcl',
'DATA'),
('tk\\focus.tcl',
'D:\\Program Files\\Python39\\tcl\\tk8.6\\focus.tcl',
'DATA'),
('tk\\fontchooser.tcl',
'D:\\Program Files\\Python39\\tcl\\tk8.6\\fontchooser.tcl',
'DATA'),
('tk\\iconlist.tcl',
'D:\\Program Files\\Python39\\tcl\\tk8.6\\iconlist.tcl',
'DATA'),
('tk\\icons.tcl',
'D:\\Program Files\\Python39\\tcl\\tk8.6\\icons.tcl',
'DATA'),
('tk\\license.terms',
'D:\\Program Files\\Python39\\tcl\\tk8.6\\license.terms',
'DATA'),
('tk\\listbox.tcl',
'D:\\Program Files\\Python39\\tcl\\tk8.6\\listbox.tcl',
'DATA'),
('tk\\megawidget.tcl',
'D:\\Program Files\\Python39\\tcl\\tk8.6\\megawidget.tcl',
'DATA'),
('tk\\menu.tcl', 'D:\\Program Files\\Python39\\tcl\\tk8.6\\menu.tcl', 'DATA'),
('tk\\mkpsenc.tcl',
'D:\\Program Files\\Python39\\tcl\\tk8.6\\mkpsenc.tcl',
'DATA'),
('tk\\msgbox.tcl',
'D:\\Program Files\\Python39\\tcl\\tk8.6\\msgbox.tcl',
'DATA'),
('tk\\obsolete.tcl',
'D:\\Program Files\\Python39\\tcl\\tk8.6\\obsolete.tcl',
'DATA'),
('tk\\optMenu.tcl',
'D:\\Program Files\\Python39\\tcl\\tk8.6\\optMenu.tcl',
'DATA'),
('tk\\palette.tcl',
'D:\\Program Files\\Python39\\tcl\\tk8.6\\palette.tcl',
'DATA'),
('tk\\panedwindow.tcl',
'D:\\Program Files\\Python39\\tcl\\tk8.6\\panedwindow.tcl',
'DATA'),
('tk\\pkgIndex.tcl',
'D:\\Program Files\\Python39\\tcl\\tk8.6\\pkgIndex.tcl',
'DATA'),
('tk\\safetk.tcl',
'D:\\Program Files\\Python39\\tcl\\tk8.6\\safetk.tcl',
'DATA'),
('tk\\scale.tcl',
'D:\\Program Files\\Python39\\tcl\\tk8.6\\scale.tcl',
'DATA'),
('tk\\scrlbar.tcl',
'D:\\Program Files\\Python39\\tcl\\tk8.6\\scrlbar.tcl',
'DATA'),
('tk\\spinbox.tcl',
'D:\\Program Files\\Python39\\tcl\\tk8.6\\spinbox.tcl',
'DATA'),
('tk\\tclIndex', 'D:\\Program Files\\Python39\\tcl\\tk8.6\\tclIndex', 'DATA'),
('tk\\tearoff.tcl',
'D:\\Program Files\\Python39\\tcl\\tk8.6\\tearoff.tcl',
'DATA'),
('tk\\text.tcl', 'D:\\Program Files\\Python39\\tcl\\tk8.6\\text.tcl', 'DATA'),
('tk\\tk.tcl', 'D:\\Program Files\\Python39\\tcl\\tk8.6\\tk.tcl', 'DATA'),
('tk\\tkfbox.tcl',
'D:\\Program Files\\Python39\\tcl\\tk8.6\\tkfbox.tcl',
'DATA'),
('tk\\unsupported.tcl',
'D:\\Program Files\\Python39\\tcl\\tk8.6\\unsupported.tcl',
'DATA'),
('tk\\xmfbox.tcl',
'D:\\Program Files\\Python39\\tcl\\tk8.6\\xmfbox.tcl',
'DATA'),
('tk\\ttk\\altTheme.tcl',
'D:\\Program Files\\Python39\\tcl\\tk8.6\\ttk\\altTheme.tcl',
'DATA'),
('tk\\ttk\\aquaTheme.tcl',
'D:\\Program Files\\Python39\\tcl\\tk8.6\\ttk\\aquaTheme.tcl',
'DATA'),
('tk\\ttk\\button.tcl',
'D:\\Program Files\\Python39\\tcl\\tk8.6\\ttk\\button.tcl',
'DATA'),
('tk\\ttk\\clamTheme.tcl',
'D:\\Program Files\\Python39\\tcl\\tk8.6\\ttk\\clamTheme.tcl',
'DATA'),
('tk\\ttk\\classicTheme.tcl',
'D:\\Program Files\\Python39\\tcl\\tk8.6\\ttk\\classicTheme.tcl',
'DATA'),
('tk\\ttk\\combobox.tcl',
'D:\\Program Files\\Python39\\tcl\\tk8.6\\ttk\\combobox.tcl',
'DATA'),
('tk\\ttk\\cursors.tcl',
'D:\\Program Files\\Python39\\tcl\\tk8.6\\ttk\\cursors.tcl',
'DATA'),
('tk\\ttk\\defaults.tcl',
'D:\\Program Files\\Python39\\tcl\\tk8.6\\ttk\\defaults.tcl',
'DATA'),
('tk\\ttk\\entry.tcl',
'D:\\Program Files\\Python39\\tcl\\tk8.6\\ttk\\entry.tcl',
'DATA'),
('tk\\ttk\\fonts.tcl',
'D:\\Program Files\\Python39\\tcl\\tk8.6\\ttk\\fonts.tcl',
'DATA'),
('tk\\ttk\\menubutton.tcl',
'D:\\Program Files\\Python39\\tcl\\tk8.6\\ttk\\menubutton.tcl',
'DATA'),
('tk\\ttk\\notebook.tcl',
'D:\\Program Files\\Python39\\tcl\\tk8.6\\ttk\\notebook.tcl',
'DATA'),
('tk\\ttk\\panedwindow.tcl',
'D:\\Program Files\\Python39\\tcl\\tk8.6\\ttk\\panedwindow.tcl',
'DATA'),
('tk\\ttk\\progress.tcl',
'D:\\Program Files\\Python39\\tcl\\tk8.6\\ttk\\progress.tcl',
'DATA'),
('tk\\ttk\\scale.tcl',
'D:\\Program Files\\Python39\\tcl\\tk8.6\\ttk\\scale.tcl',
'DATA'),
('tk\\ttk\\scrollbar.tcl',
'D:\\Program Files\\Python39\\tcl\\tk8.6\\ttk\\scrollbar.tcl',
'DATA'),
('tk\\ttk\\sizegrip.tcl',
'D:\\Program Files\\Python39\\tcl\\tk8.6\\ttk\\sizegrip.tcl',
'DATA'),
('tk\\ttk\\spinbox.tcl',
'D:\\Program Files\\Python39\\tcl\\tk8.6\\ttk\\spinbox.tcl',
'DATA'),
('tk\\ttk\\treeview.tcl',
'D:\\Program Files\\Python39\\tcl\\tk8.6\\ttk\\treeview.tcl',
'DATA'),
('tk\\ttk\\ttk.tcl',
'D:\\Program Files\\Python39\\tcl\\tk8.6\\ttk\\ttk.tcl',
'DATA'),
('tk\\ttk\\utils.tcl',
'D:\\Program Files\\Python39\\tcl\\tk8.6\\ttk\\utils.tcl',
'DATA'),
('tk\\ttk\\vistaTheme.tcl',
'D:\\Program Files\\Python39\\tcl\\tk8.6\\ttk\\vistaTheme.tcl',
'DATA'),
('tk\\ttk\\winTheme.tcl',
'D:\\Program Files\\Python39\\tcl\\tk8.6\\ttk\\winTheme.tcl',
'DATA'),
('tk\\ttk\\xpTheme.tcl',
'D:\\Program Files\\Python39\\tcl\\tk8.6\\ttk\\xpTheme.tcl',
'DATA'),
('tk\\msgs\\cs.msg',
'D:\\Program Files\\Python39\\tcl\\tk8.6\\msgs\\cs.msg',
'DATA'),
('tk\\msgs\\da.msg',
'D:\\Program Files\\Python39\\tcl\\tk8.6\\msgs\\da.msg',
'DATA'),
('tk\\msgs\\de.msg',
'D:\\Program Files\\Python39\\tcl\\tk8.6\\msgs\\de.msg',
'DATA'),
('tk\\msgs\\el.msg',
'D:\\Program Files\\Python39\\tcl\\tk8.6\\msgs\\el.msg',
'DATA'),
('tk\\msgs\\en.msg',
'D:\\Program Files\\Python39\\tcl\\tk8.6\\msgs\\en.msg',
'DATA'),
('tk\\msgs\\en_gb.msg',
'D:\\Program Files\\Python39\\tcl\\tk8.6\\msgs\\en_gb.msg',
'DATA'),
('tk\\msgs\\eo.msg',
'D:\\Program Files\\Python39\\tcl\\tk8.6\\msgs\\eo.msg',
'DATA'),
('tk\\msgs\\es.msg',
'D:\\Program Files\\Python39\\tcl\\tk8.6\\msgs\\es.msg',
'DATA'),
('tk\\msgs\\fr.msg',
'D:\\Program Files\\Python39\\tcl\\tk8.6\\msgs\\fr.msg',
'DATA'),
('tk\\msgs\\hu.msg',
'D:\\Program Files\\Python39\\tcl\\tk8.6\\msgs\\hu.msg',
'DATA'),
('tk\\msgs\\it.msg',
'D:\\Program Files\\Python39\\tcl\\tk8.6\\msgs\\it.msg',
'DATA'),
('tk\\msgs\\nl.msg',
'D:\\Program Files\\Python39\\tcl\\tk8.6\\msgs\\nl.msg',
'DATA'),
('tk\\msgs\\pl.msg',
'D:\\Program Files\\Python39\\tcl\\tk8.6\\msgs\\pl.msg',
'DATA'),
('tk\\msgs\\pt.msg',
'D:\\Program Files\\Python39\\tcl\\tk8.6\\msgs\\pt.msg',
'DATA'),
('tk\\msgs\\ru.msg',
'D:\\Program Files\\Python39\\tcl\\tk8.6\\msgs\\ru.msg',
'DATA'),
('tk\\msgs\\sv.msg',
'D:\\Program Files\\Python39\\tcl\\tk8.6\\msgs\\sv.msg',
'DATA'),
('tk\\images\\logo.eps',
'D:\\Program Files\\Python39\\tcl\\tk8.6\\images\\logo.eps',
'DATA'),
('tk\\images\\logo100.gif',
'D:\\Program Files\\Python39\\tcl\\tk8.6\\images\\logo100.gif',
'DATA'),
('tk\\images\\logo64.gif',
'D:\\Program Files\\Python39\\tcl\\tk8.6\\images\\logo64.gif',
'DATA'),
('tk\\images\\logoLarge.gif',
'D:\\Program Files\\Python39\\tcl\\tk8.6\\images\\logoLarge.gif',
'DATA'),
('tk\\images\\logoMed.gif',
'D:\\Program Files\\Python39\\tcl\\tk8.6\\images\\logoMed.gif',
'DATA'),
('tk\\images\\pwrdLogo.eps',
'D:\\Program Files\\Python39\\tcl\\tk8.6\\images\\pwrdLogo.eps',
'DATA'),
('tk\\images\\pwrdLogo100.gif',
'D:\\Program Files\\Python39\\tcl\\tk8.6\\images\\pwrdLogo100.gif',
'DATA'),
('tk\\images\\pwrdLogo150.gif',
'D:\\Program Files\\Python39\\tcl\\tk8.6\\images\\pwrdLogo150.gif',
'DATA'),
('tk\\images\\pwrdLogo175.gif',
'D:\\Program Files\\Python39\\tcl\\tk8.6\\images\\pwrdLogo175.gif',
'DATA'),
('tk\\images\\pwrdLogo200.gif',
'D:\\Program Files\\Python39\\tcl\\tk8.6\\images\\pwrdLogo200.gif',
'DATA'),
('tk\\images\\pwrdLogo75.gif',
'D:\\Program Files\\Python39\\tcl\\tk8.6\\images\\pwrdLogo75.gif',
'DATA'),
('tk\\images\\README',
'D:\\Program Files\\Python39\\tcl\\tk8.6\\images\\README',
'DATA'),
('tk\\images\\tai-ku.gif',
'D:\\Program Files\\Python39\\tcl\\tk8.6\\images\\tai-ku.gif',
'DATA')])

View File

@ -0,0 +1,21 @@
('D:\\Program Files\\Python39\\tcl\\tcl8.6\\..\\tcl8',
'tcl8',
[],
'DATA',
[('tcl8\\8.6\\http-2.9.5.tm',
'D:\\Program Files\\Python39\\tcl\\tcl8.6\\..\\tcl8\\8.6\\http-2.9.5.tm',
'DATA'),
('tcl8\\8.5\\msgcat-1.6.1.tm',
'D:\\Program Files\\Python39\\tcl\\tcl8.6\\..\\tcl8\\8.5\\msgcat-1.6.1.tm',
'DATA'),
('tcl8\\8.5\\tcltest-2.5.3.tm',
'D:\\Program Files\\Python39\\tcl\\tcl8.6\\..\\tcl8\\8.5\\tcltest-2.5.3.tm',
'DATA'),
('tcl8\\8.4\\platform-1.0.18.tm',
'D:\\Program '
'Files\\Python39\\tcl\\tcl8.6\\..\\tcl8\\8.4\\platform-1.0.18.tm',
'DATA'),
('tcl8\\8.4\\platform\\shell-1.1.4.tm',
'D:\\Program '
'Files\\Python39\\tcl\\tcl8.6\\..\\tcl8\\8.4\\platform\\shell-1.1.4.tm',
'DATA')])

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,314 @@
This file lists modules PyInstaller was not able to find. This does not
necessarily mean this module is required for running you program. Python and
Python 3rd-party packages include a lot of conditional or optional modules. For
example the module 'ntpath' only exists on Windows, whereas the module
'posixpath' only exists on Posix systems.
Types if import:
* top-level: imported at the top-level - look at these first
* conditional: imported within an if-statement
* delayed: imported from within a function
* optional: imported within a try-except-statement
IMPORTANT: Do NOT post this list to the issue-tracker. Use it as a basis for
yourself tracking down the missing module. Thanks!
missing module named 'org.python' - imported by copy (optional), xml.sax (delayed, conditional), setuptools.sandbox (conditional)
missing module named _posixsubprocess - imported by subprocess (optional), multiprocessing.util (delayed)
missing module named grp - imported by shutil (optional), tarfile (optional), pathlib (delayed, optional), subprocess (optional), distutils.archive_util (optional)
missing module named pwd - imported by posixpath (delayed, conditional), shutil (optional), tarfile (optional), pathlib (delayed, conditional, optional), subprocess (optional), http.server (delayed, optional), webbrowser (delayed), netrc (delayed, conditional), getpass (delayed), distutils.util (delayed, conditional, optional), distutils.archive_util (optional)
missing module named _posixshmem - imported by multiprocessing.resource_tracker (conditional), multiprocessing.shared_memory (conditional)
missing module named multiprocessing.set_start_method - imported by multiprocessing (top-level), multiprocessing.spawn (top-level)
missing module named multiprocessing.get_start_method - imported by multiprocessing (top-level), multiprocessing.spawn (top-level)
missing module named urllib.unquote_plus - imported by urllib (conditional), sqlalchemy.util.compat (conditional)
missing module named urllib.unquote - imported by urllib (conditional), sqlalchemy.util.compat (conditional)
missing module named urllib.quote_plus - imported by urllib (conditional), sqlalchemy.util.compat (conditional)
missing module named urllib.quote - imported by urllib (conditional), sqlalchemy.util.compat (conditional), playsound (delayed, optional)
missing module named urllib.pathname2url - imported by urllib (conditional), PyInstaller.lib.modulegraph._compat (conditional), playsound (delayed, optional)
missing module named pep517 - imported by importlib.metadata (delayed)
missing module named posix - imported by os (conditional, optional), shutil (conditional), importlib._bootstrap_external (conditional)
missing module named resource - imported by posix (top-level), test.support (delayed, conditional, optional)
excluded module named _frozen_importlib - imported by importlib (optional), importlib.abc (optional), zipimport (top-level), PyInstaller.loader.pyimod02_archive (delayed)
missing module named _frozen_importlib_external - imported by importlib._bootstrap (delayed), importlib (optional), importlib.abc (optional), zipimport (top-level)
missing module named multiprocessing.get_context - imported by multiprocessing (top-level), multiprocessing.pool (top-level), multiprocessing.managers (top-level), multiprocessing.sharedctypes (top-level)
missing module named multiprocessing.TimeoutError - imported by multiprocessing (top-level), multiprocessing.pool (top-level)
missing module named _scproxy - imported by urllib.request (conditional)
missing module named termios - imported by tty (top-level), getpass (optional), serial.serialposix (top-level)
missing module named 'java.lang' - imported by platform (delayed, optional), xml.sax._exceptions (conditional)
missing module named multiprocessing.BufferTooShort - imported by multiprocessing (top-level), multiprocessing.connection (top-level)
missing module named multiprocessing.AuthenticationError - imported by multiprocessing (top-level), multiprocessing.connection (top-level)
missing module named multiprocessing.Pool - imported by multiprocessing (delayed, conditional), scipy._lib._util (delayed, conditional)
missing module named multiprocessing.Manager - imported by multiprocessing (optional), nose.plugins.plugintest (optional)
missing module named multiprocessing.current_process - imported by multiprocessing (delayed), nose.plugins.plugintest (delayed)
missing module named asyncio.DefaultEventLoopPolicy - imported by asyncio (delayed, conditional), asyncio.events (delayed, conditional)
missing module named vms_lib - imported by platform (delayed, optional)
missing module named java - imported by platform (delayed)
missing module named _winreg - imported by platform (delayed, optional), pkg_resources._vendor.appdirs (delayed, conditional)
missing module named readline - imported by cmd (delayed, conditional, optional), code (delayed, conditional, optional), pdb (delayed, optional)
missing module named org - imported by pickle (optional)
missing module named pyimod03_importers - imported by D:\Program Files\Python39\Lib\site-packages\PyInstaller\hooks\rthooks\pyi_rth_pkgutil.py (top-level), D:\Program Files\Python39\Lib\site-packages\PyInstaller\hooks\rthooks\pyi_rth_pkgres.py (top-level)
missing module named tputil - imported by jinja2.debug (conditional, optional)
missing module named railroad - imported by pyparsing.diagram (top-level)
missing module named _manylinux - imported by pkg_resources._vendor.packaging.tags (delayed, optional), packaging._manylinux (delayed, optional), setuptools._vendor.packaging.tags (delayed, optional)
missing module named 'com.sun' - imported by pkg_resources._vendor.appdirs (delayed, conditional, optional)
missing module named com - imported by pkg_resources._vendor.appdirs (delayed)
missing module named 'win32com.shell' - imported by pkg_resources._vendor.appdirs (delayed, conditional, optional)
missing module named 'pkg_resources.extern.pyparsing' - imported by pkg_resources._vendor.packaging.requirements (top-level), pkg_resources._vendor.packaging.markers (top-level)
missing module named __builtin__ - imported by pkg_resources._vendor.pyparsing (conditional), setuptools._vendor.pyparsing (conditional)
missing module named ordereddict - imported by pkg_resources._vendor.pyparsing (optional), setuptools._vendor.pyparsing (optional)
missing module named pkg_resources.extern.packaging - imported by pkg_resources.extern (top-level), pkg_resources (top-level)
missing module named pkg_resources.extern.appdirs - imported by pkg_resources.extern (top-level), pkg_resources (top-level)
missing module named pickle5 - imported by numpy.compat.py3k (optional)
missing module named _dummy_thread - imported by cffi.lock (conditional, optional), numpy.core.arrayprint (optional)
missing module named numpy.array - imported by numpy (top-level), numpy.ma.core (top-level), numpy.ma.extras (top-level), numpy.ma.mrecords (top-level), scipy.interpolate.interpolate (top-level), scipy.linalg.decomp (top-level), scipy.linalg.decomp_schur (top-level), scipy.sparse.linalg.isolve.utils (top-level), scipy.interpolate._fitpack_impl (top-level), scipy.interpolate.fitpack2 (top-level), scipy.stats.stats (top-level), scipy.optimize.lbfgsb (top-level), scipy.optimize.tnc (top-level), scipy.optimize.slsqp (top-level), scipy.integrate._ode (top-level), scipy.misc.common (top-level), scipy.stats.morestats (top-level)
missing module named numpy.recarray - imported by numpy (top-level), numpy.ma.mrecords (top-level)
missing module named numpy.ndarray - imported by numpy (top-level), numpy.ma.core (top-level), numpy.ma.extras (top-level), numpy.ma.mrecords (top-level), numpy.ctypeslib (top-level), pandas.compat.numpy.function (top-level), numpy.typing._array_like (top-level), scipy.stats._distn_infrastructure (top-level), scipy.stats.mstats_basic (top-level), scipy.stats.mstats_extras (top-level)
missing module named numpy.dtype - imported by numpy (top-level), numpy.ma.mrecords (top-level), numpy.ctypeslib (top-level), scipy.optimize.minpack (top-level), numpy.typing._array_like (top-level)
missing module named numpy.bool_ - imported by numpy (top-level), numpy.ma.core (top-level), numpy.ma.mrecords (top-level), numpy.typing._array_like (top-level)
missing module named numpy.expand_dims - imported by numpy (top-level), numpy.ma.core (top-level)
missing module named numpy.iscomplexobj - imported by numpy (top-level), numpy.ma.core (top-level), scipy.linalg.decomp (top-level), scipy.linalg._decomp_ldl (top-level)
missing module named numpy.amin - imported by numpy (top-level), numpy.ma.core (top-level), scipy.stats.morestats (top-level)
missing module named numpy.amax - imported by numpy (top-level), numpy.ma.core (top-level), scipy.linalg.matfuncs (top-level), scipy.stats.morestats (top-level)
missing module named numpy.histogramdd - imported by numpy (delayed), numpy.lib.twodim_base (delayed)
missing module named numpy.core.ufunc - imported by numpy.core (top-level), numpy.lib.utils (top-level)
missing module named numpy.core.ones - imported by numpy.core (top-level), numpy.lib.polynomial (top-level)
missing module named numpy.core.hstack - imported by numpy.core (top-level), numpy.lib.polynomial (top-level)
missing module named numpy.core.atleast_1d - imported by numpy.core (top-level), numpy.lib.polynomial (top-level)
missing module named numpy.core.atleast_3d - imported by numpy.core (top-level), numpy.lib.shape_base (top-level)
missing module named numpy.core.vstack - imported by numpy.core (top-level), numpy.lib.shape_base (top-level)
missing module named numpy.core.linspace - imported by numpy.core (top-level), numpy.lib.index_tricks (top-level)
missing module named numpy.core.transpose - imported by numpy.core (top-level), numpy.lib.function_base (top-level)
missing module named numpy.core.roll - imported by numpy.core (top-level), numpy.fft.helper (top-level)
missing module named numpy.core.integer - imported by numpy.core (top-level), numpy.fft.helper (top-level)
missing module named numpy.core.take - imported by numpy.core (top-level), numpy.fft._pocketfft (top-level)
missing module named numpy.core.conjugate - imported by numpy.core (top-level), numpy.fft._pocketfft (top-level)
missing module named numpy.core.result_type - imported by numpy.core (delayed), numpy.testing._private.utils (delayed)
missing module named numpy.core.float_ - imported by numpy.core (delayed), numpy.testing._private.utils (delayed)
missing module named numpy.core.number - imported by numpy.core (delayed), numpy.testing._private.utils (delayed)
missing module named numpy.core.bool_ - imported by numpy.core (delayed), numpy.testing._private.utils (delayed)
missing module named numpy.core.inf - imported by numpy.core (delayed), numpy.testing._private.utils (delayed)
missing module named numpy.core.array2string - imported by numpy.core (delayed), numpy.testing._private.utils (delayed)
missing module named numpy.core.signbit - imported by numpy.core (delayed), numpy.testing._private.utils (delayed)
missing module named numpy.core.isscalar - imported by numpy.core (delayed), numpy.testing._private.utils (delayed), numpy.lib.polynomial (top-level)
missing module named numpy.core.isinf - imported by numpy.core (delayed), numpy.testing._private.utils (delayed)
missing module named numpy.core.isnat - imported by numpy.core (top-level), numpy.testing._private.utils (top-level)
missing module named numpy.core.ndarray - imported by numpy.core (top-level), numpy.testing._private.utils (top-level), numpy.lib.utils (top-level)
missing module named numpy.core.array_repr - imported by numpy.core (top-level), numpy.testing._private.utils (top-level)
missing module named numpy.core.arange - imported by numpy.core (top-level), numpy.testing._private.utils (top-level), numpy.fft.helper (top-level)
missing module named numpy.core.float32 - imported by numpy.core (top-level), numpy.testing._private.utils (top-level)
missing module named numpy.core.iinfo - imported by numpy.core (top-level), numpy.lib.twodim_base (top-level)
missing module named numpy.core.sort - imported by numpy.core (top-level), numpy.linalg.linalg (top-level)
missing module named numpy.core.argsort - imported by numpy.core (top-level), numpy.linalg.linalg (top-level)
missing module named numpy.core.sign - imported by numpy.core (top-level), numpy.linalg.linalg (top-level)
missing module named numpy.core.isnan - imported by numpy.core (top-level), numpy.linalg.linalg (top-level), numpy.testing._private.utils (delayed)
missing module named numpy.core.count_nonzero - imported by numpy.core (top-level), numpy.linalg.linalg (top-level)
missing module named numpy.core.divide - imported by numpy.core (top-level), numpy.linalg.linalg (top-level)
missing module named numpy.core.swapaxes - imported by numpy.core (top-level), numpy.linalg.linalg (top-level), numpy.fft._pocketfft (top-level)
missing module named numpy.core.matmul - imported by numpy.core (top-level), numpy.linalg.linalg (top-level)
missing module named numpy.core.object_ - imported by numpy.core (top-level), numpy.linalg.linalg (top-level), numpy.testing._private.utils (delayed)
missing module named numpy.core.asanyarray - imported by numpy.core (top-level), numpy.linalg.linalg (top-level)
missing module named numpy.core.intp - imported by numpy.core (top-level), numpy.linalg.linalg (top-level), numpy.testing._private.utils (top-level)
missing module named numpy.core.atleast_2d - imported by numpy.core (top-level), numpy.linalg.linalg (top-level)
missing module named numpy.core.product - imported by numpy.core (top-level), numpy.linalg.linalg (top-level)
missing module named numpy.core.amax - imported by numpy.core (top-level), numpy.linalg.linalg (top-level)
missing module named numpy.core.amin - imported by numpy.core (top-level), numpy.linalg.linalg (top-level)
missing module named numpy.core.moveaxis - imported by numpy.core (top-level), numpy.linalg.linalg (top-level)
missing module named numpy.core.geterrobj - imported by numpy.core (top-level), numpy.linalg.linalg (top-level)
missing module named numpy.core.errstate - imported by numpy.core (top-level), numpy.linalg.linalg (top-level), numpy.testing._private.utils (delayed)
missing module named numpy.core.finfo - imported by numpy.core (top-level), numpy.linalg.linalg (top-level), numpy.lib.polynomial (top-level)
missing module named numpy.core.isfinite - imported by numpy.core (top-level), numpy.linalg.linalg (top-level), numpy.testing._private.utils (delayed)
missing module named numpy.core.sum - imported by numpy.core (top-level), numpy.linalg.linalg (top-level)
missing module named numpy.core.fastCopyAndTranspose - imported by numpy.core (top-level), numpy.linalg.linalg (top-level)
missing module named numpy.core.sqrt - imported by numpy.core (top-level), numpy.linalg.linalg (top-level), numpy.fft._pocketfft (top-level)
missing module named numpy.core.multiply - imported by numpy.core (top-level), numpy.linalg.linalg (top-level)
missing module named numpy.core.add - imported by numpy.core (top-level), numpy.linalg.linalg (top-level)
missing module named numpy.core.dot - imported by numpy.core (top-level), numpy.linalg.linalg (top-level), numpy.lib.polynomial (top-level)
missing module named numpy.core.Inf - imported by numpy.core (top-level), numpy.linalg.linalg (top-level)
missing module named numpy.core.all - imported by numpy.core (top-level), numpy.linalg.linalg (top-level), numpy.testing._private.utils (delayed)
missing module named numpy.core.newaxis - imported by numpy.core (top-level), numpy.linalg.linalg (top-level)
missing module named numpy.core.complexfloating - imported by numpy.core (top-level), numpy.linalg.linalg (top-level)
missing module named numpy.core.inexact - imported by numpy.core (top-level), numpy.linalg.linalg (top-level)
missing module named numpy.core.cdouble - imported by numpy.core (top-level), numpy.linalg.linalg (top-level)
missing module named numpy.core.csingle - imported by numpy.core (top-level), numpy.linalg.linalg (top-level)
missing module named numpy.core.double - imported by numpy.core (top-level), numpy.linalg.linalg (top-level)
missing module named numpy.core.single - imported by numpy.core (top-level), numpy.linalg.linalg (top-level)
missing module named numpy.core.intc - imported by numpy.core (top-level), numpy.linalg.linalg (top-level)
missing module named numpy.core.empty_like - imported by numpy.core (top-level), numpy.linalg.linalg (top-level)
missing module named numpy.core.empty - imported by numpy.core (top-level), numpy.linalg.linalg (top-level), numpy.testing._private.utils (top-level), numpy.fft.helper (top-level)
missing module named numpy.core.zeros - imported by numpy.core (top-level), numpy.linalg.linalg (top-level), numpy.fft._pocketfft (top-level)
missing module named numpy.core.asarray - imported by numpy.core (top-level), numpy.linalg.linalg (top-level), numpy.fft._pocketfft (top-level), numpy.fft.helper (top-level), numpy.lib.utils (top-level)
missing module named numpy.core.array - imported by numpy.core (top-level), numpy.linalg.linalg (top-level), numpy.testing._private.utils (top-level), numpy.lib.polynomial (top-level)
missing module named numpy.eye - imported by numpy (delayed), numpy.core.numeric (delayed), scipy.linalg.decomp (top-level), scipy.interpolate._pade (top-level), scipy.optimize.optimize (top-level), scipy.optimize.minpack (top-level)
missing module named psutil - imported by numpy.testing._private.utils (delayed, optional), scipy._lib._testutils (delayed, optional)
runtime module named six.moves - imported by dateutil.tz.tz (top-level), dateutil.tz._factories (top-level), dateutil.tz.win (top-level), dateutil.rrule (top-level)
missing module named six.moves.range - imported by six.moves (top-level), dateutil.rrule (top-level)
missing module named StringIO - imported by PyInstaller.lib.modulegraph._compat (conditional), PyInstaller.lib.modulegraph.zipio (conditional), six (conditional), sqlalchemy.util.compat (conditional)
missing module named dateutil.tz.tzfile - imported by dateutil.tz (top-level), dateutil.zoneinfo (top-level)
missing module named olefile - imported by PIL.MicImagePlugin (top-level), PIL.FpxImagePlugin (top-level)
missing module named 'PySide2.QtGui' - imported by PIL.ImageQt (conditional, optional)
missing module named 'PySide6.QtGui' - imported by PIL.ImageQt (conditional, optional)
missing module named 'PyQt6.QtGui' - imported by PIL.ImageQt (conditional, optional)
missing module named dummy_thread - imported by cffi.lock (conditional, optional)
missing module named thread - imported by cffi.lock (conditional, optional), cffi.cparser (conditional, optional)
missing module named 'setuptools.extern.pyparsing' - imported by setuptools._vendor.packaging.requirements (top-level), setuptools._vendor.packaging.markers (top-level)
missing module named 'setuptools.extern.more_itertools' - imported by setuptools.dist (top-level), setuptools.package_index (top-level), setuptools.msvc (top-level)
missing module named 'setuptools.extern.packaging.version' - imported by setuptools.config (top-level), setuptools.msvc (top-level)
missing module named 'setuptools.extern.packaging.utils' - imported by setuptools.wheel (top-level)
missing module named 'setuptools.extern.packaging.tags' - imported by setuptools.wheel (top-level)
missing module named 'setuptools.extern.packaging.specifiers' - imported by setuptools.config (top-level)
missing module named setuptools.extern.ordered_set - imported by setuptools.extern (top-level), setuptools.dist (top-level)
missing module named setuptools.extern.packaging - imported by setuptools.extern (top-level), setuptools.dist (top-level), setuptools.command.egg_info (top-level)
missing module named cStringIO - imported by cPickle (top-level), cffi.ffiplatform (optional), sqlalchemy.util.compat (conditional)
missing module named copy_reg - imported by cPickle (top-level), cStringIO (top-level)
missing module named cPickle - imported by pycparser.ply.yacc (delayed, optional), sqlalchemy.util.compat (conditional, optional), sqlalchemy.testing.util (delayed, conditional, optional)
missing module named cffi._pycparser - imported by cffi (optional), cffi.cparser (optional)
missing module named defusedxml - imported by PIL.Image (optional), openpyxl.xml (delayed, optional)
missing module named fontTools.ttLib.getSearchRange - imported by fontTools.ttLib (top-level), fontTools.ttLib.woff2 (top-level), fontTools.ttLib.tables.otConverters (top-level), fontTools.ttLib.tables._c_m_a_p (top-level), fontTools.ttLib.tables._k_e_r_n (top-level), fontTools.ttLib.sfnt (delayed, conditional)
missing module named zopfli - imported by fontTools.ttLib.sfnt (delayed, conditional)
missing module named unicodedata2 - imported by fontTools.unicode (delayed, optional)
missing module named xattr - imported by fontTools.misc.macCreatorType (optional)
missing module named brotli - imported by fontTools.ttLib.woff2 (optional)
missing module named brotlicffi - imported by fontTools.ttLib.woff2 (optional)
missing module named fontTools.ttLib.getClassTag - imported by fontTools.ttLib (top-level), fontTools.ttLib.tables.DefaultTable (top-level)
missing module named fontTools.ttLib.getTableClass - imported by fontTools.ttLib (top-level), fontTools.ttLib.woff2 (top-level)
missing module named fontTools.ttLib.getTableModule - imported by fontTools.ttLib (top-level), fontTools.ttLib.woff2 (top-level)
missing module named fontTools.ttLib.TTFont - imported by fontTools.ttLib (top-level), fontTools.ttLib.woff2 (top-level), fontTools.cffLib (top-level), fontTools.varLib (top-level), fontTools.varLib.varStore (delayed), fontTools.otlLib.optimize (top-level), fontTools.otlLib.optimize.gpos (top-level), fontTools.ttx (top-level), fontTools.colorLib.unbuilder (conditional)
missing module named __pypy__ - imported by fontTools.misc.etree (optional)
missing module named 'lxml.etree' - imported by openpyxl.xml.functions (conditional), pandas.io.xml (delayed), pandas.io.formats.xml (delayed), pandas.io.html (delayed), fontTools.misc.etree (optional)
missing module named UserList - imported by fontTools.ttLib.tables.otConverters (optional)
missing module named fontTools.ttLib.newTable - imported by fontTools.ttLib (top-level), fontTools.ttLib.tables._n_a_m_e (top-level), fontTools.varLib (top-level), fontTools.varLib.featureVars (top-level), fontTools.varLib.cff (top-level)
missing module named lxml - imported by openpyxl.xml (delayed, optional), fontTools.subset.svg (optional)
missing module named 'lz4.block' - imported by fontTools.ttLib.tables.grUtils (optional)
missing module named lz4 - imported by fontTools.ttLib.tables.grUtils (optional)
missing module named PyQt6 - imported by matplotlib.backends.qt_compat (delayed, conditional), matplotlib.backends.backend_qtagg (delayed, conditional, optional)
missing module named shiboken2 - imported by matplotlib.backends.qt_compat (delayed, conditional)
missing module named PySide2 - imported by matplotlib.backends.qt_compat (delayed, conditional)
missing module named sip - imported by matplotlib.backends.qt_compat (delayed, conditional), PyQt5 (top-level)
missing module named shiboken6 - imported by matplotlib.backends.qt_compat (delayed, conditional)
missing module named PySide6 - imported by matplotlib.backends.qt_compat (delayed, conditional)
missing module named 'tornado.template' - imported by matplotlib.backends.backend_webagg (delayed)
missing module named 'tornado.websocket' - imported by matplotlib.backends.backend_webagg (top-level)
missing module named 'tornado.ioloop' - imported by matplotlib.backends.backend_webagg (top-level)
missing module named 'tornado.web' - imported by matplotlib.backends.backend_webagg (top-level)
missing module named tornado - imported by matplotlib.backends.backend_webagg (optional), matplotlib.backends.backend_webagg_core (delayed)
missing module named IPython - imported by PIL.ImageShow (optional), matplotlib.backend_bases (delayed), matplotlib.pyplot (delayed, conditional), pandas.io.formats.printing (delayed)
missing module named 'IPython.core' - imported by matplotlib.backend_bases (delayed), matplotlib.pyplot (delayed), pandas.io.formats.printing (delayed, conditional)
missing module named matplotlib.tri.Triangulation - imported by matplotlib.tri (top-level), matplotlib.tri.trifinder (top-level), matplotlib.tri.tritools (top-level), matplotlib.tri.triinterpolate (top-level)
missing module named matplotlib.axes.Axes - imported by matplotlib.axes (delayed), matplotlib.legend (delayed), matplotlib.projections.geo (top-level), matplotlib.projections.polar (top-level), mpl_toolkits.mplot3d.axes3d (top-level), matplotlib.figure (top-level), matplotlib.pyplot (top-level), pandas.plotting._matplotlib.timeseries (conditional), pandas.plotting._matplotlib.tools (conditional), pandas.plotting._matplotlib.core (conditional), pandas.plotting._matplotlib.boxplot (conditional), pandas.plotting._matplotlib.hist (conditional), pandas.plotting._matplotlib.misc (conditional)
missing module named gi - imported by matplotlib.cbook (delayed, conditional), playsound (delayed, conditional, optional)
missing module named dummy_threading - imported by matplotlib.pyplot (optional), matplotlib.font_manager (optional), matplotlib.backends.backend_agg (optional), sqlalchemy.util.compat (optional)
missing module named 'gi.repository' - imported by playsound (delayed, conditional, optional)
missing module named Foundation - imported by pandas.io.clipboard (delayed, conditional, optional), playsound (delayed)
missing module named AppKit - imported by pandas.io.clipboard (delayed, conditional, optional), playsound (delayed, conditional, optional)
missing module named numexpr - imported by pandas.core.computation.expressions (conditional), pandas.core.computation.engines (delayed)
missing module named pytest - imported by scipy._lib._testutils (delayed), matplotlib (delayed, optional), pandas._testing._io (delayed), pandas._testing (delayed), pandas.util._tester (delayed, optional), sqlalchemy.testing.warnings (delayed, optional)
missing module named pyarrow - imported by pandas.core.arrays.masked (delayed), pandas.core.arrays.numeric (delayed, conditional), pandas.core.arrays._arrow_utils (top-level), pandas.core.arrays.interval (delayed), pandas.core.arrays.period (delayed), pandas.core.arrays.boolean (delayed, conditional), pandas.io.feather_format (delayed), pandas.core.arrays.string_ (delayed, conditional), pandas.core.arrays.string_arrow (conditional), pandas.core.dtypes.dtypes (delayed, conditional), pandas.compat.pyarrow (optional)
missing module named 'pyarrow.parquet' - imported by pandas.io.parquet (delayed)
missing module named PyQt4 - imported by pandas.io.clipboard (delayed, conditional, optional)
missing module named qtpy - imported by pandas.io.clipboard (delayed, conditional, optional)
missing module named urlparse - imported by sqlalchemy.util.compat (conditional)
missing module named ConfigParser - imported by sqlalchemy.util.compat (conditional)
missing module named importlib_metadata - imported by pyvisa (conditional), PyInstaller.compat (delayed, conditional), PyInstaller.utils.hooks.conda (conditional), sqlalchemy.util.compat (conditional)
missing module named tables - imported by pandas.io.pytables (delayed, conditional)
missing module named xlsxwriter - imported by pandas.io.excel._xlsxwriter (delayed)
missing module named 'defusedxml.ElementTree' - imported by openpyxl.xml.functions (conditional)
missing module named tests - imported by openpyxl.reader.excel (optional)
missing module named 'odf.config' - imported by pandas.io.excel._odswriter (delayed)
missing module named 'odf.style' - imported by pandas.io.excel._odswriter (delayed)
missing module named 'odf.text' - imported by pandas.io.excel._odfreader (delayed), pandas.io.excel._odswriter (delayed)
missing module named 'odf.table' - imported by pandas.io.excel._odfreader (delayed), pandas.io.excel._odswriter (delayed)
missing module named 'odf.opendocument' - imported by pandas.io.excel._odfreader (delayed), pandas.io.excel._odswriter (delayed)
missing module named xlrd - imported by pandas.io.excel._xlrd (delayed), pandas.io.excel._base (delayed, conditional)
missing module named pyxlsb - imported by pandas.io.excel._pyxlsb (delayed)
missing module named 'odf.element' - imported by pandas.io.excel._odfreader (delayed)
missing module named 'odf.namespaces' - imported by pandas.io.excel._odfreader (delayed)
missing module named odf - imported by pandas.io.excel._odfreader (delayed)
missing module named scipy.special.ndtr - imported by scipy.special (top-level), scipy.stats._bootstrap (top-level)
missing module named scipy.special.betaln - imported by scipy.special (top-level), scipy.stats._discrete_distns (top-level), scipy.stats._multivariate (top-level)
missing module named scipy.special.beta - imported by scipy.special (top-level), scipy.stats._tukeylambda_stats (top-level)
missing module named scipy.special.ive - imported by scipy.special (top-level), scipy.stats._distn_infrastructure (top-level)
missing module named scipy.special.entr - imported by scipy.special (top-level), scipy.stats._distn_infrastructure (top-level), scipy.stats._discrete_distns (top-level), scipy.stats._multivariate (top-level)
missing module named scipy.special.chndtr - imported by scipy.special (top-level), scipy.stats._distn_infrastructure (top-level)
missing module named scipy.special.rel_entr - imported by scipy.special (top-level), scipy.spatial.distance (top-level)
missing module named scipy.special.xlogy - imported by scipy.special (top-level), scipy.interpolate.rbf (top-level), scipy.stats._distn_infrastructure (top-level), scipy.stats._multivariate (top-level)
missing module named scipy.sparse.coo_matrix - imported by scipy.sparse (delayed), scipy.sparse.data (delayed), scipy.optimize._numdiff (top-level), scipy.integrate._bvp (top-level), scipy.integrate._ivp.common (top-level), scipy.stats._crosstab (top-level), pandas.core.arrays.sparse.accessor (delayed)
missing module named numpy.random.randn - imported by numpy.random (top-level), scipy (top-level)
missing module named numpy.random.rand - imported by numpy.random (top-level), scipy (top-level)
missing module named scipy.linalg._flapack_64 - imported by scipy.linalg (optional), scipy.linalg.lapack (optional)
missing module named scipy.linalg._clapack - imported by scipy.linalg (optional), scipy.linalg.lapack (optional)
missing module named scipy.linalg._fblas_64 - imported by scipy.linalg (optional), scipy.linalg.blas (optional)
missing module named scipy.linalg._cblas - imported by scipy.linalg (optional), scipy.linalg.blas (optional)
missing module named 'scikits.umfpack' - imported by scipy.optimize._linprog_ip (optional)
missing module named 'sksparse.cholmod' - imported by scipy.optimize._linprog_ip (optional)
missing module named sksparse - imported by scipy.optimize._trustregion_constr.projections (optional), scipy.optimize._linprog_ip (optional)
missing module named numpy.double - imported by numpy (top-level), scipy.optimize._nnls (top-level)
missing module named numpy.float64 - imported by numpy (top-level), scipy.optimize.lbfgsb (top-level)
missing module named numpy.inexact - imported by numpy (top-level), scipy.special._basic (top-level), scipy.linalg.decomp (top-level), scipy.optimize.minpack (top-level)
missing module named numpy.greater - imported by numpy (top-level), scipy.optimize.minpack (top-level)
missing module named sparse - imported by scipy.sparse.linalg._expm_multiply (delayed, conditional), scipy.sparse.linalg.matfuncs (delayed, conditional)
missing module named uarray - imported by scipy._lib.uarray (conditional, optional)
missing module named numpy.arcsin - imported by numpy (top-level), scipy.linalg.decomp_svd (top-level)
missing module named numpy.arccos - imported by numpy (top-level), scipy.special.orthogonal (top-level), scipy.linalg.decomp_svd (top-level)
missing module named numpy.conj - imported by numpy (top-level), scipy.linalg.decomp (top-level)
missing module named scikits - imported by scipy.sparse.linalg.dsolve.linsolve (optional)
missing module named scipy.linalg.qr_insert - imported by scipy.linalg (top-level), scipy.sparse.linalg.isolve._gcrotmk (top-level)
missing module named numpy.single - imported by numpy (top-level), scipy.linalg.decomp_schur (top-level), scipy.linalg.matfuncs (top-level)
missing module named numpy.sign - imported by numpy (top-level), scipy.linalg.matfuncs (top-level)
missing module named numpy.conjugate - imported by numpy (top-level), scipy.linalg.matfuncs (top-level)
missing module named numpy.logical_not - imported by numpy (top-level), scipy.linalg.matfuncs (top-level)
missing module named scipy.special.gammaln - imported by scipy.special (top-level), scipy.special.spfun_stats (top-level), scipy.optimize._dual_annealing (top-level), scipy.integrate._quadrature (top-level), scipy.stats._discrete_distns (top-level), scipy.stats._hypotests (top-level), scipy.stats._multivariate (top-level)
missing module named scipy.special.airy - imported by scipy.special (top-level), scipy.special.orthogonal (top-level)
missing module named scipy.special.comb - imported by scipy.special (delayed), scipy.linalg.special_matrices (delayed), scipy.interpolate.interpolate (top-level), scipy.interpolate._rbfinterp (top-level), scipy.stats._distn_infrastructure (top-level)
missing module named scipy.special.poch - imported by scipy.special (top-level), scipy.fft._fftlog (top-level)
missing module named scipy.special.loggamma - imported by scipy.special (top-level), scipy.fft._fftlog (top-level)
missing module named numpy.power - imported by numpy (top-level), scipy.stats.kde (top-level)
missing module named numpy.NINF - imported by numpy (top-level), scipy.stats._distn_infrastructure (top-level)
missing module named numpy.logical_and - imported by numpy (top-level), scipy.stats._distn_infrastructure (top-level)
missing module named numpy.hypot - imported by numpy (top-level), scipy.stats.morestats (top-level)
missing module named numpy.log - imported by numpy (top-level), scipy.stats._distn_infrastructure (top-level), scipy.stats._discrete_distns (top-level), scipy.stats.morestats (top-level)
missing module named scipy.stats.iqr - imported by scipy.stats (delayed), scipy.stats._hypotests (delayed)
missing module named numpy.sinh - imported by numpy (top-level), scipy.stats._discrete_distns (top-level)
missing module named numpy.cosh - imported by numpy (top-level), scipy.stats._discrete_distns (top-level)
missing module named numpy.tanh - imported by numpy (top-level), scipy.stats._discrete_distns (top-level)
missing module named numpy.expm1 - imported by numpy (top-level), scipy.stats._discrete_distns (top-level)
missing module named numpy.log1p - imported by numpy (top-level), scipy.stats._discrete_distns (top-level)
missing module named _ufunc - imported by numpy.typing (conditional)
missing module named numpy.bytes_ - imported by numpy (top-level), numpy.typing._array_like (top-level)
missing module named numpy.str_ - imported by numpy (top-level), numpy.typing._array_like (top-level)
missing module named numpy.void - imported by numpy (top-level), numpy.typing._array_like (top-level)
missing module named numpy.object_ - imported by numpy (top-level), numpy.typing._array_like (top-level)
missing module named numpy.datetime64 - imported by numpy (top-level), numpy.typing._array_like (top-level)
missing module named numpy.timedelta64 - imported by numpy (top-level), numpy.typing._array_like (top-level)
missing module named numpy.number - imported by numpy (top-level), numpy.typing._array_like (top-level)
missing module named numpy.complexfloating - imported by numpy (top-level), numpy.typing._array_like (top-level)
missing module named numpy.floating - imported by numpy (top-level), numpy.typing._array_like (top-level)
missing module named numpy.unsignedinteger - imported by numpy (top-level), numpy.typing._array_like (top-level)
missing module named botocore - imported by pandas.io.common (delayed, conditional, optional)
missing module named sets - imported by nose.util (optional), pytz.tzinfo (optional)
missing module named UserDict - imported by pytz.lazy (optional)
missing module named 'pyarrow.compute' - imported by pandas.core.arrays.string_arrow (conditional)
missing module named hypothesis - imported by pandas.util._tester (delayed, optional)
missing module named 'lxml.html' - imported by pandas.io.html (delayed)
missing module named bs4 - imported by pandas.io.html (delayed)
missing module named pandas.ExtensionArray - imported by pandas (conditional), pandas.core.construction (conditional)
missing module named Sybase - imported by sqlalchemy.dialects.sybase.pysybase (delayed)
missing module named pysqlite2 - imported by sqlalchemy.dialects.sqlite.pysqlite (delayed, conditional, optional)
missing module named pysqlcipher - imported by sqlalchemy.dialects.sqlite.pysqlcipher (delayed, conditional)
missing module named pysqlcipher3 - imported by sqlalchemy.dialects.sqlite.pysqlcipher (delayed, conditional)
missing module named sqlcipher3 - imported by sqlalchemy.dialects.sqlite.pysqlcipher (delayed, conditional, optional)
missing module named asyncpg - imported by sqlalchemy.dialects.postgresql.asyncpg (delayed)
missing module named postgresql - imported by sqlalchemy.dialects.postgresql.pypostgresql (delayed)
missing module named pgdb - imported by sqlalchemy.dialects.postgresql.pygresql (delayed)
missing module named psycopg2 - imported by sqlalchemy.dialects.postgresql.psycopg2 (delayed)
missing module named cx_Oracle - imported by sqlalchemy.dialects.oracle.cx_oracle (delayed)
missing module named asyncmy - imported by sqlalchemy.dialects.mysql.asyncmy (delayed)
missing module named 'mysql.connector' - imported by sqlalchemy.dialects.mysql.mysqlconnector (delayed, conditional, optional)
missing module named mysql - imported by sqlalchemy.dialects.mysql.mysqlconnector (delayed)
missing module named 'mx.ODBC' - imported by sqlalchemy.connectors.mxodbc (delayed, conditional)
missing module named mx - imported by sqlalchemy.connectors.mxodbc (delayed, conditional)
missing module named 'typing.io' - imported by importlib.resources (top-level)
missing module named setuptools_scm - imported by matplotlib (delayed, conditional)
missing module named fcntl - imported by serial.serialposix (top-level)
missing module named 'System.IO' - imported by serial.serialcli (top-level)
missing module named System - imported by serial.serialcli (top-level)

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,31 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<assemblyIdentity type="win32" name="DataNodeFrequencyTestold" processorArchitecture="amd64" version="1.0.0.0"/>
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
<security>
<requestedPrivileges>
<requestedExecutionLevel level="asInvoker" uiAccess="false"/>
</requestedPrivileges>
</security>
</trustInfo>
<dependency>
<dependentAssembly>
<assemblyIdentity type="win32" name="Microsoft.Windows.Common-Controls" language="*" processorArchitecture="*" version="6.0.0.0" publicKeyToken="6595b64144ccf1df"/>
<compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1"/>
</dependentAssembly>
</dependency>
<compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">
<application>
<supportedOS Id="{e2011457-1546-43c5-a5fe-008deee3d3f0}"/>
<supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}"/>
<supportedOS Id="{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}"/>
<supportedOS Id="{1f676c76-80e1-4239-95bb-83d0f6d0da78}"/>
<supportedOS Id="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}"/>
</application>
</compatibility>
<application xmlns="urn:schemas-microsoft-com:asm.v3">
<windowsSettings>
<longPathAware xmlns="http://schemas.microsoft.com/SMI/2016/WindowsSettings">true</longPathAware>
</windowsSettings>
</application>
</assembly>

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,257 @@
('D:\\Program Files\\Python39\\tcl\\tk8.6',
'tk',
['demos', '*.lib', 'tkConfig.sh'],
'DATA',
[('tk\\bgerror.tcl',
'D:\\Program Files\\Python39\\tcl\\tk8.6\\bgerror.tcl',
'DATA'),
('tk\\button.tcl',
'D:\\Program Files\\Python39\\tcl\\tk8.6\\button.tcl',
'DATA'),
('tk\\choosedir.tcl',
'D:\\Program Files\\Python39\\tcl\\tk8.6\\choosedir.tcl',
'DATA'),
('tk\\clrpick.tcl',
'D:\\Program Files\\Python39\\tcl\\tk8.6\\clrpick.tcl',
'DATA'),
('tk\\comdlg.tcl',
'D:\\Program Files\\Python39\\tcl\\tk8.6\\comdlg.tcl',
'DATA'),
('tk\\console.tcl',
'D:\\Program Files\\Python39\\tcl\\tk8.6\\console.tcl',
'DATA'),
('tk\\dialog.tcl',
'D:\\Program Files\\Python39\\tcl\\tk8.6\\dialog.tcl',
'DATA'),
('tk\\entry.tcl',
'D:\\Program Files\\Python39\\tcl\\tk8.6\\entry.tcl',
'DATA'),
('tk\\focus.tcl',
'D:\\Program Files\\Python39\\tcl\\tk8.6\\focus.tcl',
'DATA'),
('tk\\fontchooser.tcl',
'D:\\Program Files\\Python39\\tcl\\tk8.6\\fontchooser.tcl',
'DATA'),
('tk\\iconlist.tcl',
'D:\\Program Files\\Python39\\tcl\\tk8.6\\iconlist.tcl',
'DATA'),
('tk\\icons.tcl',
'D:\\Program Files\\Python39\\tcl\\tk8.6\\icons.tcl',
'DATA'),
('tk\\license.terms',
'D:\\Program Files\\Python39\\tcl\\tk8.6\\license.terms',
'DATA'),
('tk\\listbox.tcl',
'D:\\Program Files\\Python39\\tcl\\tk8.6\\listbox.tcl',
'DATA'),
('tk\\megawidget.tcl',
'D:\\Program Files\\Python39\\tcl\\tk8.6\\megawidget.tcl',
'DATA'),
('tk\\menu.tcl', 'D:\\Program Files\\Python39\\tcl\\tk8.6\\menu.tcl', 'DATA'),
('tk\\mkpsenc.tcl',
'D:\\Program Files\\Python39\\tcl\\tk8.6\\mkpsenc.tcl',
'DATA'),
('tk\\msgbox.tcl',
'D:\\Program Files\\Python39\\tcl\\tk8.6\\msgbox.tcl',
'DATA'),
('tk\\obsolete.tcl',
'D:\\Program Files\\Python39\\tcl\\tk8.6\\obsolete.tcl',
'DATA'),
('tk\\optMenu.tcl',
'D:\\Program Files\\Python39\\tcl\\tk8.6\\optMenu.tcl',
'DATA'),
('tk\\palette.tcl',
'D:\\Program Files\\Python39\\tcl\\tk8.6\\palette.tcl',
'DATA'),
('tk\\panedwindow.tcl',
'D:\\Program Files\\Python39\\tcl\\tk8.6\\panedwindow.tcl',
'DATA'),
('tk\\pkgIndex.tcl',
'D:\\Program Files\\Python39\\tcl\\tk8.6\\pkgIndex.tcl',
'DATA'),
('tk\\safetk.tcl',
'D:\\Program Files\\Python39\\tcl\\tk8.6\\safetk.tcl',
'DATA'),
('tk\\scale.tcl',
'D:\\Program Files\\Python39\\tcl\\tk8.6\\scale.tcl',
'DATA'),
('tk\\scrlbar.tcl',
'D:\\Program Files\\Python39\\tcl\\tk8.6\\scrlbar.tcl',
'DATA'),
('tk\\spinbox.tcl',
'D:\\Program Files\\Python39\\tcl\\tk8.6\\spinbox.tcl',
'DATA'),
('tk\\tclIndex', 'D:\\Program Files\\Python39\\tcl\\tk8.6\\tclIndex', 'DATA'),
('tk\\tearoff.tcl',
'D:\\Program Files\\Python39\\tcl\\tk8.6\\tearoff.tcl',
'DATA'),
('tk\\text.tcl', 'D:\\Program Files\\Python39\\tcl\\tk8.6\\text.tcl', 'DATA'),
('tk\\tk.tcl', 'D:\\Program Files\\Python39\\tcl\\tk8.6\\tk.tcl', 'DATA'),
('tk\\tkfbox.tcl',
'D:\\Program Files\\Python39\\tcl\\tk8.6\\tkfbox.tcl',
'DATA'),
('tk\\unsupported.tcl',
'D:\\Program Files\\Python39\\tcl\\tk8.6\\unsupported.tcl',
'DATA'),
('tk\\xmfbox.tcl',
'D:\\Program Files\\Python39\\tcl\\tk8.6\\xmfbox.tcl',
'DATA'),
('tk\\ttk\\altTheme.tcl',
'D:\\Program Files\\Python39\\tcl\\tk8.6\\ttk\\altTheme.tcl',
'DATA'),
('tk\\ttk\\aquaTheme.tcl',
'D:\\Program Files\\Python39\\tcl\\tk8.6\\ttk\\aquaTheme.tcl',
'DATA'),
('tk\\ttk\\button.tcl',
'D:\\Program Files\\Python39\\tcl\\tk8.6\\ttk\\button.tcl',
'DATA'),
('tk\\ttk\\clamTheme.tcl',
'D:\\Program Files\\Python39\\tcl\\tk8.6\\ttk\\clamTheme.tcl',
'DATA'),
('tk\\ttk\\classicTheme.tcl',
'D:\\Program Files\\Python39\\tcl\\tk8.6\\ttk\\classicTheme.tcl',
'DATA'),
('tk\\ttk\\combobox.tcl',
'D:\\Program Files\\Python39\\tcl\\tk8.6\\ttk\\combobox.tcl',
'DATA'),
('tk\\ttk\\cursors.tcl',
'D:\\Program Files\\Python39\\tcl\\tk8.6\\ttk\\cursors.tcl',
'DATA'),
('tk\\ttk\\defaults.tcl',
'D:\\Program Files\\Python39\\tcl\\tk8.6\\ttk\\defaults.tcl',
'DATA'),
('tk\\ttk\\entry.tcl',
'D:\\Program Files\\Python39\\tcl\\tk8.6\\ttk\\entry.tcl',
'DATA'),
('tk\\ttk\\fonts.tcl',
'D:\\Program Files\\Python39\\tcl\\tk8.6\\ttk\\fonts.tcl',
'DATA'),
('tk\\ttk\\menubutton.tcl',
'D:\\Program Files\\Python39\\tcl\\tk8.6\\ttk\\menubutton.tcl',
'DATA'),
('tk\\ttk\\notebook.tcl',
'D:\\Program Files\\Python39\\tcl\\tk8.6\\ttk\\notebook.tcl',
'DATA'),
('tk\\ttk\\panedwindow.tcl',
'D:\\Program Files\\Python39\\tcl\\tk8.6\\ttk\\panedwindow.tcl',
'DATA'),
('tk\\ttk\\progress.tcl',
'D:\\Program Files\\Python39\\tcl\\tk8.6\\ttk\\progress.tcl',
'DATA'),
('tk\\ttk\\scale.tcl',
'D:\\Program Files\\Python39\\tcl\\tk8.6\\ttk\\scale.tcl',
'DATA'),
('tk\\ttk\\scrollbar.tcl',
'D:\\Program Files\\Python39\\tcl\\tk8.6\\ttk\\scrollbar.tcl',
'DATA'),
('tk\\ttk\\sizegrip.tcl',
'D:\\Program Files\\Python39\\tcl\\tk8.6\\ttk\\sizegrip.tcl',
'DATA'),
('tk\\ttk\\spinbox.tcl',
'D:\\Program Files\\Python39\\tcl\\tk8.6\\ttk\\spinbox.tcl',
'DATA'),
('tk\\ttk\\treeview.tcl',
'D:\\Program Files\\Python39\\tcl\\tk8.6\\ttk\\treeview.tcl',
'DATA'),
('tk\\ttk\\ttk.tcl',
'D:\\Program Files\\Python39\\tcl\\tk8.6\\ttk\\ttk.tcl',
'DATA'),
('tk\\ttk\\utils.tcl',
'D:\\Program Files\\Python39\\tcl\\tk8.6\\ttk\\utils.tcl',
'DATA'),
('tk\\ttk\\vistaTheme.tcl',
'D:\\Program Files\\Python39\\tcl\\tk8.6\\ttk\\vistaTheme.tcl',
'DATA'),
('tk\\ttk\\winTheme.tcl',
'D:\\Program Files\\Python39\\tcl\\tk8.6\\ttk\\winTheme.tcl',
'DATA'),
('tk\\ttk\\xpTheme.tcl',
'D:\\Program Files\\Python39\\tcl\\tk8.6\\ttk\\xpTheme.tcl',
'DATA'),
('tk\\msgs\\cs.msg',
'D:\\Program Files\\Python39\\tcl\\tk8.6\\msgs\\cs.msg',
'DATA'),
('tk\\msgs\\da.msg',
'D:\\Program Files\\Python39\\tcl\\tk8.6\\msgs\\da.msg',
'DATA'),
('tk\\msgs\\de.msg',
'D:\\Program Files\\Python39\\tcl\\tk8.6\\msgs\\de.msg',
'DATA'),
('tk\\msgs\\el.msg',
'D:\\Program Files\\Python39\\tcl\\tk8.6\\msgs\\el.msg',
'DATA'),
('tk\\msgs\\en.msg',
'D:\\Program Files\\Python39\\tcl\\tk8.6\\msgs\\en.msg',
'DATA'),
('tk\\msgs\\en_gb.msg',
'D:\\Program Files\\Python39\\tcl\\tk8.6\\msgs\\en_gb.msg',
'DATA'),
('tk\\msgs\\eo.msg',
'D:\\Program Files\\Python39\\tcl\\tk8.6\\msgs\\eo.msg',
'DATA'),
('tk\\msgs\\es.msg',
'D:\\Program Files\\Python39\\tcl\\tk8.6\\msgs\\es.msg',
'DATA'),
('tk\\msgs\\fr.msg',
'D:\\Program Files\\Python39\\tcl\\tk8.6\\msgs\\fr.msg',
'DATA'),
('tk\\msgs\\hu.msg',
'D:\\Program Files\\Python39\\tcl\\tk8.6\\msgs\\hu.msg',
'DATA'),
('tk\\msgs\\it.msg',
'D:\\Program Files\\Python39\\tcl\\tk8.6\\msgs\\it.msg',
'DATA'),
('tk\\msgs\\nl.msg',
'D:\\Program Files\\Python39\\tcl\\tk8.6\\msgs\\nl.msg',
'DATA'),
('tk\\msgs\\pl.msg',
'D:\\Program Files\\Python39\\tcl\\tk8.6\\msgs\\pl.msg',
'DATA'),
('tk\\msgs\\pt.msg',
'D:\\Program Files\\Python39\\tcl\\tk8.6\\msgs\\pt.msg',
'DATA'),
('tk\\msgs\\ru.msg',
'D:\\Program Files\\Python39\\tcl\\tk8.6\\msgs\\ru.msg',
'DATA'),
('tk\\msgs\\sv.msg',
'D:\\Program Files\\Python39\\tcl\\tk8.6\\msgs\\sv.msg',
'DATA'),
('tk\\images\\logo.eps',
'D:\\Program Files\\Python39\\tcl\\tk8.6\\images\\logo.eps',
'DATA'),
('tk\\images\\logo100.gif',
'D:\\Program Files\\Python39\\tcl\\tk8.6\\images\\logo100.gif',
'DATA'),
('tk\\images\\logo64.gif',
'D:\\Program Files\\Python39\\tcl\\tk8.6\\images\\logo64.gif',
'DATA'),
('tk\\images\\logoLarge.gif',
'D:\\Program Files\\Python39\\tcl\\tk8.6\\images\\logoLarge.gif',
'DATA'),
('tk\\images\\logoMed.gif',
'D:\\Program Files\\Python39\\tcl\\tk8.6\\images\\logoMed.gif',
'DATA'),
('tk\\images\\pwrdLogo.eps',
'D:\\Program Files\\Python39\\tcl\\tk8.6\\images\\pwrdLogo.eps',
'DATA'),
('tk\\images\\pwrdLogo100.gif',
'D:\\Program Files\\Python39\\tcl\\tk8.6\\images\\pwrdLogo100.gif',
'DATA'),
('tk\\images\\pwrdLogo150.gif',
'D:\\Program Files\\Python39\\tcl\\tk8.6\\images\\pwrdLogo150.gif',
'DATA'),
('tk\\images\\pwrdLogo175.gif',
'D:\\Program Files\\Python39\\tcl\\tk8.6\\images\\pwrdLogo175.gif',
'DATA'),
('tk\\images\\pwrdLogo200.gif',
'D:\\Program Files\\Python39\\tcl\\tk8.6\\images\\pwrdLogo200.gif',
'DATA'),
('tk\\images\\pwrdLogo75.gif',
'D:\\Program Files\\Python39\\tcl\\tk8.6\\images\\pwrdLogo75.gif',
'DATA'),
('tk\\images\\README',
'D:\\Program Files\\Python39\\tcl\\tk8.6\\images\\README',
'DATA'),
('tk\\images\\tai-ku.gif',
'D:\\Program Files\\Python39\\tcl\\tk8.6\\images\\tai-ku.gif',
'DATA')])

View File

@ -0,0 +1,21 @@
('D:\\Program Files\\Python39\\tcl\\tcl8.6\\..\\tcl8',
'tcl8',
[],
'DATA',
[('tcl8\\8.6\\http-2.9.5.tm',
'D:\\Program Files\\Python39\\tcl\\tcl8.6\\..\\tcl8\\8.6\\http-2.9.5.tm',
'DATA'),
('tcl8\\8.5\\msgcat-1.6.1.tm',
'D:\\Program Files\\Python39\\tcl\\tcl8.6\\..\\tcl8\\8.5\\msgcat-1.6.1.tm',
'DATA'),
('tcl8\\8.5\\tcltest-2.5.3.tm',
'D:\\Program Files\\Python39\\tcl\\tcl8.6\\..\\tcl8\\8.5\\tcltest-2.5.3.tm',
'DATA'),
('tcl8\\8.4\\platform-1.0.18.tm',
'D:\\Program '
'Files\\Python39\\tcl\\tcl8.6\\..\\tcl8\\8.4\\platform-1.0.18.tm',
'DATA'),
('tcl8\\8.4\\platform\\shell-1.1.4.tm',
'D:\\Program '
'Files\\Python39\\tcl\\tcl8.6\\..\\tcl8\\8.4\\platform\\shell-1.1.4.tm',
'DATA')])

View File

@ -0,0 +1,314 @@
This file lists modules PyInstaller was not able to find. This does not
necessarily mean this module is required for running you program. Python and
Python 3rd-party packages include a lot of conditional or optional modules. For
example the module 'ntpath' only exists on Windows, whereas the module
'posixpath' only exists on Posix systems.
Types if import:
* top-level: imported at the top-level - look at these first
* conditional: imported within an if-statement
* delayed: imported from within a function
* optional: imported within a try-except-statement
IMPORTANT: Do NOT post this list to the issue-tracker. Use it as a basis for
yourself tracking down the missing module. Thanks!
missing module named 'org.python' - imported by copy (optional), xml.sax (delayed, conditional), setuptools.sandbox (conditional)
missing module named _posixsubprocess - imported by subprocess (optional), multiprocessing.util (delayed)
missing module named grp - imported by subprocess (optional), shutil (optional), tarfile (optional), pathlib (delayed, optional), distutils.archive_util (optional)
missing module named pwd - imported by posixpath (delayed, conditional), subprocess (optional), shutil (optional), tarfile (optional), pathlib (delayed, conditional, optional), http.server (delayed, optional), webbrowser (delayed), netrc (delayed, conditional), getpass (delayed), distutils.util (delayed, conditional, optional), distutils.archive_util (optional)
missing module named _posixshmem - imported by multiprocessing.resource_tracker (conditional), multiprocessing.shared_memory (conditional)
missing module named multiprocessing.set_start_method - imported by multiprocessing (top-level), multiprocessing.spawn (top-level)
missing module named multiprocessing.get_start_method - imported by multiprocessing (top-level), multiprocessing.spawn (top-level)
missing module named urllib.unquote_plus - imported by urllib (conditional), sqlalchemy.util.compat (conditional)
missing module named urllib.unquote - imported by urllib (conditional), sqlalchemy.util.compat (conditional)
missing module named urllib.quote_plus - imported by urllib (conditional), sqlalchemy.util.compat (conditional)
missing module named urllib.quote - imported by urllib (conditional), sqlalchemy.util.compat (conditional), playsound (delayed, optional)
missing module named urllib.pathname2url - imported by urllib (conditional), PyInstaller.lib.modulegraph._compat (conditional), playsound (delayed, optional)
missing module named pep517 - imported by importlib.metadata (delayed)
missing module named posix - imported by os (conditional, optional), shutil (conditional), importlib._bootstrap_external (conditional)
missing module named resource - imported by posix (top-level), test.support (delayed, conditional, optional)
excluded module named _frozen_importlib - imported by importlib (optional), importlib.abc (optional), zipimport (top-level), PyInstaller.loader.pyimod02_archive (delayed)
missing module named _frozen_importlib_external - imported by importlib._bootstrap (delayed), importlib (optional), importlib.abc (optional), zipimport (top-level)
missing module named multiprocessing.get_context - imported by multiprocessing (top-level), multiprocessing.pool (top-level), multiprocessing.managers (top-level), multiprocessing.sharedctypes (top-level)
missing module named multiprocessing.TimeoutError - imported by multiprocessing (top-level), multiprocessing.pool (top-level)
missing module named _scproxy - imported by urllib.request (conditional)
missing module named termios - imported by tty (top-level), getpass (optional), serial.serialposix (top-level)
missing module named 'java.lang' - imported by platform (delayed, optional), xml.sax._exceptions (conditional)
missing module named multiprocessing.BufferTooShort - imported by multiprocessing (top-level), multiprocessing.connection (top-level)
missing module named multiprocessing.AuthenticationError - imported by multiprocessing (top-level), multiprocessing.connection (top-level)
missing module named multiprocessing.Pool - imported by multiprocessing (delayed, conditional), scipy._lib._util (delayed, conditional)
missing module named multiprocessing.Manager - imported by multiprocessing (optional), nose.plugins.plugintest (optional)
missing module named multiprocessing.current_process - imported by multiprocessing (delayed), nose.plugins.plugintest (delayed)
missing module named asyncio.DefaultEventLoopPolicy - imported by asyncio (delayed, conditional), asyncio.events (delayed, conditional)
missing module named vms_lib - imported by platform (delayed, optional)
missing module named java - imported by platform (delayed)
missing module named _winreg - imported by platform (delayed, optional), pkg_resources._vendor.appdirs (delayed, conditional)
missing module named readline - imported by cmd (delayed, conditional, optional), code (delayed, conditional, optional), pdb (delayed, optional)
missing module named org - imported by pickle (optional)
missing module named pyimod03_importers - imported by D:\Program Files\Python39\Lib\site-packages\PyInstaller\hooks\rthooks\pyi_rth_pkgutil.py (top-level), D:\Program Files\Python39\Lib\site-packages\PyInstaller\hooks\rthooks\pyi_rth_pkgres.py (top-level)
missing module named tputil - imported by jinja2.debug (conditional, optional)
missing module named railroad - imported by pyparsing.diagram (top-level)
missing module named _manylinux - imported by pkg_resources._vendor.packaging.tags (delayed, optional), packaging._manylinux (delayed, optional), setuptools._vendor.packaging.tags (delayed, optional)
missing module named 'com.sun' - imported by pkg_resources._vendor.appdirs (delayed, conditional, optional)
missing module named com - imported by pkg_resources._vendor.appdirs (delayed)
missing module named 'win32com.shell' - imported by pkg_resources._vendor.appdirs (delayed, conditional, optional)
missing module named 'pkg_resources.extern.pyparsing' - imported by pkg_resources._vendor.packaging.requirements (top-level), pkg_resources._vendor.packaging.markers (top-level)
missing module named __builtin__ - imported by pkg_resources._vendor.pyparsing (conditional), setuptools._vendor.pyparsing (conditional)
missing module named ordereddict - imported by pkg_resources._vendor.pyparsing (optional), setuptools._vendor.pyparsing (optional)
missing module named pkg_resources.extern.packaging - imported by pkg_resources.extern (top-level), pkg_resources (top-level)
missing module named pkg_resources.extern.appdirs - imported by pkg_resources.extern (top-level), pkg_resources (top-level)
missing module named pickle5 - imported by numpy.compat.py3k (optional)
missing module named _dummy_thread - imported by cffi.lock (conditional, optional), numpy.core.arrayprint (optional)
missing module named numpy.array - imported by numpy (top-level), numpy.ma.core (top-level), numpy.ma.extras (top-level), numpy.ma.mrecords (top-level), scipy.interpolate.interpolate (top-level), scipy.linalg.decomp (top-level), scipy.linalg.decomp_schur (top-level), scipy.sparse.linalg.isolve.utils (top-level), scipy.interpolate._fitpack_impl (top-level), scipy.interpolate.fitpack2 (top-level), scipy.stats.stats (top-level), scipy.optimize.lbfgsb (top-level), scipy.optimize.tnc (top-level), scipy.optimize.slsqp (top-level), scipy.integrate._ode (top-level), scipy.misc.common (top-level), scipy.stats.morestats (top-level)
missing module named numpy.recarray - imported by numpy (top-level), numpy.ma.mrecords (top-level)
missing module named numpy.ndarray - imported by numpy (top-level), numpy.ma.core (top-level), numpy.ma.extras (top-level), numpy.ma.mrecords (top-level), numpy.ctypeslib (top-level), pandas.compat.numpy.function (top-level), numpy.typing._array_like (top-level), scipy.stats._distn_infrastructure (top-level), scipy.stats.mstats_basic (top-level), scipy.stats.mstats_extras (top-level)
missing module named numpy.dtype - imported by numpy (top-level), numpy.ma.mrecords (top-level), numpy.ctypeslib (top-level), scipy.optimize.minpack (top-level), numpy.typing._array_like (top-level)
missing module named numpy.bool_ - imported by numpy (top-level), numpy.ma.core (top-level), numpy.ma.mrecords (top-level), numpy.typing._array_like (top-level)
missing module named numpy.expand_dims - imported by numpy (top-level), numpy.ma.core (top-level)
missing module named numpy.iscomplexobj - imported by numpy (top-level), numpy.ma.core (top-level), scipy.linalg.decomp (top-level), scipy.linalg._decomp_ldl (top-level)
missing module named numpy.amin - imported by numpy (top-level), numpy.ma.core (top-level), scipy.stats.morestats (top-level)
missing module named numpy.amax - imported by numpy (top-level), numpy.ma.core (top-level), scipy.linalg.matfuncs (top-level), scipy.stats.morestats (top-level)
missing module named numpy.histogramdd - imported by numpy (delayed), numpy.lib.twodim_base (delayed)
missing module named numpy.core.ufunc - imported by numpy.core (top-level), numpy.lib.utils (top-level)
missing module named numpy.core.ones - imported by numpy.core (top-level), numpy.lib.polynomial (top-level)
missing module named numpy.core.hstack - imported by numpy.core (top-level), numpy.lib.polynomial (top-level)
missing module named numpy.core.atleast_1d - imported by numpy.core (top-level), numpy.lib.polynomial (top-level)
missing module named numpy.core.atleast_3d - imported by numpy.core (top-level), numpy.lib.shape_base (top-level)
missing module named numpy.core.vstack - imported by numpy.core (top-level), numpy.lib.shape_base (top-level)
missing module named numpy.core.linspace - imported by numpy.core (top-level), numpy.lib.index_tricks (top-level)
missing module named numpy.core.transpose - imported by numpy.core (top-level), numpy.lib.function_base (top-level)
missing module named numpy.core.roll - imported by numpy.core (top-level), numpy.fft.helper (top-level)
missing module named numpy.core.integer - imported by numpy.core (top-level), numpy.fft.helper (top-level)
missing module named numpy.core.take - imported by numpy.core (top-level), numpy.fft._pocketfft (top-level)
missing module named numpy.core.conjugate - imported by numpy.core (top-level), numpy.fft._pocketfft (top-level)
missing module named numpy.core.result_type - imported by numpy.core (delayed), numpy.testing._private.utils (delayed)
missing module named numpy.core.float_ - imported by numpy.core (delayed), numpy.testing._private.utils (delayed)
missing module named numpy.core.number - imported by numpy.core (delayed), numpy.testing._private.utils (delayed)
missing module named numpy.core.bool_ - imported by numpy.core (delayed), numpy.testing._private.utils (delayed)
missing module named numpy.core.inf - imported by numpy.core (delayed), numpy.testing._private.utils (delayed)
missing module named numpy.core.array2string - imported by numpy.core (delayed), numpy.testing._private.utils (delayed)
missing module named numpy.core.signbit - imported by numpy.core (delayed), numpy.testing._private.utils (delayed)
missing module named numpy.core.isscalar - imported by numpy.core (delayed), numpy.testing._private.utils (delayed), numpy.lib.polynomial (top-level)
missing module named numpy.core.isinf - imported by numpy.core (delayed), numpy.testing._private.utils (delayed)
missing module named numpy.core.isnat - imported by numpy.core (top-level), numpy.testing._private.utils (top-level)
missing module named numpy.core.ndarray - imported by numpy.core (top-level), numpy.testing._private.utils (top-level), numpy.lib.utils (top-level)
missing module named numpy.core.array_repr - imported by numpy.core (top-level), numpy.testing._private.utils (top-level)
missing module named numpy.core.arange - imported by numpy.core (top-level), numpy.testing._private.utils (top-level), numpy.fft.helper (top-level)
missing module named numpy.core.float32 - imported by numpy.core (top-level), numpy.testing._private.utils (top-level)
missing module named numpy.core.iinfo - imported by numpy.core (top-level), numpy.lib.twodim_base (top-level)
missing module named numpy.core.sort - imported by numpy.core (top-level), numpy.linalg.linalg (top-level)
missing module named numpy.core.argsort - imported by numpy.core (top-level), numpy.linalg.linalg (top-level)
missing module named numpy.core.sign - imported by numpy.core (top-level), numpy.linalg.linalg (top-level)
missing module named numpy.core.isnan - imported by numpy.core (top-level), numpy.linalg.linalg (top-level), numpy.testing._private.utils (delayed)
missing module named numpy.core.count_nonzero - imported by numpy.core (top-level), numpy.linalg.linalg (top-level)
missing module named numpy.core.divide - imported by numpy.core (top-level), numpy.linalg.linalg (top-level)
missing module named numpy.core.swapaxes - imported by numpy.core (top-level), numpy.linalg.linalg (top-level), numpy.fft._pocketfft (top-level)
missing module named numpy.core.matmul - imported by numpy.core (top-level), numpy.linalg.linalg (top-level)
missing module named numpy.core.object_ - imported by numpy.core (top-level), numpy.linalg.linalg (top-level), numpy.testing._private.utils (delayed)
missing module named numpy.core.asanyarray - imported by numpy.core (top-level), numpy.linalg.linalg (top-level)
missing module named numpy.core.intp - imported by numpy.core (top-level), numpy.linalg.linalg (top-level), numpy.testing._private.utils (top-level)
missing module named numpy.core.atleast_2d - imported by numpy.core (top-level), numpy.linalg.linalg (top-level)
missing module named numpy.core.product - imported by numpy.core (top-level), numpy.linalg.linalg (top-level)
missing module named numpy.core.amax - imported by numpy.core (top-level), numpy.linalg.linalg (top-level)
missing module named numpy.core.amin - imported by numpy.core (top-level), numpy.linalg.linalg (top-level)
missing module named numpy.core.moveaxis - imported by numpy.core (top-level), numpy.linalg.linalg (top-level)
missing module named numpy.core.geterrobj - imported by numpy.core (top-level), numpy.linalg.linalg (top-level)
missing module named numpy.core.errstate - imported by numpy.core (top-level), numpy.linalg.linalg (top-level), numpy.testing._private.utils (delayed)
missing module named numpy.core.finfo - imported by numpy.core (top-level), numpy.linalg.linalg (top-level), numpy.lib.polynomial (top-level)
missing module named numpy.core.isfinite - imported by numpy.core (top-level), numpy.linalg.linalg (top-level), numpy.testing._private.utils (delayed)
missing module named numpy.core.sum - imported by numpy.core (top-level), numpy.linalg.linalg (top-level)
missing module named numpy.core.fastCopyAndTranspose - imported by numpy.core (top-level), numpy.linalg.linalg (top-level)
missing module named numpy.core.sqrt - imported by numpy.core (top-level), numpy.linalg.linalg (top-level), numpy.fft._pocketfft (top-level)
missing module named numpy.core.multiply - imported by numpy.core (top-level), numpy.linalg.linalg (top-level)
missing module named numpy.core.add - imported by numpy.core (top-level), numpy.linalg.linalg (top-level)
missing module named numpy.core.dot - imported by numpy.core (top-level), numpy.linalg.linalg (top-level), numpy.lib.polynomial (top-level)
missing module named numpy.core.Inf - imported by numpy.core (top-level), numpy.linalg.linalg (top-level)
missing module named numpy.core.all - imported by numpy.core (top-level), numpy.linalg.linalg (top-level), numpy.testing._private.utils (delayed)
missing module named numpy.core.newaxis - imported by numpy.core (top-level), numpy.linalg.linalg (top-level)
missing module named numpy.core.complexfloating - imported by numpy.core (top-level), numpy.linalg.linalg (top-level)
missing module named numpy.core.inexact - imported by numpy.core (top-level), numpy.linalg.linalg (top-level)
missing module named numpy.core.cdouble - imported by numpy.core (top-level), numpy.linalg.linalg (top-level)
missing module named numpy.core.csingle - imported by numpy.core (top-level), numpy.linalg.linalg (top-level)
missing module named numpy.core.double - imported by numpy.core (top-level), numpy.linalg.linalg (top-level)
missing module named numpy.core.single - imported by numpy.core (top-level), numpy.linalg.linalg (top-level)
missing module named numpy.core.intc - imported by numpy.core (top-level), numpy.linalg.linalg (top-level)
missing module named numpy.core.empty_like - imported by numpy.core (top-level), numpy.linalg.linalg (top-level)
missing module named numpy.core.empty - imported by numpy.core (top-level), numpy.linalg.linalg (top-level), numpy.testing._private.utils (top-level), numpy.fft.helper (top-level)
missing module named numpy.core.zeros - imported by numpy.core (top-level), numpy.linalg.linalg (top-level), numpy.fft._pocketfft (top-level)
missing module named numpy.core.asarray - imported by numpy.core (top-level), numpy.linalg.linalg (top-level), numpy.fft._pocketfft (top-level), numpy.fft.helper (top-level), numpy.lib.utils (top-level)
missing module named numpy.core.array - imported by numpy.core (top-level), numpy.linalg.linalg (top-level), numpy.testing._private.utils (top-level), numpy.lib.polynomial (top-level)
missing module named numpy.eye - imported by numpy (delayed), numpy.core.numeric (delayed), scipy.linalg.decomp (top-level), scipy.interpolate._pade (top-level), scipy.optimize.optimize (top-level), scipy.optimize.minpack (top-level)
missing module named psutil - imported by numpy.testing._private.utils (delayed, optional), scipy._lib._testutils (delayed, optional)
runtime module named six.moves - imported by dateutil.tz.tz (top-level), dateutil.tz._factories (top-level), dateutil.tz.win (top-level), dateutil.rrule (top-level)
missing module named six.moves.range - imported by six.moves (top-level), dateutil.rrule (top-level)
missing module named StringIO - imported by PyInstaller.lib.modulegraph._compat (conditional), PyInstaller.lib.modulegraph.zipio (conditional), six (conditional), sqlalchemy.util.compat (conditional)
missing module named dateutil.tz.tzfile - imported by dateutil.tz (top-level), dateutil.zoneinfo (top-level)
missing module named olefile - imported by PIL.MicImagePlugin (top-level), PIL.FpxImagePlugin (top-level)
missing module named 'PySide2.QtGui' - imported by PIL.ImageQt (conditional, optional)
missing module named 'PySide6.QtGui' - imported by PIL.ImageQt (conditional, optional)
missing module named 'PyQt6.QtGui' - imported by PIL.ImageQt (conditional, optional)
missing module named dummy_thread - imported by cffi.lock (conditional, optional)
missing module named thread - imported by cffi.lock (conditional, optional), cffi.cparser (conditional, optional)
missing module named 'setuptools.extern.pyparsing' - imported by setuptools._vendor.packaging.requirements (top-level), setuptools._vendor.packaging.markers (top-level)
missing module named 'setuptools.extern.more_itertools' - imported by setuptools.dist (top-level), setuptools.package_index (top-level), setuptools.msvc (top-level)
missing module named 'setuptools.extern.packaging.version' - imported by setuptools.config (top-level), setuptools.msvc (top-level)
missing module named 'setuptools.extern.packaging.utils' - imported by setuptools.wheel (top-level)
missing module named 'setuptools.extern.packaging.tags' - imported by setuptools.wheel (top-level)
missing module named 'setuptools.extern.packaging.specifiers' - imported by setuptools.config (top-level)
missing module named setuptools.extern.ordered_set - imported by setuptools.extern (top-level), setuptools.dist (top-level)
missing module named setuptools.extern.packaging - imported by setuptools.extern (top-level), setuptools.dist (top-level), setuptools.command.egg_info (top-level)
missing module named cStringIO - imported by cPickle (top-level), cffi.ffiplatform (optional), sqlalchemy.util.compat (conditional)
missing module named copy_reg - imported by cPickle (top-level), cStringIO (top-level)
missing module named cPickle - imported by pycparser.ply.yacc (delayed, optional), sqlalchemy.util.compat (conditional, optional), sqlalchemy.testing.util (delayed, conditional, optional)
missing module named cffi._pycparser - imported by cffi (optional), cffi.cparser (optional)
missing module named defusedxml - imported by PIL.Image (optional), openpyxl.xml (delayed, optional)
missing module named fontTools.ttLib.getSearchRange - imported by fontTools.ttLib (top-level), fontTools.ttLib.woff2 (top-level), fontTools.ttLib.tables.otConverters (top-level), fontTools.ttLib.tables._c_m_a_p (top-level), fontTools.ttLib.tables._k_e_r_n (top-level), fontTools.ttLib.sfnt (delayed, conditional)
missing module named zopfli - imported by fontTools.ttLib.sfnt (delayed, conditional)
missing module named unicodedata2 - imported by fontTools.unicode (delayed, optional)
missing module named xattr - imported by fontTools.misc.macCreatorType (optional)
missing module named brotli - imported by fontTools.ttLib.woff2 (optional)
missing module named brotlicffi - imported by fontTools.ttLib.woff2 (optional)
missing module named fontTools.ttLib.getClassTag - imported by fontTools.ttLib (top-level), fontTools.ttLib.tables.DefaultTable (top-level)
missing module named fontTools.ttLib.getTableClass - imported by fontTools.ttLib (top-level), fontTools.ttLib.woff2 (top-level)
missing module named fontTools.ttLib.getTableModule - imported by fontTools.ttLib (top-level), fontTools.ttLib.woff2 (top-level)
missing module named fontTools.ttLib.TTFont - imported by fontTools.ttLib (top-level), fontTools.ttLib.woff2 (top-level), fontTools.cffLib (top-level), fontTools.varLib (top-level), fontTools.varLib.varStore (delayed), fontTools.otlLib.optimize (top-level), fontTools.otlLib.optimize.gpos (top-level), fontTools.ttx (top-level), fontTools.colorLib.unbuilder (conditional)
missing module named __pypy__ - imported by fontTools.misc.etree (optional)
missing module named 'lxml.etree' - imported by openpyxl.xml.functions (conditional), pandas.io.xml (delayed), pandas.io.formats.xml (delayed), pandas.io.html (delayed), fontTools.misc.etree (optional)
missing module named UserList - imported by fontTools.ttLib.tables.otConverters (optional)
missing module named fontTools.ttLib.newTable - imported by fontTools.ttLib (top-level), fontTools.ttLib.tables._n_a_m_e (top-level), fontTools.varLib (top-level), fontTools.varLib.featureVars (top-level), fontTools.varLib.cff (top-level)
missing module named lxml - imported by openpyxl.xml (delayed, optional), fontTools.subset.svg (optional)
missing module named 'lz4.block' - imported by fontTools.ttLib.tables.grUtils (optional)
missing module named lz4 - imported by fontTools.ttLib.tables.grUtils (optional)
missing module named PyQt6 - imported by matplotlib.backends.qt_compat (delayed, conditional), matplotlib.backends.backend_qtagg (delayed, conditional, optional)
missing module named shiboken2 - imported by matplotlib.backends.qt_compat (delayed, conditional)
missing module named PySide2 - imported by matplotlib.backends.qt_compat (delayed, conditional)
missing module named sip - imported by matplotlib.backends.qt_compat (delayed, conditional), PyQt5 (top-level)
missing module named shiboken6 - imported by matplotlib.backends.qt_compat (delayed, conditional)
missing module named PySide6 - imported by matplotlib.backends.qt_compat (delayed, conditional)
missing module named 'tornado.template' - imported by matplotlib.backends.backend_webagg (delayed)
missing module named 'tornado.websocket' - imported by matplotlib.backends.backend_webagg (top-level)
missing module named 'tornado.ioloop' - imported by matplotlib.backends.backend_webagg (top-level)
missing module named 'tornado.web' - imported by matplotlib.backends.backend_webagg (top-level)
missing module named tornado - imported by matplotlib.backends.backend_webagg (optional), matplotlib.backends.backend_webagg_core (delayed)
missing module named IPython - imported by PIL.ImageShow (optional), matplotlib.backend_bases (delayed), matplotlib.pyplot (delayed, conditional), pandas.io.formats.printing (delayed)
missing module named 'IPython.core' - imported by matplotlib.backend_bases (delayed), matplotlib.pyplot (delayed), pandas.io.formats.printing (delayed, conditional)
missing module named matplotlib.tri.Triangulation - imported by matplotlib.tri (top-level), matplotlib.tri.trifinder (top-level), matplotlib.tri.tritools (top-level), matplotlib.tri.triinterpolate (top-level)
missing module named matplotlib.axes.Axes - imported by matplotlib.axes (delayed), matplotlib.legend (delayed), matplotlib.projections.geo (top-level), matplotlib.projections.polar (top-level), mpl_toolkits.mplot3d.axes3d (top-level), matplotlib.figure (top-level), matplotlib.pyplot (top-level), pandas.plotting._matplotlib.timeseries (conditional), pandas.plotting._matplotlib.tools (conditional), pandas.plotting._matplotlib.core (conditional), pandas.plotting._matplotlib.boxplot (conditional), pandas.plotting._matplotlib.hist (conditional), pandas.plotting._matplotlib.misc (conditional)
missing module named gi - imported by matplotlib.cbook (delayed, conditional), playsound (delayed, conditional, optional)
missing module named dummy_threading - imported by matplotlib.pyplot (optional), matplotlib.font_manager (optional), matplotlib.backends.backend_agg (optional), sqlalchemy.util.compat (optional)
missing module named 'gi.repository' - imported by playsound (delayed, conditional, optional)
missing module named Foundation - imported by pandas.io.clipboard (delayed, conditional, optional), playsound (delayed)
missing module named AppKit - imported by pandas.io.clipboard (delayed, conditional, optional), playsound (delayed, conditional, optional)
missing module named numexpr - imported by pandas.core.computation.expressions (conditional), pandas.core.computation.engines (delayed)
missing module named pytest - imported by scipy._lib._testutils (delayed), matplotlib (delayed, optional), pandas._testing._io (delayed), pandas._testing (delayed), pandas.util._tester (delayed, optional), sqlalchemy.testing.warnings (delayed, optional)
missing module named pyarrow - imported by pandas.core.arrays.masked (delayed), pandas.core.arrays.numeric (delayed, conditional), pandas.core.arrays._arrow_utils (top-level), pandas.core.arrays.interval (delayed), pandas.core.arrays.period (delayed), pandas.core.arrays.boolean (delayed, conditional), pandas.io.feather_format (delayed), pandas.core.arrays.string_ (delayed, conditional), pandas.core.arrays.string_arrow (conditional), pandas.core.dtypes.dtypes (delayed, conditional), pandas.compat.pyarrow (optional)
missing module named 'pyarrow.parquet' - imported by pandas.io.parquet (delayed)
missing module named PyQt4 - imported by pandas.io.clipboard (delayed, conditional, optional)
missing module named qtpy - imported by pandas.io.clipboard (delayed, conditional, optional)
missing module named urlparse - imported by sqlalchemy.util.compat (conditional)
missing module named ConfigParser - imported by sqlalchemy.util.compat (conditional)
missing module named importlib_metadata - imported by pyvisa (conditional), PyInstaller.compat (delayed, conditional), PyInstaller.utils.hooks.conda (conditional), sqlalchemy.util.compat (conditional)
missing module named tables - imported by pandas.io.pytables (delayed, conditional)
missing module named xlsxwriter - imported by pandas.io.excel._xlsxwriter (delayed)
missing module named 'defusedxml.ElementTree' - imported by openpyxl.xml.functions (conditional)
missing module named tests - imported by openpyxl.reader.excel (optional)
missing module named 'odf.config' - imported by pandas.io.excel._odswriter (delayed)
missing module named 'odf.style' - imported by pandas.io.excel._odswriter (delayed)
missing module named 'odf.text' - imported by pandas.io.excel._odfreader (delayed), pandas.io.excel._odswriter (delayed)
missing module named 'odf.table' - imported by pandas.io.excel._odfreader (delayed), pandas.io.excel._odswriter (delayed)
missing module named 'odf.opendocument' - imported by pandas.io.excel._odfreader (delayed), pandas.io.excel._odswriter (delayed)
missing module named xlrd - imported by pandas.io.excel._xlrd (delayed), pandas.io.excel._base (delayed, conditional)
missing module named pyxlsb - imported by pandas.io.excel._pyxlsb (delayed)
missing module named 'odf.element' - imported by pandas.io.excel._odfreader (delayed)
missing module named 'odf.namespaces' - imported by pandas.io.excel._odfreader (delayed)
missing module named odf - imported by pandas.io.excel._odfreader (delayed)
missing module named scipy.special.ndtr - imported by scipy.special (top-level), scipy.stats._bootstrap (top-level)
missing module named scipy.special.betaln - imported by scipy.special (top-level), scipy.stats._discrete_distns (top-level), scipy.stats._multivariate (top-level)
missing module named scipy.special.beta - imported by scipy.special (top-level), scipy.stats._tukeylambda_stats (top-level)
missing module named scipy.special.ive - imported by scipy.special (top-level), scipy.stats._distn_infrastructure (top-level)
missing module named scipy.special.entr - imported by scipy.special (top-level), scipy.stats._distn_infrastructure (top-level), scipy.stats._discrete_distns (top-level), scipy.stats._multivariate (top-level)
missing module named scipy.special.chndtr - imported by scipy.special (top-level), scipy.stats._distn_infrastructure (top-level)
missing module named scipy.special.rel_entr - imported by scipy.special (top-level), scipy.spatial.distance (top-level)
missing module named scipy.special.xlogy - imported by scipy.special (top-level), scipy.interpolate.rbf (top-level), scipy.stats._distn_infrastructure (top-level), scipy.stats._multivariate (top-level)
missing module named scipy.sparse.coo_matrix - imported by scipy.sparse (delayed), scipy.sparse.data (delayed), scipy.optimize._numdiff (top-level), scipy.integrate._bvp (top-level), scipy.integrate._ivp.common (top-level), scipy.stats._crosstab (top-level), pandas.core.arrays.sparse.accessor (delayed)
missing module named numpy.random.randn - imported by numpy.random (top-level), scipy (top-level)
missing module named numpy.random.rand - imported by numpy.random (top-level), scipy (top-level)
missing module named scipy.linalg._flapack_64 - imported by scipy.linalg (optional), scipy.linalg.lapack (optional)
missing module named scipy.linalg._clapack - imported by scipy.linalg (optional), scipy.linalg.lapack (optional)
missing module named scipy.linalg._fblas_64 - imported by scipy.linalg (optional), scipy.linalg.blas (optional)
missing module named scipy.linalg._cblas - imported by scipy.linalg (optional), scipy.linalg.blas (optional)
missing module named 'scikits.umfpack' - imported by scipy.optimize._linprog_ip (optional)
missing module named 'sksparse.cholmod' - imported by scipy.optimize._linprog_ip (optional)
missing module named sksparse - imported by scipy.optimize._trustregion_constr.projections (optional), scipy.optimize._linprog_ip (optional)
missing module named numpy.double - imported by numpy (top-level), scipy.optimize._nnls (top-level)
missing module named numpy.float64 - imported by numpy (top-level), scipy.optimize.lbfgsb (top-level)
missing module named numpy.inexact - imported by numpy (top-level), scipy.special._basic (top-level), scipy.linalg.decomp (top-level), scipy.optimize.minpack (top-level)
missing module named numpy.greater - imported by numpy (top-level), scipy.optimize.minpack (top-level)
missing module named sparse - imported by scipy.sparse.linalg._expm_multiply (delayed, conditional), scipy.sparse.linalg.matfuncs (delayed, conditional)
missing module named uarray - imported by scipy._lib.uarray (conditional, optional)
missing module named numpy.arcsin - imported by numpy (top-level), scipy.linalg.decomp_svd (top-level)
missing module named numpy.arccos - imported by numpy (top-level), scipy.special.orthogonal (top-level), scipy.linalg.decomp_svd (top-level)
missing module named numpy.conj - imported by numpy (top-level), scipy.linalg.decomp (top-level)
missing module named scikits - imported by scipy.sparse.linalg.dsolve.linsolve (optional)
missing module named scipy.linalg.qr_insert - imported by scipy.linalg (top-level), scipy.sparse.linalg.isolve._gcrotmk (top-level)
missing module named numpy.single - imported by numpy (top-level), scipy.linalg.decomp_schur (top-level), scipy.linalg.matfuncs (top-level)
missing module named numpy.sign - imported by numpy (top-level), scipy.linalg.matfuncs (top-level)
missing module named numpy.conjugate - imported by numpy (top-level), scipy.linalg.matfuncs (top-level)
missing module named numpy.logical_not - imported by numpy (top-level), scipy.linalg.matfuncs (top-level)
missing module named scipy.special.gammaln - imported by scipy.special (top-level), scipy.special.spfun_stats (top-level), scipy.optimize._dual_annealing (top-level), scipy.integrate._quadrature (top-level), scipy.stats._discrete_distns (top-level), scipy.stats._hypotests (top-level), scipy.stats._multivariate (top-level)
missing module named scipy.special.airy - imported by scipy.special (top-level), scipy.special.orthogonal (top-level)
missing module named scipy.special.comb - imported by scipy.special (delayed), scipy.linalg.special_matrices (delayed), scipy.interpolate.interpolate (top-level), scipy.interpolate._rbfinterp (top-level), scipy.stats._distn_infrastructure (top-level)
missing module named scipy.special.poch - imported by scipy.special (top-level), scipy.fft._fftlog (top-level)
missing module named scipy.special.loggamma - imported by scipy.special (top-level), scipy.fft._fftlog (top-level)
missing module named numpy.power - imported by numpy (top-level), scipy.stats.kde (top-level)
missing module named numpy.NINF - imported by numpy (top-level), scipy.stats._distn_infrastructure (top-level)
missing module named numpy.logical_and - imported by numpy (top-level), scipy.stats._distn_infrastructure (top-level)
missing module named numpy.hypot - imported by numpy (top-level), scipy.stats.morestats (top-level)
missing module named numpy.log - imported by numpy (top-level), scipy.stats._distn_infrastructure (top-level), scipy.stats._discrete_distns (top-level), scipy.stats.morestats (top-level)
missing module named scipy.stats.iqr - imported by scipy.stats (delayed), scipy.stats._hypotests (delayed)
missing module named numpy.sinh - imported by numpy (top-level), scipy.stats._discrete_distns (top-level)
missing module named numpy.cosh - imported by numpy (top-level), scipy.stats._discrete_distns (top-level)
missing module named numpy.tanh - imported by numpy (top-level), scipy.stats._discrete_distns (top-level)
missing module named numpy.expm1 - imported by numpy (top-level), scipy.stats._discrete_distns (top-level)
missing module named numpy.log1p - imported by numpy (top-level), scipy.stats._discrete_distns (top-level)
missing module named _ufunc - imported by numpy.typing (conditional)
missing module named numpy.bytes_ - imported by numpy (top-level), numpy.typing._array_like (top-level)
missing module named numpy.str_ - imported by numpy (top-level), numpy.typing._array_like (top-level)
missing module named numpy.void - imported by numpy (top-level), numpy.typing._array_like (top-level)
missing module named numpy.object_ - imported by numpy (top-level), numpy.typing._array_like (top-level)
missing module named numpy.datetime64 - imported by numpy (top-level), numpy.typing._array_like (top-level)
missing module named numpy.timedelta64 - imported by numpy (top-level), numpy.typing._array_like (top-level)
missing module named numpy.number - imported by numpy (top-level), numpy.typing._array_like (top-level)
missing module named numpy.complexfloating - imported by numpy (top-level), numpy.typing._array_like (top-level)
missing module named numpy.floating - imported by numpy (top-level), numpy.typing._array_like (top-level)
missing module named numpy.unsignedinteger - imported by numpy (top-level), numpy.typing._array_like (top-level)
missing module named botocore - imported by pandas.io.common (delayed, conditional, optional)
missing module named sets - imported by nose.util (optional), pytz.tzinfo (optional)
missing module named UserDict - imported by pytz.lazy (optional)
missing module named 'pyarrow.compute' - imported by pandas.core.arrays.string_arrow (conditional)
missing module named hypothesis - imported by pandas.util._tester (delayed, optional)
missing module named 'lxml.html' - imported by pandas.io.html (delayed)
missing module named bs4 - imported by pandas.io.html (delayed)
missing module named pandas.ExtensionArray - imported by pandas (conditional), pandas.core.construction (conditional)
missing module named Sybase - imported by sqlalchemy.dialects.sybase.pysybase (delayed)
missing module named pysqlite2 - imported by sqlalchemy.dialects.sqlite.pysqlite (delayed, conditional, optional)
missing module named pysqlcipher - imported by sqlalchemy.dialects.sqlite.pysqlcipher (delayed, conditional)
missing module named pysqlcipher3 - imported by sqlalchemy.dialects.sqlite.pysqlcipher (delayed, conditional)
missing module named sqlcipher3 - imported by sqlalchemy.dialects.sqlite.pysqlcipher (delayed, conditional, optional)
missing module named asyncpg - imported by sqlalchemy.dialects.postgresql.asyncpg (delayed)
missing module named postgresql - imported by sqlalchemy.dialects.postgresql.pypostgresql (delayed)
missing module named pgdb - imported by sqlalchemy.dialects.postgresql.pygresql (delayed)
missing module named psycopg2 - imported by sqlalchemy.dialects.postgresql.psycopg2 (delayed)
missing module named cx_Oracle - imported by sqlalchemy.dialects.oracle.cx_oracle (delayed)
missing module named asyncmy - imported by sqlalchemy.dialects.mysql.asyncmy (delayed)
missing module named 'mysql.connector' - imported by sqlalchemy.dialects.mysql.mysqlconnector (delayed, conditional, optional)
missing module named mysql - imported by sqlalchemy.dialects.mysql.mysqlconnector (delayed)
missing module named 'mx.ODBC' - imported by sqlalchemy.connectors.mxodbc (delayed, conditional)
missing module named mx - imported by sqlalchemy.connectors.mxodbc (delayed, conditional)
missing module named 'typing.io' - imported by importlib.resources (top-level)
missing module named setuptools_scm - imported by matplotlib (delayed, conditional)
missing module named fcntl - imported by serial.serialposix (top-level)
missing module named 'System.IO' - imported by serial.serialcli (top-level)
missing module named System - imported by serial.serialcli (top-level)

View File

@ -0,0 +1,15 @@
[Device]
deviceSignal=TCPIP0::192.168.1.71::inst0::INSTR
deviceMultimeter=USB0::0x2A8D::0xB318::MY62200139::0::INSTR
[DB]
IP=192.168.1.68
[Frequency]
160=1.575
320=1.000
640=1.000
1000=2.620
2000=2.9
3000=2.7
4000=1.82
5000=1.33
6000=0.66

Binary file not shown.

Binary file not shown.

15
20231202/频响测试/dist/config.ini vendored Normal file
View File

@ -0,0 +1,15 @@
[Device]
deviceSignal=TCPIP0::192.168.1.71::inst0::INSTR
deviceMultimeter=USB0::0x2A8D::0xB318::MY62200139::0::INSTR
[DB]
IP=192.168.1.68
[Frequency]
160=1.575
320=1.000
640=1.000
1000=2.620
2000=2.9
3000=2.7
4000=1.82
5000=1.33
6000=0.66

Binary file not shown.

View File

@ -0,0 +1,561 @@
from ctypes import *
import time
class Nfc_Reader(object):
def __init__(self, nfc_dev):
self.nfc_reader = nfc_dev
# self.nfc_reader = serial.Serial("com6")
self.dev_info = NFC_INFO()
self.dev_conf = NFC_CONF()
self.init_nfc_message()
self.rfidm_c2_wpack = RFIDM_C2_WRITE_HEADER()
self.rfidm_c2_rpack = RFIDM_C2_READ_HEADER()
self.nfc_uuid = None
def write_info(self, info_data):
info_bytes = bytes(info_data) +b'\x00'
ret = self.rfidm_c2_multi_write(0, 10, info_bytes)
return ret
def write_conf(self, conf_data):
conf_bytes = bytes(conf_data) + bytes([0, 0, 0])
print("配置信息", conf_bytes)
ret1 = self.rfidm_c2_multi_write(16, 15, conf_bytes[:60])
ret2 = self.rfidm_c2_multi_write(31, 15, conf_bytes[60:])
return ret1&ret2
def read_info(self):
# info_pack = NFC_INFO()
ret = self.rfidm_c2_multi_read(0, 10, timout=2)
# print("nfc info:", str(ret))
if ret:
memmove(addressof(self.dev_info), ret, sizeof(self.dev_info))
# self.dev_info_analysis()
return True
else:
return False
def read_conf(self):
# conf_pack = NFC_CONF()
ret1 = self.rfidm_c2_multi_read(16, 15, timout=2)
ret2 = self.rfidm_c2_multi_read(31, 15, timout=2)
# print("nfc info:", str(ret1), str(ret2))
if ret1:
if ret2:
ret = ret1+ret2
memmove(addressof(self.dev_conf), ret, sizeof(self.dev_conf))
print("测点名称:", list(self.dev_conf.node_name))
# self.dev_conf_analysis()
return True
return False
def close(self):
self.nfc_reader.close()
def default(self):
conf_file = open("conf.txt", 'r')
def rfidm_c2_single_write(self, cmd, data):
pass
def rfidm_c2_multi_write(self, block_index, block_count, wdata, timeout=2):
wpack = self.rfidm_c2_multi_write_pack(block_index, block_count, wdata)
self.nfc_reader.reset_input_buffer()
self.nfc_reader.reset_output_buffer()
self.nfc_reader.write(wpack)
#检查返回的信息,是否写入成功
retpack = RFIDM_C2_RET_PACK()
ret = self.nfc_reader.read(sizeof(retpack))
memmove(addressof(retpack), ret, sizeof(retpack))
if retpack.sucess_flag == 0xE7:
return False
else:
return True
def rfidm_c2_multi_read(self, block_index, block_count, timout=0.5):
read_info_cmd = self.rfidm_c2_multi_read_pack(block_index, block_count)
self.nfc_reader.reset_input_buffer()
self.nfc_reader.reset_output_buffer()
self.nfc_reader.write(read_info_cmd)
print("read info cmd:", [hex(data) for data in list(read_info_cmd)])
self.nfc_reader.timeout = timout
ret = self.nfc_reader.read(4*block_count+4)
print(ret)
if len(ret) == (4*block_count+4):
return ret[3:-1]
else:
return None
def rfidm_c2_single_read(self, cmd, retlen, timout=0.5):
cmdpack = RFIDM_C2_WRITE_HEADER()
cmdpack.adress = 0
cmdpack.dlen = 0x02
cmdpack.cmd = cmd
crc = self.bcc_check(bytes(cmdpack)[2:-1])
cmdpack.crc = crc
self.nfc_reader.reset_input_buffer()
self.nfc_reader.reset_output_buffer()
self.nfc_reader.write(bytes(cmdpack))
self.nfc_reader.timeout = 0.5
ret = self.nfc_reader.read(retlen)
if len(ret)==retlen:
return ret
else:
print(ret)
return None
def get_uuid(self):
tagpack = RFIDM_C2_TAG_INFO_PACK()
ret = self.rfidm_c2_single_read(0x11, sizeof(tagpack)) #获取标签命令
if ret:
memmove(addressof(tagpack), ret, sizeof(tagpack))
self.nfc_uuid = tagpack.uuid
else:
self.nfc_uuid = False
def rfidm_c2_multi_write_pack(self, start_block, block_count, data):
"""
写多个block 数据格式
:param start_block: 起始块序号
:param block_count: 一共要写的块
:param data: 要写的数据
:return: bytes格式数据包
"""
mwrite_pack = RFIDM_C2_MULTI_WRITE_PACK()
wpack = RFIDM_C2_WRITE_HEADER()
wpack.address = 0
wpack.dlen = sizeof(wpack) + sizeof(mwrite_pack) + len(data) - 3
wpack.cmd = 0x24
# memmove(addressof(mwrite_pack.uuid), self.nfc_uuid, sizeof(mwrite_pack.uuid))
mwrite_pack.uuid = self.nfc_uuid
mwrite_pack.flag = 0x22
mwrite_pack.start_block = start_block
mwrite_pack.block_len = block_count
wdata = bytes(wpack)[:-1] + bytes(mwrite_pack)+data
crc = self.bcc_check(wdata[2:])
wpack.crc = crc
wdata = bytes(wpack)[:-1] + bytes(mwrite_pack) + data + bytes(wpack)[-1:]
return wdata
def rfidm_c2_single_write_pack(self, block_index, data):
"""
写入单个数据块
:param block_index: 块序号
:param data: 要写入的数据
:return: bytes数据包
"""
wpack = RFIDM_C2_SINGLE_WRITE_PACK()
wpack.address = 0
wpack.dlen = 0x10
wpack.cmd = 0x21
# memmove(addressof(wpack.uuid), self.nfc_uuid, sizeof(wpack.uuid))
wpack.uuid = self.nfc_uuid
wpack.flag = 0x22
wpack.block_index = block_index
memmove(addressof(wpack.data), data, sizeof(wpack.data))
crc = self.bcc_check(bytes(wpack[2:-1]))
wpack.crc = crc
return bytes(wpack)
def rfidm_c2_multi_read_pack(self, block_index, block_count):
rpack = RFIDM_C2_MULTI_READ_PACK()
rpack.address = 0
rpack.dlen = 0x0C
rpack.cmd = 0x23
rpack.uuid = self.nfc_uuid
rpack.block_index = block_index
rpack.block_count = block_count
crc = self.bcc_check(bytes(rpack)[2:-1])
rpack.crc = crc
return bytes(rpack)
def rfidm_c2_single_read_pack(self, block_index):
rpack = RFIDM_C2_SINGLE_READ_PACK()
rpack.address = 0
rpack.dlen = 0x0B
rpack.cmd = 0x20
memmove(addressof(rpack.uuid), self.nfc_uuid, sizeof(rpack.uuid))
rpack.block_index = block_index
crc = self.bcc_check(bytes(rpack[2:-1]))
rpack.crc = crc
return bytes(rpack)
def bcc_check(self, data):
bcc = 0
for d in data:
bcc = bcc^d
return bcc
def rfidm_c2_init(self):
wpack = RFIDM_C2_CMD_PACK()
wpack.address = 0
wpack.dlen = 0x03
wpack.cmd = 0x02
wpack.conf = 0x01
wpack.crc = 0x00
self.nfc_reader.reset_input_buffer()
self.nfc_reader.reset_output_buffer()
self.nfc_reader.write(bytes(wpack))
time.sleep(0.2)
wpack.cmd = 0x0D
wpack.conf = 0x01
wpack.crc = 0x0F
self.nfc_reader.reset_input_buffer()
self.nfc_reader.reset_output_buffer()
self.nfc_reader.write(bytes(wpack))
time.sleep(0.2)
wpack.cmd = 0x0E
wpack.conf = 100
wpack.crc = self.bcc_check(bytes(wpack)[2:-1])
self.nfc_reader.reset_input_buffer()
self.nfc_reader.reset_output_buffer()
self.nfc_reader.write(bytes(wpack))
time.sleep(0.2)
def dev_info_analysis(self):
self.dev_info_msg["初始化标志"] = self.dev_info.uInitFlag
self.dev_info_msg["加速度传感器状态"] = self.dev_info.uAccSta
self.dev_info_msg["Zigbee模块状态"] = self.dev_info.uZigbeeSta
self.dev_info_msg["设备温度传感器状态"] = self.dev_info.uLowerTempSta
self.dev_info_msg["环境温度传感器状态"] = self.dev_info.uUpperTempSta
self.dev_info_msg["设备运行状态"] = self.dev_info.uRunningFlag
self.dev_info_msg["MAC地址"] = hex(self.dev_info.zigbeeMac)[2:]
self.dev_info_msg["硬件版本"] = self.dev_info.hwVersion/10
self.dev_info_msg["软件版本"] = self.dev_info.sfVersion/10
self.dev_info_msg["生产批号"] = self.dev_info.pn
self.dev_info_msg["生产序列号"] = self.dev_info.sn
self.dev_info_msg["首次上电日期"] = self.dev_info.sTime
self.dev_info_msg["唤醒次数"] = self.dev_info.wakeupTimes
self.dev_info_msg["特征值发送次数"] = self.dev_info.tzTimes
self.dev_info_msg["原始波形发送次数"] = self.dev_info.wvTimes
self.dev_info_msg["电池电压"] = self.dev_info.batVol
self.dev_info_msg["产品型号"] = self.dev_info.productType
self.dev_info_msg["无线信号强度"] = self.dev_info.rss
print(bytes(self.dev_conf.node_name))
try:
self.dev_info_msg["测点名称"] = bytes(self.dev_conf.node_name).decode('GB18030')
except:
self.dev_info_msg["测点名称"] = "解析错误"
def dev_conf_analysis(self):
self.dev_conf_msg["配置标志"] = self.dev_conf.active_flag
self.dev_conf_msg["唤醒周期"] = self.dev_conf.wakeup_period
self.dev_conf_msg["原始波形发送周期"] = self.dev_conf.wave_period
self.dev_conf_msg["Zigbee PID"] = hex(self.dev_conf.zig_panid)[2:]
self.dev_conf_msg["Zigbee 信道"] = self.dev_conf.zig_channel
self.dev_conf_msg["Zigbee 本地地址"] = hex(self.dev_conf.zig_local_addr)[2:]
self.dev_conf_msg["Zigbee 目标地址"] = hex(self.dev_conf.zig_dst_addr)[2:]
self.dev_conf_msg["Zigbee 发射功率"] = self.dev_conf.zig_power_level
self.dev_conf_msg["Zigbee 重试次数"] = self.dev_conf.zig_retry_num
self.dev_conf_msg["Zigbee 重试间隔"] = self.dev_conf.zig_retry_time
self.dev_conf_msg["ACC采样率"] = self.acc_freq_cal(self.dev_conf.acc_acq_freq)
self.dev_conf_msg["ACC量程"] = self.acc_range_cal(self.dev_conf.acc_acq_range)
self.dev_conf_msg["ACC采样率时间"] = self.dev_conf.acc_acq_time
self.dev_conf_msg["频带能量参数1 START"] = self.dev_conf.freq_power1_start
self.dev_conf_msg["频带能量参数1 END"] = self.dev_conf.freq_power1_stop
self.dev_conf_msg["频带能量参数2 START"] = self.dev_conf.freq_power2_start
self.dev_conf_msg["频带能量参数2 END"] = self.dev_conf.freq_power2_stop
self.dev_conf_msg["频带能量参数3 START"] = self.dev_conf.freq_power3_start
self.dev_conf_msg["频带能量参数3 END"] = self.dev_conf.freq_power3_stop
self.dev_conf_msg["频带能量参数4 START"] = self.dev_conf.freq_power4_start
self.dev_conf_msg["频带能量参数4 END"] = self.dev_conf.freq_power4_stop
self.dev_conf_msg["频带能量参数5 START"] = self.dev_conf.freq_power5_start
self.dev_conf_msg["频带能量参数5 END"] = self.dev_conf.freq_power5_stop
self.dev_conf_msg["冲击带通频率START"] = self.dev_conf.envel_freq_start
self.dev_conf_msg["冲击带通频率END"] = self.dev_conf.envel_freq_stop
self.dev_conf_msg["故障频率1"] = self.dev_conf.fail_freq1
self.dev_conf_msg["故障频率2"] = self.dev_conf.fail_freq2
self.dev_conf_msg["故障频率3"] = self.dev_conf.fail_freq3
self.dev_conf_msg["故障频率4"] = self.dev_conf.fail_freq4
self.dev_conf_msg["配置时间"] = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(self.dev_conf.conf_date))
self.dev_conf_msg["速度积分滤波频率"] = self.dev_conf.speed_freq_start
def init_nfc_message(self):
self.dev_info_msg = {"测点名称": None,
"初始化标志": None,
"加速度传感器状态": None,
"Zigbee模块状态": None,
"设备温度传感器状态": None,
"环境温度传感器状态": None,
"设备运行状态": None,
"MAC地址": None,
"硬件版本": None,
"软件版本": None,
"生产批号": None,
"生产序列号": None,
"首次上电日期": None,
"唤醒次数": None,
"特征值发送次数": None,
"原始波形发送次数": None,
"电池电压": None,
"产品型号": None,
"无线信号强度": None,
}
self.dev_conf_msg = {"配置标志": None,
"唤醒周期": None,
"原始波形发送周期": None,
"Zigbee PID": None,
"Zigbee 信道": None,
"Zigbee 本地地址": None,
"Zigbee 目标地址": None,
"Zigbee 发射功率": None,
"Zigbee 重试次数": None,
"Zigbee 重试间隔": None,
"ACC采样率": None,
"ACC量程": None,
"ACC采样率时间": None,
"频带能量参数1 START": None,
"频带能量参数1 END": None,
"频带能量参数2 START": None,
"频带能量参数2 END": None,
"频带能量参数3 START": None,
"频带能量参数3 END": None,
"频带能量参数4 START": None,
"频带能量参数4 END": None,
"频带能量参数5 START": None,
"频带能量参数5 END": None,
"冲击带通频率START": None,
"冲击带通频率END": None,
"故障频率1": None,
"故障频率2": None,
"故障频率3": None,
"故障频率4": None,
"配置时间": None,
"速度积分滤波频率": None
}
def acc_range_cal(self, sdata):
if sdata == 0b00:
return "±8g"
elif sdata == 0b01:
return "±16g"
elif sdata == 0b10:
return "±32g"
elif sdata == 0b11:
return "±64g"
def acc_freq_cal(self, sdata):
if sdata == 0b00:
return "3.2kHz"
elif sdata == 0b01:
return "6.4kHz"
elif sdata == 0b10:
return "12.8kHz"
elif sdata == 0b11:
return "25.6kHz"
#传感器信息
class NFC_INFO(BigEndianStructure):
_pack_ = 1
_fields_ = [
#设备状态标志
('uInitFlag', c_ubyte, 1),
('uAccSta', c_ubyte, 1),
('uZigbeeSta', c_ubyte, 1),
('uLowerTempSta', c_ubyte, 1),
('uUpperTempSta', c_ubyte, 1),
('uRunningFlag', c_ubyte, 1),
('zigbeeMac', c_uint64), #Zigbee MAC地址
('hwVersion', c_uint8), #硬件版本
('sfVersion', c_uint8), #软件版本
('pn', c_uint32), #批号
('sn', c_uint32), #序列号
('sTime', c_uint32), #首次上电时间
('wakeupTimes', c_uint32), #唤醒次数
('tzTimes', c_uint32), #特征值发送次数
('wvTimes', c_uint32), #原始波形发送次数
('batVol', c_uint16), #电池电压
('productType', c_uint8), #产品型号
('rss', c_uint8), #Zigbee信号强度
]
class NFC_CONF(BigEndianStructure):
_pack_ = 1
_fields_ = [
('active_flag', c_uint8), # 激活标志
('wakeup_period', c_uint8), # 唤醒周期
('wave_period', c_uint16), # 原始波形发送周期
('zig_panid', c_uint16), # zigbee panid
('zig_channel', c_uint8), # zigbee channel
('zig_local_addr', c_uint16), # zigbee本地地址
('zig_dst_addr', c_uint16), # zigbee目标地址
('zig_power_level', c_uint8), # zigbee发射功率
("zig_retry_num", c_uint8), # 重试次数
("zig_retry_time", c_uint8), # 重试间隔
("reserve", c_ubyte, 4),
("acc_acq_range", c_ubyte, 2), # 量程
("acc_acq_freq", c_ubyte, 2), # 采样率
("acc_acq_time", c_uint8), # 采样时长
("freq_power1_start", c_uint16), # 频带能量参数1
("freq_power1_stop", c_uint16), # 频带能量参数1
("freq_power2_start", c_uint16), # 频带能量参数2
("freq_power2_stop", c_uint16), # 频带能量参数2
("freq_power3_start", c_uint16), # 频带能量参数3
("freq_power3_stop", c_uint16), # 频带能量参数3
("freq_power4_start", c_uint16), # 频带能量参数4
("freq_power4_stop", c_uint16), # 频带能量参数4
("freq_power5_start", c_uint16), # 频带能量参数5
("freq_power5_stop", c_uint16), # 频带能量参数5
("envel_freq_start", c_uint16), # 包络带通频率
("envel_freq_stop", c_uint16), # 包络带通频率
("fail_freq1", c_uint16), # 故障频率1
("fail_freq2", c_uint16), # 故障频率2
("fail_freq3", c_uint16), # 故障频率3
("fail_freq4", c_uint16), # 故障频率4
("conf_date", c_uint32), # 配置时间
("speed_freq_start", c_uint8), # 速度积分起始频率
("node_name", c_uint16*32), # 节点名称
]
class RFIDM_C2_WRITE_HEADER(BigEndianStructure):
_pack_ = 1
_fields_ = [
('address', c_uint16), # 模块地址
('dlen', c_uint8), # 长度
('cmd', c_uint8), # 命令
('crc', c_uint8)
]
class RFIDM_C2_READ_HEADER(BigEndianStructure):
_pack_ = 1
_fields_ = [
('cmd', c_uint8), # 模块地址
('dlen', c_uint8), # 长度
('flag', c_uint8), # 命令
('crc', c_uint8)
]
class RFIDM_C2_MULTI_WRITE_PACK(BigEndianStructure):
_pack_ = 1
_fields_ = [
('uuid', c_uint64), # UUID
('flag', c_uint8), # 标志字节固定值0x22
('start_block', c_uint8), # 起始块号
('block_len', c_uint8), #块数
]
class RFIDM_C2_SINGLE_WRITE_PACK(BigEndianStructure):
_pack_ = 1
_fields_ = [
('address', c_uint16), # 模块地址
('dlen', c_uint8), # 长度0x10
('cmd', c_uint8), # 命令 0x21
('uuid', c_uint64), # UUID
('flag', c_uint8), # 标志字节固定值0x22
('block_index', c_uint8), # 起始块号
('data', c_uint8*4), # 写入的数据
('crc', c_uint8)
]
class RFIDM_C2_MULTI_READ_PACK(BigEndianStructure):
_pack_ = 1
_fields_ = [
('address', c_uint16), # 模块地址
('dlen', c_uint8), # 长度0x10
('cmd', c_uint8), # 命令 0x21
('uuid', c_uint64), # UUID
('block_index', c_uint8), # 起始块号
('block_count', c_uint8), # 块数
('crc', c_uint8)
]
class RFIDM_C2_SINGLE_READ_PACK(BigEndianStructure):
_pack_ = 1
_fields_ = [
('address', c_uint16), # 模块地址
('dlen', c_uint8), # 长度0x10
('cmd', c_uint8), # 命令 0x21
('uuid', c_uint64), # UUID
('block_index', c_uint8), # 数据块号
('crc', c_uint8)
]
class RFIDM_C2_TAG_INFO_PACK(BigEndianStructure):
_pack_ = 1
_fields_ = [
('cmd', c_uint8), # 命令头 0xFE
('dlen', c_uint8), # 长度 0x0C
('sucess_flag', c_uint8), # 成功:0x11, 失败0xE2
('flag', c_uint8), # flag
('dsfid', c_uint8), # DSFID信息
('uuid', c_uint64), # UUID
('crc', c_uint8)
]
class RFIDM_C2_RET_PACK(BigEndianStructure):
_pack_ = 1
_fields_ = [
('cmd', c_uint8), # 命令头 0xFE
('dlen', c_uint8), # 长度 0x02
('sucess_flag', c_uint8), # 成功:0x11, 失败0xE2
('crc', c_uint8)
]
class RFIDM_C2_CMD_PACK(BigEndianStructure):
_pack_ = 1
_fields_ = [
('address', c_uint16), # 模块地址
('dlen', c_uint8), # 长度
('cmd', c_uint8), # 命令
('conf', c_uint8), # 设置
('crc', c_uint8)
]

View File

@ -0,0 +1,485 @@
from ctypes import *
import numpy as np
import datetime
from zigbee_message_pack import *
SENSER_INF_PACK1 = 0x01
SENSER_INF_PACK2 = 0x07
EVEL_DATA_PACK1 = 0x02
EVEL_DATA_PACK2 = 0x06
WAVE_X_PACK = 0x03
WAVE_Y_PACK = 0x04
WAVE_Z_PACK = 0x05
class EvelPack(LittleEndianStructure):
_fields_ = [
# 特征值
("temp_dev", c_uint16),
("temp_env", c_uint16),
("angle", c_uint16),
("bat_vol", c_uint16),
("acc_x_pk", c_uint16),
("acc_x_rms", c_uint16),
("speed_x_pk", c_uint16),
("speed_x_rms", c_uint16),
("fpower_x_1", c_uint16),
("fpower_x_2", c_uint16),
("fpower_x_3", c_uint16),
("fpower_x_4", c_uint16),
("fpower_x_5", c_uint16),
("envepower_x", c_uint16),
("errpower_x_1", c_uint16),
("errpower_x_2", c_uint16),
("errpower_x_3", c_uint16),
("errpower_x_4", c_uint16),
("acc_y_pk", c_uint16),
("acc_y_rms", c_uint16),
("speed_y_pk", c_uint16),
("speed_y_rms", c_uint16),
("fpower_y_1", c_uint16),
("fpower_y_2", c_uint16),
("fpower_y_3", c_uint16),
("fpower_y_4", c_uint16),
("fpower_y_5", c_uint16),
("envepower_y", c_uint16),
("errpower_y_1", c_uint16),
("errpower_y_2", c_uint16),
("errpower_y_3", c_uint16),
("errpower_y_4", c_uint16),
("acc_z_pk", c_uint16),
("acc_z_rms", c_uint16),
("speed_z_pk", c_uint16),
("speed_z_rms", c_uint16),
("fpower_z_1", c_uint16),
("fpower_z_2", c_uint16),
("fpower_z_3", c_uint16),
("fpower_z_4", c_uint16),
("fpower_z_5", c_uint16),
("envepower_z", c_uint16),
("errpower_z_1", c_uint16),
("errpower_z_2", c_uint16),
("errpower_z_3", c_uint16),
("errpower_z_4", c_uint16),
]
class WavePack(Structure):
_fields_ = [
("wvdata", c_uint16 * 46), # 原始波形
]
# 传感器设备信息
class DevInfo1(BigEndianStructure):
_pack_ = 1
_fields_ = [
# 设备状态标志
('uInitFlag', c_ubyte, 1),
('uAccSta', c_ubyte, 1),
('uZigbeeSta', c_ubyte, 1),
('uLowerTempSta', c_ubyte, 1),
('uUpperTempSta', c_ubyte, 1),
('uRunningFlag', c_ubyte, 1),
("reserve", c_ubyte, 2),
('zigbeeMac', c_uint64), # Zigbee MAC地址
('hwVersion', c_uint8), # 硬件版本
('sfVersion', c_uint8), # 软件版本
('pn', c_uint32), # 批号
('sn', c_uint32), # 序列号
('sTime', c_uint32), # 首次上电时间
('wakeupTimes', c_uint32), # 唤醒次数
('tzTimes', c_uint32), # 特征值发送次数
('wvTimes', c_uint32), # 原始波形发送次数
('batVol', c_uint16), # 电池电压
('productType', c_uint8), # 产品型号
('rss', c_uint8), # Zigbee信号强度
('active_flag', c_uint8), # 激活标志
('wakeup_period', c_uint8), # 唤醒周期
('wave_period', c_uint16), # 原始波形发送周期
('zig_panid', c_uint16), # zigbee panid
('zig_channel', c_uint8), # zigbee channel
('zig_local_addr', c_uint16), # zigbee本地地址
('zig_dst_addr', c_uint16), # zigbee目标地址
('zig_power_level', c_uint8), # zigbee发射功率
("zig_retry_num", c_uint8), # 重试次数
("zig_retry_time", c_uint8), # 重试间隔
("reserve", c_ubyte, 4),
("acc_acq_range", c_ubyte, 2), # 量程
("acc_acq_freq", c_ubyte, 2), # 采样率
("acc_acq_time", c_uint8), # 采样时长
("freq_power1_start", c_uint16), # 频带能量参数1
("freq_power1_stop", c_uint16), # 频带能量参数1
("freq_power2_start", c_uint16), # 频带能量参数2
("freq_power2_stop", c_uint16), # 频带能量参数2
("freq_power3_start", c_uint16), # 频带能量参数3
("freq_power3_stop", c_uint16), # 频带能量参数3
("freq_power4_start", c_uint16), # 频带能量参数4
("freq_power4_stop", c_uint16), # 频带能量参数4
("freq_power5_start", c_uint16), # 频带能量参数5
("freq_power5_stop", c_uint16), # 频带能量参数5
("envel_freq_start", c_uint16), # 包络带通频率
("envel_freq_stop", c_uint16), # 包络带通频率
("fail_freq1", c_uint16), # 故障频率1
("fail_freq2", c_uint16), # 故障频率2
("fail_freq3", c_uint16), # 故障频率3
("fail_freq4", c_uint16), # 故障频率4
("conf_date", c_int32), # 配置时间
("speed_freq_start", c_int8), # 速度积分起始频率
]
# 传感器信息2
class DevInfo2(Structure):
_fields_ = [
# 特征值
("node_name", c_int16 * 32), # 节点名称
("reserve", c_int8 * 28), # 保留
]
class ZigPack(Structure):
_fields_ = [
("msg_header", c_uint8 * 3), # 帧头
("msg_addr", c_uint8 * 2), # 源地址
("msg_type", c_uint8), # 数据类型
("msg_index", c_uint8), # 包序号
("data", c_uint8 * 92), # 数据
("crc", c_uint8), # 校验
]
class Zig_Reader(object):
def __init__(self, zig_dev):
self.evelpack = EvelPack()
self.wavepack = WavePack()
self.prev_index = 0
self.zig_reader = zig_dev # 串口设备
# self.zig_reader = serial.Serial('com5')
self.recv_data_buf = b''
self.zigpack = ZigPack()
self.senser_info1 = DevInfo1()
self.senser_info2 = DevInfo2()
self.senser_evel = EvelPack()
self.senser_wave = WavePack()
self.init_zigbee_message()
def read(self):
sdata = self.zig_reader.read(self.zig_reader.inWaiting())
self.recv_data_buf = self.recv_data_buf + sdata
ret = self.data_analysis()
return ret
def data_analysis(self):
if (len(self.recv_data_buf) >= 100): # 缓存中数据量大于等于数据包
if ((self.recv_data_buf[:3] == b'\xaaU\xaa') | (self.crc_check(self.recv_data_buf[:100]))):
memmove(addressof(self.zigpack), self.recv_data_buf, sizeof(self.zigpack))
if self.zigpack.msg_type == SENSER_INF_PACK1:
memmove(addressof(self.senser_info1), self.zigpack.data, sizeof(self.senser_info1))
elif self.zigpack.msg_type == SENSER_INF_PACK2:
memmove(addressof(self.senser_info2), self.zigpack.data, sizeof(self.senser_info2))
self.dev_info_analysis()
self.dev_conf_analysis()
elif (self.zigpack.msg_type == EVEL_DATA_PACK1) | (self.zigpack.msg_type == EVEL_DATA_PACK2):
memmove(addressof(self.senser_evel), self.zigpack.data, sizeof(self.senser_evel))
self.evel_data_analysis()
elif self.zigpack.msg_type == WAVE_X_PACK:
memmove(addressof(self.senser_wave), self.zigpack.data, sizeof(self.senser_wave))
elif self.zigpack.msg_type == WAVE_Y_PACK:
memmove(addressof(self.senser_wave), self.zigpack.data, sizeof(self.senser_wave))
elif self.zigpack.msg_type == WAVE_Z_PACK:
memmove(addressof(self.senser_wave), self.zigpack.data, sizeof(self.senser_wave))
self.recv_data_buf = self.recv_data_buf[100:]
return self.zigpack.msg_type
else:
self.recv_data_buf = self.recv_data_buf[1:]
return False
else:
return False
def crc_check(self, sdata):
sdata = [d for d in sdata]
sum_vl = np.sum(sdata[:-1])
if (sum_vl & 0xff) == sdata[-1]:
return True
else:
msg = self.get_date_time() + '\n'
msg = msg + "CRC Cal Error\n"
msg = msg + str([hex(d) for d in sdata]) + '\n'
print(msg)
return False
def get_date_time(self):
now_time = datetime.datetime.now()
time_str = now_time.strftime('%Y.%m.%d %H:%M:%S')
return time_str
def close(self):
self.zig_reader.close()
def dev_info_analysis(self):
self.dev_info_msg["初始化标志"] = self.senser_info1.uInitFlag
self.dev_info_msg["加速度传感器状态"] = self.senser_info1.uAccSta
self.dev_info_msg["Zigbee模块状态"] = self.senser_info1.uZigbeeSta
self.dev_info_msg["设备温度传感器状态"] = self.senser_info1.uLowerTempSta
self.dev_info_msg["环境温度传感器状态"] = self.senser_info1.uUpperTempSta
self.dev_info_msg["设备运行状态"] = self.senser_info1.uRunningFlag
self.dev_info_msg["MAC地址"] = hex(self.senser_info1.zigbeeMac)[2:]
self.dev_info_msg["硬件版本"] = self.senser_info1.hwVersion/10
self.dev_info_msg["软件版本"] = self.senser_info1.sfVersion/10
self.dev_info_msg["生产批号"] = self.senser_info1.pn
self.dev_info_msg["生产序列号"] = self.senser_info1.sn
self.dev_info_msg["首次上电日期"] = self.senser_info1.sTime
self.dev_info_msg["唤醒次数"] = self.senser_info1.wakeupTimes
self.dev_info_msg["特征值发送次数"] = self.senser_info1.tzTimes
self.dev_info_msg["原始波形发送次数"] = self.senser_info1.wvTimes
self.dev_info_msg["电池电压"] = self.senser_info1.batVol
self.dev_info_msg["产品型号"] = self.senser_info1.productType
self.dev_info_msg["无线信号强度"] = self.senser_info1.rss
self.dev_info_msg["测点名称"] = bytes(self.senser_info2.node_name).decode('GB18030')
def dev_conf_analysis(self):
self.dev_conf_msg["配置标志"] = self.senser_info1.active_flag
self.dev_conf_msg["唤醒周期"] = self.senser_info1.wakeup_period
self.dev_conf_msg["原始波形发送周期"] = self.senser_info1.wave_period
self.dev_conf_msg["Zigbee PID"] = hex(self.senser_info1.zig_panid)[2:]
self.dev_conf_msg["Zigbee 信道"] = self.senser_info1.zig_channel
self.dev_conf_msg["Zigbee 本地地址"] = hex(self.senser_info1.zig_local_addr)[2:]
self.dev_conf_msg["Zigbee 目标地址"] = hex(self.senser_info1.zig_dst_addr)[2:]
self.dev_conf_msg["Zigbee 发射功率"] = self.senser_info1.zig_power_level
self.dev_conf_msg["Zigbee 重试次数"] = self.senser_info1.zig_retry_num
self.dev_conf_msg["Zigbee 重试间隔"] = self.senser_info1.zig_retry_time
self.dev_conf_msg["ACC采样率"] = self.acc_freq_cal(self.senser_info1.acc_acq_freq)
self.dev_conf_msg["ACC量程"] = self.acc_range_cal(self.senser_info1.acc_acq_range)
self.dev_conf_msg["ACC采样率时间"] = self.senser_info1.acc_acq_time
self.dev_conf_msg["频带能量参数1 START"] = self.senser_info1.freq_power1_start
self.dev_conf_msg["频带能量参数1 END"] = self.senser_info1.freq_power1_stop
self.dev_conf_msg["频带能量参数2 START"] = self.senser_info1.freq_power2_start
self.dev_conf_msg["频带能量参数2 END"] = self.senser_info1.freq_power2_stop
self.dev_conf_msg["频带能量参数3 START"] = self.senser_info1.freq_power3_start
self.dev_conf_msg["频带能量参数3 END"] = self.senser_info1.freq_power3_stop
self.dev_conf_msg["频带能量参数4 START"] = self.senser_info1.freq_power4_start
self.dev_conf_msg["频带能量参数4 END"] = self.senser_info1.freq_power4_stop
self.dev_conf_msg["频带能量参数5 START"] = self.senser_info1.freq_power5_start
self.dev_conf_msg["频带能量参数5 END"] = self.senser_info1.freq_power5_stop
self.dev_conf_msg["冲击带通频率START"] = self.senser_info1.envel_freq_start
self.dev_conf_msg["冲击带通频率END"] = self.senser_info1.envel_freq_stop
self.dev_conf_msg["故障频率1"] = self.senser_info1.fail_freq1
self.dev_conf_msg["故障频率2"] = self.senser_info1.fail_freq2
self.dev_conf_msg["故障频率3"] = self.senser_info1.fail_freq3
self.dev_conf_msg["故障频率4"] = self.senser_info1.fail_freq4
self.dev_conf_msg["配置时间"] = self.senser_info1.conf_date
self.dev_conf_msg["速度积分滤波频率"] = self.senser_info1.speed_freq_start
def evel_data_analysis(self):
self.dev_evel_msg["采集时间"] = self.get_date_time()
self.dev_evel_msg["设备温度"] = temp_cal(self.senser_evel.temp_dev)
self.dev_evel_msg["环境温度"] = temp_cal(self.senser_evel.temp_env)
self.dev_evel_msg["倾角"] = self.senser_evel.angle
self.dev_evel_msg["电池电压"] = self.senser_evel.bat_vol
self.dev_evel_msg["X轴峰值"] = self.evel_cal(self.senser_evel.acc_x_pk)
self.dev_evel_msg["X轴有效值"] = self.evel_cal(self.senser_evel.acc_x_rms)
self.dev_evel_msg["X轴速度峰值"] = self.evel_cal(self.senser_evel.speed_x_pk)
self.dev_evel_msg["X轴速度有效值"] = self.evel_cal(self.senser_evel.speed_x_rms)
self.dev_evel_msg["X轴频带能量1"] = self.evel_cal(self.senser_evel.fpower_x_1)
self.dev_evel_msg["X轴频带能量2"] = self.evel_cal(self.senser_evel.fpower_x_2)
self.dev_evel_msg["X轴频带能量3"] = self.evel_cal(self.senser_evel.fpower_x_3)
self.dev_evel_msg["X轴频带能量4"] = self.evel_cal(self.senser_evel.fpower_x_4)
self.dev_evel_msg["X轴频带能量5"] = self.evel_cal(self.senser_evel.fpower_x_5)
self.dev_evel_msg["X轴冲击能量"] = self.evel_cal(self.senser_evel.envepower_x)
self.dev_evel_msg["X轴故障频率1"] = self.evel_cal(self.senser_evel.errpower_x_1)
self.dev_evel_msg["X轴故障频率2"] = self.evel_cal(self.senser_evel.errpower_x_2)
self.dev_evel_msg["X轴故障频率3"] = self.evel_cal(self.senser_evel.errpower_x_3)
self.dev_evel_msg["X轴故障频率4"] = self.evel_cal(self.senser_evel.errpower_x_4)
self.dev_evel_msg["Y轴峰值"] = self.evel_cal(self.senser_evel.acc_y_pk)
self.dev_evel_msg["Y轴有效值"] = self.evel_cal(self.senser_evel.acc_y_rms)
self.dev_evel_msg["Y轴速度峰值"] = self.evel_cal(self.senser_evel.speed_y_pk)
self.dev_evel_msg["Y轴速度有效值"] = self.evel_cal(self.senser_evel.speed_y_rms)
self.dev_evel_msg["Y轴频带能量1"] = self.evel_cal(self.senser_evel.fpower_y_1)
self.dev_evel_msg["Y轴频带能量2"] = self.evel_cal(self.senser_evel.fpower_y_2)
self.dev_evel_msg["Y轴频带能量3"] = self.evel_cal(self.senser_evel.fpower_y_3)
self.dev_evel_msg["Y轴频带能量4"] = self.evel_cal(self.senser_evel.fpower_y_4)
self.dev_evel_msg["Y轴频带能量5"] = self.evel_cal(self.senser_evel.fpower_y_5)
self.dev_evel_msg["Y轴冲击能量"] = self.evel_cal(self.senser_evel.envepower_y)
self.dev_evel_msg["Y轴故障频率1"] = self.evel_cal(self.senser_evel.errpower_y_1)
self.dev_evel_msg["Y轴故障频率2"] = self.evel_cal(self.senser_evel.errpower_y_2)
self.dev_evel_msg["Y轴故障频率3"] = self.evel_cal(self.senser_evel.errpower_y_3)
self.dev_evel_msg["Y轴故障频率4"] = self.evel_cal(self.senser_evel.errpower_y_4)
self.dev_evel_msg["Z轴峰值"] = self.evel_cal(self.senser_evel.acc_z_pk)
self.dev_evel_msg["Z轴有效值"] = self.evel_cal(self.senser_evel.acc_z_rms)
self.dev_evel_msg["Z轴速度峰值"] = self.evel_cal(self.senser_evel.speed_z_pk)
self.dev_evel_msg["Z轴速度有效值"] = self.evel_cal(self.senser_evel.speed_z_rms)
self.dev_evel_msg["Z轴频带能量1"] = self.evel_cal(self.senser_evel.fpower_z_1)
self.dev_evel_msg["Z轴频带能量2"] = self.evel_cal(self.senser_evel.fpower_z_2)
self.dev_evel_msg["Z轴频带能量3"] = self.evel_cal(self.senser_evel.fpower_z_3)
self.dev_evel_msg["Z轴频带能量4"] = self.evel_cal(self.senser_evel.fpower_z_4)
self.dev_evel_msg["Z轴频带能量5"] = self.evel_cal(self.senser_evel.fpower_z_5)
self.dev_evel_msg["Z轴冲击能量"] = self.evel_cal(self.senser_evel.envepower_z)
self.dev_evel_msg["Z轴故障频率1"] = self.evel_cal(self.senser_evel.errpower_z_1)
self.dev_evel_msg["Z轴故障频率2"] = self.evel_cal(self.senser_evel.errpower_z_2)
self.dev_evel_msg["Z轴故障频率3"] = self.evel_cal(self.senser_evel.errpower_z_3)
self.dev_evel_msg["Z轴故障频率4"] = self.evel_cal(self.senser_evel.errpower_z_4)
def temp_cal(self, sdata):
if sdata > 2048:
temp = -(256 - sdata * 0.0625)
else:
temp = sdata * 0.0625
return temp
def evel_cal(self, sdata):
s1 = sdata >> 14
s2 = sdata & (0xffff >> 2)
if s1 == 0:
vl = s2 * 0.0001
elif s1 == 1:
vl = s2 * 0.01
elif s1 == 2:
vl = s2
elif s1 == 3:
vl = s2 / 100
else:
vl = 16383
return vl
def acc_range_cal(self, sdata):
if sdata == 0b00:
return "±8g"
elif sdata == 0b01:
return "±16g"
elif sdata == 0b10:
return "±32g"
elif sdata == 0b11:
return "±64g"
def acc_freq_cal(self, sdata):
if sdata == 0b00:
return "3.2kHz"
elif sdata == 0b01:
return "6.4kHz"
elif sdata == 0b10:
return "12.8kHz"
elif sdata == 0b11:
return "25.6kHz"
def init_zigbee_message(self):
self.dev_info_msg = {"测点名称": None,
"初始化标志": None,
"加速度传感器状态": None,
"Zigbee模块状态": None,
"设备温度传感器状态": None,
"环境温度传感器状态": None,
"设备运行状态": None,
"MAC地址": None,
"硬件版本": None,
"软件版本": None,
"生产批号": None,
"生产序列号": None,
"首次上电日期": None,
"唤醒次数": None,
"特征值发送次数": None,
"原始波形发送次数": None,
"电池电压": None,
"产品型号": None,
"无线信号强度": None,
}
self.dev_conf_msg = {"配置标志": None,
"唤醒周期": None,
"原始波形发送周期": None,
"Zigbee PID": None,
"Zigbee 信道": None,
"Zigbee 本地地址": None,
"Zigbee 目标地址": None,
"Zigbee 发射功率": None,
"Zigbee 重试次数": None,
"Zigbee 重试间隔": None,
"ACC采样率": None,
"ACC量程": None,
"ACC采样率时间": None,
"频带能量参数1 START": None,
"频带能量参数1 END": None,
"频带能量参数2 START": None,
"频带能量参数2 END": None,
"频带能量参数3 START": None,
"频带能量参数3 END": None,
"频带能量参数4 START": None,
"频带能量参数4 END": None,
"频带能量参数5 START": None,
"频带能量参数5 END": None,
"冲击带通频率START": None,
"冲击带通频率END": None,
"故障频率1": None,
"故障频率2": None,
"故障频率3": None,
"故障频率4": None,
"配置时间": None,
"速度积分滤波频率": None,
"原始数据": None
}
self.dev_evel_msg = {"采集时间": None,
"设备温度": None,
"环境温度": None,
"倾角": None,
"电池电压": None,
"X轴峰值": None,
"X轴有效值": None,
"X轴速度峰值": None,
"X轴速度有效值": None,
"Y轴峰值": None,
"Y轴有效值": None,
"Y轴速度峰值": None,
"Y轴速度有效值": None,
"Z轴峰值": None,
"Z轴有效值": None,
"Z轴速度峰值": None,
"Z轴速度有效值": None,
"X轴频带能量1": None,
"X轴频带能量2": None,
"X轴频带能量3": None,
"X轴频带能量4": None,
"X轴频带能量5": None,
"X轴冲击能量": None,
"X轴故障频率1": None,
"X轴故障频率2": None,
"X轴故障频率3": None,
"X轴故障频率4": None,
"Y轴频带能量1": None,
"Y轴频带能量2": None,
"Y轴频带能量3": None,
"Y轴频带能量4": None,
"Y轴频带能量5": None,
"Y轴冲击能量": None,
"Y轴故障频率1": None,
"Y轴故障频率2": None,
"Y轴故障频率3": None,
"Y轴故障频率4": None,
"Z轴频带能量1": None,
"Z轴频带能量2": None,
"Z轴频带能量3": None,
"Z轴频带能量4": None,
"Z轴频带能量5": None,
"Z轴冲击能量": None,
"Z轴故障频率1": None,
"Z轴故障频率2": None,
"Z轴故障频率3": None,
"Z轴故障频率4": None,
# "原始数据": None
}

View File

@ -0,0 +1,12 @@
RF_ON_R_OFF = [0, 0, 3, 2, 1, 0]
LED_ON = [0, 0, 0x03, 0x0D, 0x01, 0x0F]
LED_OFF = [0, 0, 0x03, 0x0D, 0x00, 0x0E]
BEEP_50ms = [0, 0, 0x03, 0x0E, 0x32, 0x3F]
BEEP_100ms = [0, 0, 0x03, 0x0E, 0x64, 0x69]
UUID_GET = [0, 0, 0x02, 0x11, 0x13]
MULTI_READ = [0, 0, 0x0C, 0x23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 0]
MULTI_WRITE = [0, 0, 0, 0x24, 0, 0, 0, 0, 0, 0, 0, 0, 0x22, 0, 0]

View File

@ -0,0 +1,43 @@
[DEFAULT]
硬件版本 = 3.0
产品型号 = 1
#启停机:停用,启用,调试
启停机 = 启用
唤醒周期 = 5
波形发送周期 = 120
Zigbee PANID = 1234
Zigbee 信道 = 15
Zigbee 本地地址 = 1001
Zigbee 目标地址 = 8888
Zigbee 发射功率 = 3
Zigbee 重试次数 = 100
Zigbee 重试间隔 = 3
#ACC量程0=8g; 1=16g; 2=32g; 3:64g
ACC 量程 = 3
ACC 采样率 = 2
ACC 采样时间 = 1
测点名称 = 南京凯奥思
频带能量1起始频率 = 0
频带能量1截至频率 = 100
频带能量2起始频率 = 100
频带能量2截至频率 = 200
频带能量3起始频率 = 200
频带能量3截至频率 = 300
频带能量4起始频率 = 300
频带能量4截至频率 = 400
频带能量5起始频率 = 400
频带能量5截至频率 = 500
冲击起始频率 = 3000
冲击截至频率 = 5000
故障频率1 = 100
故障频率2 = 200
故障频率3 = 300
故障频率4 = 400
速度积分起始频率 = 10
生产序号 = 200001
生产批号 = 202201

View File

@ -0,0 +1,612 @@
from PyQt5.QtWidgets import QApplication,QMessageBox,QMainWindow
from PyQt5.QtCore import QTimer
import serial.tools.list_ports
import serial
import time
import configparser
from main_ui2 import *
from DN101_NFC import *
from DN101_ZIGBEE import *
from text_msg import *
NFC_PORT_STR = 'Silicon Labs Dual CP210x USB to UART Bridge: Enhanced COM Port'
ZIG_PORT_STR = 'Silicon Labs Dual CP210x USB to UART Bridge: Standard COM Port'
"""
mainWindow.setWindowFlags(QtCore.Qt.WindowMinimizeButtonHint)
mainWindow.setFixedSize(mainWindow.width(), mainWindow.height())
"""
class DN101_Tester(QMainWindow):
def __init__(self):
super().__init__()
self.dn101_form = Ui_mainWindow()
self.dn101_form.setupUi(self)
self.init_setup()
self.sig_setup()
self.timer_zig = QTimer(self)
self.timer_zig.timeout.connect(self.zig_update)
self.timer_single = QTimer(self)
self.timer_nfc = QTimer(self)
self.retry_time = 0 #检测重试次数
self.timer_count = 0 #连续检测次数
self.timer_detect = QTimer(self)
self.timer_detect.timeout.connect(self.auto_detect)
#传感器要写的配置
self.senser_info = NFC_INFO()
self.senser_conf = NFC_CONF()
def init_setup(self):
self.dn101_form.pB_read_nfc.setEnabled(False)
self.dn101_form.pB_exec.setEnabled(False)
self.dn101_form.pB_exec_auto.setEnabled(False)
conf_flag = ['停用', '启用', '调试']
zig_power = ['0', '1', '2', '3']
acc_range = ['±8G', '±16G', '±32G', '±64G']
acc_rate = ['±3.2KHz', '±6.4KHz', '±12.8KHz', '±25.6KHz']
self.dn101_form.cB_conf_flag.addItems(conf_flag)
self.dn101_form.cB_zig_power.addItems(zig_power)
self.dn101_form.cB_acc_range.addItems(acc_range)
self.dn101_form.cB_acc_rate.addItems(acc_rate)
self.init_state_ui()
#读取传感器默认配置
if self.read_conf_file():
self.update_ui_senser_info()
#设置生产日期
mf_time = time.strftime("%Y%m%d", time.localtime(time.time()))
self.dn101_form.lE_first_poweron.setText(mf_time)
self.burning_flag = False
self.auto_detect_flag = False
self.write_nfc_flag = False
self.power_on_flag = False
self.device_check_flag = False
self.reset_all_flag = False
self.board_ready_now = True
self.exec_flag = True
def sig_setup(self):
self.dn101_form.pB_open.clicked.connect(self.open_device)
self.dn101_form.pB_read_nfc.clicked.connect(self.read_nfc)
self.dn101_form.pB_exec.clicked.connect(self.exec_manual)
self.dn101_form.pB_exec_auto.clicked.connect(self.exec_auto)
self.dn101_form.cB_burnning.stateChanged.connect(self.setup_exec_flag)
self.dn101_form.cB_write_nfc.stateChanged.connect(self.setup_exec_flag)
self.dn101_form.cB_power_on.stateChanged.connect(self.setup_exec_flag)
self.dn101_form.cB_device_check.stateChanged.connect(self.setup_exec_flag)
self.dn101_form.cB_reset_all.stateChanged.connect(self.setup_exec_flag)
def setup_exec_flag(self):
if self.dn101_form.cB_burnning.isChecked():
self.burning_flag = True
else:
self.burning_flag = False
if self.dn101_form.cB_write_nfc.isChecked():
self.write_nfc_flag = True
else:
self.write_nfc_flag = False
if self.dn101_form.cB_power_on.isChecked():
self.power_on_flag = True
else:
self.power_on_flag = False
if self.dn101_form.cB_device_check.isChecked():
self.device_check_flag = True
else:
self.device_check_flag = False
if self.dn101_form.cB_reset_all.isChecked():
self.reset_all_flag = True
else:
self.reset_all_flag = False
def exec_auto(self):
self.exec_flag = True
self.timer_detect.setInterval(125)
self.timer_detect.start()
def exec_manual(self):
self.timer_detect.stop()
self.execute()
def execute(self):
if self.power_on_flag:
self.power_on()
time.sleep(0.1)
else:
self.power_off()
if self.burning_flag:
self.burning()
if self.write_nfc_flag:
self.write_nfc()
if self.device_check_flag:
self.device_check()
self.exec_flag = False
def device_check(self):
"""
1. Reset
2. Zigbee接收传感器状态信息
3. 若超时从NFC读取传感器状态信息
:return:
"""
self.reset()
self.retry_time = 5
self.zig_conf_recv_flag = False
self.timer_single.singleShot(1000, self.senser_st_check)
self.init_state_ui()
def auto_detect(self):
if self.board_ready_now == True: #有电路板
if self.is_ready() == False:
self.timer_count = self.timer_count + 1
else:
self.timer_count = 0
if self.timer_count >= 4:
self.board_ready_now = False
self.exec_flag = True
else:
if self.is_ready():
self.timer_count = self.timer_count +1
else:
self.timer_count = 0
if self.timer_count >= 4:
self.board_ready_now = True
if self.board_ready_now == True: #有电路板
if self.exec_flag:
self.execute()
elif self.power_on_flag == False:
if self.exec_flag:
self.execute()
def init_state_ui(self):
self.dn101_form.lB_running_state.clear()
self.dn101_form.lB_temp_upper_state.clear()
self.dn101_form.lB_temp_lower_state.clear()
self.dn101_form.lB_nfc_state.clear()
self.dn101_form.lB_acc_state.clear()
self.dn101_form.lB_zigbee_state.clear()
self.dn101_form.lB_vol_state.clear()
self.dn101_form.lB_current_state.clear()
def senser_st_check(self):
"""
检查是否收到Zigbee设备信息
:return:
"""
self.retry_time = self.retry_time - 1
if self.zig_conf_recv_flag:
self.dn101_form.lB_nfc_state.setText(ok_msg)
if self.zig_reader.senser_info1.uAccSta:
self.dn101_form.lB_acc_state.setText(ok_msg)
else:
self.dn101_form.lB_acc_state.setText(fail_msg)
if self.zig_reader.senser_info1.uZigbeeSta:
self.dn101_form.lB_zigbee_state.setText(ok_msg)
else:
self.dn101_form.lB_zigbee_state.setText(fail_msg)
if self.zig_reader.senser_info1.uLowerTempSta:
self.dn101_form.lB_temp_lower_state.setText(ok_msg)
else:
self.dn101_form.lB_temp_lower_state.setText(fail_msg)
if self.zig_reader.senser_info1.uUpperTempSta:
self.dn101_form.lB_temp_upper_state.setText(ok_msg)
else:
self.dn101_form.lB_temp_upper_state.setText(fail_msg)
if self.zig_reader.senser_info1.uRunningFlag:
self.dn101_form.lB_running_state.setText(ok_msg)
else:
self.dn101_form.lB_running_state.setText(fail_msg)
QApplication.processEvents()
if self.power_on_flag == False:
self.timer_single.singleShot(5000, self.device_check)
elif self.retry_time == 0: #Zigbee接收超时
r_nfc = self.read_nfc()
if r_nfc&self.nfc_reader.dev_info.uInitFlag:
self.dn101_form.lB_nfc_state.setText(ok_msg)
if self.nfc_reader.dev_info.uAccSta:
self.dn101_form.lB_acc_state.setText(ok_msg)
else:
self.dn101_form.lB_acc_state.setText(fail_msg)
if self.nfc_reader.dev_info.uZigbeeSta:
self.dn101_form.lB_zigbee_state.setText(ok_msg)
else:
self.dn101_form.lB_zigbee_state.setText(fail_msg)
if self.nfc_reader.dev_info.uLowerTempSta:
self.dn101_form.lB_temp_lower_state.setText(ok_msg)
else:
self.dn101_form.lB_temp_lower_state.setText(fail_msg)
if self.nfc_reader.dev_info.uUpperTempSta:
self.dn101_form.lB_temp_upper_state.setText(ok_msg)
else:
self.dn101_form.lB_temp_upper_state.setText(fail_msg)
if self.nfc_reader.dev_info.uRunningFlag:
self.dn101_form.lB_running_state.setText(ok_msg)
else:
self.dn101_form.lB_running_state.setText(fail_msg)
else:
self.dn101_form.lB_nfc_state.setText(fail_msg)
if self.power_on_flag == False:
self.timer_single.singleShot(1000, self.senser_st_check)
else:
self.timer_single.singleShot(1000, self.senser_st_check)
def write_nfc(self):
"""
将产品信息和配置文件写入ST25DV芯片中
:return:
"""
prev_uuid = self.nfc_reader.nfc_uuid
self.nfc_reader.get_uuid()
time.sleep(0.5)
#存在之前存在,并且与当前值不同
if prev_uuid:
if prev_uuid != self.nfc_reader.nfc_uuid:
if self.dn101_form.cB_auto_increase.isChecked():
sn = int(self.dn101_form.lE_mf_sn.text()) + 1
self.dn101_form.lE_mf_sn.setText(str(sn))
#完全重置
if self.dn101_form.cB_reset_all.isChecked():
local_addr = '{:04d}'.format(int(self.dn101_form.lE_mf_sn.text()))[-4:]
self.dn101_form.lE_zig_local_addr.setText(local_addr)
self.dn101_form.lE_senser_name.setText(self.conf["DEFAULT"]["测点名称"]+local_addr)
self.ui_conf_to_senser()
if self.nfc_reader.nfc_uuid:
self.dn101_form.tE_read_log.setText("DN101 NFC UUID" + hex(self.nfc_reader.nfc_uuid)[2:])
ret1 = self.nfc_reader.write_info(self.senser_info)
ret2 = self.nfc_reader.write_conf(self.senser_conf)
if ret1&ret2:
self.dn101_form.tE_read_log.append("NFC 写入信息成功")
else:
self.dn101_form.tE_read_log.append("NFC 写入信息失败")
else:
self.dn101_form.tE_read_log.setHtml(nfc_read_error)
#完全重置后重启,更新初始化标志
if self.dn101_form.cB_reset_all.isChecked():
self.power_off()
time.sleep(0.5)
self.power_on()
time.sleep(1)
def read_nfc(self):
self.dn101_form.tE_read_log.clear()
self.dn101_form.tE_conf_info.clear()
QApplication.processEvents()
self.nfc_reader.get_uuid()
if self.nfc_reader.nfc_uuid:
self.dn101_form.tE_read_log.setText("DN101 NFC UUID"+ hex(self.nfc_reader.nfc_uuid)[2:])
time.sleep(0.5)
info = self.nfc_reader.read_info()
conf = self.nfc_reader.read_conf()
if info&conf:
self.nfc_reader.dev_info_analysis()
self.nfc_reader.dev_conf_analysis()
self.nfc_update()
self.dn101_form.tE_read_log.append("DN101 NFC读取成功")
return info
else:
self.dn101_form.tE_read_log.append(nfc_read_error)
return False
else:
self.dn101_form.tE_conf_info.clear()
self.dn101_form.tE_read_log.setHtml(nfc_read_error)
return False
def open_device(self):
try:
self.nfc_reader.close()
except Exception as e:
print(e)
pass
try:
self.zig_reader.close()
except Exception as e:
print(e)
pass
try:
nfc_port, zig_port = self.get_nfc_zig_port()
print(nfc_port, zig_port)
self.nfc_ser = serial.Serial(nfc_port, 19200, rtscts=False, dsrdtr=False)
self.zig_ser = serial.Serial(zig_port, 115200, rtscts=False, dsrdtr=False)
self.dn101_form.pB_read_nfc.setEnabled(True)
self.dn101_form.pB_exec.setEnabled(True)
self.dn101_form.pB_exec_auto.setEnabled(True)
self.nfc_reader = Nfc_Reader(self.nfc_ser)
self.zig_reader = Zig_Reader(self.zig_ser)
self.timer_zig.start(100) #启动串口接收分析数据
self.nfc_reader.rfidm_c2_init()
self.dn101_form.tE_read_log.setText("烧录测试工具打开成功\n")
except Exception as e:
print(e)
self.dn101_form.tE_read_log.setText("烧录测试工具打开失败\n")
def nfc_update(self):
msg = ''
for k, i in self.nfc_reader.dev_info_msg.items():
msg = msg + k + ":" + str(i) + "\n"
for k, i in self.nfc_reader.dev_conf_msg.items():
msg = msg + k + ":" + str(i) + "\n"
self.dn101_form.tE_conf_info.setText(msg)
def zig_update(self):
msg = ""
zig_info = self.zig_reader.read()
#将解析的设备信息和特征值输出到界面上
if zig_info==SENSER_INF_PACK2:
for k, i in self.zig_reader.dev_info_msg.items():
msg = msg + k + ":" + str(i) + "\n"
for k, i in self.zig_reader.dev_conf_msg.items():
msg = msg + k + ":" + str(i) + "\n"
self.zig_conf_recv_flag = True
elif (zig_info == EVEL_DATA_PACK1)|(zig_info == EVEL_DATA_PACK2):
for k, i in self.zig_reader.dev_evel_msg.items():
# print(k, " :", i)
if isinstance(i, float):
msg = msg + k + ":" + format(i, ".4f") + "\n"
else:
msg = msg + k + ":" + str(i) + "\n"
if zig_info:
self.dn101_form.tE_zig_info.setText(msg)
print(msg)
def read_conf_file(self):
try:
self.conf = configparser.ConfigParser()
self.conf.read("conf.ini", "UTF-8")
self.dn101_form.tE_read_log.setText("配置文件读取成功")
return True
except Exception as e:
print(e)
self.dn101_form.tE_read_log.setText(conf_file_error)
return False
def update_ui_senser_info(self):
"""
将conf.ini 文件中的配置读取到界面上
:return:
"""
self.dn101_form.lE_hw_version.setText(self.conf["DEFAULT"]["硬件版本"])
self.dn101_form.lE_product_vesion.setText(self.conf["DEFAULT"]["产品型号"])
self.dn101_form.cB_conf_flag.setCurrentText(self.conf["DEFAULT"]["启停机"])
self.dn101_form.lE_wakeup_per.setText(self.conf["DEFAULT"]["唤醒周期"])
self.dn101_form.lE_wave_per.setText(self.conf["DEFAULT"]["波形发送周期"])
self.dn101_form.lE_zig_pid.setText(self.conf["DEFAULT"]["Zigbee PANID"])
self.dn101_form.lE_zig_channel.setText(self.conf["DEFAULT"]["Zigbee 信道"])
self.dn101_form.lE_zig_local_addr.setText(self.conf["DEFAULT"]["Zigbee 本地地址"])
self.dn101_form.lE_zig_dest_addr.setText(self.conf["DEFAULT"]["Zigbee 目标地址"])
self.dn101_form.cB_zig_power.setCurrentIndex(int(self.conf["DEFAULT"]["Zigbee 发射功率"]))
self.dn101_form.lE_zig_retry_num.setText(self.conf["DEFAULT"]["Zigbee 重试次数"])
self.dn101_form.lE_zig_retry_per.setText(self.conf["DEFAULT"]["Zigbee 重试间隔"])
self.dn101_form.cB_acc_range.setCurrentIndex(int(self.conf["DEFAULT"]["ACC 量程"]))
self.dn101_form.cB_acc_rate.setCurrentIndex(int(self.conf["DEFAULT"]["ACC 采样率"]))
self.dn101_form.lE_acc_time.setText(self.conf["DEFAULT"]["ACC 采样时间"])
self.dn101_form.lE_senser_name.setText(self.conf["DEFAULT"]["测点名称"])
self.dn101_form.lE_power_freq1_start.setText(self.conf["DEFAULT"]["频带能量1起始频率"])
self.dn101_form.lE_power_freq1_stop.setText(self.conf["DEFAULT"]["频带能量1截至频率"])
self.dn101_form.lE_power_freq2_start.setText(self.conf["DEFAULT"]["频带能量2起始频率"])
self.dn101_form.lE_power_freq2_stop.setText(self.conf["DEFAULT"]["频带能量2截至频率"])
self.dn101_form.lE_power_freq3_start.setText(self.conf["DEFAULT"]["频带能量3起始频率"])
self.dn101_form.lE_power_freq3_stop.setText(self.conf["DEFAULT"]["频带能量3截至频率"])
self.dn101_form.lE_power_freq4_start.setText(self.conf["DEFAULT"]["频带能量4起始频率"])
self.dn101_form.lE_power_freq4_stop.setText(self.conf["DEFAULT"]["频带能量4截至频率"])
self.dn101_form.lE_power_freq5_start.setText(self.conf["DEFAULT"]["频带能量5起始频率"])
self.dn101_form.lE_power_freq5_stop.setText(self.conf["DEFAULT"]["频带能量5截至频率"])
self.dn101_form.lE_evel_freq_start.setText(self.conf["DEFAULT"]["冲击起始频率"])
self.dn101_form.lE_evel_freq_stop.setText(self.conf["DEFAULT"]["冲击截至频率"])
self.dn101_form.lE_error_freq1.setText(self.conf["DEFAULT"]["故障频率1"])
self.dn101_form.lE_error_freq2.setText(self.conf["DEFAULT"]["故障频率2"])
self.dn101_form.lE_error_freq3.setText(self.conf["DEFAULT"]["故障频率3"])
self.dn101_form.lE_error_freq4.setText(self.conf["DEFAULT"]["故障频率4"])
self.dn101_form.lE_speed_freq_start.setText(self.conf["DEFAULT"]["速度积分起始频率"])
def ui_conf_to_senser(self):
"""
将界面的配置文件打包到 senser_info senser_conf struct中
:return:
"""
try:
if self.reset_all_flag:
self.senser_info.uInitFlag = 0
self.senser_info.hwVersion = int(float(self.dn101_form.lE_hw_version.text())* 10)
self.senser_info.pn = int(self.dn101_form.lE_mf_pn.text())
self.senser_info.sn = int(self.dn101_form.lE_mf_sn.text())
self.senser_info.sTime = int(self.dn101_form.lE_first_poweron.text())
self.senser_info.productType = int(self.dn101_form.lE_product_vesion.text())
#清零
self.senser_info.wakeupTimes = 0
self.senser_info.tzTimes = 0
self.senser_info.wvTimes = 0
else:
ret = self.read_nfc()
time.sleep(0.5)
if ret:
self.senser_info.uInitFlag = self.nfc_reader.dev_info.uInitFlag
self.senser_info.hwVersion = self.nfc_reader.dev_info.hwVersion
self.senser_info.pn = self.nfc_reader.dev_info.pn
self.senser_info.sn = self.nfc_reader.dev_info.pn
self.senser_info.sTime = self.nfc_reader.dev_info.sTime
self.senser_info.wakeupTimes = self.nfc_reader.dev_info.wakeupTimes
self.senser_info.tzTimes = self.nfc_reader.dev_info.tzTimes
self.senser_info.wvTimes = self.nfc_reader.dev_info.wvTimes
self.senser_info.productType = self.nfc_reader.dev_info.productType
else:
self.dn101_form.tE_read_log.setText(nfc_read_error)
self.dn101_form.tE_read_log.append(conf_write_error)
return False
conf_flag = [0, 0xAA, 0xBB]
self.senser_conf.active_flag = conf_flag[self.dn101_form.cB_conf_flag.currentIndex()]
self.senser_conf.wakeup_period = int(self.dn101_form.lE_wakeup_per.text())
self.senser_conf.wave_period = int(self.dn101_form.lE_wave_per.text())
self.senser_conf.zig_panid = int(self.dn101_form.lE_zig_pid.text(), 16)
self.senser_conf.zig_channel = int(self.dn101_form.lE_zig_channel.text())
self.senser_conf.zig_local_addr = int(self.dn101_form.lE_zig_local_addr.text(), 16)
self.senser_conf.zig_dst_addr = int(self.dn101_form.lE_zig_dest_addr.text(), 16)
self.senser_conf.zig_power_level = int(self.dn101_form.cB_zig_power.currentIndex())
self.senser_conf.zig_retry_num = int(self.dn101_form.lE_zig_retry_num.text())
self.senser_conf.zig_retry_time = int(self.dn101_form.lE_zig_retry_per.text())
self.senser_conf.acc_acq_range = int(self.dn101_form.cB_acc_range.currentIndex())
self.senser_conf.acc_acq_freq = int(self.dn101_form.cB_acc_rate.currentIndex())
self.senser_conf.acc_acq_time = int(self.dn101_form.lE_acc_time.text())
self.senser_conf.freq_power1_start = int(self.dn101_form.lE_power_freq1_start.text())
self.senser_conf.freq_power1_stop = int(self.dn101_form.lE_power_freq1_stop.text())
self.senser_conf.freq_power2_start = int(self.dn101_form.lE_power_freq2_start.text())
self.senser_conf.freq_power2_stop = int(self.dn101_form.lE_power_freq2_stop.text())
self.senser_conf.freq_power3_start = int(self.dn101_form.lE_power_freq3_start.text())
self.senser_conf.freq_power3_stop = int(self.dn101_form.lE_power_freq3_stop.text())
self.senser_conf.freq_power4_start = int(self.dn101_form.lE_power_freq4_start.text())
self.senser_conf.freq_power4_stop = int(self.dn101_form.lE_power_freq4_stop.text())
self.senser_conf.freq_power5_start = int(self.dn101_form.lE_power_freq5_start.text())
self.senser_conf.freq_power5_stop = int(self.dn101_form.lE_power_freq5_stop.text())
self.senser_conf.envel_freq_start = int(self.dn101_form.lE_evel_freq_start.text())
self.senser_conf.envel_freq_stop = int(self.dn101_form.lE_evel_freq_stop.text())
self.senser_conf.fail_freq1 = int(self.dn101_form.lE_error_freq1.text())
self.senser_conf.fail_freq2 = int(self.dn101_form.lE_error_freq2.text())
self.senser_conf.fail_freq3 = int(self.dn101_form.lE_error_freq3.text())
self.senser_conf.fail_freq4 = int(self.dn101_form.lE_error_freq4.text())
conf_time = int(time.time())
self.senser_conf.conf_date = conf_time
self.senser_conf.speed_freq_start = int(self.dn101_form.lE_speed_freq_start.text())
node_name = self.dn101_form.lE_senser_name.text().encode("GB18030")
memset(addressof(self.senser_conf.node_name), 0x00, sizeof(self.senser_conf.node_name))
memmove(addressof(self.senser_conf.node_name), node_name, len(node_name))
return True
except Exception as e:
print(e)
self.dn101_form.tE_read_log.setText(conf_msg_error)
return False
def get_nfc_zig_port(self):
serial_ports = self.get_serial_list()
for port in serial_ports:
port = list(port)
#print(port)
if NFC_PORT_STR in port[1]:
nfc_port = port[0]
elif ZIG_PORT_STR in port[1]:
zig_port = port[0]
return (nfc_port, zig_port)
def get_serial_list(self):
serial_ports = serial.tools.list_ports.comports()
serial_list = []
for port in serial_ports:
serial_list.append(list(port))
return serial_list
#功能接口
def power_on(self):
self.nfc_ser.setRTS(False)
def power_off(self):
self.nfc_ser.setRTS(True)
def reset(self):
self.nfc_ser.setDTR(False)
time.sleep(0.1)
self.nfc_ser.setDTR(True)
def is_power_on(self):
if self.nfc_ser.rts:
return True
else:
return False
def burning(self):
self.reset()
self.zig_ser.setRTS(False)
time.sleep(0.1)
self.zig_ser.setRTS(True)
time.sleep(5)
def is_ready(self):
if self.nfc_ser.cts:
return True
else:
return False
if __name__ == "__main__":
import sys
app = QApplication(sys.argv)
w = DN101_Tester()
w.show()
sys.exit(app.exec())

View File

@ -0,0 +1,50 @@
# -*- mode: python ; coding: utf-8 -*-
block_cipher = None
a = Analysis(
['dn101_tester.py'],
pathex=[],
binaries=[],
datas=[],
hiddenimports=[],
hookspath=[],
hooksconfig={},
runtime_hooks=[],
excludes=[],
win_no_prefer_redirects=False,
win_private_assemblies=False,
cipher=block_cipher,
noarchive=False,
)
pyz = PYZ(a.pure, a.zipped_data, cipher=block_cipher)
exe = EXE(
pyz,
a.scripts,
[],
exclude_binaries=True,
name='dn101_tester',
debug=False,
bootloader_ignore_signals=False,
strip=False,
upx=True,
console=False,
disable_windowed_traceback=False,
argv_emulation=False,
target_arch=None,
codesign_identity=None,
entitlements_file=None,
)
coll = COLLECT(
exe,
a.binaries,
a.zipfiles,
a.datas,
strip=False,
upx=True,
upx_exclude=[],
name='dn101_tester',
)

Some files were not shown because too many files have changed in this diff Show More