文章目录
1. 项目概述
本方案旨在实现触摸屏(HMI)或 Runtime 自动将生成的 PDF/CSV 文件备份至局域网服务器共享文件夹,支持实时传输或定时传输。
核心需求
- 文件生成后自动传输至服务器共享路径(\Server\Backup)。
- 支持实时备份和定时(Schedule)备份。
- 支持日志记录、异常处理及文件版本管理。
2. 传输方式评估
2.1 FTP 自动上传方案
-
流程:HMI 导出文件 → FTP 客户端脚本 → 上传到服务器 FTP 目录。
-
优点:
- 支持跨系统传输(Windows / Linux)。
- 传输速度快,支持断点续传(高级配置)。
-
缺点:
- 需配置 FTP 服务和账户。
- 需额外管理 FTP 权限与安全策略。
2.2 Windows 共享文件夹方案
-
流程:HMI 导出文件 → 脚本复制到共享路径(\Server\Backup)。
-
优点:
- 简单易用,无需额外服务。
- 直接可在服务器端读取文件。
-
缺点:
- 仅适用于支持 SMB/CIFS 协议的系统。
- 需要确保用户权限设置正确。
3. 实施细节
3.1 文件命名规则
为防止文件覆盖,推荐采用以下命名格式:
Report_<YYYYMMDD_HHMMSS>.pdf
DataExport_<YYYYMMDD_HHMMSS>.csv
示例:
Report_20250826_143000.pdf
DataExport_20250826_143000.csv
3.2 自动备份脚本
方案 A:PowerShell 脚本(适用于 Windows HMI)
# 文件传输脚本 PowerShell 版
$source = "D:\HMI\export\*.*"
$destination = "\\Server\Backup"
$logFile = "D:\HMI\backup_log.txt"
# 创建日志函数
function Write-Log {
param([string]$message)
Add-Content -Path $logFile -Value "$(Get-Date) - $message"
}
try {
robocopy $source $destination *.pdf *.csv /MIR /XO
Write-Log "文件备份成功"
} catch {
Write-Log "文件备份失败:$_"
}
配置方法:
-
将脚本保存为
backup.ps1
。 -
在 Windows 任务计划程序中配置定时任务,运行:
powershell.exe -ExecutionPolicy Bypass -File D:\HMI\backup.ps1
-
设置触发器(如每 5 分钟或文件生成后)。
方案 B:Python 脚本(跨平台方案)
import shutil
import os
import datetime
import logging
source = r"D:\HMI\export"
destination = r"\\Server\Backup"
logging.basicConfig(filename=r"D:\HMI\backup_log.txt",
level=logging.INFO,
format='%(asctime)s - %(message)s')
for file in os.listdir(source):
if file.endswith(".pdf") or file.endswith(".csv"):
src_path = os.path.join(source, file)
dst_path = os.path.join(destination, file)
try:
shutil.copy2(src_path, dst_path)
logging.info(f"备份成功: {file}")
except Exception as e:
logging.error(f"备份失败: {file} - {e}")
3.3 定时任务配置(Windows 示例)
- 打开“任务计划程序”。
- 创建任务 → 触发器选择“每日”“每 5 分钟”“文件变化”等。
- 操作选择运行 PowerShell/Python 脚本。
- 条件选项:勾选“唤醒计算机运行任务”。
4. 部署架构图
5. 日志与维护
- 日志文件:记录每次备份状态、时间和异常信息。
- 建议使用外部监控工具定期检查日志和共享文件夹容量。
6. 后续扩展
- 支持远程云端同步(SFTP/OneDrive/FTP)。
- 支持备份文件压缩、加密。
- 增加 Web 界面可视化备份状态。
7. SFTP 自动上传备份方案的方式
补充 SFTP 方式,适合需要安全加密传输(比 FTP 更安全)的场景。
1. 方案概述
- 使用 SFTP (SSH File Transfer Protocol) 通过加密通道传输文件。
- 适合对安全性要求较高的工业控制或生产环境。
- 可通过 Python + Paramiko 或 WinSCP 脚本 实现。
2. 文件命名规则
与之前方案相同,建议采用时间戳防止覆盖:
Report_20250826_143000.pdf
DataExport_20250826_143000.csv
3. Python + Paramiko 实现
import paramiko
import os
import logging
# 本地路径和远程路径
local_dir = r"D:\HMI\export"
remote_dir = "/home/backup"
# 日志配置
logging.basicConfig(filename=r"D:\HMI\sftp_backup_log.txt",
level=logging.INFO,
format='%(asctime)s - %(message)s')
# 服务器连接信息
host = "192.168.1.100"
port = 22
username = "backupuser"
password = "password123"
try:
# 建立SFTP连接
transport = paramiko.Transport((host, port))
transport.connect(username=username, password=password)
sftp = paramiko.SFTPClient.from_transport(transport)
# 遍历本地文件夹并上传
for file in os.listdir(local_dir):
if file.endswith(".pdf") or file.endswith(".csv"):
local_path = os.path.join(local_dir, file)
remote_path = remote_dir + "/" + file
try:
sftp.put(local_path, remote_path)
logging.info(f"SFTP 备份成功: {file}")
except Exception as e:
logging.error(f"SFTP 备份失败: {file} - {e}")
sftp.close()
transport.close()
except Exception as e:
logging.error(f"SFTP 连接失败: {e}")
4. 定时执行
- 使用 Windows 任务计划程序运行:
python D:\HMI\sftp_backup.py
- 设置为周期任务(如每 5 分钟 / 每小时执行一次)。
5. 安全建议
-
使用 SSH 密钥认证 替代密码,增强安全性:
- 生成 SSH 密钥对(
ssh-keygen
)。 - 将公钥上传到服务器
~/.ssh/authorized_keys
。 - Python 连接时用
pkey = paramiko.RSAKey.from_private_key_file("key_path")
。
- 生成 SSH 密钥对(
6. 适用场景
- 生产环境需要加密通道。
- 无法开放 Windows 共享文件夹或 FTP 端口。
要不要我帮你 生成一份整合了 FTP、SMB、SFTP 三种方案的最终版 Word 文档(含脚本 + 架构图)?
还是要 单独的 SFTP 版 Word 文档?
另外,HMI 运行系统是 Windows CE / Windows 10 IoT / Linux 哪种?(决定脚本运行环境)