如何在WinCC Comfort和WinCC Advanced中安全地拷贝或移

本篇文章旨在解释当使用博途 wincc 拷贝或移动归档数据时如何避免访问冲突和随之而来的数据丢失。
描述
本篇文章旨在解释当使用博途 wincc 拷贝或移动归档数据时如何避免访问冲突和随之而来的数据丢失。
推荐使用 wincc advanced v15 手册中的下列函数拷贝/移动归档数据。
closeallarchives(关闭所有日志)
archivelogfile(归档日志文件)
openallarchives(打开所有日志)
手册中更多可利用的信息请参考 “simatic step 7 basic/professional v15 and simatic wincc v15> 可视化过程  > 使用系统函数和运行系统脚本 > 参考 > 函数列表 > 系统函数 > 归档 >归档日志文件,详见文档id“109755202”。
然而,该过程有可能出现前一个函数没执行完,后一个函数已经开始的情况,会导致数据丢失。
为了避免类似问题,确保系统函数能够按照顺序一步步执行,系统函数完成后触发一条系统消息。只有接收到系统消息再触发下一个系统函数。
注意
如果您在使用审计追踪,请始终使用“移动(hmimove)”模式,否者将因为复制数据产生两个数据段而违反fda准则。但是,这过程中有可能出现前一个函数执行完成之前就开始了下一函数的执行,这会导致数据丢失。
为了避免该情况发生,您可以利用系统函数运行完成时产生的系统消息,以确保一步步依次执行这些系统函数。也就是说您要先接收到上一步函数产生的系统消息再执行下一步的系统函数。
注意
该方法不适用于分段归档,因为函数 归档日志文件 仅拷贝一个文件而不是分段。
拷贝或移动一个归档
no.
过程
1
关闭所有归档
为一个按钮的 “释放” 事件组态 “关闭所有日志” 函数;
2
归档日志文件
如果函数 “关闭所有日志”成功执行完成,那么将会产生一条编号为 80019 的系统报警。
为这条系统报警的“到达” 事件组态“归档日志文件”函数;
注意:
系统消息在项目导航下的 “hmi 报警” 中的 “系统事件” 选项卡中。
3
打开所有归档
当函数“归档日志文件” 成功执行完成后,编号为 80048 的系统报警将会触发,在这条系统报警的“到达”事件中组态 “打开所有日志” 函数。
表 01
拷贝或移动多个归档
no.
过程
1
关闭所有归档
为一个按钮的“释放”事件组态 “关闭所有日志” 函数。
2
归档日志文件
如果函数 “关闭所有日志” 成功执行完成,会产生一条编号为 80019 的系统报警,
为这条系统报警的 “到达” 事件组态以下脚本。
示例为5条归档的拷贝。
图. 01
3
打开所有归档
如果函数 “归档日志文件” 成功执行完成,会产生一条编号为 80048 的系统报警。
为这条系统报警的 “到达” 事件组态以下脚本。
图. 02
脚本的功能
一旦每一个归档的拷贝或移动发生,系统报警 “80048” 就会出现,编号为 “80048” 的系统报警会被内部变量 “counter” 计数,一旦所有归档的拷贝或复制完成(本例为5),if 条件满足,那么 “打开所有日志” 函数会被执行。
同时内部变量 “counter” 被清零。
表 02
根据需要调整图 1 和图 2 中的两个脚本。
注意
如果在短时间内归档大约 300 个值(需要拷贝所有归档),推荐使用函数  stoplogging(停止记录) 在拷贝之前停止归档。在 打开所有日志 函数成功完成后,使用 startlogging(开始记录) 函数再次分别启动归档。
当函数 “stoplogging(停止记录)” 被执行,不再有数值被归档。