Writing values from Wonderware only when NEQ

Tpetie3509

Member
Join Date
Apr 2017
Location
Washington
Posts
23
I am using Wonderware as a SCADA host, and am using messaging to read data from ML1100's to a CompactLogix L30ER. I have been experimenting with writing data back to the 1100's but I can't seem to find a good way to write only values that I have changed in WW.

For instance: I have set it up so that it reads/writes every other rung to the PLC it's communicating with. But I really only want it to write when I change a setpoint in WW. Anybody have some samples or ideas on this?

Thanks,

Todd
 
Hi Todd,

Can you provide a little more description for what you're doing? Why would you only want to write when you change the value, instead of just having the tags linked directly? If I can wrap my head around what you're trying to do, I may be able to help.
 
I am using Wonderware as a SCADA host, and am using messaging to read data from ML1100's to a CompactLogix L30ER.

Are you saying that you are trying to have Wonderware read from the Micrologix and write to the CompactLogix? I've seen SCADA's used as cheap protocol converters or network bridges, but why not have the the two PLCs talk directly to each other? Or is that what you mean by "using messaging"?

Please be more specific about what your are trying to accomplish ("what 'success' looks like), not the methods you are using to accomplish your goal ("what the path to success is").


For instance: I have set it up so that it reads/writes every other rung to the PLC it's communicating with.

This sentence makes no sense: Wonderware writes tags, not "rungs".


But I really only want it to write when I change a setpoint in WW.

As I understand them, in order to keep bandwidth to a minimum, Wonderware's various drivers ONLY do their writing on a data change (although they read at an assigned update frequency).

All that being said, you might want to look into a "Data Change" script. If you're application is such that, when you change a setpoint on an HMI screen for a tag linked to the Micrologix that it also changes a setpoint in a CompactLogix tag, then a "Data Change" script can monitor the value of the ML tag, and set the Cpx tag to the same value quite easily.
 
Sorry for the misinformation on my end. I will try to explain what I am working with and what I am looking to accomplish.

Currently, Wonderware is pointing at several different nodes out in the field that are all communicating via ethernet radio. There is no sequential polling in WW so I am implementing the CompactLogix controller into the system to do the "heavy lifting" for the system using messaging to communicate from WW>CompactLogix>ML1100 at node and vise versa.

Currently, I have written logic for both read/write messages to and from the CompactLogix and each ML1100 and set up the heartbeats.

What I want to know is, will this constant writing of values to the controllers be a problem? What I mean by that is say I have a setpoint and I have it set at a certain value, that value will be written each scan from the Master to the remote controller and will never change unless I change the tag value in the HMI. Is there any issues I'm creating by doing this or is this standard operating procedure for this type of application?

I may be overthinking it, thanks for being patient.
 
You can use a comparator to look at what value is in the WW interface and compare it to what's in the compact, or micro. Only activate the move instructions if the input and destination don't match. You basically are creating a one shot for data transfer.

You will now only execute a compare and possibly 1 group of moves, instead of x-number of moves every cycle.

Not sure if you would run into problems or not even if you stuck to just activating all the moves every cycle. However I also tend to try and make things work more efficiently, so I can understand why you would do it.
 
It's not terribly complicated to only send a PLC to PLC message upon exception. You simply need to copy the contents of your message data register to a holding register each sweep and then only trigger the MSG function when the message data register is not equal to it's value during the previous program sweep, which is stored in your holding register.
 
We have several dozen ML1400 and 1100 PLCs deployed in a similar topology.

Your arrangement works fine as long as all your Setpoints come from the Master only. If you have a local HMI at each remote, that you want to use to change setpoints or toggle bits, And those same setpoints come from the master, then you have an issue.

In this scenario i normally give them local and remote setpoints. They have a button to copy remote to local. They can then switch to local control and modify. If they want to keep those setpoints, they ring up the control room or access the SCADA remotely and i have a button for "update from local setpoints" for each site. That fires off a read of the local setpoints by the master, which then copies them into it's "normal"setpoints database.

Hope that makes sense!
 
In all the cases I work with using radio telemetry, it is necessary to read and write at least one or two values on every pass. It also takes very little extra time and effort to just read and write the whole chunk, so I have not done any "report by exception" yet.

If I get into a cell modem based system where data u$age comes into play, I would definitely alter my logic to conserve bits and bytes transmitted, but have not crossed that bridge yet and will probably use MQTT or similar protocols if/when that happens.

Also, your wonderware application (using normal data entry objects) is not writing constantly to the PLC tag. It might be reading it quite frequently, but only writes to the tag when the operator actually enters a value....that is unless you are doing some sort of scripting that is out of the ordinary.
 
You may be overthinking it.

If I'm understanding you, rather than having WW read from 30-odd ML1100's over radio, you're concentrating all the data into a CompactLogix, and having that do the Reads & Writes.

If so, you might not see any improvement in performance, and some things could be worse, depending on how things are set up.

If I'm not confusing it with another SCADA package, or an older version (and that's certainly possible, so take everything I say with the requisite amount of salt), WW polls only data that it needs to poll (i.e., what's on an active screen, or data that's being historized) at a particular poll rate. It only writes data when it changes a value. These are old techniques used to reduced bandwith, back in the 9600 baud days, and they generally still exist today, just like the CMD window for DOS-like control of Windows.


