TIA Array of Char per Profinet-Schnittstelle versenden

Marcel97

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

ich stehe momentan vor dem Problem, dass ich eine Anlage zum ersten mal mit einem PN/PN Coupler ausstatten muss.
Über diesen sollen verschiedene Daten versendet und quittiert werden. Dies klappt auch alles schon so weit ganz gut.
Was mir momentan Probleme bereitet, ist ein Text über die Profinet-Schnittstelle zu versenden.
Nach einer vorher definierten Anzahl an Artikeln soll von der SPS eine Meldung " Summe erreicht" versendet werden.
Diese Meldung wollte ich über ein Array of Char weitergeben. Allerdings meckert TIA Portal immer die explizite Konvertierung an.
Daraufhin hatte ich versucht den Text als String zu versenden, dabei bekomme ich allerdings nur das "S" von "Summe erreicht" versendet.

Wie bekomme ich einen kompletten Array oder alternativ einen String mit mehreren Buchstaben versendet? In dem Informationssystem von TIA Portal konnte ich sehen das es zum Versenden von Arrays anscheinend keinen passenden Datentyp gibt.

Vielen Dank schonmal für eure Hilfe
 
Moin,
ich verstehe noch nicht so ganz an welcher Stelle es genau scheitert? Möchtest du das Char-Array auch über den Koppler schicken oder was meinst du mit "über Profinet-Schnittstelle verschicken"? Welche explizite Konvertierung will nicht funktionieren, an welcher Stelle? Vielleicht zeigst du uns mal deinen Code.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,

Genau, das Char-Array soll auch über den Koppler geschickt werden. Tia FB.jpg
Das ist mein Funktionsbaustein. Oben sitzt ein Zähler, der die Gutpackungen zählt und ab einer gewissen Summe an Packungen meinen Merker Summe erreicht setzt.
Dieser Merker sorgt dann in dem IF-Baustein dafür, das mein Char-Array über den Koppler geschickt wird. (zumindest in der Theorie...)
Unten in der Info sieht man die Fehlermeldung das die implizierte Konvertierung nicht möglich ist.
Wahrscheinlich muss ich einfach nur den richtigen Datentyp einstellen, diesen konnte ich aber bis jetzt nirgends finden.

Ich hänge auch nochmal den Datenbaustein an, indem das Char-Array angelegt ist. Dieser ist aber eigentlich nicht sonderlich spektakulär.
Tia DB16.PNG

Bei dem Versuch das ganze mit einem String zu lösen, sieht der Fb eigentlich genauso aus, nur das statt des Arrays halt der String in dem IF-Baustein mit dem Ausgang verknüpft ist.
Da er bei dem Datentyp Dint des Ausganges dann auch meckert hatte ich diesen dann umgestellt auf Char (QB statt QD). Mit dieser Möglichkeit konnte ich dann das S von Summe erreicht über den Koppler verschicken. Leider habe ich es aber auch so nicht hinbekommen den Rest zu versenden.
 
Nach einer vorher definierten Anzahl an Artikeln soll von der SPS eine Meldung " Summe erreicht" versendet werden.
Diese Meldung wollte ich über ein Array of Char weitergeben. Allerdings meckert TIA Portal immer die explizite Konvertierung an.

Welche Explizite konvertierung? Da gibts n Baustein strg_to_chars der dir das macht? Nimmst du den? Oder mit BLKMOV gehts natürlich auch wenn du nicht optimiert arbeitest.
welche CPU ist das überhaupt?

Daraufhin hatte ich versucht den Text als String zu versenden, dabei bekomme ich allerdings nur das "S" von "Summe erreicht" versendet.

Hast du eine korrekte Zeichenanzahl beim Senden angegeben?

Was für ein Protokoll nutzt du?

Wie bekomme ich einen kompletten Array oder alternativ einen String mit mehreren Buchstaben versendet? In dem Informationssystem von TIA Portal konnte ich sehen das es zum Versenden von Arrays anscheinend keinen passenden Datentyp gibt.

