You are not registered yet. Please click here to register!


 
 
plc storereviewsdownloads
This board is for PLC Related Q&A ONLY. Please DON'T use it for advertising, etc.
 
Try our online PLC Simulator- FREE.  Click here now to try it.

New Here? Please read this important info!!!


Go Back   PLCS.net - Interactive Q & A > PLCS.net - Interactive Q & A > LIVE PLC Questions And Answers

Reply
 
Thread Tools Display Modes
Old July 8th, 2021, 06:43 PM   #1
JeremyM
Lifetime Supporting Member
United States

JeremyM is offline
 
Join Date: May 2014
Location: Dallas, Texas
Posts: 592
Crawling Logix I/O Trees?

Hi all,

I've come up with a reasonable enough way to parse the identities of the local modules on a 5380 CompactLogix.

Is there a way to do this for children in the I/O tree of either of the EtherNet ports? Could there be a handy CIP object on the processor that indicates the number of nodes present and their paths?

Thanks!
Attached Images
File Type: png Tree.PNG (12.3 KB, 320 views)
  Reply With Quote
Old July 15th, 2021, 08:11 PM   #2
JeremyM
Lifetime Supporting Member
United States

JeremyM is offline
 
Join Date: May 2014
Location: Dallas, Texas
Posts: 592
I'm hitting a wall on this one.

I know module instance numbers can be retrieved by GSV, but can they be used in a reverse lookup fashion against a CIP class for instances of it?
  Reply With Quote
Old July 16th, 2021, 05:35 AM   #3
5618
Lifetime Supporting Member
United States

5618 is offline
 
5618's Avatar
 
Join Date: Oct 2017
Location: York, PA
Posts: 181
I'm not entirely sure what you're trying to do, but here's two things that come to mind that might help you figure it out:

In RSLinx, RSWho, you can drill down through the backplane and back out another Ethernet module. Expand as far as it goes, right-click and configure. Normally you would only enable whatever you want to interact with, but to look for anything, add all addresses to the expected list. Wireshark if you want to see the traffic.

Check out the Stratix AOI & faceplate for Factorytalk View. It's been a while, but I think that AOI does some of what it sounds like you might want.

Edit: There's also an EIP AOI and faceplate that might include functions you want. Probably better than the Stratix one.

Last edited by 5618; July 16th, 2021 at 05:44 AM. Reason: EIP AOI too
  Reply With Quote
Old July 16th, 2021, 06:44 PM   #4
PreLC
Member
United States

PreLC is offline
 
PreLC's Avatar
 
