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?
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.
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)
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!
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.
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.