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