MyEMS 核心代码解读 001

myems/myems-modbus-tcp/acquisition.py
这段代码是一个用于从 Modbus TCP 设备采集数据并存储到 MySQL 数据库的 Python 脚本。它主要包含以下几个部分:
1.导入必要的库:包括处理 JSON、数学运算、异步操作、时间、日期、十进制数、MySQL 连接以及 Modbus TCP 通信等。
2.检查主机和端口的连通性:使用 telnetlib3 库异步地检查与 Modbus TCP 设备的连接是否成功。
3.数据采集流程:
步骤 1:检查与 Modbus TCP 设备的连接。
步骤 2:从系统数据库中获取数据点列表。
步骤 3:从 Modbus TCP 设备读取数据点的值。
步骤 4:将采集到的数据批量插入历史数据库,并更新最新值。
4.数据采集和处理逻辑:
使用 while True 循环不断进行数据采集。
在每次循环开始时,首先检查与 Modbus TCP 设备的连接。
从系统数据库中获取需要采集的数据点列表。
对每个数据点,根据其配置(如地址、功能码、偏移量等)从 Modbus TCP 设备读取值。
将读取到的数据按照数据点的类型(模拟值、能量值、数字值)分类,并进行相应的处理,如字节交换、应用比例因子等。
将处理后的数据批量插入到历史数据库中,并更新每个数据点的最新值。
在每次数据采集周期结束后,休眠指定的时间间隔,然后重复上述过程。
5.错误处理和日志记录:在数据采集过程中,如果遇到任何错误(如数据库连接失败、Modbus 通信错误等),脚本会记录错误信息,并根据情况决定是否重试或跳过当前数据点。
6.数据库操作:脚本涉及到与两个 MySQL 数据库的交互——系统数据库和历史数据库。系统数据库用于存储数据点的配置信息,历史数据库用于存储采集到的数据值。
7.配置文件:脚本使用 config 模块来获取数据库连接和其他配置信息。
8.字节交换功能:对于某些 Modbus 设备,可能需要对读取到的数据进行字节交换,脚本中包含了处理 32 位和 64 位数据的字节交换函数。
这段代码实现了一个完整的数据采集流程,包括与设备的通信、数据的读取和处理、以及数据的存储。
评论