Azyklische Daten über Profinet

e_win

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

Ziel: Daten von Messgerät auf S7-1200 empfangen und Daten zu Messgerät senden.

Ich habe ein Durchmesser-Messgerät und eine S7-1200 und möchte über Profinet Daten von dem Messgerät abfragen sowie Daten an das Messgerät senden.

Die zyklischen Daten kann ich mitlerweile auch alle senden und empfangen, lediglich bei den azyklischen Daten habe ich Probleme.

Ich habe es mit den Anweisungen "TSEND_C und "TRCV_C" versucht und habe mich dabei an anderen Foreneinträgen, einem recht informativen Youtube Video sowie einer Anleitung von Siemens langgehangelt. Nun habe erhalte ich als Status der Bausteine den Fehler "80C5", dies Bedeutet:
- Verbindung durch den Kommunikationtspartner abgebaut
- LSAP des remoten Verbindungspartners nicht freigegeben

habe online von Simens zu Fehlerbehebung das hier gefunden:
"Prüfen Sie, ob der passive Kommunikationspartner den Verbindungsaufbau initiiert.Prüfen Sie im Parameterdatensatz "TCON_IP_V4" den entfernten und lokalen Port sowie die Verbindungsnummer.Verwenden Sie für den lokalen und entfernten Port dieselbe Portnummer.Der FB startet den Verbindungsaufbau erneut."
und habe das auch ausprobiert, bin damit aber auch nicht weiter gekommen.

Vielleicht weiß von Euch ja jemand weiter. Wenn Euch informationen Fehlen, kann ich diese natührlich ergänzen.


LG Emil
Error 80C5.PNG
 
Zuletzt bearbeitet von einem Moderator:
Zuviel Werbung?
-> Hier kostenlos registrieren
Die zyklischen Daten kann ich mitlerweile auch alle senden und empfangen, lediglich bei den azyklischen Daten habe ich Probleme.
Zyklische Daten klingt wie Profinet-Verbindung mit Profinet Controller und Profinet Device.
Könnte es sein, daß "die azyklischen Daten" als Parameterdatensätze über die bestehende Profinet-Verbindung gesendet werden sollen?

Wie heißt Dein Messgerät? Gibt es zu dem Gerät eine Anleitung/Beschreibung?

Harald
 
Moin,

Danke schon mal für Eure antworten.
Ja genau es ist quasi ein Aufbau von einem Profinet Controller (SPS) und einem Profinet Device (Messgerät).

Und ja so wie ich das Verstehe sollen die Daten als Parameterdatensätze über die Profinet-Verbindung gesendet werden.

Zu dem Messgerät habe ich auch die GSDML Datei eingelesen und damit dann die zyklischen Daten abgefragt.

Das Messgerät ist ein Lasermesskopf der Firma Sikora.
Ich habe dazu auch eine Anleitung und eine Beschreibung zu den Daten über Profibus. Dort wird auch zwischen zyklisch und azyklisch unterschieden, und wie gesagt die zyklischen Daten kann ich alle auslesen. Nur halt bei den azyklischen komme ich nicht weiter.

LG Emil
 
Und ja so wie ich das Verstehe sollen die Daten als Parameterdatensätze über die Profinet-Verbindung gesendet werden.
Dann kannst Du Deine Versuche mit TSEND/TRCV abbrechen. Das Senden von Parameterdatensätzen geht in Profinet so wie in Profibus. Gibt es von Sikora ein Beispielprojekt für S7? Oder Du müsstest uns genauer sagen was für ein Messkopf genau das ist und wo wir die Anleitungen und Beschreibungen finden, dann können wir nachlesen und Dir sagen, wie Du es machen musst. Oder rufe mal bei Sikora an und frage nach einem TIA- oder Step7-Beispiel.

Harald
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,

Von Sikora gibt es kein S7-Beispielprojekt und Sikora konnte mir auch nicht weiterhelfen. Dieses Anybus-Modul wird für die Profinet kommunikation in dem Laser-Messgerät verwendet.

Anbei noch die Datenbeschreibung die ich zu dem Gerät habe.

Ausgangsdaten.PNGEingangsdaten.PNG
Wie bereits gesagt, die zyklischen Daten konnte ich mit der GSDLM-Datei abfragen.

LG Emil
 
