ISO-On-TCP zwischen CP343-1 und PC

jeito

Level-1
Beiträge
8
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,

ich möchte Daten zwischen einer CPU315-2DP mit CP343-1 und einem PC austauschen und dabei das Protokoll ISO-On-TCP (RFC1006) benutzen. Der PC soll der aktive Teil sein (Client) und die S7 der passive (Server).

Die Verbindung habe ich NetPro soweit angelegt. Auf dem PC wurde das Protokoll in der Applikation implementiert.

Im S7-Anwenderprogramm rufe ich die beiden Bausteine FC5 und FC6 (Send/Receive) in OB1 auf und übertrage Daten aus den entsprechend angelegten Datenbausteinen für Send und Receive. Es werden aber weder Daten gesendet noch empfangen.

Bin noch blutiger Anfänger in Step7. Habe auch das Musterbeispiel von Siemens mal ausprobiert, bekomme es aber nicht zum laufen (OB1 und FB200 können nicht übertragen werden).

Freue mich über Hilfe zur Lösung des Problems!

CALL "AG_SEND"
ACT :=TRUE
ID :=1
LADDR :=W#16#100
SEND :=P#DB111.DBX0.0 BYTE 6
LEN :=6
DONE :=M20.0
ERROR :=M20.1
STATUS:=MW21

CALL "AG_RECV"
ID :=1
LADDR :=W#16#100
RECV :=P#DB112.DBX0.0 BYTE 6
NDR :=M30.0
ERROR :=M30.1
STATUS:=MW31
LEN :=MW32
 
Zuletzt bearbeitet:
LADDR :=W#16#100 habe ich noch nicht gesehen. LADDR bekommst du aus NETPRO,
LADDR und ID müssen in NETPRO und S7-Programm übereinstimmen.

Oder was tut nicht ?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
LADDR und ID habe ich aus NetPro übernommen. Was meinst du mit "noch nicht gesehen"? Der Wert W#16#100 wird dort so angezeigt.

Ich hatte im CP-Diagnosetool gesehen, dass eine passive Verbindung aufgebaut wurde, aber weder Daten gesendet noch empfangen werden. Die PC-Seite sagt mir aber, dass die Daten abgeschickt wurden. Dort wurden auch keine Daten von der S7 empfangen.

Ist das Send/Receive eventuell falsch projektiert? Man kann doch beides über eine Verbindung machen, oder?
 
Projektiere im Netpro zwei passive Verbindungen, eine zum Senden, eine zum Empfangen.
Dann kannst Du vom PC aus zugreifen.

Im AG brauchst Du die beiden FC5 und FC6 garnicht, denn Du willst ja passiv sein...
 
wenn w#16#100 dort vorgegeben ist dann ok
bei mir wurden immer 4stellige hex-Werte vorgegeben.
z.B. W#16#3F81 etc. einen 3stelligen Hexwert für LADDR habe ich noch nie bekommen.

stelle doch mal deine NETPRO Einstellungen als Screen-Shot zur Verfügung.

Gruß
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Habe gerade mal eine S7-300 Projekt angelegt, ( arbeite sonst immer mit S7-400), und habe die Vorgabe w#16#400 bekommen, scheint deine 100 doch ok zu sein.

