Avengers Assemble!...
Ken,
I think they're referring to the raw I/O data arrays created under the module-defined data types for input and output data where we see only "
module_name:I1.Data[0], etc. for the member names and no descriptions? If so, and as I'm sure you are aware, this is typical for EDS based AOPs. The minimum requirements for an EDS AOP are stipulated by Rockwell and it will not meet the grade if you have not met their targets. But adding actual parameter names for the I/O data type members, or indeed descriptions, is not stipulated and so quite often is not included.
einnh said:
...I can add it to my Studio 5000 build, however the parameters aren't mapping with descriptions. Is there a way to reverse build the descriptions from the EDS file? It is almost 9000 lines long but would be worth the effort if it is possible...
Yes, manually, as you have suggested yourself.
Typically for these EDS AOP files, the device parameters, which are intended to be used for the I/O connection under the module properties, will be grouped into an "Assembly" Object. Depending on whether one or more Assembly Objects are created, there may be more than one Input Assembly available for input data, as is the case here. And there may optionally be an Output Assembly for output data, which there happens to be here.
If we take the default "Control and Status" I/O connection that you see in the module properties. There are 56 bytes of data presented to the software/controller, again whether we choose to display it using SINT, INT, DINT or REAL data type. Optionally, for the input data, there is also another input only connection available - "Status Only for Managed ethernet switch" (Tie me down, they've spelled "Ethernet" with a lowercase "e" and I cannot change it!). This connection presents us with 18 bytes of input only data.
Within the EDS file, we can search for these I/O Assembly Object definitions. To speed this up you can use search terms like "Assembly", or "Assem", but I use a specific method which usually hits the target straight away. Each Assembly lists its "Length in bytes".
So if we use this search term, starting from the top of the text in the EDS file and searching "Down",
we will usually land on the first Assembly Object...
Code:
[Assembly]
Revision = 1;
Object_Name = "Assembly Object";
Object_Class_Code = 0x04;
Assem1 =
"[B]Input Data for managed switch[/B]",
"20 04 24 01 30 03", $ Path
[B]18, $ Length in bytes[/B]
0x0000, $ descriptor
,, $ reserved
16,Param32004,
32,Param32200,
32,Param32201,
32,Param32202,
32,Param32203;
Here we can see the name of the Assembly is "Input Data for managed switch",
which does not match exactly with either of the two connection names we see available under the module properties.
But, also we can see the Length in bytes is "18",
which we know is the number of bytes listed for the "Status Only for Managed ethernet switch" connection - so that's a hit!
As the Assemblies are all defined under this section in the EDS file,
we can quickly see that the other Assembly Objects we are interested in are just beneath the first...
Code:
Assem191 =
"[B]Input Data[/B]",
"20 04 24 65 30 03", $ Path
[B]56, $ Length in bytes[/B]
0x0000, $ descriptor
,, $ reserved
,Param31013,
,Param101,
,Param102,
,Param103,
8,Param104,
8,Param1100,
8,Param2100, $
8,Param3100, $
8,Param4100, $
8,Param5100, $
8,Param6100, $
8,Param7100, $
8,Param8100, $
8,Param9100,
8,Param10100,
8,Param11100,
8,Param12100,
8,Param40000,
8,Param40000,
8,Param40000,
8,Param40000,
8,Param40000,
8,Param40000,
8,Param40000,
8,Param40000, $
8,Param40000,
8,Param40000,
8,Param40000,
8,Param40000,
8,Param40000,
8,Param40000,
8,Param27100,
8,Param40000,
8,Param40000,
8,Param40000,
8,Param40000,
,Param31002,
,Param31010;
Here we see the name "Input Data", which is relevant but not exactly matching again.
But more importantly, the Length in bytes is "56",
which we know is the number of bytes of input data presented for the connection "Control and Status" - so that's another hit!
Next we see...
Code:
Assem192 =
"[B]Output Data[/B]",
"20 04 24 66 30 03", $ Path
[B]4, $ Length in bytes[/B]
0x0000, $ descriptor
,, $ reserved
,Param105;
Again we see the name "Output Data" which is relevant but not an exact match, but also the Length in bytes is "4",
which we know is the number of bytes of output data presented for the connection "Control and Status" - so that's another hit and our last!
Now that we have the Assembly Objects for the I/O data presented under the module properties,
we can also see which parameters within the EDS file are being grouped into these Assemblies...
If we look above at Assembly 191 (Assem191),
which is the Input Assembly for the 56 bytes of input data,
we can count 21 different parameters listed.
The data for each of these particular parameters is populated in a certain pattern within the 56 bytes of data.
To decide how, we must find each of these parameters in the EDS file under the [Params] section,
and see what Data size in bytes and which data types they use...
Example: Param101
Code:
Param101 =
0, $ reserved, shall equal 0
6,"20 F6 24 00 30 65", $ Link Path Size, Link Path
0x0010, $ Descriptor: read only
[B] 0xD3, $ Data Type : DWORD
4, $ Data Size in bytes[/B]
"[B]Global Link Status[/B]", $ name
"", $ units
"[B]on = active, off = not active[/B]", $ [B]help string[/B]
0x00000000,0x1000,0, $ min, max, default data values
,,,, $ mult, div, base, offset scaling
,,,, $ mult, div, base, offset links
; $ decimal places
Enum101 =
0,"Link Active any port",
1,"Link Active on port Gi1/1",
2,"Link Active on port Gi1/2",
3,"Link Active on port Gi1/3",
4,"Link Active on port Gi1/4",
5,"Link Active on port Gi1/5",
6,"Link Active on port Gi1/6",
7,"Link Active on port Gi1/7",
8,"Link Active on port Gi1/8",
9,"Link Active on port Gi1/9",
10,"Link Active on port Gi1/10",
11,"Link Active on port Gi1/11",
12,"Link Active on port Gi1/12";
Right, here we can see that the name of the parameter is "Global Link Status". Its data type is "0xD3 DWORD".
As a Double Word, it uses 4 bytes and represents 32 individual bits of data.
The 4 bytes is confirmed on the next line. We can also see the help string "on = active, off = not active".
This can be used to decipher what the status of the value of each of the 32 bits means.
The "Enum101" section is the Enumeration of the bits that are used with the 32 bit data type (only bits 0 - 12 are used).
This also gives us the descriptions for each of these bits that will be members of the input data.
You can describe your input data array member with the name above,
and could also append the help string to further describe the status of the data values.
Then use the "Enum" descriptions to describe the individual bits for the input data in the Controller Tags...
Live, Die, Repeat...
It wouldn't take you "too long" to go through them all if you think it worth it?
EDIT: In my haste to show you an example I had forgotten the example I chose was not the first parameter under "Assem191". The first is "Param31013", which is a "Fault Member" DWORD. This should be described as ...data[0] and not "Param101", as I have shown in my screenshot. You would put "Param101" at the next DINT address - ...data[1].
Sorry about that!
Regards,
George