Skip to main content

同步冗余数据

基本上,您可以使用冗余区域类型来影响冗余数据是否同步以及何时同步以及数据从何处复制到何处。

当。。。的时候 冗余配置 对象存在于应用程序中,则 AREA_INPUT 冗余区域类型默认分配给所有变量(在所有全局变量列表和用户创建的所有程序中)。如果稍后将对象添加到应用程序,也会发生这种情况。因此,默认情况下会注册所有变量。

这些对象的列表位于 冗余配置 编辑于 注册地区 标签。

有关更多信息,请参阅: 一般的

启动冗余系统时的同步

当第二个 PLC 启动时,冗余数据(和 AREA_INPUT 首先将冗余区域类型)从主动 PLC 复制到第二个 PLC,一次性复制。然后 PLC 切换到待机状态。

但是,您可以取消选择默认值 AREA_INPUT 冗余区域类型从同步中排除变量。

过程. 从同步中排除对象
  1. 在里面 冗余配置 编辑,在 注册区域 选项卡,单击 变量 标签。

    对象列表(类型 程序 要么 全局变量列表) 显示在下方 目的.选择激活的对象进行同步,因此获得 AREA_INPUT 冗余区域类型。

  2. 停用一个对象。

    例子

    rdncy_img_settings_registered_areas.png

    提示

    这对于现场总线的本地诊断数据或本地冗余状态是可取的。

在每个任务周期中同步

当运行系统的配置文件 (*.cfg) 包含以下条目时,每次启动任务循环时都会触发同步。

[CmpRedundancy]
DataSyncAlways=1

的变量 PROGRAM 冗余区域类型为的对象和全局变量列表 AREA_INPUT 被影响到的。

8. 例子
PROGRAM PLC_PRG
VAR
    b: INT;
END_VAR

IF sReduState.eRedundancyState = RDCY.STATE.RS_CYCLE_ACTIVE THEN
    b := b + 1;
END_IF

这个 b 变量仅在主动 PLC 中递增。由于冗余系统中的数据与每个任务周期同步,因此冗余变量会连续传输到第二个 PLC。



按需同步

如果運行系統的組態檔案 (<rts name.cfg) 不包含 DataSyncAlways=1 項目,則最好在 IEC 程式碼中以程式方式觸發同步。

为此,请调用 RedundancySynchronizeData() 在您的 IEC 代码中起作用。然后变量与 AREA_INPUT 冗余区域类型是同步的。因此,检查上的设置 注册区域 选项卡上 变量 标签。复制操作在任务循环开始时执行。

9. 例子

在活动/待机模式下, b 主动 PLC 中,变量递增。什么时候 bUpdateData 设置后,一次触发数据同步,并将值传送到第二个 PLC。

IF bUpdateData THEN
    bUpdateData := FALSE;
    RedundancySynchronizeData();
END_IF


在每个任务周期中从主动 PLC 同步到备用 PLC

这个 AREA_SYNCHRO 每个任务周期的运行过程中,可以将类型的冗余数据从主动 PLC 传输到备用 PLC。为此,数据的大小是有限的。中不支持该类型的分配 CODESYS,但必须以编程方式作为回调来完成 AreaRegister 函数。

该区域必须在申请开始之前注册。在第一个周期中注册区域为时已晚。这就是为什么注册是在回调中完成的 cbDownloadDone 系统事件。

10. 例子
FUNCTION cbDownloadDone : DWORD
VAR_IN_OUT
        EventPrm: CmpApp.EVTPARAM_CmpApp;
END_VAR

(* Register GVL_Synchro to be synchronized in every task cycle *)
bAreaRegisterDone := AreaRegister(ADR(iSyncFirst), ADR(iSyncLast) - ADR(iSyncFirst) + sizeof(iSyncLast), AREA_TYPE.AREA_SYNCHRO);
tNowDownloadDone := TIME();

的呼唤 cbDownloadDone 当执行 OnlineChangeDone 系统事件发生。系统事件被添加到任务配置中。

rdncy_img_task_configuration_redundant.png


提示

请注意, AreaRegister 函数隐藏在冗余库的某些版本中,但仍然可以调用。

在每个任务周期中从备用 PLC 同步到主动 PLC

type 的冗余数据AREA_PASSIVE可以在每个任务循环的操作期间从被动 PLC 转移到主动 PLC。为此,数据的大小是有限的。不支持类型赋值 CODESYS,但必须以编程方式作为回调来完成 AreaRegister 功能。

该区域必须在申请开始之前注册。在第一个周期中注册区域为时已晚。结果,注册是在回调中完成的 cbDownloadDone 系统事件(与 上一章的示例)。

11. 例子
FUNCTION cbDownloadDone : DWORD
VAR_IN_OUT
    EventPrm: CmpApp.EVTPARAM_CmpApp;
END_VAR

(* Register GVL_Synchro to be synchronized in every task cycle *)
bAreaRegisterDone := AreaRegister(ADR(iSyncFirst), ADR(iSyncLast) - ADR(iSyncFirst) + sizeof(iSyncLast), AREA_TYPE.AREA_PASSIVE);
tNowDownloadDone := TIME();

的召唤 cbDownloadDone 执行时 OnlineChangeDone 系统事件发生。系统事件添加到任务配置中。

rdncy_img_task_configuration_redundant.png


同步定时器

IEC 时基的值在每个 PLC 周期中从主动 PLC 传输到被动 PLC。这影响 TIME, TON, 和 TOF。系统时间(例如: SysTimeGetMs) 不会被传输,并且可作为每个 PLC 上的本地时间。

设置注册区域同步的超时时间

为设置合适的值 同步超时 的注册区域的百分比 冗余设置,你可以先使用系统跟踪来确定这一点:

  1. 在设备树中,添加 追踪 设备对象下方的对象。

  2. 冗余设置将军 选项卡,选择 在系统跟踪中记录所需的同步时间 选项。

  3. 加载 并开始对系统跟踪进行跟踪记录。

  4. 同步期间超时的默认值 SyncWaitTime 的价值是 StandbyWaitTime,反过来又将其预设为 30 毫秒的值。

    如果是套装 SyncWaitTime 太短,则日志中会显示以下消息:“由于同步等待时间,同步在% 之后终止” PRI_UI32 “ms”。

    当设定时 同步等待时间 足够长,实际需要的 SyncTime 会记录在系统跟踪中。你可以尝试优化这个集合 SyncWaitTime 这样它就尽可能接近实际所需的 SyncTime。