# Azyklische Daten über Profinet



## e_win (26 Februar 2021)

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


----------



## JesperMP (26 Februar 2021)

Ist das Messgerät geheim?
Oder dürfen wir wissen, was es ist?


----------



## PN/DP (26 Februar 2021)

e_win schrieb:


> 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


----------



## e_win (27 Februar 2021)

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


----------



## PN/DP (27 Februar 2021)

e_win schrieb:


> 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


----------



## e_win (5 März 2021)

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.




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

LG Emil


----------



## Oberchefe (5 März 2021)

Kann es sein dass das über RDREC/WRREC läuft?


----------



## e_win (19 März 2021)

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 Emil


----------



## escride1 (19 März 2021)

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


----------



## Paule79 (23 April 2021)

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


----------



## DeltaMikeAir (23 April 2021)

Paule79 schrieb:


> Hi,
> 
> ich hab dazu konkret noch eine Frage.
> Wenn ich die Funktion "RDREC" nutzen will, welchen Parameter nutze ich dort? "VALID"?
> ...



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.


----------



## Paule79 (23 April 2021)

Danke! Ja funktioniert.
Noch einer weitere Frage dazu...
Ich erhalte oft Error-Meldungen meist "C080_C3000"
Dennoch verstehe ich nicht das Problem.



Trotz das ich ".VALID" nutze. 
Liegt es daran, weil ich den Aufruf immer wieder mache?


----------



## blackpeat (23 April 2021)

Naja als Error würde ich das nicht driekt beschreiben. 80C3 heißt das das der Partner gerade keine Resurcen hat zum antworten.


```
ELSIF #instRDREC.ERROR AND NOT (#instRDREC.STATUS = 16#C080C300) THEN // retry if resource unavailable
```


----------



## Paule79 (23 April 2021)

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!


----------



## blackpeat (23 April 2021)

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.


```
#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);
```


----------



## e_win (18 Mai 2021)

Moin,

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


----------

