Allen Bradley PowerMonitor 5000

Hi All,

We recently setup an Allen Bradley PowerMonitor 5000 and I'm trying to link it to Ignition over E-IP. We have successfully setup the meter and can communicate via the web based interface included with the meter. I was able to get the device "connected" in the configuration screen using the Allen Bradley Logix Driver. However, when I try to look for tags in the OPC browser, nothing shows up when I try to expand the tab for the meter.

Here's an excerpt from the manual:

All PowerMonitor 5000 units are equipped with a native EtherNet/IP 100 BaseT
communication port. This section describes EtherNet/IP communication and
the available protocols to use for your application.
The Ethernet communication port allows communication with your power
monitor by using a local-area-network (LAN). The Ethernet port can be used to
view the unit’s internal webpage.
The PowerMonitor 5000 unit communicates through Ethernet or EtherNet/IP
drivers in RSLinx® Classic software, and through explicit messages from Rockwell
Automation controllers communicating via an EtherNet/IP network.

Does anybody have any idea what advanced settings I would need to change in Ignition or if this will even work at all?

thanks for any help!

Unless it emulates a Logix PLC very closely the Logix driver isn’t going to work. I’ll see if I can find some documentation about what kind of data it exposes over EtherNet/IP and how it does so… but I wouldn’t hold your breath.

Yeah… in theory the data is there and easy to access, but it would require a driver built for these things. Sorry.

You can probably get the data via RSLinx OPC server.

Thought I remembered seeing this. :slight_smile:

Just starting on doing a similar thing with the PM3000, but I’m going to scrape from the web pages.

Had a great start, but accidentally shut down the project before saving it. So much save first, save often. :laughing:

I’ll post back here in a bit.

Here is what I came up with. Don't have any 5000s in house to compare to, so I can't say for sure how much will apply.

This will create or update tags as needed.
EDIT: reformat for forum

def scrape():
  from StringIO import StringIO
  # Set SQLTag Provider and base folder. In this instance all subfolders and tage will
  # be in [defailt]PowerMonitor
  tagProvider='[default]'
  baseFolder = 'PowerMonitor'
  # Friendly location names for each PowerMonitor
  locationList = ['East Mains','Buss A', 'Compressor Room']
  # IP addresses for each PowerMonitor. Must have the same number of hosts as locations.
  hostList = ['192.168.140.31', '192.168.140.32', '192.168.140.33']
  # list of web pages in the PowerMonitor (example: http:192.168.140.31/15)
  pageList=['15', '17', '18', '19']
  
  # Create Folder structure, if needed
  if not system.tag.exists(tagProvider+baseFolder):
    system.tag.addTag(parentPath=tagProvider, name=baseFolder,tagType='Folder')  
  for location in locationList:
    if not system.tag.exists(tagProvider+baseFolder + '/' + location):
      system.tag.addTag(parentPath=tagProvider+baseFolder, name=location, tagType="Folder")
      
  # Initialize lists for tag writes.
  tagList=[]
  valueList=[]
  
  # Scrape web pages
  for host in hostList:
    folder=baseFolder + '/' + locationList[hostList.index(host)]
    for page in pageList:
      url='http://' + host + '/' + page
      # Attempt to grab web page.
      try:
        dataIn=StringIO(system.net.httpGet(url))
        for line in dataIn.readlines():
          if line[:8] == '<TR><TD>' and line.find('<EM>')>-1:
            vStart = line.find('<EM>')+4
            vEnd = line.find('</EM>')
            tagName = line[8:line.find('</TD>')].replace(',','')
            tagValue = float(line[vStart:vEnd])
            # Create tag if it doesn't exist, otherwise add to write list.
            if not system.tag.exists(folder + '/' + tagName):
              system.tag.addTag(parentPath=tagProvider+folder, name=tagName, tagType="MEMORY", dataType="Float4", value=tagValue)
            else:
              tagList.append(folder + '/' + tagName)
              valueList.append(tagValue)
      # If it can't grab the web page, ignore it and move on.        
      except:
        pass
  # Check to see if any tags need writing.      
  if len(tagList)>0:
    system.tag.writeAll(tagList, valueList)

You can Talk to it directly with Modbus TCP. Look page # 121 https://literature.rockwellautomation.com/idc/groups/literature/documents/um/1408-um002_-en-p.pdf

Configure the power monitor as an SLC device and you can read data as registers. IE: The tag Status.General/Bullitin_Number would be N32:0 (N32 being the PCCC File Number for Status.General, listed in the manual). Status.General/Device_Class would be N32:1, etc.

So far it has worked for me, I don't know if there end up being any issues with other tags, but I guess I'll find out!

This device family is now supported by the latest beta release of my EtherNet/IP V2 driver, via CIP generic messaging:

I know this is an old thread, but wondering if theres any way to do this besides using the above module from Automation Professionals? No offense to them, but just want to make sure I'm presenting the proper info moving forward on this.

This thread seems to be offering you three other options:

  • use RSLinx
  • use the SLC driver
  • use the Modbus driver
1 Like

Hmmm. I guess I was misunderstanding my reading then. My bad on that one.

This thread suggests that if you go the SLC route you may have to address the tags manually; browsing doesn't work.

1 Like

Yeah, I'd rather not address them manually as we are getting a bunch of them. Hopefully the RSlinx or Modbus solution is viable.

Modbus will definitely require manual addressing. There is no concept of browsing in the Modbus protocol. It probably also requires a tedious manual mapping of PM5000 variable/address to Modbus address - I don't know.

edit: well, if it's like the PM1000, there's an appendix that lay out the data tables. So still manually addressed in Ignition, but no mapping to do on the PM side.

1 Like

It definitely sounds like its gonna be easier said than done on this.