脚本如何批量转换工业数据格式

wen 实用脚本 12

本文目录导读:

脚本如何批量转换工业数据格式

  1. 通用编程语言脚本(Python + Pandas/OpenPyXL)
  2. 专用工具命令行(如 awk, sed, jq, yq
  3. 工业协议转换脚本(Python + pyModbus/pyOPCUA)
  4. 批量二进制文件解析脚本(Python struct/二进制解析)
  5. 批量处理工具(Node-RED / n8n / 甚至Excel VBA)
  6. 数据库与大数据仓库转换(命令行+SQL)
  7. 使用 mneplotly 等专用库(用于信号/振动数据)
  8. 选择策略建议

批量转换工业数据格式通常涉及处理各种协议(如Modbus、OPC UA、CSV/Excel、二进制等)和文件格式(如S7、AB、JSON、XML等),以下是几种常见的脚本化批量转换方法,覆盖不同场景:

通用编程语言脚本(Python + Pandas/OpenPyXL)

适用于CSV、Excel、JSON、文本等通用格式之间的转换。

示例:批量将CSV转为Excel

import pandas as pd
import os
from pathlib import Path
input_dir = "input_csv"
output_dir = "output_excel"  # 存放输出Excel
os.makedirs(output_dir, exist_ok=True)
for file in Path(input_dir).glob("*.csv"):
    df = pd.read_csv(file)
    output_path = os.path.join(output_dir, file.stem + ".xlsx")
    df.to_excel(output_path, index=False)
    print(f"Converted: {file.name} -> {output_path}")

工业数据专用库(处理OPC UA、Modbus等协议):

  • opcua-asyncioopcua → 读取OPC UA变量
  • pymodbus → Modbus TCP/RTU
  • pyads → Beckhoff TwinCAT (ADS协议)

专用工具命令行(如 awk, sed, jq, yq

适合Linux/Unix环境下的文本或结构化数据快速处理。

示例:使用 awk 批量转换分隔符(管道符改为逗号)

for file in *.txt; do
    awk -F'|' 'BEGIN{OFS=","} {$1=$1; print}' "$file" > "${file%.txt}.csv"
done

示例:使用 jq 批量转换JSON为CSV

for file in *.json; do
    jq -r '.[] | [.timestamp, .value] | @csv' "$file" > "${file%.json}.csv"
done

工业协议转换脚本(Python + pyModbus/pyOPCUA)

适用于从PLC、SCADA等工业设备实时转换或提取历史数据。

示例:批量从Modbus读取并写入CSV

from pymodbus.client import ModbusTcpClient
import csv
# 假设有多个设备IP列表
devices = ["192.168.1.10:502", "192.168.1.20:502"]
for dev in devices:
    ip, port = dev.split(":")
    client = ModbusTcpClient(ip, port=int(port))
    client.connect()
    # 读取保持寄存器 (起始地址0, 读取10个)
    result = client.read_holding_registers(0, 10)
    data = result.registers if result else []
    # 写入单独的CSV文件
    with open(f"device_{ip.replace('.','_')}.csv", "w", newline='') as f:
        writer = csv.writer(f)
        writer.writerow(["Register_Address", "Value"])
        for idx, val in enumerate(data):
            writer.writerow([idx, val])
    client.close()

批量二进制文件解析脚本(Python struct/二进制解析)

针对Siemens S7、Rockwell AB、BIN、DAT等专用二进制格式。

示例:解析Siemens S7程序格式文件(需反汇编工具)

import struct
# 假设二进制结构: 前4字节为时间戳,后2字节为数据
with open("data.bin", "rb") as f:
    data = f.read()
    timestamp = struct.unpack(">I", data[:4])[0]  # 大端模式
    value = struct.unpack(">H", data[4:6])[0]      # 2字节无符号整数

对于复杂格式(如S7 Type File, AB Logix),建议使用专用库:

  • scl-parser / s7-comm 解析S7项目文件
  • pylogix / pytmc 用于Rockwell PLC
  • lxml / etree 解析XML格式的PLC配置文件

批量处理工具(Node-RED / n8n / 甚至Excel VBA)

  • Node-RED: 拖拽式脚本,支持多种工业协议节点,可批量导入导出(如从OPC UA批量采集写入CSV)。
  • Excel VBA: 将多个CSV/TXT合并为Excel工作表,或Excel转CSV。

数据库与大数据仓库转换(命令行+SQL)

如果工业数据已存入时序数据库(InfluxDB/PostgreSQL):

示例:从TimescaleDB导出为CSV

\copy (SELECT timestamp, tag, value FROM measurements) TO '/tmp/data.csv' WITH CSV HEADER

示例:批量导入InfluxDB

influx -import -path=/data/*.csv -precision=s -database=mydb

使用 mneplotly 等专用库(用于信号/振动数据)

如果工业格式是EDF、BDF、CNT等特殊格式,可调用专用库。

选择策略建议

场景 推荐方法
简单文本格式转换(CSV/Excel/JSON) Python Pandas / awk / jq
实时从PLC/OPC UA采集并转换 Python + pyModbus/pyOPCUA
二进制文件解析(S7/AB/专有) Python struct + 专用库
批量处理数十万文件 并行化(Python multiprocessing / GNU Parallel)
非编程人员操作 Node-RED / Excel VBA

如果需要处理高度专有的工业格式(如Siemens S7 项目文件或Rockwell L5X等),建议先查阅厂商文档或使用其官方API/SDK。

抱歉,评论功能暂时关闭!