TIA python-snap7

Zuviel Werbung?
-> Hier kostenlos registrieren
Aber warum willst du dann Areas.DB nutzen? Das geht sicher nur bei nicht optimierten Bausteinen und es wäre mal einen Versuch wert, einen nicht optimierten Baustein zu testen.

PS: zu Areas hab ich bei mir noch gesehen, dass ich folgende Import-Klausel nutze, damit es erkannt wird:

import snap7
import snap7.client
from snap7.types import *
from snap7.util import *

Ohne "from snap7.types import *" wird bei mir gemeckert.
Ich verwende Areas.PE und Areas.PA um auf die Ein- und Ausgänge zuzugreifen.

snap7.types gibt es bei mir nicht, da wird mir immer snap7.type vorgeschlagen und ich hatte es immer mit snap7.type.Areas.PE verwendet, kommt ja theoretisch auf das gleiche raus?
 
Ich verwende Areas.PE und Areas.PA um auf die Ein- und Ausgänge zuzugreifen.

snap7.types gibt es bei mir nicht, da wird mir immer snap7.type vorgeschlagen und ich hatte es immer mit snap7.type.Areas.PE verwendet, kommt ja theoretisch auf das gleiche raus?
Ja, nimm snap7.type, das haben die bei einem Update geändert, ich hab es jetzt auch so bei V2.0.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
So jetzt komme ich endlich mal wieder hierzu
Python:
import snap7
from snap7.util import *
from snap7.client import *
from snap7.type import *

# PLC connection settings
PLC_IP = '192.168.0.1'  # Replace with actual IP
RACK = 0                # Default rack for ET200SP
SLOT = 1                # Slot number for CPU

# Create a connection to the PLC
plc = snap7.client.Client()
plc.connect(PLC_IP, RACK, SLOT)

# Check if connection is established
if plc.get_connected():
    print("Connected to PLC")
    
    try:
        # Use the correct Areas enumeration from snap7.client
        inputs = plc.read_area(snap7.type.Areas.PE, 0, 0, 4)  # PE for Process Inputs
        print("Inputs: ", inputs)
    except Exception as e:
        print(f"Error reading inputs: {e}")
    
    try:
        outputs = plc.read_area(snap7.type.Areas.PA, 0, 0, 4)  # PA for Process Outputs
        print("Outputs: ", outputs)
    except Exception as e:
        print(f"Error reading outputs: {e}")
    
    # Disconnect after operation
    plc.disconnect()
else:
    print("Connection failed")

Das ist mein aktueller Code aber ich bekomme leider immer:


Code:
Connected to PLC
b'CLI : function refused by CPU (Unknown error)'
Error reading inputs: b'CLI : function refused by CPU (Unknown error)'
b'CLI : function refused by CPU (Unknown error)'
Error reading outputs: b'CLI : function refused by CPU (Unknown error)'
 
ET200SP CPUs haben Slot 1
(Slot 0 wäre bei S7-200, LOGO, oder ein IE-CP)
Die Verbindung (mit Slot 1) wurde anscheinend erfolgreich aufgebaut, erst die nachfolgenden Funktionen werden abgelehnt.

PS: Ich habe nicht alles gelesen, aber könnte es sein, dass Peripherieadressen gelesen werden sollen? und die ET200SP CPU kennt das vielleicht nicht? (und Peripherieausgänge kann man wohl generell nicht lesen)

PPS: "Peripherieadressen" war wohl von mir falsch interpretiert. Wenn Areas.PE = 0x81 und Areas.PA = 0x82, dann werden die E/A aus dem Prozessabbild adressiert, was korrekt ist.
 
Zuletzt bearbeitet:
Zurück
Oben