TIA S71200 per Ethernet mit ASCII 2 Protokoll kommunizieren

robinson85

Level-2
Beiträge
13
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo zusammen,
habe eine "Interessante" Aufgabe bekommen.
Ich soll über meine integrierte Ethernet Schnittstelle mit einem fremden Treiber / Rechner der auf dem ASCII 2 Protokoll agiert kommunizieren.
Alternativ kann ich über eine RS232 Schnittstelle kommunizieren. Da die Schnittstelle natürlich Mehrkosten bedeutet würde ich lieber über die Ethernetschnittstelle mit dem System Kommunizieren.
Ich muss theoretisch folgende Werte einlesen:
1 x Integer - Wert
3 x Real Werte

Ausgeben muss ich folgende Werte:
3 x Real Werte
1 x Bool Wert

Ehrlich gesagt habe ich noch keine Ahnung wie ich das umsetzen soll.
Über jegliche Hilfe wäre ich sehr dankbar!

Gruß Robin
 
- Kann denn das Fremdsystem ebenfalls über eine Ethernet-Schnittstelle kommunizieren oder hat es nur eine serielle Schnittstelle (RS232?) ?
- besorge Dir die Protokollbeschreibung von dem verwendeten ASCII-2 Protokoll
- erstelle die Verbindung (vermutlich TCP-Verbindung) und programmiere das Senden+Empfangen mit TSEND_C + TRECV_C

Wie werden die Anweisungen TSEND_C und TRCV_C für die offene Benutzerkommunikation über die integrierte PROFINET-Schnittstelle der S7-1200 CPU programmiert?

Harald
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Vielen Dank für deine Antwort Harald.

Das Fremdsystem kann beide Schnittstellen umsetzen. Die Ethernet - Schnittstelle wird aber vom Kunden bevorzugt.
Die Beschreibung des Protokolls habe ich vom Kunden erhalten.
Habe das Dokument mal angehängt. Ich kann nicht wirklich etwas damit anfangen. Das ASCII 2 Protokoll wird ab Seite 11 beschrieben.
Über jegliche Hilfe wäre ich sehr dankbar.

Gruß Robin
 

Anhänge

  • Interface_protocol_de_2015.02_63837036_V.PDF
    195,7 KB · Aufrufe: 68
Grobes Vorgehen:
Halte Dich an das Siemens-Programmierbeispiel für TSEND_C/TRECV_C. Wegen der Zeichen-/String-Verarbeitung könnte eine Programmierung in SCL allerdings vielleicht einfacher sein.

Werte einlesen:
Sende mit TSEND_C an das Gerät "$01I<CR>" (16#24 16#30 16#31 16#49 16#0D)
Das Gerät wird Dir eine Antwort zurückschicken, die etwa so aussieht:
"0023.0 0020.5 0050.0 0041.0 0080.0 0080.0 0000.0 0020.0 0000.0 0020.2 0000.0 0020.3 0000.0 0020.4 01101010101010101010101010101010 <CR>"
Diese Antwort hole mit TRECV_C in ein CHAR- oder BYTE-Array oder in einen String und dann kopiere die Zeichen des gewünschten Wertes aus der Nachricht in einen zweiten String, so daß Du den ASCII-Klartext mit STRING_TO_REAL in einen REAL-Wert konvertieren kannst. Die Konvertierung kann man auch "zu Fuß" zeichenweise/ziffernweise vornehmen.

Werte senden:
Stelle Dir die Sendenachricht zusammen, etwa so:
"$01E 0023.0 0050.0 0080.0 0000.0 0000.0 0000.0 0000.0 01101010101010101010101010101010 <CR>"
Die nötige Konvertierung von REAL zu String (ASCII-Zeichen) würde ich "zu Fuß" programmieren (die 5 einzelnen Ziffern des REAL-Wertes (die Anweisung MOD ist hilfreich) in ASCII-Zeichen wandeln und Dezimalpunkt einfügen).
Dann sende die Nachricht mit TSEND_C.

Tip: die Kommunikation kannst Du zunächst mit Hyperterminal testen und simulieren.
Tip: Das Kommando "$01?" soll den für Dein Gerät speziellen Aufbau des I- und des E-Satzes liefern (Seite 15).

Harald
 
Hallo Zusammen,
ich habe gleiche Aufgabe und ich muss die Kommunikation mit dem fremden Steuerung programmieren. ich habe S7-1512 steuerung .
die Verbindung ist aufgebaut und ich kann es sehen im Online, TCON und TSEND werden ausgeführt aber TRCV wird nicht ausgeführt
das sehe ich in status bits und Busy Bit immer 1. warum weiss ich nicht .wer kann mir helfen? ich bin sehr dankbar für jedes Tipps.
und die Verbindung ab und zu abgebrochen wird und wieder aufgebaut selber .
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Sendet denn dein Gerät auf der anderen Seite immer oder musst Du ggf. eine Anfrage mit TSEND schicken die dann beantwortet wird.
Was machen denn die Statuswörter der TCON, TSEND, TRECV... gern auch mal per Trace anschauen, manchmal stehen Fehler nur einen Zyklus lang an.

Grüße

Marcel
 
Hallo Matze001 , Danke dir erstmal.
Ich sende per TSEND jede 1sec. positive Flanke $01I<CR> das scheint ok funktioniert, da TSEND Befehl meldet keinen Fehler zurück und DONE bit ist auf 1 gesetzt für 1 Zyklus , ich habe es getestet.
bei TRCV NDR Bit immer 0 und Busy immer 1 und Status =7002 . was das bedeutet und warum ?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
programmiere das Senden+Empfangen mit TSEND_C + TRECV_C
Ist das nicht etwas irreführend?
Für eine Verbindung sollte
TSEND_C + TRCV oder
TSEND + TRCV_C programmiert werden.
1) Was kümmert mich mein Geschwätz von Anfang 2016? ;)