wenn du Daten vom PC sendes sind es mehr als 6 Byte ( Länge an deinem ANY-Pointer.

Welchen Zustand hat der M 30.1 ( Error ) und des Statuswort MW31

sehe gerade du hast Überschneidungen.

MW 31 , und MW 32
MW 31 = Byte 31 und Bye 32

auch beim Empfangsbaustein

ist der DB112 angelegt ?
 
Wie willst Du denn sonst die Daten senden und empfangen ?

Die FC5/6 sind doch dazu da, um vom AG aus AKTIV etwas vom
Gegenüber zu holen bzw hinzusenden. Aber das will der TO doch garnicht.

Bei projektierten Verbindungen, und unter der Maßgabe, dass der PC die
Initiative hat (siehe Beitrag Nr 1), wickelt der CP343-1 den Datenaustausch doch
schon alleine ab, sobald nämlich eine entsprechende Anforderung vom PC kommt.

Es darf dabei sogar der OB1 lediglich aus der Anweisung BE bestehen, Hauptsache
ist, dass die Datenbereiche, auf die zugegriffen werden soll, im AG existieren.

Daher meine Frage nach dem Sinn...
 
Zuletzt bearbeitet:
@ argv_user
meines wissens sind die Bausteine erforderlich, um die Daten in den Ziel-DB zu übergeben. ( Ähnlich SEND-ALL/ RECEIVE ALL in der S5-Welt). Auch bei ISO-On-TCP (RFC1006). ( Bei TCP/IP ) auf jeden Fall
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ob der PC Client(aktiv) oder (Server) passiv ist, hat doch nur mit dem Verbindungsaufbau zu tun.
Wenn die Verbindung erst mal steht, sind beide Partner gleichberechtigt.

Die RFC1006 beinhaltet (so aus dem Stehgreif) eigentlich nur, das im Telegramm drinsteht, wieviel Daten gesendet werden. Somit weiß der Empfänger, wie viele Bytes er zu erwarten hat. Ist sonst bei TCP/Ip ja nicht so, da das ganze ja eine Streaming-Geschichte ist.
 
Ob der PC Client(aktiv) oder (Server) passiv ist, hat doch nur mit dem Verbindungsaufbau zu tun.
Wenn die Verbindung erst mal steht, sind beide Partner gleichberechtigt.

Die RFC1006 beinhaltet (so aus dem Stehgreif) eigentlich nur, das im Telegramm drinsteht, wieviel Daten gesendet werden. Somit weiß der Empfänger, wie viele Bytes er zu erwarten hat. Ist sonst bei TCP/Ip ja nicht so, da das ganze ja eine Streaming-Geschichte ist.

Bei aktiv, passiv, client, server gibt es oft Begriffsverwirrungen.
Beispielsweise ist ein OPC-Server fast immer ein Client gegenüber den
angeschlossenen Automatisierungsgeräten...

Zum Thema:

Soweit ich das verstanden habe, soll die S7 passiv sein, das bedeutet
insbesondere, dass sie als TCP-Server arbeitet UND nach dem
Verbindungsaufbau Kommandos des verbundenen Partners verarbeitet,
also niemals selbst irgend einen Datentransfer veranlasst.



----------------------------------------------
FUN:
Was meinst Du eigentlich mit "Stehgreif":ROFLMAO:
 
Zuviel Werbung?
-> Hier kostenlos registrieren
1. W#16#100 ist ok. Der Step7-Editor lässt die Null am Anfang weg (100 statt 0100).

2. Habe das ganze mal mit einer einfachen TCP-Verbindung ausprobiert, sowohl aktiv als auch passiv. Empfangen funktioniert in beiden Fällen (PC -> S7). Beim Senden allerdings werden in beiden Fällen die Daten aus dem DB nicht an den PC übertragen, obwohl der OB1 bzw. FC5 keinen Fehler anzeigt.

Error Done Status
0 0 8181
0 1 0000

Am Verbindungsaufbau kann das dann ja wohl nicht liegen. Vielleicht irgendwelche Initialisierungen im OB1?

3. Wenn das klappen sollte, werde ich das ganze nochmal mit einer ISO-On-TCP-Verbindung ausprobieren.

Für die bisherigen Tipps schon mal vielen Dank!
 
1. W#16#100 ist ok. Der Step7-Editor lässt die Null am Anfang weg (100 statt 0100).

2. Habe das ganze mal mit einer einfachen TCP-Verbindung ausprobiert, sowohl aktiv als auch passiv. Empfangen funktioniert in beiden Fällen (PC -> S7). Beim Senden allerdings werden in beiden Fällen die Daten aus dem DB nicht an den PC übertragen, obwohl der OB1 bzw. FC5 keinen Fehler anzeigt.

Error Done Status
0 0 8181
0 1 0000

Am Verbindungsaufbau kann das dann ja wohl nicht liegen. Vielleicht irgendwelche Initialisierungen im OB1?

3. Wenn das klappen sollte, werde ich das ganze nochmal mit einer ISO-On-TCP-Verbindung ausprobieren.

Für die bisherigen Tipps schon mal vielen Dank!

Wir sollten noch einmal klarstellen, was Du eigentlich willst.
Ich habe es so verstanden:
Der PC soll Daten lesen und schreiben können. Die S7 ist dabei passiv.

Ist das soweit richtig?

Falls ja: Projektiere zwei Verbindungen (passiv) eine für Lesen, eine für Schreiben, achte auf unterschiedliche TSAPs, passe die PC-Software dahingehend an und es wird funktionieren. Und lass die AG_SEND/RECEIVE Aufrufe erstmal weg.
 
8181 ==> Auftrag läuft, Wird der Baustein ständig durchlaufen, oder nur einmal ?

Sollte immer Durchlaufen werden. Beim Sende-Aufruf bei ACT nicht "TRUE" sondern nur ein Impuls, wenn gesendet werden soll. So wird versucht in jedem Aufruf die Daten zu senden. Wenn in jederm SPS-Zykus der Baustein aufgerufen wird mit "TRUE" am ACT weiß ich z.Zt. nicht was passiert. Event. braucht der Baustein hier eine Flanke. z.B. alle 500msek ='1' sonst '0' wenn die Daten immer / Zyklisch übertragen werden sollen
 
Zuviel Werbung?
-> Hier kostenlos registrieren
F_Ap scheint recht zu haben. Es wird anscheinend nur einmal der Inhalt aus dem DB übertragen, sobald ich auf der PC-Seite den Client starte. Danach sendet die S7 nichts mehr aus dem DB.

Ich habe jetzt statt einem konstanten "TRUE" am ACT-Eingang von FC5 versucht, mit einem Taktsignal (wechselndes Bit 0/1) zu arbeiten, allerdings ohne Erfolg :-( Auch der Einsatz eines Weckalarm OBs war ohne Erfolg (hatte mal jemand anderes empfohlen).

Das Beispielprogramm von Siemens zur Programmierung von FC5 und FC6 bekomme ich nicht zum laufen, da ich OB1 und FB200 nicht auf die CPU kopieren kann...

Unklar ist mir auch noch, warum ich FC5 und FC6 weglassen kann? Wie komme ich dann an die Daten aus den DBs ran?

Vielleicht mache ich ja irgendeinen ganz banalen Anfängerfehler??
 
Ich krieg jetzt zuviel, sowas von Ignoranz ...

Hallo,

argv_user schrieb:
Soweit ich das verstanden habe, soll die S7 passiv sein, das bedeutet insbesondere, dass sie als TCP-Server arbeitet UND nach dem
Verbindungsaufbau Kommandos des verbundenen Partners verarbeitet,
also niemals selbst irgend einen Datentransfer veranlasst.

argv_user schrieb:
Ist das soweit richtig?
Falls ja: Projektiere zwei Verbindungen (passiv) eine für Lesen, eine für Schreiben, achte auf unterschiedliche TSAPs, passe die PC-Software dahingehend an und es wird funktionieren. Und lass die AG_SEND/RECEIVE Aufrufe erstmal weg.

An "jeito" und "F Ap" : Warum ignoriert Ihr eigentlich die Hinweise von argv_user, Euer Problem ist doch hinreichend beantwortet ??? :sb7:

Gruß

Question_mark
 
Selten so einen Quatsch gelesen

Hallo,

F Ap schrieb:
Ähnlich SEND-ALL/ RECEIVE ALL in der S5-Welt). Auch bei ISO-On-TCP (RFC1006). ( Bei TCP/IP ) auf jeden Fall

Ich habe ja eventuell Verständnis dafür, das Du von dem Thema keine Ahnung hast. Aber stelle Deine auf Unkenntniss basierenden Vermutungen bitte hier nicht als Tatsachen rein. Im Gegensatz zur S5 Welt braucht die S7 als passiver Verbindungspartner keine SEND-ALL/RECEIVE-ALL Bausteine. Diese Funktionen hat die S7 eben schon integriert. Und der Blinde sieht die auch nicht. Und Basta ... :rolleyes:

Gruß

Question_mark
 
Zurück
Oben