S7-1200, Snap7: Exception: CLI : function refused by CPU (Unknown error)

8k Views Asked by At

Running below snap7 client script for python using Siemens S7-1200 PLC shows the below common CLI refusal error. What is here the common problem and how to solve it?

Script:

import snap7
from snap7.util import *
import struct
import snap7.client
from snap7.snap7types import S7AreaDB

plc=snap7.client.Client()

plc.connect('192.168.0.69',0,1)

area   = 0x84
start  = 0
length = 1
bit    = 0

byte= plc.read_area(area,0,start,length)

Traceback error:

No handlers could be found for logger "snap7.common" Traceback (most recent call last): File "", line 1, in File "/usr/local/lib/python2.7/dist-packages/snap7/client.py", line 242, in read_area check_error(result, context="client") File "/usr/local/lib/python2.7/dist-packages/snap7/common.py", line 69, in check_error raise Snap7Exception(error) snap7.snap7exceptions.Snap7Exception: CLI : function refused by CPU (Unknown error)

2

There are 2 best solutions below

2
On BEST ANSWER

First of all check which type/model of PLC you've got and check which firmware version you selected (first revision or newer?). Check on the website with Siemens or TIA portal software if there are earlier firmware versions available.

Try to reset your plc to an earlier firmware version and rerun the script and see if the error message is gone!

S7-1212C Example: firmware version 4.1 gives above described error. If firmware version 4.0 is loaded then the error vanishes and you get access to the pcl..

Enjoy Christmas second!

2
On

In TIA portal, check if "optimized block access" property is off for Data block that you want to read data from. Moreover, under CPU access protection; access level must be “full” and the “connection mechanism” must allow GET/PUT. See the following link for more detail:

http://snap7.sourceforge.net/snap7_client.html#1200_1500

Secondly, which data block that you want to access? You should specify that in your plc.read_area() method call. There should be a method argument that specifies "Data Block" number since you are using "0x84" data block area code.