Non-redundant task in redundant AC800F
We are going to change existing non-redundant AC800F to redundant one. All of tasks in current project are non-redundant and I have to change them to TASK/RED. But also may leave some non-redundant. What are reason to have non-redundant task in redundant PLC? What is behaviour of global variables accessed by non-redundant task from process image in redundant PLC? Are they updated in process image of both CPUs? In which CPU function blocks from non-redundant task are executed? If main CPU is going to stop state for whatever reason, what will be with function blocks and variables which are used of this FBs from non-redundant task?
Voted best answer
Wow! This became a discusion when I was away!
I think that Summit is right on everything he already wrote.
The secondary controller is in kind of standby mode: All fieldbuses are silent, no program is running and no communication to external devices is active. The only thing it does is keeping synchronization with primary.
There is one and only one reason to use non-redundant tasks in redundant PS - to bring the redundancy link load down. This is used sometimes in very application heavy redundant AC 800F, which may have synchronization problems (typically during initial sync). It can be only used for tasks, that do not need sync - like maybe input handling (it doesn't need to remember last value or state of object to perform, as it uses only values from 'right now' - unless You use linearisation or something like that).
So just to enforce what was already said:
Both statements 1 and 2 from last answer are correct.
3rd one is correct regarding redundant task, BUT secondary controller won't sync any variables from non-redundant tasks (global or local doesn't really matter in this case as secondary is in 'standby mode').
4th statement should sound like this: "After redundancy switchover, code of non-redundant TASK will start execution in secondary CPU with initial values of all variables, unless values of those variables was synchonized by some other, redundant task".
5th one is a bit complicated. As stated above the redundant and non-redundant tasks work in the same way ONLY if programs run by them use ONLY values from current moment in time (don't need to remember previous state or values).
6th statement is not true.
Sorry for basically repeating what was already said, but to many people don't read the comments.
Hope it helps,
You may change Task to Redundant Task by simply exporting block and importing it back into the same project using option import as redundant. This is what the manuals state about inserting non-redundant task into redundant PS:
So as You can see - the redundant task is required to have a synchronized data between redundant CPUs. Non-redundant task won't be took over as redundant tasks.
Hope it helps,
Source: 3BDD012505 Engineering - Process Station - AC 800F
thanks for reply. It's not clear from document what will be in stand-by CPU a state/values of variables which are used by non-redundant task? Will this variables updates every cycle between main and stand-by CPUs while both of CPUs are alive or this variables will not be updated between CPUs?
Find answer to your questions based on my understanding,
What are reason to have non-redundant task in redundant PLC?
Ans : So that which ever logic do not need to be executed redundantly can be programmed in non-redundant task.means which ever process value do not need to be synchronised between primary/secondary controller. can be programmed in redundant task. can't imagine any example of that.
What is behavior of global variables accessed by non-redundant task from process image in redundant PLC?
Ans : I think there is no change, as process imaged variables returns updated value at the end of task execution. so global variable accessed by non-redundant task from process image in redundant plc is same as it is accessed in non-redundant plc. In online help read about process image while using global variable it is recommended to use process image to increase clarity on processed value of variable used in different part of logic.
I think there can be issue if global variable without process image from non-redundant task into redundant task.
Are they updated in process image of both CPUs?
Ans : Yes, if variable used with process imaged it is updated in the process image Input/output table in both the controller.
In which CPU function blocks from non-redundant task are executed? If main CPU is going to stop state for whatever reason, what will be with function blocks and variables which are used of this FBs from non-redundant task?
Ans : As per my understanding Function block from nonredundant task and redundant task both are going to be downloaded in both prim/secondary controller. and which ever is active controller code from redundant/non-redundant task get executed. only difference is redundant taks data(i.e variable value and parameterisation values) get synchronised between both the controller. and that can be observed by task/resource status 'Running,sync' so that due to what ever reason there is redundancy toggle there is bumpless transfer of process data.
where as in case of non-redundant task data if there is redundancy toggle then there is bump in data that variables from non-redundant task may go to initial value then pick running value. not sure on that part.
Hope that answers your query.
Thanks for reply. I will try to summarize:
1) Code will be loaded in both CPUs, irrespective of defining in TASK or in TASK/RED. Is it correct?
2) Internal variables of function blocks (VAR_DPS etc.) which are used in TASK/RED will be synchronized between CPUs. And vice versa - internal variables of function blocks which are used in non-redundant TASK will not be synchronized between CPUs. Is it correct?
3) Global variables, which are accessed via process image, will be updated at end of every cycle and will be identical in main and in stand-by CPU, irrespective of using by TASK or by TASK/RED. Is it correct?4) After redundant switchover, code of non-redunant TASK will start execution in stand-by CPU at new with initial values of internal variables and with current values of global variables. Is it correct?
5) If function blocks, for any reasons, are not using internal variables (VAR_DPS etc.) for storing intermediate results (for example, calculation of VAR_OUT are based on current values of VAR_IN, which are in fact global variables), we can tell that TASK and TASK/RED behaves similarly in redundant PLC and process will be under control in any case, because:
- TASK and TASK/RED are loaded in both CPUs (see 1) and are executed in main CPU before redundant switchover
- TASK and TASK/RED are executed in stand-by CPU after redundant switchover (see 4)
- Global variables are updating in both CPUs (see 2)
- internal variables are not used (see 5)
Is it correct?
6) If TASK can be used instead of TASK/RED (see 5), can one save redundancy memory and time of synchronization?
Additional question: when main CPU is active and executes code of TASK and TASK/RED, this code of TASK and TASK/RED executes simultaneously in stand-by CPU without writing in process image/physical IO? Or stand-by CPU in this time just synchronizes process image and waiting for main CPU's laying down?
Sumit and Mike
many thanks for your reply.
I would like to clarify point 3 regarding synchronization of global variables between active and stand-by CPUs.
If I understand right from your answers, nor global variables nor local variables are not updating in stand-by CPU while active CPU is working?
Always happy to help.
Regarding this 3rd point: it depends on the type of task You use. In case of redundant task ALL variables are synchronized between primary and secondary controller. In case of non-redundant task neither local, nor global variables are synchronized. And this is the main difference between redundant and normal task.
Thank you very much for your help. I erroneously thought that global variables it's a table where current values of all variables are stored irrespectively of using them in task or task/red and hence are available at any time in standby CPU by synchronization procedure. Now it's clear - if global variables isn't used in task/red, it is not synchronized. So after redundant switchover such global variables will be initialized and used in non-redundant task with initial values.
I agree with your opinion - Freelance is the good product :)
Thanks again and have a nice day.