So, if you're rotational polling of the ML1100's is slower than Wonderware's, any data that is being stored in the Historian isn't potentially changing as often. Screens may contain slightly staler data. Probably not enough to notice or bother anybody. But "probably".

As for data writes, you might do something like the following:

I'm assuming that the data you are reading from the ML1100s can be the same as the data that you are writing -- a combination of setpoints and process values; commands and statuses (stata? statii?).

The easy way to detect that WW has changed a value that it also reads ("Setpoint") is to have a duplicate copy of the file (array) that the setpoint is in. Using a FSC instruction, you can compare the array to the copy ("array_old), and if there's any change, CPS (not COP) the whole array to array_old, and trigger a MSG Write to send it to where it belongs.

When you do your periodic MSG Read, upon .DN, do a CPS of the array to array_old, so that you won't trigger a "mismatch" write.

There is a problem with this, of course. HMI communications are asynchronous to scan. Therefore, it could be that WW just happens to do its write to the same file that you are doing your MSG read from, and either get its data overwritten, or have the new value CPS'ed after the MSG DN bit, thus NOT triggering a write.

It would be better, then, if the "read" and "write" tags of WW were different, as I believe one can do in FTView (not sure -- rusty, and memory is what it used to be, at least, I think that it isn't; it's hard to remember), but I'm not sure that it can.

If it can, then your best strategy is to do MSG Reads to one array, and MSG Writes to a separate Array. Each ML100 would do the MOVs in the appropriate direction, into the Read Destination file ("N30"), or out of the Write Destination file ("N31").

HTH
 
If I'm not confusing it with another SCADA package, or an older version (and that's certainly possible, so take everything I say with the requisite amount of salt), WW polls only data that it needs to poll (i.e., what's on an active screen, or data that's being historized) at a particular poll rate.

That is an option that may be selected when configuring an Access Name. The choices are: "Advise all items" or "Advise only active items".
 

Similar Topics

Hi Thanks for reading this post. I Having trouble writing Wonderware array values to a compactlogix PAC. I can read the values through a...
Replies
1
Views
4,119
In the Allen Bradley alternate reality program logic and program data are linked together. Is it possible to update a Micro Logix program with out...
Replies
13
Views
4,386
hello all, I was wondering if there were anyway to write values to my plc micrologix 1000 from the HMI using the advancedhmi software nad not my...
Replies
9
Views
4,263
Hi, I am designing an HMI with Workbench for a Micro1400 PLC. I have a PLC variable that manages the "states" depending on the integer value of...
Replies
1
Views
1,252
In my program my program tags largely exist in a couple of a data blocks. There are a number of tags in there that the operator may need to get...
Replies
4
Views
10,579
Back
Top Bottom