本文目录导读:

- 通用编程语言脚本(Python + Pandas/OpenPyXL)
- 专用工具命令行(如
awk,sed,jq,yq) - 工业协议转换脚本(Python + pyModbus/pyOPCUA)
- 批量二进制文件解析脚本(Python struct/二进制解析)
- 批量处理工具(Node-RED / n8n / 甚至Excel VBA)
- 数据库与大数据仓库转换(命令行+SQL)
- 使用
mne或plotly等专用库(用于信号/振动数据) - 选择策略建议
批量转换工业数据格式通常涉及处理各种协议(如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-asyncio或opcua→ 读取OPC UA变量pymodbus→ Modbus TCP/RTUpyads→ 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 PLClxml/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
使用 mne 或 plotly 等专用库(用于信号/振动数据)
如果工业格式是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。