【Pyhton】读取寄存器数据到MySQL数据库

目录

步骤

modsim32软件配置

[Navicat for MySQL](#Navicat for MySQL)

代码实现


步骤

  1. 安装必要的库 :确保安装了pymodbuspymysql

  2. 配置Modbus连接:设置Modbus从站的IP地址、端口(对于TCP)或串行通信参数(对于RTU)。

  3. 连接MySQL数据库:设置数据库的连接参数,如主机名、用户名、密码和数据库名。

  4. 读取Modbus寄存器 :使用pymodbus客户端从Modbus从站读取寄存器数据。

  5. 写入MySQL数据库:将读取的数据插入到MySQL数据库的表中。

  6. 错误处理:添加错误处理逻辑以处理连接失败、读取错误等。

  7. 资源管理:确保在结束时关闭Modbus客户端和MySQL连接。

modsim32软件配置

Navicat for MySQL 是一套管理和开发 MySQL 的理想解决方案,Navicat 为数据库管理、开发和维护提供了直观而强大的图形界面,给 MySQL 新手以及专业人士提供了一组全面的工具。Navicat for MySQL 主要功能包括 SQL 创建工具或编辑器、数据模型工具、数据传输、导入或导出、数据或结构同步、报表等

代码实现

复制代码
from pymodbus.client import ModbusTcpClient as ModbusClient
import pymysql
import time

# 定义Modbus TCP从站地址和端口号
address = '127.0.0.1'
port = 502

# 定义MySQL数据库连接参数
host = "localhost"
user = "root"
password = "root"
database = "test"

# 建立Modbus TCP连接和MySQL数据库连接
client = ModbusClient(address, port=port)
client.connect()
cnx = pymysql.connect(user='root', password='101900', host='localhost', database='pyqt')
cursor = cnx.cursor()
# 创建表格
cursor.execute("DROP TABLE IF EXISTS sensor_data") # 如果存在表则重新创建
createTab = """CREATE TABLE sensor_data( # 创建表
     id INTEGER PRIMARY KEY AUTO_INCREMENT,
     TIME CHAR(50),
     temperature CHAR(50),
     voltage CHAR(50),
     current CHAR(50),
    resistance CHAR(50) )"""
cursor.execute(createTab) # 执行数据库语句

while True:
     localtime = time.asctime(time.localtime(time.time())) # time包操作,打印本地时间
     local_time = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()) # 规整本地时间的格式
     # 读取Modbus TCP从站寄存器中的数据
     result = client.read_holding_registers(address=0, count=4, unit=1)
     data = {
         'TIME': local_time,
         'temperature': result.registers[0],
         'voltage': result.registers[1],
         'current': result.registers[2],
         'resistance': result.registers[3]
         }
     
     # 将数据写入到MySQL数据库中
     add_data = ("INSERT INTO sensor_data "
     "(TIME,temperature, voltage, current, resistance) "
     "VALUES (%(TIME)s,%(temperature)s, %(voltage)s, %(current)s, %(resistance)s)")
     cursor.execute(add_data, data)
     cnx.commit()

      # 模拟每隔1秒钟读取一次数据
     time.sleep(1)

# 关闭Modbus TCP连接和MySQL数据库连接
client.close()
cursor.close()
cnx.close()
相关推荐
爱学习的阿磊13 分钟前
使用Fabric自动化你的部署流程
jvm·数据库·python
枷锁—sha19 分钟前
【SRC】SQL注入快速判定与应对策略(一)
网络·数据库·sql·安全·网络安全·系统安全
惜分飞31 分钟前
ORA-600 kcratr_nab_less_than_odr和ORA-600 4193故障处理--惜分飞
数据库·oracle
chian-ocean32 分钟前
CANN 生态进阶:利用 `profiling-tools` 优化模型性能
数据库·mysql
m0_5500246335 分钟前
持续集成/持续部署(CI/CD) for Python
jvm·数据库·python
AC赳赳老秦36 分钟前
代码生成超越 GPT-4:DeepSeek-V4 编程任务实战与 2026 开发者效率提升指南
数据库·数据仓库·人工智能·科技·rabbitmq·memcache·deepseek
啦啦啦_99991 小时前
Redis-2-queryFormat()方法
数据库·redis·缓存
玄同7652 小时前
SQLite + LLM:大模型应用落地的轻量级数据存储方案
jvm·数据库·人工智能·python·语言模型·sqlite·知识图谱
吾日三省吾码2 小时前
别只会“加索引”了!这 3 个 PostgreSQL 反常识优化,能把性能和成本一起打下来
数据库·postgresql
chian-ocean2 小时前
百万级图文检索实战:`ops-transformer` + 向量数据库构建语义搜索引擎
数据库·搜索引擎·transformer