Nein, im Ernst: vor ein paar Jahren war wohl noch nicht allgemein bekannt, daß sich TSEND_C und TRCV_C womöglich nicht vertragen, weil sie von Siemens wohl nicht sooo intelligent programmiert wurden. Das in meinem Beitrag #2 verlinkte Siemens-FAQ-Programmbeispiel verwendet auch in der heutigen Version noch TSEND_C und TRCV_C zusammen im selben Programm. Allerdings seit 2018 mit dem Hinweis, daß bei TSEND_C und TRCV_C unterschiedliche Verbindungs-IDs verwendet werden müssen ... :confused:

( Ich werde nicht meine 14000 Beiträge der letzten 10 Jahre durchsuchen (und ggf. überarbeiten), ob sie heute noch gültig sind bzw. ob ich sie heute noch so schreiben würde :cool: ;) )


2) Wer sagt das wo?
Hast Du mal eine Fundstelle bei Siemens dafür, daß TSEND_C und TRCV_C nicht zusammen auf der selben Verbindung verwendet werden sollen, sondern immer nur jeweils eine davon?
Kannst Du auch Siemens informieren, daß deren Handbücher und FAQs viele Fehler enthalten und "etwas irreführend" sind? ;)

(Wir sehen uns Freitag Abend :D)

Harald
 
Guten Tag,
danke sehr für deine Antwort.
aber empfange ich keine Daten von dem Gerät (Emfangbereich ist leer )
ich sende $01I<CR> per TSEND und Partner muss Antwort ausgeben , die ich mit TRCV holen
Gruß
 
Moin malbouzan,

zunächst einmal: Bist Du sicher, dass die Verbindung aufgebaut ist? Dazu online gehen und unter "Geräte & Netze" >> Netzansicht >> rechtes Fenster >> Reiter "Verbindungen" sollte die Verbindung und deren Status angezeigt werden.

Wenn die Verbindung steht und Du senden kannst (hattest Du ja schon geschrieben), kann man eigentlich davon ausgehen, dass das Empfangen auch funktioniert.

Die Verbindungs-ID ist überall richtig eingetragen?
Du redest von TSEND und TRCV. Wie baust Du Deine Verbindung auf? Mit TSEND_C, TRCV_C oder TCON?
Ist sichergestellt, dass der Partner auch wirklich etwas sendet?

VG

MFreiberger
 
Zuviel Werbung?
-> Hier kostenlos registrieren
ich sende $01I<CR> per TSEND und Partner muss Antwort ausgeben , die ich mit TRCV holen
Gruß

Schickst du 01 auch wirklich als Ascii? Also Byte des gesamtstrings?
36 48 49 73 13

Am besten Wireshark mitlaufen lassen und auch die Stati der Bausteine auswerten (vor allem wenn ein ERR kommt)
 
Du sendest 5 Zeichen mit letztes Zeichen 16#0D? Oder sendest Du etwa am Ende '<CR>'?

"$01I<CR>" meint: '$$' + '0' + '1' + 'I' + '$r' = 16#24 + 16#30 + 16#31 + 16#49 + 16#0D

(PS: zu langsam)

Harald
 
@MFreiberger, Danke dir. Verbindung ist schon aufgebaut ,mit online sehe ich es,ID ist gleich bei alle TCON;TSEND;TRCV . mit Hyperterminal habe ich getestet und antwortet der Partner und nach der Rücksprache mit Hersteller (Fa Weisstechnik Vötsch Ofen) das liegt an Siemens .
@Harald und vollmi , ich sende Array von Byte :16#24, 16#30, 16#31 , 16#49, 16#0D

ich habe so verstanden von dir Harald, anbei sind Screenshot ,falls das hilft. Danke alle nochmal für Unterstützung
1.jpg2.jpg3.jpg4.jpg5.jpg
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Wenn ich Deine Bilder richtig entziffern kann, dann ist bei Dir SEND_DATA[4] = 16#3D - das wäre falsch, es muß 16#0D sein

Wie sieht Dein TSEND-Programmteil aus? Sollen auch wirklich 5 Zeichen gesendet werden?

Harald
 
sorry ,tipp fehler ich habe korrigiert auf 0D aber funktioniert trotzdem nicht , immer busy ,warum ?
ich muss ASCII2 Protokol mit Ethernet Schnittstelle kommunizieren laut Hersteller .
ich muss $01I<CR> senden , dann der Partner (fremd Gerät) sendet zurück ASCII kette , die muss ich mit TRCV holen .
Beschreibung von Frem Gerät ist beigefügt am anfang des Beitrag beigefügt . da ich gleiche Anlage habe.
Gruß
 
Zuletzt bearbeitet:
mit Hyperterminal habe ich getestet und antwortet der Partner und nach der Rücksprache mit Hersteller (Fa Weisstechnik Vötsch Ofen) das liegt an Siemens .
Das kann jeder behaupten der keine Lust oder keine Ahnung zum Helfen hat...
Wenn es mit Hyperterminal geht, dann muß es auch mit Siemens Open User Communikation hinzukriegen sein.

Wie sieht Dein TSEND-Programmteil aus?
Hast Du mal zu einem PC mit einem Terminalprogramm gesendet? Oder zu einer zweiten SPS? Kommen die 5 Zeichen da richtig an?
Oder hast Du mal mit Wireshark zugeschaut?

Harald
 
Zuviel Werbung?
-> Hier kostenlos registrieren
was meinst wie sieht aus TSEND , ist normal und ich habe DONE bit ausgewertet mit SET/Reset nach aufruf, wird für 1 Zyklus 1 dann 0 und error immer 0 . mit 2 sps habe ich schon getestet und funktioniert ok. mit PC noch nicht .
, ich möchte gerne wissen was bedeutet 7002 und Busy =1 .
Danke dir Harald.
 
Was macht dein Merker 100.1 und 2.1. Grundsätzlich kannst du den Empfang immer freigeben, oder halt wenn deine Verbindung aufgebaut ist.
Einfacher wäre es glaube ich für dich. Wenn du statt alles selber zu machen, den TRCV_C und TSEND verwendest.
TRECV_C dazu verwenden die Verbindung aufzubauen und zu halten.

Hast du das Programm aus irgendeinem Beispiel genommen? Du hast da einige Globale Variablen die nicht zwingend Global sein müssen, werden die sicher nirgends überschrieben?
 
was meinst wie sieht aus TSEND
Den TSEND-Aufruf im Programm anschauen (wie Dein 4. Bild mit TRCV) zum Überprüfen. z.B. könnte es sein, daß beim TSEND eine falsche Länge angegeben ist und anstatt 5 Byte vielleicht nur 1 Byte oder 100 Byte gesendet werden?


mit 2 sps habe ich schon getestet und funktioniert ok. mit PC noch nicht .
, ich möchte gerne wissen was bedeutet 7002 und Busy =1 .
Aha! Und kamen die 5 Zeichen da korrekt an?
Und was hat TRCV da signalisiert in den Pausen, wenn die zweite SPS nicht antwortet - vielleicht ebenfalls BUSY = 1 und STATUS 7002? Dann wäre das tatsächlich normal (ich weiß es nicht und habe keine S7-1x00 zum testen).

Wieso steht in Deinen Bildern zum Verbindungsstatus immer "Verbindung wurde durch Kommunikationspartner getrennt"? Was macht das Fremd-Gerät da? Ein Timeout oder Comm-Reset, wenn es nichts vernünftiges empfängt?

Harald
 
Zurück
Oben