Advice and thoughts of the communitity would be welcome. The view of anybody who has used both would be appreciated.
I have personally only used the VIM2.
With the advent of the EIOC device from version 13.3.1, is it still advisable to specify new projects with the VIM2 card.
Or should we be specifying the EIOC device?What is the Emerson recommendation?In particular:
Thanks,
Neil.
In reply to Andre Dicaire:
In reply to gamella:
Andre Dicaire
In reply to IntuitiveNeil:
In reply to Roger Priestner:
Roger, Emerson is preparing an Implementation guide to provide some best practices and recommendations for this.
In v13, the EIOC was released with the Ethernet IP Protocol that supported UCMM logix tags. Prior this, the approach was to use a VIM which emulated Modbus Datasets of up to 100 integers or 50 Float variables. Prior to UCMM support in the PLC, we had to create mapping files in the PLC and use the Class 3 Explicit PCCC format. These files required the PLC to taken offline for modification.
So the UCMM aspect of Ethernet IP affords us the ability to add/modify UCMM Array Tags in the PLC without taking it offline.
With UCMM Logix Tags, you have to map the PLC data into Array tags which you can then map into EIOC Logical Device Tags (LDT's). Each LDT can be up to 100 Signals (Registers) and the LDT starting address is fixed at 0 (first register in the UCMM Array)
The LDT can be configured as an Input, and Output or an Output with readback.
A couple of things we've discovered. 1. The Ethernet IP protocol uses Complete Block Writes to the UCMM tag. Unlike the MODBUS TCP driver, or the VIM drivers, Individual Writes are not supported in the Ethernet IP protocol.
There are various reasons for this approach, but this can affect Bidirectional parameters. When one signal is changed, the entire LDT is written. Care is needed to ensure a value changed in the PLC is retried to ensure it is not overwritten due to a write to a different parameter.
2. The amount of Data and the update rate may exceed the capacity of a single PDT, and you will need to create multiple PDT's to handle the complete data map.
V14 BOL states that it is recommended to have one Control module perform writes to an LDT. This applies to data that will be continuously written to by DeltaV. It mainly applies to Small Devices such as motors and drives where DeltaV is the Host for the control decisions.
In a PLC, the integration is more of a SCADA application, where the PLC hosts the control Data and the EIOC is providing the DeltaV HMI/operator with the ability to view and manipulate the PLC data registers. Therefore, the vast majority of writes are initiated by Operator actions. In a SCADA application, having multiple modules write to the same LDT does not cause any issues.
In our application, we use bidirectional LDTs to handle parameters like SP, OUT, MODE, and Tuning values like GAIN, RESET, RATE, and alarm values like LIMIT. We also use these for Bypass bits on interlocks and such. This simplifies the DeltaV EIOC Control modules by allowing the same parameter for data entry writes and for displaying the current value in the HMI.
Data Performance.the EIOC uses a PDT to define the IP address of the End Device. Under the PDT you create the LDT. You can create up to 256 LDT's under on PDT. which is a lot of parameters. However, the more LDT's you create, the longer it takes to get these processed. The maximum number LDT's per PDT is around 50, but it is recommended to leave some free time, so that the max is really more around 40 to 45 LDT's per second. If you want say a 500 ms Requested Packet Interval (RPI), you should limit the number of LDT's to 20 in that PDT.
To maximize the amount of data being exchanged, you need to consider maximizing the number of Registers/Signals per LDT. This will reduce the number of LDT's and subsequently improve overall data exchanged.
Step 1:
The simple math is to determine the number of registers you need, assign these to an arrangement of LDTs (Floating Point, 16 bit integer, 32 bit integer, Boolean in and out, etc). Use the smallest number of LDT's that makes sense.
Step 2: Determine the fastest Update rate required for any LDT's. The Fastest LDT's go into the first PDT you create for this PLC. The maximum number of LDT's in this PDT depends on the fastest RPI / 25. For example, if you one or more LDT's at 500 ms RPI, divide 500 by 25 to get maximum number of LDT's in this PDT which will be 20. If you have 20 or less LDT's total, place them all in this one PDT.
Step 3: If you have more LDT's that the maximum allowed in the first PDT, you can slow down the fastest RPI and increase the LDT count. If you increase the minimum RPI's to say 1000 ms, you can have 40 LDT's in that PDT.
Step 4: If you have more LDT's than you can place in the first PDT, (assuming there is at least one LDT at 500 ms and you have more than 20 LDTs, or you have more than 40 LDT's, or what ever the mix of RPI and LDT count) You can configure a second PDT to the same IP address. This will create a warning when you download the EIOC port, but this is supported. To maximize the LDT capacity, you should consolidate the faster LDT's in the first PDT, and place slower LDT's in a second PDT.
Step 5: If you exceed the LDT count for your first 2 PDT's, you can configure a 3rd PDT to the same PLC. Again, based on your overall LDT Count, the RPI update rates need to allow for the number of LDT's required.
With this approach, you can have up to 2000 signals updating every 500 ms in a PDT with 20 LDT's all set to 500 ms. Note that if you have 10 LDT's at 500 ms RPI, and you cannot have more than 20 total LDT's to the PDT, even if the balance of the LDT's are set to 1 second or even slower. Exceeding the max allowed LDT will cause inconsistent updates on the LDT's that have the faster Update rate, creating significant jitter in their update rate. If the 500 ms RPI is important, keep the LDT count to the recommended max of 20. If it is not that important, then use a slower RPI and increase the number of LDT's.
If you have less than 2000 signals to exchange and can fit in 20 LDT's, all is good and carry on.
Given your configuration and data types and update rates, you may not maximize the LDT signals to 100, and that means more LDT's for the same signal count. That is fine and makes sense. But as you increase the LDT's you need more time in the scheduler. So it is a balance to keep in mind.
Each PDT creates a unique schedule with the EIOC. Creating a second PDT for a PLC means we can schedule more LDT's without interfering with the schedule of the first PDT. If you create a second PDT and the fastest RPI is 1000ms, this PDT can host 40 LDT's, or 4000 registers/signals. that gets us to 6000 signals from one PDT, with a third of them at 500 ms updates.
If that is still not enough, consider a third PDT set with LDT's at 2000 ms, or an additional 8000 signals. That is a total of 14,000 signals from one PLC.
How many PDT's can I configure on one PLC? Now that gets into some variables that carry into the PLC Ethernet Port. The golden rule is to use the fewest number of PDT's to meet your needs. If you want the EIOC to pull 32K signals all from one PLC, you'll have to schedule some as slow as 5 second RPI. You also have to consider the bandwidth of the PLC ethernet port, how is it configured and how many other connections is it supporting.
When it comes to the EIOC, each PDT forms an independent scheduler. The schedule is simple. It schedules all the defined LDT's in series with a delay between each LDT communication. Adding a second PDT gives you a second scheduler that is operating in parallel. Now we are asking for up to two LDT's within the same time frame. This increases the data capacity requirements of the PLC Ethernet card. The typical LDT response from the PLC is in the 2 to 3 ms range, but could be longer. The more PDT's we configure to the same PLC, the more outstanding request that can happen and the more likely you will see a rejected or timed out request from the PLC.
What we found was that adding a couple of PDT's improved overall data performance, (reduced latency). But adding too many resulted in intermittent Bad Status on LDT's. Just like you prescription drugs, a few pills a day is good, too many and you're in trouble.
What about that Complete Block vs Individual Writes. This impacts the Bidirectional LDT's, which will write the entire LDT when one register changes. Rule number one. No continuous Writes to signals in a bidirection LDT. There is a KBA that indicates you should use an RPI that twice as fast as the DeltaV Module. This allows a write to be processed in one scan, a read back to occur on the LDT's next scan, so that the LDT updates in between the writes. Since you have to also consider the PLC logic and other timing issues, continuous writes to a bidirectional LDT will cause data overwrites that could be always, but worst could be intermittent. We ended up finding this during FAT with customer. We implemented a data confirmation loop since our situation had several possible sources for parameter changes, including internal sequences in the PLC. The sequence did a one time write to a control parameter and if DeltaV Overwrote this, the sequence would fail. Since the block write is triggered by any signal change, the Operator can be changing the SP on one loop and cause an overwrite of data on a different loop.
Our solution was to monitor the change source. If the PLC value was changed by a different source than the UCMM source, we write the new value to the UCMM register and ignore any change to this UCMM register until we confirm the PLC value was seen by DetlaV. This requires that in the DeltaV Module, we Write back the value we see in the PLC via a second UCMM register. When the PLC sees the confirmation value is the same as the PLC value and the UCMM value, we know that the value has been successfully processed and any block write from DeltaV will send the same value. For the SP value, it is only available to the Operator when in AUTO mode. THis confirmation feature is only enabled when in Auto. IN MAN, the SP tracks the PV and so is continually changing in the PLC. We write these to DeltaV UCMM register and reflect this to the HMI, but in DeltaV we do not write to the confirm value. Similarly for the OUT value. In AUTO mode, it is driven by the PID and constantly changing. We send it to DeltaV but DeltaV does not update the confirmation value.
For Alarm limits, Tuning values and such, these are not dependent on PID mode and can be changed at any time. Though infrequently changed, if changed in the PLC via local HMI or configuration tool, DeltaV must be updated and if a block write occurs at the same time, we don't want them overwritten or lost. So we use the Confirm method above, which is always active.
For our case the customer stated that the PLC is the master of all its data and in no way or at no time should the EIOC overwrite any data that is changed from the PLC side. That was our solution. If individual writes were available, conflict would only arise with a simultaneous change to a single parameter. That is no different than two DeltaV consoles trying to change the same DeltaV Module parameter. Last one to write wins. Block writes make it that any write to any signals overwrites all signals. So care is required to secure the data.
In v14, we now have the Control Tag Integration protocol which is a variant to Ethernet IP, supporting Logix tags and the User defined tjags in the PLC by name. I have not had a chance to explore this protocol yet. It does leave you with a higher DST license cost, but is intended to eliminate UCMM array mapping and data movement within the PLC. It has great potential.
Sounds like you created a file in the PLC and mapped this to a UCMM tag, and mapped the UCMM tag to an EIOC PDT/LDT. The LDT polls the UCMM tag.
Did you configure the LDT as OUTPUT and wondering why your seeing PLC data in the DeltaV signals? I think that's because I misspoke. In the UCMM tag configuration has options to set as Input, output. I'm looking at the LDT configuration and for UCMM with Logix Tags, and there is option for no Output with Readback. So it actually Output means Output with readback. (I was told this was configurable like the Modbus TCP but did not check this detail. my bad.)
So you should always expect the LDT to show you the current value in the UCMM tag, regardless of whether it is Input or Output.
The concept of an Output only LDT is one where you never read it, and so don't care about the read back.
Because you've mapped to a file, you have to write logic to pull and push data from the file. We did not use files since the UCMM array can be manipulated directly from the PLC code. If this is a migration and the data exchange was created using the PLC N and I files, it is likely better for you to map the files to UCMM and avoid changing code in the PLC. you can also use the Class 3 explicit PCCC messaging that allows yo to map directly to the files, as shown in picture below:
Notice that the Class 3 method allows you to set the starting address of the LDT. The UCMM method does not. UCMM forces the LDT to read from the first register in the UCMM Logix Tag array. If the PLC File has more than 100 registers, you have to map them to separate UCMM arrays so the data is addressable from the first register. If you mapped 500 registers into one Array tag, the EIOC cannot read the ones over 100 with UCMM. The Class 3 explicit does allow yo to reference the higher register indexes.
Also not that with UCMM, if you created an array with 100 values, but decided you wanted to use multiple LDT's to read the data for reasons of mapping to different modules or updating at different rates, you cannot. All LDt's start at 0. the Class 3 explicit would allow this.
The UCMM Logix Tag have one advantage. They can be added and changed without stopping the PLC. The files have to be added offline. I like the UCMM for this reason. If the mapping is already fixed and done to the Files, it's your choice and Class 3 explicit does give you some added flexibility in the starting address. But if you are adding UCMM tags to the file, you can map any range of file registers to the first group of registers in the UCMM tag and that lets the LDT link to any range of registers in the PLC File. So the UCMM file can give context to the PLC registers in the PLC, and then you map that context to an LDT for use in DeltaV.
With an Output LDT, you should be able to see values from the PLC. Map an LDT signal to a DeltaV output parameter via external reference. You will see the value from the PLC here and if you write it, the value will appear in the PLC. Works great. with manual writes you will not see an issue. Now create a second module and add a signal generator and wire this to a different Output parameter mapped to the same LDT. Now you have a continuous write occurring from this module. If the LDT is set to an RPI that is 1/2 that of the module scan time, you can test the effect of Block Writes. Since the signal generator writes every scan of the module, the LDT updates in between module writes. If you now change a value in the PLC using the PLC configuration online tool, you may or may not see the value appear in DeltaV. It will depend on whether you set the value before a write execution of the module or a read by the LDT. If you set the LDT RPI to the same value as the module execution time, I expect you will no longer be able to see any change to the PLC data because the DeltaV Module is continuously writing the data in the LDT to the PLC prior to doing read.
When you have no continuous write to the LDT, you'll find it hard to lose a write from the PLC due to a manual write from DeltaV. it is still possible, but highly unlikely. If the PLC data changes are continuous, they will get through on the next scan, such as the OUT value of the PID in AUTO mode. The data transfer from the File register likely fails and subsequent write to the File register updates DeltaV. The value written would be the last value sent prior to the DeltaV write, so likely the worst the happens is the OUT value holds for one scan if at all affected. One off changes like a Tuning value or a change in SP from a PLC Sequence, these can be lost if a write occurs to any register in the LDT.
If the PLC will be controlled solely from DeltaV and all tuning values and control parameter changes will come from DeltaV, the Complete Block write behavior on outputs will likely not cause any issue since values will not change in the PLC except when they are under PLC control. That is, when in AUTO mode, the OUT value is reported to DeltaV and the Operator cannot change this value unless he places the PLC in MAN. While in AUTO mode, any write to OUT as the result of the block write is ignored by the PLC and OUT is immediately restored to the PID OUT value. (note. If writing to OUT while the PID is in AUTO causes unexpected disruption of signal to the field, this is something of concern, but the block write behavior is more one of a hesitation in the signal, where on a single scan, the PLC UCMM register is written to by DeltaV and receives the previous OUT value, and the worst that happens is the OUT value goes back to this value and then continues. ) Keep in mind that DeltaV is updated all the time, so a BLock Write typically involves one new value and all other values get the last value they sent.
Keep all continuous writes in Output only LDT's. SCADA control of the PLC from DeltaV HMI should be based on manual data change. Cascade control from DeltaV to a PLC is not SCADA and you should separate such control from the SCADA functions that integrate the PLC to DeltaV HMI.
Good luck.
In reply to azhang:
In reply to Kent: