TIA Relais Controller mit TSEND_C ansteuern - verweigert den Verbindungsaufbau

Supermario73

Level-2
Beiträge
77
Reaktionspunkte
2
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo zusammen
Ich möchte eine Relais Controller per TSEND_C ansteuern. Der Relais Controller ist wie folgt parametriert:
1.JPG

Ich erhalte folgenden Fehler:
TCON: Kommunikationsverbindung aufbauen (S7-1200, S7-1500)
Der Verbindungspartner verweigert den Verbindungsaufbau, hat die Verbindung abgebaut oder aktiv beendet.

Der Baustein wurde wie folgt parametriert:
2.JPG

Die Kommunikationsparameter sehen wie folgt aus:
3.JPG

Der ConnectionType ist auf 18 eingestellt (type of connection: 12= ISO-on-TCP (18=ISO-on-TCP))

Ich kann leider die Ursache für den Fehler nicht finden. Hat jemand eine Idee?
Besten Dank für Euren Input.
Gute Nacht....
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Natürlich gibt mir der Relais Controller Feedbacks, doch diese habe ich noch nicht umgesetzt also noch kein Receive im Programm eingebunden. Möchte erst ein Relais ansteuern mit dem Befehl "on1". Das klappt aber nicht da der Relaiscontroller den Verbindungsaufbau verweigert und ich nicht rausfinde was nicht in Ordnung ist.
Darum bitte ich um Hilfe.
Besten Dank
 
Wenn das ganze Modbus ist warum nutzt du dann nicht den Modbus Server bzw. Client der in TIA dabei ist? Ob dein Board jetzt Client oder Server ist weiß ich nicht.

Die Bausteine heißen.:
MB_SERVER
MB_CLIENT
 
Der TSEND_C ist auf jeden Fall nicht das richtige, definitiv nicht als Iso-On-TCP (evtl. mit TCP wenn du vor haben solltest Modbus-TCP selber in Software zu programmieren.)

Wenn du UDP verwenden willst, dann nimmst du TUSEND / TURECV, wenn du Modbus-TCP einsetzen willst, dann nimmst du die passenden Bausteine für Modbus TCP. Ich würde Modbus-TCP einsetzen, das ist vermutlich einfacher als UDP.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
o.k. Nun habe ich den Relaiscontroller als TCP Server konfiguriert:
1.JPG

Habe den Baustein MB_CLIENT verwendet:
2.JPG

Der DB wurde wie folgt konfiguriert:
Die IP Adresse: 192.168.0.215
ModbusMode = 2 (Schreiben)
modbusDataAddress = 1 (Dieser Parameter ist mir nicht ganz klar)
modbusDataLen = 48 (es sind 6 Char à 8 Bit =48)
3.JPG

Daten zu schreiben: Text: 'on1:02' heisst Relais 1 für 2 Sekunden ansteuern
4.JPG

Ich erhalte die Fehlermeldung 80C8 =
Keine Antwort des Servers im definierten Zeitraum. Überprüfen Sie die Verbindung zu dem Modbus-Server. Dieser Fehler wird erst nach Abschluss der konfigurierten erneuten Versuche gemeldet.
Empfängt die Anweisung "MB_CLIENT" keine Antwort mit der ursprünglich übermittelten Transaktions-ID (siehe statische Variable MB_TRANSACTION_ID) innerhalb des definierten Zeitraums, wird dieser Fehlercode ausgegeben.

Ich weiss nicht was falsch sein könnte.
Für jede Hilfe bin ich dankbar.
 
Für Modbus benötigst du eine Definition der Register und deren Funktion. Bei Modbus ist es zumindest unüblich dort irgendwelche Strings reinzuschieben, das würde dann eher zu UDP passen. Ist zu dem Gerät denn überhaupt ein Handbuch verfügbar?
 
Ja habe eine kleine Beschreibung. Kann den Kontroller wie folgt konfigurieren:
Mode:Devices can work in TCP server, TCP client, UDP server, UDP client and DNS. In DNS mode, the device interprets the domain name in the "domain name" box and gets the IP address. After the device connects the remote TCP server with the TCP client, the remote port is the port of the remote TCP server.

Laut Siemens Handbuch sollten CHAR auch gesendet werden können:
5.JPG

Kann natürlich auch eine UDP Verbindung austesten..
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Meinerseits nur eine Vermutung:

Wenn du den Haken bei "MODBUS TCP" setzt ist automatisch der Server für Modbus auf Port 502 aktiv (502 ist der Default-Port für Modbus TCP). Bei Modbus TCP schreibst oder liest du einzelne Register oder Coils, ein Register sind 16 Bit und ein Coil ist ein Bit. Dafür gibt es verschiedene Funktionscodes. Das muss man bei Modbus alles wissen.

Die anderen Einstellungen der Dienste sind evtl. dafür um dort einfach einen String hinzuschicken um ein Relais einzuschalten.

Evtl. funktioniert es nicht Modbus TCP und den anderen Server ebenfalls auf Port 502 starten zu wollen. Wenn du deine letzte Einstellung auf Port 50000 änderst, und dazu dein Programm aus Post 1 verwendest (was ja TCP verwendet) und dort den Port 50000 einstellst, könnte es eventuell funktionieren.

Ich persönlich würde sowas vorher am PC probieren, also TCP oder UDP mit einem Programm wie "Hercules", oder Modbus TCP mit einem entsprechenden Programm. Damit bist du viel schneller mit dem Ausprobieren als mit der SPS. Außerdem sind meistens die Fehlercodes aussagekräftiger, oder du kannst auch einfach mit installiertem Wireshark mitschneiden und sehen was passiert.
 
O.K. Dank für die Antwort. Was ich nicht ganz verstehe ist der Parameter ID. Bei anderen Kommunikationen habe ich am Server die ID eingestellt und in der SPS Software die gleiche ID verwendet. Bei diesem Relais Controller kann ich keine ID vergeben (Sehe nicht wo diese einzustellen wäre). Ich habe einfach eine nicht gebrauchte ID verwendet. Kann das Problem mit der ID zusammenhängen?
 
Du meinst die Connection ID im S7-Programm? Die muss programmweit für jede Verbindung die du verwendest einmalig sein. D.h. falls du noch eine Verbindung zu anderen Geräten aufbaust, muss diese eine andere ID verwenden (das ist sozusagen eine Ressourcen-ID).

Link zu Hercules:

Das Programm ist wirklich sehr einfach, du nimmst deine Einstellungen z.B. aus deine, 1. Post, nimmst in Hercules UDP Client und schickst deinen String, eventuell funktioniert es dann ja schon. Das kannst du dann in der SPS umsetzen.
 
Für TCP Client kannst du zumindest soweit ersichtlich, das Programm aus deinem ersten Post verwenden. Du musst aber den Connection-Type auf TCP umstellen, dann macht der Baustein das gleiche was auch das Hercules Programm macht, Iso-On-TCP ist definitiv falsch.
 
Also der sende Auftrag wird erfolgreich gesendet ohne Fehler, doch das Relais schaltet nicht: Bekomme schön Satus 7004 dann 7005
Keine Ahnung warum das Relais nun nicht schaltet.
1.JPG
2.JPG
 
Was steht denn bei dir in sendString? Strings sind bei Siemens (und anderen IEC Steuerungen) etwas anders als üblich. Um ein "on1" zu senden würde ich ein Array[1..3] of char anlegen, dort die Zeichen eintragen und das dann absenden.

Wenn du einen String (ohne Längenangabe) sendest, dann sind das 253 Zeichen. Das hängt mit dem internen Aufbau von Strings zusammen.
 
Zurück
Oben