Re: [foxboro] HLBL question

  • From: "Lowell, Timothy" <Timothy.Lowell@xxxxxxxxxxx>
  • To: "'foxboro@xxxxxxxxxxxxx'" <foxboro@xxxxxxxxxxxxx>
  • Date: Tue, 19 Jan 2010 18:40:12 -0600

David,

Thanks, I think that clears things up.  These IND blocks are not loops.  They 
only run once.  They are intended to do an orderly shutdown of key PIDA 
controllers in a unit if there is a power outage.  They are initiated manually 
from a screen on a WP console.  The idea was to build several of these in 
strategic locations to avoid any peer-to-peer connections (and to initiate 
shutdowns only in affected units), but there probably are a handful of 
peer-to-peer connections anyway.

Maybe the ones that use the IF THEN ENDIF statements are peer-to-peers.  I will 
double check that.

Thanks,
Tim

-----Original Message-----
From: foxboro-bounce@xxxxxxxxxxxxx [mailto:foxboro-bounce@xxxxxxxxxxxxx] On 
Behalf Of Johnson, David A.
Sent: Tuesday, January 19, 2010 3:34 PM
To: foxboro@xxxxxxxxxxxxx
Subject: Re: [foxboro] HLBL question

Tim,
Setting .MA false and not using the If Then construct will work. Setting MA 
false if it is already false is ok. 

As for OM resources it depends on whether the COMP:BLOCK.MA  is in the same CP 
as the sequence block. When an external read/write is initiated by the code, a 
check is first made to see if the C:B.P is in the local CP. If it is in the 
local CP then the call is not broadcast on the nodebus/mesh network and the 
code processes the request. If the C:B.P is not in the local CP then a 
broadcast is made on the network and all CPs, gateways, etc will have to search 
their local block databases to see if they have the requested C:B.P. This is 
sometimes called a "dumb" call since it does not use the peer-to-peer om list 
mechanism as with a secured connection between 2 CP parameters, i.e. you type 
in a connection to an input parameter and the source block is in another CP. So 
if you do a lot of external reads/writes to other CPs in sequence code you will 
introduce some additional OM tasks on those CPs. 

Another thing to note is that the sequence code will suspend one block period 
for each external read/write command (minimum 1 second) to resolve a call to 
another CP on the network. So if your sequence block period is 2 seconds and 
you are using the IF Then with the COMP:BLOCK.MA in another CP it will take 4 
seconds to read the COMP:BLOCK.MA twice. If the sequence code does a lot of 
external reads/writes to other CPs and runs those steps constantly as in a loop 
that runs continuously you are better off making connections to the sequence 
block input parameters for reads and using block output parameters and 
peer-to-peer connections for writes. If you don't have input parameters 
available on the sequence block you can build a "dummy" block in the same CP as 
the sequence block to make the peer-to-peer connections then do reads from the 
sequence code to the dummy block input parameters to prevent the "dumb" calls 
from reaching the network.

Hope this is not too confusing, I was getting a bit confused as I was proof 
reading this.

________________________________________
From: foxboro-bounce@xxxxxxxxxxxxx [foxboro-bounce@xxxxxxxxxxxxx] On Behalf Of 
Lowell, Timothy [Timothy.Lowell@xxxxxxxxxxx]
Sent: Tuesday, January 19, 2010 6:09 PM
To: 'foxboro@xxxxxxxxxxxxx'
Subject: [foxboro] HLBL question

Oh, HLBL gurus,
We have some HLBL code at one of our sites that looks like this:

IF :CMP:BLOCK.MA THEN
                :COMP:BLOCK.MA := FALSE;
ENDIF;

So, If the .MA parameter is true (block is in AUTO), then set the .MA parameter 
to false (set block to MANUAL).  If the block is already in MANUAL, move on.

Is this superior in any way, shape, or form to one simple command:

:CMP:BLOCK.MA := FALSE;

meaning, go ahead and send the command to set the .MA parameter to false, even 
if it is already false?

We're thinking that in the first case, the IND block has to go and grab the 
status of the .MA parameter, and then if it is true, change it, but if not, 
leave it alone.  We can't figure out why that would be better than just sending 
a .MA := FALSE command no matter what.  Either way, the IND block is 
interacting with the Object Manager at least once, and in the first case 
possibly twice, while in the second case you know that it will only interact 
with the Object Manager once, even if it doesn't need to.

Any thoughts?  Does reading from the OM in an IND block take up significantly 
fewer resources that writing to it?

Tim Lowell
Tesoro Companies, Inc.
19100 RidgeWood Parkway
San Antonio, TX 78259
210-626-4929 (w)
210-253-0225 (c )
timothy.lowell@xxxxxxxxxxx<mailto:timothy.lowell@xxxxxxxxxxx>

 
 
_______________________________________________________________________
This mailing list is neither sponsored nor endorsed by Invensys Process
Systems (formerly The Foxboro Company). Use the info you obtain here at
your own risks. Read http://www.thecassandraproject.org/disclaimer.html
 
foxboro mailing list:             //www.freelists.org/list/foxboro
to subscribe:         mailto:foxboro-request@xxxxxxxxxxxxx?subject=join
to unsubscribe:      mailto:foxboro-request@xxxxxxxxxxxxx?subject=leave
 

Other related posts: