unreadable tags
Hi i am approaching this library to have an idea on how to read tags, In my case i have a L73 processor (clx) in a rack and i would like to read a tag from it.
The plc module is in a rack with other modules in it, (some i/o cards, a EN2T module). The ip address i can reach is the one of the ethernet module. My quesitons are:
1)how i connect directly to the CLX i need? can't i specify rack/port of the backplane?
- (if 1 goes well)if i have a tag XYZ, can i just put "XYZ" as tagname or i need to specify "ProjectName.TagName" when asking for it?
thanks
Yes, you can indeed specify the backplane slot to perform I/O operations on.
The default 'route_path' is [{"port": 1, "link": 0}]. This indicates the Backplane ("port": 1), slot 0 ("link": 0). You can specify any other slot X ("link": X), or even multi-hop 'route_path', by putting multiple entries in the route_path list.
I am working on a fairly major update to Cpppo, to provide 3.7 compatiblity (ie. due to the new 'await' keyword), and to provide better support for arbitrary route_path in requests. You can access this new version (presently 4.0.1) using pip/pip2/pip3:
pip install --upgrade git+https://github.com/pjkundert/cpppo.git@feature-multipath
To simulate something like a backplane with a CPU in slot 3, with a tag something like "This.SCADA" which is an array of 100 DINTs:
python -m cpppo.server.enip --route-path=1/3 -v 'This.SCADA=DINT[100]'
Then to read this, in another terminal on the same host, run:
python -m cpppo.server.enip.client -v --route-path=1/3 'This.SCADA[0-99]'
This actually simulates a Logix Read Tag request, with multiple symbolic name entries in its request path:
"enip.CIP.send_data.CPF.item[1].unconnected_send.request.path.segment[0].symbolic": "This",
"enip.CIP.send_data.CPF.item[1].unconnected_send.request.path.segment[1].symbolic": "SCADA",
"enip.CIP.send_data.CPF.item[1].unconnected_send.request.path.segment[2].element": 0,
Note that this is pretty much all possible right now, in the stock 3.9.7 version of Cpppo, but the route_path components must be specified in JSON, eg: '[{"port": 1, "link": 3}]', eg.:
python -m cpppo.server.enip --route-path='[{"link": 1, "port": 3 }]' -vv 'This.SCADA=DINT[100]'
Thanks for this, the path selection works fine! Say now that i would like to pull data every x ms and put it int my DB. Should i make a loop in python or do we have already such libraries to pull that out?
Take a look at: https://github.com/pjkundert/cpppo/blob/master/server/enip/poll_example_many.py
If you replace the import of powerflex_750_series with:
from cpppo.server.enip.get_attribute import proxy
and use and instance of that as the via, you should be able to provide tag names in the targets dict.
Great! Next question that comes naturally is: is there any way to get all the tags at once from a PLC?