Join Date: Apr 2019
Location: Mars
Posts: 381
Not sure if this is what you want, but Rockwell has a service called the system ferret tool(Free but erased from AB's downloads), or more recently the AssetInventory addon in Assetcentre. They can crawl your CIP network and create a list.
__________________
Ask not what your PLC can do for you, ask what you can do for your PLC.
  Reply With Quote
Old July 16th, 2021, 08:14 PM   #5
JeremyM
Lifetime Supporting Member
United States

JeremyM is offline
 
Join Date: May 2014
Location: Dallas, Texas
Posts: 592
What I'm *attempting* to achieve is making an onboard discovery tool that runs on a Logix processor and populates some pre-allocated arrays with "objects" that enumerate the resources attached to the system, locally or remotely (the total I/O tree).

For example, kickstarting a DEVICEWHO message with the "THIS" or "Local" keywords in the path and incrementing that path by 1 and re-sending upon completion results in an array being populated with the identities of each local module present.

What I'm scouring for is either a) such a 'keyword' for the base address of each of any network tree with offsets being instance numbers of the child nodes or b) some CIP object on the system that tracks the modules and parent/child relationships outright.

***

I just found a copy of Ferret and it reports the devices locally but stops short of probing what the A1 and A2 interfaces "own" on my 5380 CompactLogix.

Last edited by JeremyM; July 16th, 2021 at 08:21 PM.
  Reply With Quote
Old July 16th, 2021, 09:00 PM   #6
PreLC
Member
United States

PreLC is offline
 
PreLC's Avatar
 
Join Date: Apr 2019
Location: Mars
Posts: 381
Quote:
Originally Posted by JeremyM View Post
What I'm *attempting* to achieve is making an onboard discovery tool that runs on a Logix processor and populates some pre-allocated arrays with "objects" that enumerate the resources attached to the system, locally or remotely (the total I/O tree).

For example, kickstarting a DEVICEWHO message with the "THIS" or "Local" keywords in the path and incrementing that path by 1 and re-sending upon completion results in an array being populated with the identities of each local module present.

What I'm scouring for is either a) such a 'keyword' for the base address of each of any network tree with offsets being instance numbers of the child nodes or b) some CIP object on the system that tracks the modules and parent/child relationships outright.

***

I just found a copy of Ferret and it reports the devices locally but stops short of probing what the A1 and A2 interfaces "own" on my 5380 CompactLogix.
I remember being able to set up a depth in system ferret, or am I imagining stuff from AssetCentre only?
__________________
Ask not what your PLC can do for you, ask what you can do for your PLC.
  Reply With Quote
Old July 16th, 2021, 09:40 PM   #7
Phrog30
Member
United States

Phrog30 is offline
 
Join Date: Dec 2006
Location: Montgomery, Alabama
Posts: 905
Why onboard the processor? This seems better served outside of the PLC.
  Reply With Quote
Old July 18th, 2021, 05:25 PM   #8
JeremyM
Lifetime Supporting Member
United States

JeremyM is offline
 
Join Date: May 2014
Location: Dallas, Texas
Posts: 592
Quote:
Originally Posted by Phrog30 View Post
Why onboard the processor? This seems better served outside of the PLC.
It’s self-contained and would provide the necessary tag access for outside polling without the need to know anything else about the device its hardware. Otherwise, the same problem remains for external polling: figuring out just how to enumerate the resources in the first place.
  Reply With Quote
Old July 20th, 2021, 05:08 PM   #9
JeremyM
Lifetime Supporting Member
United States

JeremyM is offline
 
Join Date: May 2014
Location: Dallas, Texas
Posts: 592
Pointer Getting warmer!

Would anyone be willing to shed some light on which CIP objects implement what I'm seeing in the screenshot? It would solve my problem 100% knowing where and how to look for this programmatically.

I suspect they are derived directly, or by some combination of, instances and attributes found within these objects:
  • Connection Object 0x05
  • Connection Manager 0x06
  • Originator Connection List Class 0x45
  • Connection Configuration Object 0xF3
  • Port Object 0xF4
Attached Images
File Type: png Connections.PNG (121.9 KB, 195 views)
  Reply With Quote
Old July 22nd, 2021, 12:12 PM   #10
JeremyM
Lifetime Supporting Member
United States

JeremyM is offline
 
Join Date: May 2014
Location: Dallas, Texas
Posts: 592
Fully deciphered the available Port Object instance attributes on a CompactLogix and finished a working AOI that probes the CPU by default, but can also be pointed at communication cards in an I/O rack.

In a clean UDT instance there's the Port Type, Number, Link Object Path* (this one's really curious), Port Name, and Node Address (CIP path).

*The Link Object Path makes available the relationship between EtherNet/IP-enabled CIP ports and their corresponding TCP/IP Interface objects (0xF5), so some of the next steps would be to a) construct a generic 'Node' type (some minimal subset of Port Object and TCPIP Object attributes) that acts as the root of b) a constructed tree hierarchy with slots that can be populated with 'child' TCPIP Objects.

On a similar path, a Local Hardware (backplane) tree/bus can be established that maintains relationships between a) the CPU and its owned hardware and b) EtherNet/IP cards, their ports, and finally the tree of children they own.
  Reply With Quote
Old July 22nd, 2021, 08:05 PM   #11
ASF
Lifetime Supporting Member
Australia

ASF is offline
 
Join Date: Jun 2012
Location: Australia
Posts: 3,395
I'm impressed, but still somewhat confused as to why...

Now that you have an array of tags with some info about devices your PLC can communicate with, how are you using that information? I'm assuming, given the amount of effort that you've put in, that there's a better reason than "to see if it could be done" or "because it looks really cool"?

Just curious.
  Reply With Quote
Old July 23rd, 2021, 09:25 AM   #12
JeremyM
Lifetime Supporting Member
United States

JeremyM is offline
 