Moin,
Ich habe letzten Freitag und Heute versucht die azyklische Kommunikation mit RDREC / WRREC umzusetzten. Obwohl ich nicht gedacht hätte, dass ich es hinbekomme, läuft es nun.
Ich kann nun alle azyklischen Daten empfangen und auch senden. Ich habe für jeden Daten input / output ein eigenen RDREC oder WRREC Baustein genutzt.
Ich werde mein Programm noch um mehr azyklische Daten ergänzen und meine gelesen zu haben, dass die Anzahl an gleichzeitigen RDREC/WRREC Ausführungen begrenzt ist.
Stimmt das? Wenn ja, wie müsste ich mein Projekt anpassen, damit ich die Bausteine nacheinander ausführe?

LG EmilWRREC.jpg
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Grob:

1) Du verknüpfst Done mit dem darauffolgenden
2) Einen Zähler der mit jedem Done hochgezählt wird und beim req dann mit nem Vergleicher ob diese Anweisung nun ausgeführt werden soll anhand des Zählers.

In jedem Fall: Busy und Error/Status auswerten ist empfehlenswert
 
Hi,

ich hab dazu konkret noch eine Frage.
Wenn ich die Funktion "RDREC" nutzen will, welchen Parameter nutze ich dort? "VALID"?
Dort gibt es den Parameter "DONE" nicht...

Viele Grüsse
 
Hi,

ich hab dazu konkret noch eine Frage.
Wenn ich die Funktion "RDREC" nutzen will, welchen Parameter nutze ich dort? "VALID"?
Dort gibt es den Parameter "DONE" nicht...

Viele Grüsse

Ja, genau:
VALID OUT Bool Neuer Datensatz wurde empfangen und ist gültig (RDREC). Das Bit VALID ist einen Zyklus lang WAHR, nachdem die letzte Anforderung fehlerfrei ausgeführt wurde.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Danke! Ja funktioniert.
Noch einer weitere Frage dazu...
Ich erhalte oft Error-Meldungen meist "C080_C3000"
Dennoch verstehe ich nicht das Problem.
Fehler_Datensatz.PNG

Trotz das ich ".VALID" nutze.
Liegt es daran, weil ich den Aufruf immer wieder mache?
 
Naja als Error würde ich das nicht driekt beschreiben. 80C3 heißt das das der Partner gerade keine Resurcen hat zum antworten.

Code:
ELSIF #instRDREC.ERROR AND NOT (#instRDREC.STATUS = 16#C080C300) THEN // retry if resource unavailable
 
Danke.
Ich sehe du realisierst das, indem du es erneut versuchst, wenn die Ressource nicht verfügbar ist.
Wie kann man das realisieren?
Sorry bin noch nicht so erfahren!
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Das kommt drauf an wie du das ganze aufrufst. Vielleicht kannst du mal deinen aufruf Teilen.

So haben wir gerade einen test. tCondition ist dabei ein Merken das wir das ganze anstarten.

Code:
        #test_WRREC_Instance(REQ    := #tCondition AND NOT #test_RDREC_Instance.BUSY,
                             ID     := "S120-3_Los0_6~PHM1_M1_1~SIEMENS_Telegramm_103__PZD-,,,",
                             INDEX  := 16#B02E,
                             RECORD := #statGetAxisErrorPHMKnife.instReadSinamicsMessages.statRequestRecord);
        
        #test_RDREC_Instance(REQ    := (#test_WRREC_Instance.DONE OR #test_RDREC_Instance.BUSY),
                             ID     := "S120-3_Los0_6~PHM1_M1_1~SIEMENS_Telegramm_103__PZD-,,,",
                             INDEX  := 16#B02E,
                             RECORD := #statGetAxisErrorPHMKnife.instReadSinamicsMessages.statResponseRecord);
 
Moin,

Bei mir Funktioniert jetzt das gesamte Projekt so wie ich es haben wollte, Vielen Dank nochmals an alle Tipps :)
 
Hallo Zusammen,

ich bin auch dabei zu versuchen azyklische Daten mit dem RDREC und WRREC Baustein zu lesen und zu schreiben. Kann mir einer von Euch sagen, wie ich den richtigen Index herausfinde? Aus der GSDML Datei konnte ich leider bis jetzt nichts herausfinden.

Gruß

Said
 
Das sollte eigentlich in der Dokumentation des Gerätes stehen, mit dem du kommunizieren willst.
Das sind die Werte 1, 2 und 3. Aber es wird mir der Errorcode invalid_index ausgegeben. Gibt es eine Möglichkeit den gesuchten Index auszulesen?
 
1,2 oder 3. Ob du wirklich richtig stehst, siehst du wenn das Licht angeht ;)
Spaß beiseite. Also Infos welches Gerät, Doku und eventuell einen Auszug von deinem Code ist alles weitere nur eine wilde Raserei.
 
Zurück
Oben