Wie meinst du das? die einfachste und vermutlich am häufigsten genutzte Sendemethode ist vermutlich das senden von Array of Bytes da man damit Klartext hat und diverse Möglichkeiten vorgeordnet die Bytes umzustellen um an diverse Fremdanlagen zu senden z.B. wenn einem die Siemens Wortgrenze im Wege steht.

Vielleicht erzählst du etwas mehr über das Konzept und deine Vorgehensweise. Vorzugsweise mit Codeausschnitten. Idealerweise mit einer Onlinesicht damit man deine Längenangaben am Baustein sehen kann.
Trace ist bei solchen Unterfangen auch noch hilfreich.

mfG René
 
Ich hänge auch nochmal den Datenbaustein an, indem das Char-Array angelegt ist. Dieser ist aber eigentlich nicht sonderlich spektakulär.
Anhang anzeigen 46303

den kannst du eigentlich genau so versenden wie der da steht. Einfach am sendebaustein anhängen. Länge richtig angeben und ab damit.

Bei dem Versuch das ganze mit einem String zu lösen, sieht der Fb eigentlich genauso aus, nur das statt des Arrays halt der String in dem IF-Baustein mit dem Ausgang verknüpft ist.
Da er bei dem Datentyp Dint des Ausganges dann auch meckert hatte ich diesen dann umgestellt auf Char (QB statt QD). Mit dieser Möglichkeit konnte ich dann das S von Summe erreicht über den Koppler verschicken. Leider habe ich es aber auch so nicht hinbekommen den Rest zu versenden.

das ist natürlich klar das du keinen String in einen DINT kopieren kannst. Aber mach doch aus Summer erreicht ein Array of Char in der richtigen länge. dann willst du ja noch die längenangaben aus dem string loswerden. dafür gibts extra eine Funktion strg_to_chars.

mfG René
 
Zuviel Werbung?
-> Hier kostenlos registrieren
ah, jetzt wird doch ein Schuh draus. Du versuchst gerade ein ganzes Array in ein Ausgangsdoppelword zu schreiben. Das passt natürlich nicht. Du musst einfach jedes Array-Element einzeln in je ein Ausgangsbyte schreiben.
Also
Code:
%QB0 := Summe_erreicht_DB.Summe_erreicht[0]
%QB1 := Summe_erreicht_DB.Summe_erreicht[1]
usw...
und das ganze kann man dann vielleicht noch ein wenig schöner machen - aber probier das erst mal ;)
 
Das Funktioniert, hatte ich als aller erste Möglichkeit. Trotzdem Danke :)

Allerdings finde ich es so nicht wirklich schön.
Dazu kommt, dass auf der Anderen Seite des Kopplers die SPS aus den einzelnen Bytes wieder einen String oder ein Array erstellen muss.
Das wäre soweit nicht schlimm, da die SPS aber nicht zu mir gehört und ich nichts an dem Programm ändern kann, muss ich mich leider Gottes an die Vorgabe halten, das ein Texte Summe erreicht versendet werden soll. :???:
 
welchen Sendebaustein benötige ich denn um den Char-Array über den Profibus Koppler zu versenden?

Sorry den ProfiNET koppler habe ich übersehen, dann brauchst du keinen Sendebaustein. Aber der Ausgangsbereich ist halt absolut. du könntest also z.B. mit POKE_PLK kopieren. das wäre halt ohne Symbolik und auch die Quelle müsste absolut sein.
Du könntest deine Ausgänge auch mit einem UDT eines Array of Byte überlagern. dann wäre symbolische Kopiererei einfacher und ansehnlicher.
Du hast da ja jetzt offenbar symbole drauf die z.B. ein DINT sind. Da deine ausgabe aber daneben noch andere Funktionen haben (eben einen String z.B.) finde ich eine explizite definition des Ausgangsbereichs falsch. Es ist da nämlich nicht immer ein DINT drauf sondern manchmal auch ein CHAR. Aber ein Byte ist es immer.
 
Zurück
Oben