Step 7 Datenaustausch zwischen CP 343-1 lean und Phyton3.4.1

MrMarc

Level-1
Beiträge
19
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo!
Ich habe die Aufgabestellung einen Datenaustausch mit einem Windows PC mit Python 3.4.1 und einer Siemens s7300 mit CP 343-1 lean (6GK7 3431-iCX10-0XE0 mit Fw 3.0.23)über TCP/IP (IPv4) zu realisieren.

Ich habe ein Script welchen auf dem PC läuft und lauscht und auch Daten von der SPS empfangen kann. Der Datenempfang ist möglich.
Ich möchte nun die empfangen Daten nicht nur am Bildschirm ausgeben sondern wieder zurück zur SPS zur Quittierung(SPS-Ablauf) senden.
Hier das Script(Script1) welches die Daten empfängt und anzeigt.

Code:
# Echo server program
import socket

HOST = ''                 # Symbolic name meaning all available interfaces
PORT = 2000              # Arbitrary non-privileged port
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind((HOST, PORT))
s.listen(1)
conn, addr = s.accept()
print('Connected by', addr)
while True:
    data = conn.recv(1024)
    Daten = ("%s" % (data))
    print('Nutzdaten: ', Daten)
    print('Nutzdaten: ', len(data))
    if not data: break
    conn.sendall(data)
conn.close()

Dieses Script empfängt richtig und zeigt die Daten an. Nur das senden Funktioniert nicht.
Wo liegt hier das Problem? Was mache ich falsch?

===============

Ich habe zum Test ein extra Script(Script2) zum Senden zusammengestopft.

Code:
# Echo client program
import socket

HOST = '192.168.178.201' # The remote host
PORT = 2000              # The same port as used by the server
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((HOST, PORT))
s.sendall(b'Test Daten')
data = s.recv(1024)
s.close()
print('Received', repr(data))

Nach dem Starten des Schripts bekomme ich immer die Meldung:
ConnectionRefuseError: WinError 10061 Es konnte keine Verbindung hergestellt werden da der Zielcomputer die Verbindung verweigerte.
IP der SPS ist OK, Port ist derselbe wie beim Senden Script.

Ich verwende die Siemens FCs FC5 AG_Send und FC6 AG_Recv
Die CP ist auf senden und empfangen eingestellt

Vielleicht gibt es unter euch jemanden der damit schon Erfahrungen gemacht hat.
Über Unterstützung bin ich dankbar!

Grüße, MrMarc
 
Nur das senden Funktioniert nicht.

Woran genau machst du das fest? (das Skript sieht ok aus)
Ich vermute eher es steht am AG_RECV Parameter LEN auch 1024?
Die CP Bausteine geben erst dann Daten im Programm aus, wenn die an LEN vorgegebene Anzahl von Bytes komplett empfangen wurde.
Wenn jetzt nur 10Byte geschickt werden dauert es ggf. lange bis am RECV eine Reaktion kommt.
> LEN ändern, auf die Anzahl der verschickten Bytes.

Für den Fall dass der PC die Verbindung aufbaut, hast du die Verbindung im CP entsprechend auf Passiv umgestellt(und den remoten Port leer gelassen)?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Vielen Dank für deine Antwort!
Am AG_RECV ist der Parameter LEN die Länge der Daten die empfangen wurden. Das ist ein OUT am FC.
Im Script1 habe ich den Verbindungsaufbau auf Aktiv eingestellt und beide Ports auf 2000 eingestellt. Ich möchte ja von der SPS aus Daten senden die dann durch das Script1 an die SPS zurück gespiegelt werden sollen.
Das (zurück)senden möchte ich mit der Zeile „conn.sendall(data)“ (im Script 1) erreichen. Leider kommt bei der SPS einfach nichts an. Mit dem Script2 wollte ich einfach nur das Senden testen. Die Verbindung habe ich dafür auf Passiv umgestellt. Die Verbindung wird vom PC aus aufgebaut(Info aus Netpro). Allerdings empfängt der AG_RECV einfach nichts. Meldet den Status „Bereit zum Daten empfang)
 
Stimmt, LEN als Eingang haben nur die T_ Bausteine.
Bei AG_RECV gilt die Länge des Pointers an RECV.
> Was ist da angelegt?
> Testweise nur ein einzelnes Byte nehmen, dann müsste das letzte gesendete Byte ausgegeben werden.

Hier steht das Thema auch nochmal:
http://support.automation.siemens.com/WW/view/de/19033929
(die Performance dürfte mit dem byteweise verschieben unterirdisch sein)

Sonst installier mal einen Wireshark auf dem PC, dann sieht man ob und was verschickt wird.
 
Nochmals vielen Dank für deine Antwort.
Inzwischen funktioniert alles. Das Script ist OK und auch das SPS-Programm hatte keinen Fehler. Ich habe einen Testaufbau mit einer neuen CP gemacht. Da funktioniert alles bestens. Mir ist aufgefallen dass bei meiner alten CP sporadisch der AG_RECV einen Fehler bringt dass der Empfangsbereich nicht richtig adressiert ist. …. Ich verstehe nicht warum das ein sporadisches Problem ist!
Bei Gelegenheit werde ich die CP auf die neuste Firmware bringen und mir die aktuellen AG_RECV und AG_SEND holen. Dann wird nochmals getestet.
 
Zurück
Oben