TIA S7-1200 tcon

Matze001

Level-3
Beiträge
2.814
Reaktionspunkte
573
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Zusammen,

ich habe altanlagen mit WinAC RTX-F und IM151-8F PN/DP auf denen ich über TCON + TSEND/TRECV Dateien von einem Webserver abgefragt habe. (TCP Port 80).

Dazu hatte ich folgende Verbindungsparameter

Code:
    // Verbindungseinstellungen schreiben        
    T_PARAM.id:= CONNECTION_ID;
    T_PARAM.CONNECTION_TYPE:= 17;
    T_PARAM.LOCAL_DEVICE_ID:= b#16#1;
    T_PARAM.LOCAL_TSAP_ID_LEN:= 0;
    T_PARAM.LOCAL_TSAP_ID[1]:= 0;
    T_PARAM.LOCAL_TSAP_ID[2]:= 0;
    T_PARAM.REM_TSAP_ID_LEN:= 0;
    T_PARAM.REM_TSAP_ID[1]:= 0;            
    T_PARAM.REM_TSAP_ID[2]:= 0;
    T_PARAM.ACTIVE_EST:= TRUE;
    T_PARAM.REM_TSAP_ID[2]:= 80;
    T_PARAM.REM_TSAP_ID[1]:=SHR(IN:=2#0000_0000_0101_0000, N:= 8); // Binärwert für Port 80
    T_PARAM.REM_TSAP_ID_LEN:= 2;
    T_PARAM.REM_STADDR_LEN:= 4;
    T_PARAM.REM_STADDR[1]:= INT_TO_BYTE(IP_ADDR1);
    T_PARAM.REM_STADDR[2]:= INT_TO_BYTE(IP_ADDR2);
    T_PARAM.REM_STADDR[3]:= INT_TO_BYTE(IP_ADDR3);
    T_PARAM.REM_STADDR[4]:= INT_TO_BYTE(IP_ADDR4);

Jetzt wollte ich meinen Code auf die 1200er portieren, und musste feststellen, dass es dort den Connection-Type 17 gar nicht erzeugen kann.
Dieser ist zwar in dem Kommentar vom Baustein drin, der beim konfigurieren erzeugt wird, aber ich bekomme es nicht hin, dass ich aus dem Konfigurator die 17 erzeugen kann.

Hat jemand eine Idee?

Grüße

Marcel
 
Hallo Jungs,

gut das sich keiner gemeldet hat - somit bin ich selbst weiter auf die Suche gegangen.
Die Ursache lag wo anders, die Sache mit 11 und 17 ist sehr einfach zu lösen...

16#11 = 10#17 ... Somit hat dort alles gepasst!

Grüße

Marcel
 
Zuviel Werbung?
-> Hier kostenlos registrieren
So ich klink mich hier mal wieder ein, aufgrund eines massiven Zeitmangels durfte ich hier nicht weiterspielen.

Wie schon erwähnt steht meine Verbindung nun!

Leider habe ich noch eine einzige Baustelle:

Die Verbindungseinstellungen. Ich habe es bisher IMMER so gemacht, dass ich die Einstellungen im STAT-Bereich als Struct abgelegt habe.
Da weigert sich der TCON-Baustein aber beharrlich mit zu arbeiten: Meldung "Die Struktur entspricht nicht der Länge". Okay... Also mit dem
tollen "konfigurieren" Button einen DB angelegt... *trommelwirbel* es funktioniert. Schön! Aber ich will einen Multiinstanzfähigen DB bauen
bei dem ich über die Schnittstelle diese Parameter übergeben kann.

Ich hab schon einiges probiert: Optimierter Zugriff, nicht optimierter Zugriff, IDB, extra DB, ... es tut nur mit dem blöden Konfigurator.

Jemand eine Idee?

Grüße

Marcel
 
Da weigert sich der TCON-Baustein aber beharrlich mit zu arbeiten: Meldung "Die Struktur entspricht nicht der Länge".
Ist mir vor kurzem auch passiert siehe...
http://www.sps-forum.de/simatic/79662-umstieg-auf-s7-1500-a-post601932.html#post601932

Okay... Also mit dem tollen "konfigurieren" Button einen DB angelegt... *trommelwirbel* es funktioniert.
... es tut nur mit dem blöden Konfigurator.
Vergleiche mal den DB-Aufbau vom Konfigurator mit dem aus deinem ersten Beitrag.
Die sind sicherlich unterschiedlich!
Der Konfigurator erstellt einen Baustein abgeleitet vom Datentyp "TCON_IP_V4", bei dir oben hast du den "TCON_PARAM" so wie er aus Step7-Classic kommt.

Eigentlich sollte der TCON aus der 1500 laut Handbuch in der Lage sein auch mit TCON_PARAM umzugehen.
Tut er aber nicht, zumindest nicht bei mir und anscheinend auch nicht bei dir.
Bin also nicht der einzige.

Du kannst den FB multiinstanzfähig erstellen wenn du TCON_IP_V4 nimmst, das hat bei mir hingehauen.

Es würde aber vielleicht nicht schaden mal beim Siemens-Support abzuklopfen was es damit auf sich hat.
Es scheint ja nicht nur ein Einzelfall zu sein.
Vielleicht können das hier noch ein paar Jungs testen die ne 1500er rumstehen haben.

Den sonst wird das mit dem Konvertieren von ner 300/400 in Zukunft ne Freude.
 
Hallo Ronin,

danke für die schnelle Antwort! Natürlich habe ich den neuen Parameter genutzt gehabt. Trotzdem der Fehler.

Wie hast Du es gelöst bekommen?

Grüße

Marcel
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Natürlich habe ich den neuen Parameter genutzt gehabt. Trotzdem der Fehler.
Ähhhmm, oben zeigst du aber die Verwendung von TCON_PARAM.
Dazu hatte ich folgende Verbindungsparameter
Code:
    // Verbindungseinstellungen schreiben        
    T_PARAM.id:= CONNECTION_ID;
    T_PARAM.CONNECTION_TYPE:= 17;
    T_PARAM.LOCAL_DEVICE_ID:= b#16#1;
...
    T_PARAM.LOCAL_TSAP_ID[2]:= 0;
...
    T_PARAM.REM_STADDR_LEN:= 4;
    T_PARAM.REM_STADDR[1]:= INT_TO_BYTE(IP_ADDR1);
    T_PARAM.REM_STADDR[2]:= INT_TO_BYTE(IP_ADDR2);
    T_PARAM.REM_STADDR[3]:= INT_TO_BYTE(IP_ADDR3);
    T_PARAM.REM_STADDR[4]:= INT_TO_BYTE(IP_ADDR4);
Meinst du damit "Das hier oben hatte ich im alten Programm, auf der 1200 hab ich's aber mit dem Datentyp "TCON_IP_V4" versucht? :confused::confused:

TCON_IP_V4 sieht so aus.
TIA_TCONparam_vs_TCONipv4.jpg

Da weigert sich der TCON-Baustein aber beharrlich mit zu arbeiten: Meldung "Die Struktur entspricht nicht der Länge". Okay... Also mit dem
tollen "konfigurieren" Button einen DB angelegt... *trommelwirbel* es funktioniert.

Das Verhalten "Strukturlänge" bekomme ich nämlich wenn ich versuche den TCON mit nem TCON_PARAM zu füttern. Auch mit Type 17 (falls TCON das als Unterscheidung nehmen würde)
Das es mit dem Konfigurator geht, sonst aber nicht, klingt für mich als würdest du keinen TCON_IP_V4 verwenden.


Jetzt wollte ich meinen Code auf die 1200er portieren, und musste feststellen, dass es dort den Connection-Type 17 gar nicht erzeugen kann.
Dieser ist zwar in dem Kommentar vom Baustein drin, der beim konfigurieren erzeugt wird, aber ich bekomme es nicht hin, dass ich aus dem Konfigurator die 17 erzeugen kann.
Die Type 17 gibt's auch nur aus Kompatibiltätsgründen. Auf der 1200 wird dir der Konfigurator immer eine Type 11 erzeugen.
Siehe Hilfe zum Datentyp "TCON_IP_V4"

Wie hast Du es gelöst bekommen?
Datensatz von TCON_IP_V4 im STAT erstellt und W#16#b (11) auf die "ConnectionType" geladen.

Wenn du es ja mit dem Konfigurator am laufen hast, dann schau einfach wo der Unterschied zwischen deinem Parametrierungssatz und dem des Konfigurators liegt.
 
Zuletzt bearbeitet:
Ich hatte die Variablen aus dem DB den der Konfigurator erstellt hat "einfach" in einen Struct im STAT-Bereich kopiert, daher sollte es eigtl. laufen.
Vermutlich habe ich zu viel gespielt gehabt, ich probiere es nachher mal in Ruhe und mit Bedacht aus.

Grüße

Marcel
 
Ich hatte die Variablen aus dem DB den der Konfigurator erstellt hat "einfach" in einen Struct im STAT-Bereich kopiert, daher sollte es eigtl. laufen.
Das könnte ein weiterer Grund sein.

Je nachdem wie der TCON auf der 1500 seinen CONNECT-Eingang prüft.
Wäre durchaus möglich dass er den Eingang mit "VARIANT_EQ_TYPE" auf den Typ "TCON_IP_V4" abfragt.
Wenn du nur einen Struct übergibst würde man das daran schon erkennen. Vielleicht wirft der TCON dabei schon den Fehler. :)

