Comments (8)
To see what error codes the Omron is returning from the get_attribute request, add some "-v" options to the command.
As for the --route-path: it appears that (for some reason) the JSON specification for the route path you are supplying is not being parsed correctly, by the Python 'json' module. It could be due to invalid characters (non-ASCII quote symbols, for example). Windows is notorious for this, unfortunately, and getting quoting right on the command line is extremely difficult. Is it possible to try it from a Linux host, or on a Mac?
from cpppo.
Thanks for your answer.
I'm french so mayby quote is not same ASCII code. But I can't try with Linux or Mac.
That's the result with -vv
python -m cpppo.server.enip.get_attribute -a 192.168.0.7 -vv "@0xC4/0x10/3"
06-20 15:54:34.400 MainThread enip.cli DETAIL __init__ Connect: TCP/IP to ('192.168.0.7', 44818)
06-20 15:54:34.478 MainThread enip.cli DETAIL cip_send Client CIP Send: {
"enip.session_handle": 0,
"enip.options": 0,
"enip.status": 0,
"enip.sender_context.input": "bytearray(b'\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00')",
"enip.CIP.register.options": 0,
"enip.CIP.register.protocol_version": 1
}
06-20 15:54:34.494 MainThread enip.cli NORMAL __init__ Connect: Success in 0.093s/ 5.000s
06-20 15:54:34.494 MainThread enip.cli DETAIL parse_oper Tag: '@0xC4/0x10/3' yields Operation: {'path': [{'class': 196}, {'instance': 16}, {'attribute': 3}]}.update({'route_path': None, 'send_path': None})
06-20 15:54:34.494 MainThread enip.cli DETAIL cip_send Client CIP Send: {
"enip.session_handle": 132096,
"enip.options": 0,
"enip.status": 0,
"enip.sender_context.input": "bytearray(b'0\\x00\\x00\\x00\\x00\\x00\\x00\\x00')",
"enip.CIP.send_data.interface": 0,
"enip.CIP.send_data.timeout": 0,
"enip.CIP.send_data.CPF.item[0].type_id": 0,
"enip.CIP.send_data.CPF.item[1].type_id": 178,
"enip.CIP.send_data.CPF.item[1].unconnected_send.service": 82,
"enip.CIP.send_data.CPF.item[1].unconnected_send.status": 0,
"enip.CIP.send_data.CPF.item[1].unconnected_send.priority": 5,
"enip.CIP.send_data.CPF.item[1].unconnected_send.timeout_ticks": 157,
"enip.CIP.send_data.CPF.item[1].unconnected_send.path.segment[0].class": 6,
"enip.CIP.send_data.CPF.item[1].unconnected_send.path.segment[1].instance":1,
"enip.CIP.send_data.CPF.item[1].unconnected_send.route_path.segment[0].link": 0,
"enip.CIP.send_data.CPF.item[1].unconnected_send.route_path.segment[0].port": 1,
"enip.CIP.send_data.CPF.item[1].unconnected_send.request.path.segment[0].class": 196,
"enip.CIP.send_data.CPF.item[1].unconnected_send.request.path.segment[1].instance": 16,
"enip.CIP.send_data.CPF.item[1].unconnected_send.request.path.segment[2].attribute": 3,
"enip.CIP.send_data.CPF.item[1].unconnected_send.request.get_attribute_single": true,
"enip.CIP.send_data.CPF.item[1].unconnected_send.request.service": 14,
"enip.CIP.send_data.CPF.item[1].unconnected_send.request.input": "bytearray(b'\\x0e\\x03 \\xc4$\\x100\\x03')"
}
06-20 15:54:34.494 MainThread enip.cli DETAIL format_pat Formatted
@0x00C4/16/3 from: [{'class': 196}, {'instance': 16}, {'attribute': 3}]
06-20 15:54:34.494 MainThread enip.cli DETAIL issue Sent 0.003/ 5.000s
: Single G_A_S @0x00C4/16/3 {
"path.segment[0].class": 196,
"path.segment[1].instance": 16,
"path.segment[2].attribute": 3,
"get_attribute_single": true,
"service": 14,
"input": "bytearray(b'\\x0e\\x03 \\xc4$\\x100\\x03')"
}
06-20 15:54:34.525 MainThread enip.cli DETAIL issue Sending 1 (Context b'0')
06-20 15:54:34.525 MainThread enip.cli DETAIL pipeline Issuing 0/ 1; curr: 0 - last: -1 == 1 depth
06-20 15:54:34.541 MainThread enip.cli DETAIL collect Rcvd 0.006/ 5.000s
{
"peer": [
"192.168.0.7",
44818
],
"enip.command": 111,
"enip.length": 20,
"enip.session_handle": 132096,
"enip.status": 0,
"enip.sender_context.input": "array('B', [48, 0, 0, 0, 0, 0, 0, 0])",
"enip.options": 0,
"enip.input": "array('B', [0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 178, 0, 4, 0, 142, 0, 5, 0])",
"enip.CIP.send_data.interface": 0,
"enip.CIP.send_data.timeout": 0,
"enip.CIP.send_data.CPF.count": 2,
"enip.CIP.send_data.CPF.item[0].type_id": 0,
"enip.CIP.send_data.CPF.item[0].length": 0,
"enip.CIP.send_data.CPF.item[1].type_id": 178,
"enip.CIP.send_data.CPF.item[1].length": 4,
"enip.CIP.send_data.CPF.item[1].unconnected_send.request.input": "array('B', [142, 0, 5, 0])",
"enip.CIP.send_data.CPF.item[1].unconnected_send.request.service": 142,
"enip.CIP.send_data.CPF.item[1].unconnected_send.request.status": 5,
"enip.CIP.send_data.CPF.item[1].unconnected_send.request.status_ext.size": 0
}
06-20 15:54:34.650 MainThread enip.cli DETAIL collect Receive 1 (Context b'0')
06-20 15:54:34.665 MainThread enip.cli DETAIL pipeline Completed 1/ 1; curr: 0 - last: 0 == 0 depth
Tue Jun 20 15:54:34 2017: 0: Single G_A_S @0x00C4/16/3 == None
06-20 15:54:34.681 MainThread enip.cli DETAIL pipeline Pipelined 1/ 1; curr: 0 - last: 0 == 0 depth
06-20 15:54:34.681 MainThread enip.get NORMAL main 1 requests in 0.192s at pipeline depth 0; 5.198 TPS
Does "service": 14, corresponding to Service code in Omron documentation?
How can I change this value?
Thanks
from cpppo.
Decimal 14 is hex 0x0E, so that's OK. I don't know if the OMRON does "routing" CIP requests (ie. with a route path encapsulation); perhaps try the "simple" non-routing CIP requests, by specifying the -S option to the ...get_attribute command. This eliminates the route-path and send-path encapsulation from the CIP request, and expects the receiving EtherNet/IP module to respond to the CIP request itself...
from cpppo.
Yes I have an answer with -S option
With this command I can read which mode the PLC is (run, program, monitor)
python -m cpppo.server.enip.get_attribute -a 192.168.0.7 -S "@0xC4/0x0/0x64"
Tue Jun 20 16:45:53 2017: 0: Single G_A_S @0x00C4/0/100 == [1, 0]
but I can't not access to the memory area
EIP21 omron.pdf
I will continue on Thursday...
from cpppo.
Hi,
I have no problem to read/write plc operating mode (service 0x0E and Ox10)
But to read/write memory or input/output, I need to change service code (service code 1C to 1F). You can see that in my previous post in the pdf file.
How can I change the service code? Is it an other function than get_attrribute?
Thanks
from cpppo.
Hello, I renew my question : is-it possible to change the service code and how?
Thanks
from cpppo.
I have this code to read attribute and if I remember me well it was due to this error (routing=false)
import socket
import time
import cpppo
from cpppo.server.enip import client
plc_ip_address = "192.168.1.10"
timeout = 5.0
import logging
cpppo.log_cfg['level'] = logging.ERROR
logging.basicConfig( **cpppo.log_cfg )
try:
with client.connector( host=plc_ip_address, timeout=timeout) as conn:
get_attr_single_operation = {
'path': [{'class': 4}, {'instance': 101}, {'attribute': 3}],
'method': 'get_attribute_single',
'send_path': '', 'route_path': False
}
failures,replies = conn.process(
operations=[get_attr_single_operation], timeout=timeout )
for rpy in replies:
print(rpy)
except Exception as exc:
print ("EtherNet/IP I/O Failed: %s" % ( exc ))
time.sleep( .1 )
from cpppo.
I have exactly the same problem with Pepperl Fuchs IO link module.
The service to access the data is 0x4b not 0x0E (get single attribute) as said in documentation page 53
from cpppo.
Related Issues (20)
- Connection manager: unconnected send
- Receiving (not pulling or writing) data from AB Compact GuardLogix PLC
- Question: Getting single attribute
- Question: read an array of structures in one request
- Question: write to structure field
- CIP Class 0x66
- AssertionError on harvest HOT 1
- Simulate Omron Adapter
- (Question) Duplicate Responses to CIP Discovery Packet HOT 3
- Sending SINT write request using client results in error
- Python 3.11 import problem HOT 1
- Question: What is the meaning of "Tag communications capability"
- Question: CPPPO Server configuration as Generic Ethernet Module in Studio 5000
- Client import problem HOT 1
- SMC JXC91 write HOT 5
- Question: How to call vendor specific services?
- Question: How to send Instance Service "reset (0x05)" instead of "get_attributes_all (0x01)" using Cpppo? HOT 1
- AssertionError: Failed to receive any response
- Implicit (cyclic) communication for lower latency
- Can we have a simple example of writing a single register to a ControlLogix please
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from cpppo.