# -*- coding: utf-8 -*-
from socket import timeout
import serial
import pymysql
import time
t = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0]
# str_return_data = '080328A71342327FA34243B5C8424711DF427FE9624241AB4642053CC342E3F1EB424A340D424D0A6E426E5B00'
def gettime():
timen=time.strftime("%Y-%m-%d %H:%M:%S",time.localtime())
return timen
def conn():
ser = serial.Serial("com3", 9600, timeout = 5)
# 选择串口,并设置波特率
send_data = bytes.fromhex('08 03 00 00 00 14 45 5C')
# hex(16进制)转换为bytes(2进制),应注意Python3.7与Python2.7此处转换的不同
# 发送数据转换为b'\xff\x01\x00U\x00\x00V'
# input('Press any key to quit program.')
while ser.is_open:
print("port open success")
ser.write(send_data)
# 发送命令
# print('发送数据:', send_data)
time.sleep(1)
# 延时,否则len_return_data将返回0,此处易忽视!!!
len_return_data = ser.inWaiting()
# 获取缓冲数据(接收数据)长度
print('len_return_data', len_return_data)
if len_return_data == 45:
return_data = ser.read(len_return_data)
# 读取缓冲数据
# bytes(2进制)转换为hex(16进制),应注意Python3.7与Python2.7此处转换的不同,并转为字符串后截取所需数据字段,再转为10进制
# print('收到数据:', return_data)
str_return_data = str(return_data.hex())
# print('收到字符:', str_return_data)
break
else:
print("try again")
continue
else:
print("port open failed")
print("port closed")
ser.close()
return(str_return_data)
def gett(str_return_data):
for i in range(0,10):
x = 8*i
h = str_return_data[x+10:x+14] + str_return_data[x+6:x+10]
h_b = '{:0>32}'.format(bin(int(h,16))[2:33])
e = int(h_b[1:9],2) - 127
# 将整数部分与小数部分分离并分别存在s_int,s_float字符串中
s_int = '1' + h_b[9:9+e]
s_float = h_b[9+e:]
total_int = total_float = 0
# 整数部分转化为十进制,li为整数部分的长度,记录到整数末尾的长度,结果记在total_int中
li = len(s_int)
for c in s_int:
li = li - 1
total_int = total_int + int(c)*pow(2,li)
# 小数部分转化为十进制,lf记录距离小数点的位数,结果记在total_float中
lf = 0
for c in s_float:
lf = lf + 1
total_float = total_float +int(c)*pow(2,-lf)
# 小数与整数相加,输出结果,保留4位小数
t_d = "{:.{}}".format(total_int + total_float, 4)
t[i] = t_d
t[10] = gettime()
return(t)
def insert_data():
db = pymysql.connect(host='200.100.50.2', port=3306, user='root', passwd='123456', db='shucai')
cursor = db.cursor()
insert_t = "insert into lehr(t1,t2,t3,t4,t5,t6,t7,t8,t9,t10,times)values (%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s)"
cursor.execute(insert_t,t)
db.commit()
cursor.close()
print('成功更新温度数据:', t)
'''except Exception as e:
db.rollback()
print(str(e))
break'''
def wraps():
def inner(main):
while True:
main()
print('wait next ^^^')
time.sleep(59)
continue
return inner
@wraps()
def main():
a = conn()
# a = str_return_data
gett(a)
insert_data()
if __name__ == "__main__": # 起到一个初始化或者调用函数的作用
main()