当前位置:   article > 正文

传感器通过RS485转USB和电脑通信_485转usb驱动

485转usb驱动

记录一下做的实验

传感器:星仪压力变送器

先放一张整体的连接图

一、硬件连接细节

1.压力变送器引出线介绍

压力变送器的RS485引出线是四芯的屏蔽线(如图,红和蓝接电源正负黄A 白B银色的是屏蔽线)。电源正负线连上直流电源的正负就行,AB线和RS485转USB模块的AB接线口相连。

78a4a0602a2345438e07949cba7a5791.jpg

2.电源

电源用的是明纬的24v开关电源,左边三个接线端连接三插电源线(下下图)的零线火线和地线,右边是输出电压正负极,连接压力变送器输出引线的电源正负极。

70236f852b92490fbedf282295edef46.jpg

 0576b5aaba7a43859cc3bc5f1355d5c1.jpg

 3.RS485转USB模块

RS485转USB模块有5个接口,只需要将AB接口和压力变送器引出线的AB接口相连就行了,然后USB端接在电脑USB口上,下载一个驱动,就可以在电脑的设备管理器上看到这个端口了。

8705faa18ebb46668a1de5c359e0be55.jpg

 9138d2218b2a48e685c87f07f6a314e9.jpg

 二、软件部分

1.python实现读取端口的传感器数据并传给数据库

首先需要知道USB转485所用的端口号,可以在设备管理器的这里看到,然后需要配置好自己的mySQL,另外还要了解自己所用传感器的协议,我用的压力变送器协议是这样的(下图)。这些消息改写代码的时候都需要用到。

代码是参考别的博文后修改的,代码如下:

  1. import serial # 导入serial包数据存入本地数
  2. import time # 导入time包
  3. import pymysql # 导入pymysql包
  4. log = 0 # 设一个log变量用于记录单次接收次数
  5. s = serial.Serial('com7', 9600, timeout=1) # 打开串口,配置串口参数和你设备通讯参数一致。
  6. db = pymysql.connect(host="xxx", user="xxx", password="xxx", database="xxx")# 打开数据库,配置数据库(按自己的来)
  7. cursor = db.cursor() # 数据库操作
  8. cursor.execute("DROP TABLE IF EXISTS monitor_data") # 如果存在表则重新创建
  9. creatTab = """CREATE TABLE monitor_data( # 创建表
  10. TIME CHAR(50),
  11. P_DATA FLOAT
  12. )"""
  13. cursor.execute(creatTab) # 执行数据库语句
  14. temp_send = '01 03 00 00 00 01 84 0A'
  15. # 发送的数据转为2进制b'\x01\x03\x00\x00\x00\x02\xc4\x0b'
  16. temp_send = bytes.fromhex(temp_send)
  17. print(temp_send)
  18. while True: # 无限循环读取数据
  19. if s.is_open:
  20. print('port open ok')
  21. s.write(temp_send)
  22. time.sleep(0.1)
  23. # 获取返回的缓冲data,获取的是buffer_data的长度 9
  24. buffer_data = s.in_waiting
  25. # print(buffer_data, 'buffer_data')
  26. if buffer_data:
  27. # 返回的数据为2进制:b'\x01\x03\x04\x01\x08\x022\xfa\xb8'
  28. return_data = s.read(buffer_data)
  29. # print('返回的数据2进制:', return_data)
  30. # 二进制转换为16进制:010304010802307b79
  31. return_data_hex = str(return_data.hex())
  32. print('返回的数据转换为16进制:', return_data_hex)
  33. # 对返回的数据进行解析,获取温度和湿度数据
  34. pressure = int(return_data_hex[6:10], 16) / 200
  35. print("当前压力为:", int(return_data_hex[6:10], 16) / 200)
  36. #print("当前湿度为:", int(return_data_hex[10:14], 16) / 10)
  37. localtime = time.asctime(time.localtime(time.time())) # time包操作,打印本地时间
  38. local_time = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()) # 规整本地时间的格式
  39. sql = "INSERT INTO monitor_data(TIME,P_DATA)VALUES('%s','%.1f')" % (
  40. local_time, pressure) # 存入数据库
  41. cursor.execute(sql) # 执行数据库语句
  42. db.commit() # 提交
  43. time.sleep(0.5)
  44. cursor.close()
  45. db.close()

结果展示:(因为还没有施加压力,所以读数一直是0)

 

2.python实现读取存放在数据库的传感器数据画波形图

  1. import pandas as pd
  2. import pymysql
  3. # 连接到MySQL数据库
  4. conn = pymysql.connect(host="xxx", user="xxx", password="xxx", database="xxx")
  5. # 查询数据并读取到DataFrame中
  6. query = "SELECT TIME, P_DATA FROM monitor_data"
  7. df = pd.read_sql(query, conn)
  8. # 关闭数据库连接
  9. conn.close()
  10. import matplotlib.pyplot as plt
  11. # 将时间戳转换为datetime类型
  12. df['TIME'] = pd.to_datetime(df['TIME'])
  13. # 设置图像大小和标题
  14. plt.figure(figsize=(10, 6))
  15. plt.title('Pressure Waveform')
  16. # 绘制图形
  17. plt.plot(df['TIME'], df['P_DATA'])
  18. # 设置横轴和纵轴标签
  19. plt.xlabel('TIME')
  20. plt.ylabel('P_DATA')
  21. # 显示图形
  22. plt.show()

结果展示:

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/笔触狂放9/article/detail/724298
推荐阅读
相关标签
  

闽ICP备14008679号