Ich hab auf jeden Fall einen Eintrag im STAT mit dem Typen "TCON_IP_V4" erstellt.
Also Variblennamen und bei Datentyp (dort wo du sonst Bool/Real/etc. einträgst) einfach "TCON_IP_V4" (ohne Anführungszeichen) eintippen.

Das mit dem Struct <> Datentyp könnte vielleicht auch der Grund sein warum er den TCON_PARAM nicht schluckt.
Muss ich auch jeden Fall noch mal probieren....
 
Zuletzt bearbeitet:
Mensch Ronin... so dumm kann man manchmal gar nicht denken!
*ACK*

Verdammt, das wird bei mir und dem TCON_PARAM dann das selbe sein.

Ich hab in meinen FBs auf der 300 auch eine Struktur im STAT damit ich nicht den UDT mitschleppen muss.
Kann es leider nicht austesten da ich keine 1500er hier hab und der Simulator schluckt alles, da nimmt der TCON auch einen Struct mit dem Aufbau von TCON_Param.

@Matze: Könntest du mal versuchen ob er jetzt auch TCON_PARAM nimmt?
 
Zuletzt bearbeitet:
Je nachdem wie der TCON auf der 1500 seinen CONNECT-Eingang prüft.
Wäre durchaus möglich dass er den Eingang mit "VARIANT_EQ_TYPE" auf den Typ "TCON_IP_V4" abfragt.
Wenn du nur einen Struct übergibst würde man das daran schon erkennen. Vielleicht wirft der TCON dabei schon den Fehler. :)

Konnte das gerade nochmal verifizieren. Für die Leute die interessiert.
Der TCON prüft tatsächlich ob am CONNECT-Eingang ein UDT vom Typ "TCON_IP_V4", "TCON_PARAM" oder Konsorten angeschlossen sind.
Sobald er was anderes bekommt wirft er den Fehler "Parameter am Eingang CONNECT ungültig".

Damit fallen also ein paar Dinge (TCON_PARAM von außen per ANY übergeben, Gleichwertige Struktur als STRUCT übergeben) flach.

Über genau das war ich hier drüber gestolpert, hatte in der 300 einen gleichwertigen Struct zu TCON_PARAM verwendet.
Aber, das haben wir eh schon gelernt, migrieren von der 300/400 ist eh nicht die beste Idee...
 
Zurück
Oben