Join Date: May 2014
Location: Dallas, Texas
Posts: 592
One goal is that the front-end effort here will reduce the manual labor required for individual GSV/module statuses and the effort to produce diagnostics across varying types of control devices. I can auto-populate a generalized "EtherNet" tree (realized as simple contiguous arrays) per node (5069 or 1756-EN2T EtherNet port, or otherwise) and dynamically list the modules attached to the system on an HMI. If you add another 525 for example, the array and its member count increases by one, an HMI visibility control shows a new item, and so on.

No need to recompile the HMI or remember to attach status AOIs to new node modules.

Another perk is that one can use the EPATH provided at the port level + module IP to dynamically probe the list of modules for their Identity, TCPIPInterface, and EtherNetLink objects.

One annoyance I run into all the time is figuring out (and remembering!) that Rockwell picks and chooses which CIP services are implemented for like objects on different devices. For example, TCPIPInterface (0xF5) responds to Get_Attribute_All on a CompactLogix, but only responds to Get_Attribute_Single on a PowerFlex 525. With that in mind, I can simply have a pair of global messages (GetAttrAll & GetAttrSingle) crawl my list of modules continuously without a concern in the world for what device implements what service. If one message fails, no big deal, just move on and let the other have a try. Then you have Moxa, who seems to hate Get_Attribute_All; no problem, just give GetAttrSingle the path!

Last edited by JeremyM; July 23rd, 2021 at 09:58 AM.
  Reply With Quote
Old July 23rd, 2021, 09:39 AM   #13
JeremyM
Lifetime Supporting Member
United States

JeremyM is offline
 
Join Date: May 2014
Location: Dallas, Texas
Posts: 592
In my continuing journey down this rabbit hole, the Symbol Class (0x6B) might be useful.

I found one of my VFD objects described across a few contiguous instances of the class. Each instance embeds among other unknown attributes the name of the object as found in the I/O tree and controller tags. It seemingly enumerates the distinction between standard and safety tag here as well:
  • 7: "Map:E2_VFD1005"
  • 8: "E2_VFD1005:I"
  • 9: "Cxn:Standard:db00a0b2"
  • 10: "E2_VFD1005:O"
  • 11: "E2_VFD1005:C"

The "db00a0b2" reads like an instance ID, but it doesn't match up with the returned Module Instance of a GSV.

Instance 1 and 3 have embedded symbols "Map:Local" and "__CONTAINER", respectively. Not sure what those represent, but that's probably okay.

Last edited by JeremyM; July 23rd, 2021 at 10:04 AM.
  Reply With Quote
Old July 23rd, 2021, 04:32 PM   #14
JeremyM
Lifetime Supporting Member
United States

JeremyM is offline
 
Join Date: May 2014
Location: Dallas, Texas
Posts: 592
Anything prefixed with "Map:" is interesting - they're the keywords you can use for setting up a message path more quickly by hand.
  Reply With Quote
Old July 25th, 2021, 06:40 PM   #15
ASF
Lifetime Supporting Member
Australia

ASF is offline
 
Join Date: Jun 2012
Location: Australia
Posts: 3,395
Ah, OK. So you could add a new VSD to your machine, and it would show up with the relevant icon and diagnostic information on you HMI, without any edits to the HMI. That's neat!
  Reply With Quote
Reply
Jump to Live PLC Question and Answer Forum

Bookmarks


Currently Active Users Viewing This Thread: 1 (0 members and 1 guests)
 
Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump

Similar Topics
Thread Thread Starter Forum Replies Last Post
Adding Control Logix I/O rack stylemismatch LIVE PLC Questions And Answers 4 October 20th, 2015 11:35 AM
hi frz, how to configure pointguard I/O rs232 acsii module in compact LOGIX L43S shebindas LIVE PLC Questions And Answers 3 September 23rd, 2014 08:59 AM
compact logix not communicating with I/O srv LIVE PLC Questions And Answers 6 July 29th, 2011 05:45 PM
Passing I/O in Logix MavEric LIVE PLC Questions And Answers 6 March 31st, 2008 01:37 PM
Compact Logix I/O problem cchambers LIVE PLC Questions And Answers 4 November 20th, 2006 06:28 PM


All times are GMT -4. The time now is 01:34 AM.


.