前 言:
西门子的WINCC软件提供了方便的变量归档,报警归档备份功能。但没想到的是Wincc的用户归档没有自动备份功能。配方数据及用户归档存储的报表记录数据确是生产的关键数据,需要定时定期备份。
当然,西门子也提供了标准的接口函数提供导出功能。是的,一个表一个表的导出功能。项目变了,配方多了一种重新编辑脚本重新导出。基于项目实际情况,抛弃了西门子官方提供的方法,选择了其他的方法处理备份数据。
在此,提供三种我使用过的方法,欢迎大家一起讨论!
方法一:
完整性备份为bak文件
借用强大的SQL语法,通过VBS执行SQLCMD指令,执行已经测试完成的T-SQL备份指令。由于需要使用cmdshell指令,SQL默认为关闭状态需要在T-SQL指令中开启,结束完成后记得关闭,否则SQL处于危险状态。结合Wincc可以灵活的定义重复执行的时间。可以灵活控制备份的周期,备份文件的保留方式。具体看现场实际要求,部分脚本如下:
实际测试,备份速度基本是ms级别,截图如下。
方法二:
导出表数据使用BCP指令
BCP 实用工具可以在 Microsoft SQL Server 实例和用户指定格式的数据文件间大容量复制数据。使用 BCP实用工具可以将大量新行导入 SQL Server 表,或将表数据导入数据文件。除非与 queryout 选项一起使用,否则使用该实用工具不需要了解 Transact-SQL 知识。BCP既可以在CMD提示符下运行,也可以在SSMS下执行。
如图所示:导出对应的表的数据,如果表名有固定的标签,可以灵活的控制表的数据导出,即使外部新建表单或者新加数据都无需调整脚本。通过VBS执行SQLCMD,可以灵活控制表的名称。
方法三:
使用WINCC提供的C指令
WinCC ODK uaArchiveExport
与uaArchiveImport函数
详细的指令有兴趣的可以查询西门子的官方帮助手册。当然官方的是最安全可靠的,灵活度却少了很多,不到最后一刻脚本都可能根据需要调整。对C脚本的功底要求也很高,具体的脚本可以根据官方指导文件处理。