HEXAGON
HEXAGON

Design. Make. Inspect.

Fanuc Postprozessor selbst erstellt..., 100% PP mit Feinheiten

Beitrag 24.01.2016, 03:27 Uhr
Einzahler
Level 1 = Community-Lehrling
*
Hallo Edgecamler,

ich arbeite seit ca. einem halben Jahr (wieder) mit Edgecam. Ich hatte im PP erst nur die nötigsten Anpassungen gemacht. Über die Feiertage hatte ich nun etwas Zeit und habe mich dann etwas genauer mit dem Code-Wizard beschäftigt,
Das Ergebniss: Ein Postprozessor für eine Matsuura MX520 mit Fanuc-31i Steuerung der praktisch alle Maschinenfunktionen voll unterstützt. Der erzeugte NC-Code kann ohne "Nacharbeit" direkt verwendet werden. Na ja, das sollte ja eigentlich selbstverständlich sein. Meine Erfahrung (Mit anderen CAM) hatte mich bisher eines besseren belehrt.
Hier ein paar Feinheiten bzw. Details zum PP, die ich selbst programmiert habe:

1. Umlaute wie ä und Ö sowie Sonderzeichen wie z.B. ² werden im NC-Code umgewandelt!
Z.B. Gehäuse in Gehaeuse, Fräser in Fraeser. Manche Steuerungen sind da etwas "Empfindlich"...

2. Die Hochgeschwindigkeitstoleranz wird direkt in in den passenden R-Wert (G121 R0 bis G121 R10) umgewandelt

3. Der NC-Code wird auf Wunsch so ausgegeben, dass an der Steuerung (über eine Variable) die Anzahl der gefrästen Werkstücke eingestellt werden kann. Z. B. setze ich #530=4. Dann werden 4 Werkstücke bearbeitet. Für jedes Werkstück muss vorher jeweils ein Dynamischer NP gesetzt werden. Die Bearbeitung kann Werkstück für Werkstück zwischen dem Werkzeugwechsel oder zwischen dem Achsschwenken erfolgen.

4. Die Schwenkachsenklemmung kann mit einem M-Befehl im EdgeCAM abgeschaltet werden. Nach einem Werkzeugwechsel schaltet sie sich automatisch wieder ein.

5. Die Datumsausgabe ist verschönert. Alt: 24.01.16 Neu: 24.Jan.2016.

Wenn es von Interesse ist, kann ich den entsprechenden Code auch ins Forum setzen...

Grüße aus dem Lipperland

Der Beitrag wurde von Einzahler bearbeitet: 24.01.2016, 03:29 Uhr
   
Beitrag 24.01.2016, 15:58 Uhr
evolve
Level 2 = Community-Facharbeiter
**
Hi, ja hätte ich.
Hast Du vielleicht auch den Code für eine Heidenhain 530? 426 ginge auch. Egal ob
5ax, 4ax oder 3ax.

Gruß


--------------------
Bis dann, evolve
---------------------------------------------
Stillstand ist der Tod
   
Beitrag 24.01.2016, 17:33 Uhr
Einzahler
Level 1 = Community-Lehrling
*
QUOTE (evolve @ 24.01.2016, 15:58 Uhr) *
Hi, ja hätte ich.
Hast Du vielleicht auch den Code für eine Heidenhain 530? 426 ginge auch. Egal ob
5ax, 4ax oder 3ax.

Gruß

Hallo,
der Code sollte für alle Steuerungen funktionieren und muss an die entsprechenden Stellen im PP-Assistenten eingebaut werden. Ich beschreibe dann auch genau, wo es in den bestehenden PP eingebaut werden muss. Nur bei Punkt 3 sehe ich Probleme, da der Heidenhain NC-Code etwas anders ist. Muss dann, wenn möglich, etwas angepasst werden. Leider habe ich zur Zeit keine Maschine mit ner Heidenhain um das zu Testen.
Da ich hier zu Hause keine EC-Vollversion habe, kann ich den Code erst nächste Woche ins Forum setzen.
Bis dahin...
   
Beitrag 25.01.2016, 23:59 Uhr
Einzahler
Level 1 = Community-Lehrling
*
Hallo Edgecamler,

hier nun der erste Teil zu Punkt 1.
Wer kennt das nicht? In den Arbeitsplänen, Toollisten und Materialien schleichen sich immer wieder Umlaute und Sonderzeichen ein.
Z.B. Fräser, Gehäuse, der Programierer Jürgen Müller oder der Werkstoff <0,8%Co<500N/mm².
Auf einige dieser Zeichen reagieren die meisten Steuerungen sehr "allergisch".
Lösung 1: Alle Kommentate aus dem NC-Code rauslassen! Na ja, hilft nicht gerade der Übersichtlichkeit.
Lösung 2: Akriebisch darauf achten, das keine Sonderzeichen in die Datenbanken kommen! Auch nur bedingt möglich.
Lösung 3: Man fummelt alle Sonderzeichen von Hand aus dem NC-Code! Spätestens nach den zehnten erfolglosem Versuch, das Programm auf die Steuerung zu übertragen, ist man Reif für die Klapse!
Lösung 4: Man schreibt das Problem an Vero und hoft auf ein Update! Wer bis 2035 Zeit hat.....

Einerseits hat es mich schon gewundert, dass sich Vero oder auch andere CAM-Hersteller noch nicht diesem offen sichtlichem Problem angenommen haben.
Andererseits gefällt mir meine Lösung um so besser, da ich jetzt selber bestimmen kann, wo und wie die Sonderzeichen ersetzt werden sollen.
Z.B. Im NC-Code Ersetzen, in den gedruckten Werkzeuglisten nicht.
Vorab noch ein paar Anmerkungen:
- Für alles, was Ihr am Postprozessor ändert, übernehme ich kein Haftung. Ich garantiere auch nicht, dass der Code bei euch läuft.
- Es empfiehlt sich, vorher die Daten (speziell vom PP) zu sichern. Wäre schade, wenn man sich einen funktionierenden PP zerschießt!
- Der Code-Konstruktor läuft nicht mit der Trainings-Lizenz

Hier nun die Prozedur um die Umlaute zu ersetzen. Dieser Code muß in das "Anwenderdefinition Whiteboard". Wenn schon etwas dadrin steht, setzt den Code unten dran.
Zeilen, die nach dem ;CODE: ein * haben, sind Kommentare und erläutern die einzelnen Schritte.

;CODE: *--------------Prozedur Umlaute ersetzen------------------
;CODE:
;CODE: *Den String an die Variable $REPLACE übergeben und Prozedur REPLACE_MV aufrufen.
;CODE: *Nach Durchlauf enthält die Variable $REPLACE den geänderten String
;CODE:
;CODE: %DECLARE=#SuEr1,#SuEr2,$REPLACE,$REP4,$REP3,$REP2,$REP1
;CODE: %DECLARE=$REPMV,#REPN3,#REPN2,#REPN1,#REPN0
;CODE:
;CODE: %PROCEDURE=REPLACE_MV
;CODE:
;CODE: *Startwerte äussere Schleife
;CODE: *Die Variable $REPMV enthält jeweils den Umlaut und die zwei zu ersetzenden Zeichen
;CODE: $REPMV="ÄAEäaeÖOEöoeÜUEüueßsz²-2³-3%Pr°Gr"
;CODE: *Zeichenkettenlänge ermitteln
;CODE: #REPN3=STRLENGTH($REPMV)
;CODE: *Zeiger auf erstes Zeichen
;CODE: #REPN0=1
;CODE: *Anfang außere Schleife, Such- und Ersatzzeichen festlegen
;CODE: @STARTREP0
;CODE: *Zu suchende unb zu ersetzende Zeichen extrahieren
;CODE: #REPN1=#REPN0+1
;CODE: #REPN2=#REPN1+1
;CODE: $REP1=STRMID($REPMV,#REPN0,#REPN0)
;CODE: $REP2=STRMID($REPMV,#REPN1,#REPN2)
;CODE: *Zeiger auf nächstes Zeichen erhöhen
;CODE: #REPN0=#REPN0+3
;CODE:
;CODE: * Innere Schleife, Suchen/Ersetzen
;CODE: *Startwerte innere Schleife setzen
;CODE: *Zeichenkettenlänge ermitteln
;CODE: #SuEr1=STRLENGTH($REPLACE)
;CODE: #SuEr1=#SuEr1+1
;CODE: *Zeiger auf erstes Zeichen
;CODE: #SuEr2=1
;CODE: *In $REP4 wird der geänderte String zusammengesetzt. Startwert ist ""
;CODE: $REP4=""
;CODE: *Innere Schleife
;CODE: @STARTREP1
;CODE: *Zeichen aus String holen
;CODE: $REP3=STRMID($REPLACE,#SuEr2,#SuEr2)
;CODE: *Wenn Sonderzeichen, dann ersetzen
;CODE: %IF $REP3=$REP1 %THEN $REP3=$REP2
;CODE: *Neue Zeichenkette zusammensetzen
;CODE: $REP4=STRCAT($REP4,$REP3)
;CODE: *Zeiger auf Zeichen um 1 erhöhen
;CODE: #SuEr2=#SuEr2+1
;CODE: *Wiederholen, bis Ende erreicht
;CODE: %IF #SuEr2<>#SuEr1 @STARTREP1
;CODE: *Geänderte Zeichenkette in Übergabevariable
;CODE: $REPLACE=$REP4
;CODE: %IF #REPN0<=#REPN3 @STARTREP0
;CODE:
;CODE: %ENDM

In der Zeile
;CODE: $REPMV="ÄAEäaeÖOEöoeÜUEüueßsz²-2³-3%Pr°Gr"
ist immer ein zu ersetzendes Zeichen und zwei Zeichen zum ersetzen. "ÄAE" bedeutet, Ä wird mit AE ersetz usw. Die Kette kann nach belieben geändert oder erweitert werden.
Es müssen aber immer eins plus zwei Zeichen sein!

So, der erste Teil ist geschaft. Jetzt muss man "nur" noch die Prozedur an der gewünschten Stelle mit der entsprechenden Variable Aufrufen.
Für den Programmstart könnte das so aussehen:

%
;CODE: $REPLACE=JOBCOM < Variable JOBCOM in die Übergabevariable schreiben
;CODE: %CALL=REPLACE_MV < Prozedur aufrufen
;CODE: $USER5=$REPLACE < Wert in USER5 schreiben
<[PROGID]> ([ANWENDER-STRING-5]) < Ausgabe in den NC-Code
;CODE:
;CODE: $REPLACE=JOBCUST
;CODE: %CALL=REPLACE_MV
;CODE: $USER4=$REPLACE
(KUNDE : [ANWENDER-STRING-4])
;CODE:
(WERKSTUECK : [ANWENDER-STRING-5])
;CODE:
;CODE: $REPLACE=JOBMATL
;CODE: %CALL=REPLACE_MV
;CODE: $USER5=$REPLACE
(MATERIAL : [ANWENDER-STRING-5])
;CODE:
;CODE: $REPLACE=JOBPROG
;CODE: %CALL=REPLACE_MV
;CODE: $USER5=$REPLACE
(PPROGRAMMIERER: [ANWENDER-STRING-5])
;CODE:

Den Text nach dem Zeichen < nicht einfügen. Nur zur Erläuterung!

Der ausgegebene NC-Code sieht dann z.B. so aus:

%
<123456789> (XS Gehaeuse)
(KUNDE : Baerenjaeger)
(WERKSTUECK : XS Gehaeuse)
(MATERIAL : Edelstaehle 700-1200 N/mm-2)
(PROGRAMMIERER : Juergen Mueller)

Für den Werkzeugkommentar sieht der Code z.B. so aus:
;CODE: *Umlaut entfernen
;CODE: $REPLACE=USERDEFINEDSTRING
;CODE: %CALL=REPLACE_MV
;CODE: $USER5=$REPLACE
;CODE: *
[AUSBLEND][SATZNUM]G2900 P1 ([ANWENDER-STRING-5])
[AUSBLEND][SATZNUM][<C>REV-NR] M06
[AUSBLEND][SATZNUM][NÄCHSTESWKZ]

An weiteren Stellen im PP nach Bedarf anpassen.
Dann den PP Kompilieren (Mit dem Zahnradbutton).
In Edgecam das Fenster "Maschinendiagramm" aufrufen. Mit der Maus auf die Maschine gehen und rechte Taste drücken.
Dann "Maschine erneut laden" auswählen.
NC-Code erstellen und Ergebnis überprüfen.
Wenn es Probleme Gibt!?
Beim Kompilieren: Der Kompiler gibt einen gute Fehlerdatei aus. Genau durchlesen! Der Fehler ist dann schell gefunden.
Bei der Erstellung des NC-Codes: Bei mir hat sich Edgecam bei der Erzeugung des NC-Codes aufgehängt, wenn manche Variablen nicht belegt sind bzw. nichts in das Feld eingetragen wurde.
Dies Betrifft z.B. Feld "Werkzeugdatenbank" bei der Werkzeugauswahl. Muss mal sehen, ob man das noch irgendwie abfangen kann.

So, ich hoffe, Ihr habt das Prinzip verstanden!
Die anderen Features kommen im Anschluss...

Viel Spaß und Erfolg
Grüße aus dem Lipperland
   
Beitrag 26.01.2016, 17:37 Uhr
Einzahler
Level 1 = Community-Lehrling
*
Hallo Edgecamler,

ich hoffe, der Teil mit den Umlauten und Sonderzeichen hat soweit geklappt.
Hier kommt der nächste Teil zu Pos. 4, Verschönerung der Datumsausgabe.

Bei den "Original-Variablen" sieht das Datum so aus:
(DATUM: 26/01/16 oder 01/26/16 oder 26 . 1 . 16 )

Der Code im PP:
(DATUM: [DATUMGB] oder [DATUM] oder [TAG].[MONAT].[JAHR])

Wie man sieht, nicht gerade der Hit. Kann auch zu Verwechselungen führen. Z.B der 1.12.15: wurde das jetzt am 1.Dez.2015 oder am 12.Jan.2015 erstellt?
Gut, sicherlich nicht Kriegsenscheident und Schönheit wird in unserem Gewerbe meist nicht bezaht.
Wer es aber Trotzdem haben will, hier der Code:

In das "Anwenderdefinition Whiteboard" diese Prozedur einfügen:

;CODE: *--------------Prozedur Datum verschönern------------------
;CODE:
;CODE: %DECLARE=#DATE1,#DATE2,#DATE3
;CODE: %DECLARE=$OLDDATE,$NEWDATE,$DATES1
;CODE: %DECLARE=$MONATE
;CODE:
;CODE: %PROCEDURE=DATE_TO_GE
;CODE: $MONATE="JanFebMrzAprMaiJunJulAugSepOktNovDez"
;CODE:
;CODE: * Tag einfügen
;CODE: $NEWDATE=""
;CODE: $NEWDATE=STRMID($OLDDATE,1,2)
;CODE: $NEWDATE=STRCAT($NEWDATE,".")
;CODE:
;CODE: * Monat einfügen
;CODE: $DATES1=STRMID($OLDDATE,4,5)
;CODE: #DATE1=STRTONUM($DATES1)
;CODE: #DATE3=#DATE1*3
;CODE: #DATE2=#DATE3-2
;CODE: $DATES1=STRMID($MONATE,#DATE2,#DATE3)
;CODE: $NEWDATE=STRCAT($NEWDATE,$DATES1)
;CODE:
;CODE: * Jahrtausend einfügen
;CODE: $NEWDATE=STRCAT($NEWDATE,".20")
;CODE:
;CODE: * Jahr einfügen
;CODE: $DATES1=STRMID($OLDDATE,7,8)
;CODE: $NEWDATE=STRCAT($NEWDATE,$DATES1)
;CODE:
;CODE: %ENDM

In "Programm Start" dies einfügen und je nach Wunsch ändern:

;CODE: $OLDDATE=UKDATE
;CODE: %CALL=DATE_TO_GE
;CODE: $USER5=$NEWDATE
(DATUM: [ANWENDER-STRING-5] )

Die Ausgabe in NC-Code sieht dann z.B. so aus:
(DATUM: 26.Jan.2016 )

Ach ja, ganz wichtig, dran denken:
Zu Silveser im Jahr 2100 müßt Ihr beim Jahrtausend die 0 auf 1 setzen! Also Knoten ins Taschentuch!

Viel Spaß
   
Beitrag 27.01.2016, 16:01 Uhr
B00Nedge
Level 1 = Community-Lehrling
*
Hallo Einzahler,

erstmal: Sehr cool, dass Du hier Code von Dir einstellst! Meine Frage im Anschluss lautet: Wo hast Du Dir das Wissen angeeignet - gibt es eventuell doch zu der Programmiersprache Literatur?

Über eine Antwort diesbezüglich würde ich mich freuen
Lieb Grüße
B00Nedge
   
Beitrag 27.01.2016, 23:38 Uhr
Einzahler
Level 1 = Community-Lehrling
*
QUOTE (B00Nedge @ 27.01.2016, 16:01 Uhr) *
Hallo Einzahler,

erstmal: Sehr cool, dass Du hier Code von Dir einstellst! Meine Frage im Anschluss lautet: Wo hast Du Dir das Wissen angeeignet - gibt es eventuell doch zu der Programmiersprache Literatur?

Über eine Antwort diesbezüglich würde ich mich freuen
Lieb Grüße
B00Nedge

Hallo B00Nedge,
also wenn du Literatur in Form eines gedrucken Buches meinst, und dann auch noch zum Edgecam-PP, sieht es schlecht aus.
AAAABER
bei Edgecam wird schon eine eine Menge mitgeliefert! Und zwar in den Hilfedateien.
Zum Einstieg in den PP-Assistenten reicht die Hilfedatei. Diese kann man normalerweise über den Assistenten aufrufen oder
C:\Program Files (x86)\Vero Software\Edgecam 2016 R1\Language\Deutsch\postk2.chm
Diese Hilfe ist größten Teils in deutsch und reicht um sich einen ersten PP zusammen zu "Clicken". Ja, genau, du hast richtig gelesen. "Clicken!".
Mit den PP- Vorlagen hat man schon ein gutes Grundgerüßt für den PP. Hier kann man sich schon ganz gut mit dem PP-Assistenten und dem PP vertraut machen. Die meisten Probleme lassen sich hier auf einfache Weise lösen und anpassen und man kriegt zumindest einen lauffähigen PP ohne "Schnik-Schnack" hin (zu mindest für "normale" Maschinen).
Wenn man dann den PP weiter anpassen will (oder muß) und echten CODE braucht, dann ist die Hilfedatei "cgcomp.chm" vom Kompiler die erste Wahl. Die ist allerdings in Englisch.
Gut, für jemanden, der sich noch nie mit Programmieren auseinander gesetzt hat, werden das auch nur "Bömische Dörfer" sein. Aber wer schon mal in irgend etwas auf dem PC programmiert hat (z.B. in Visual Basic), wer etwas mit einer IF THEN Verzweigung anfangen kann, der ist hier richtig. Wichtig für den Programmierer sind die TOKEN und Variablennamen der Systemvariablen. Die findet Ihr auch in der "cgcomp.chm". Den Rest sucht man sich dann in den Foren zusammen. Im Support-Forum (Englisch) von Edgecam findet man auch einiges. Da gibt es auch eine extra "Abteilung" für den PP.
Lohnenswert ist auch ein Blick in die .mxt -Datei (FräsPP) im Machdef-Verzeichnis. Das ist die Datei, die beim Kompilieren erzeugt wird und läßt sich mit einem einfachem Text-Editor öffnen.
Dann heißt es Programmieren und ausprobieren. Und nur nicht die Geduld verlieren!!!
Tja, das sind dann schon mal die ersten Schritte, aber noch lange nicht alles! Weitere Möglichkeiten hat man dann noch mit Java-Skript.
Aber das steht auf einem Blatt...

Ich wünsche viel Spaß beim Programmieren.
Liebe Grüße vom Einzahler
   
Beitrag 28.01.2016, 00:04 Uhr
Einzahler
Level 1 = Community-Lehrling
*
QUOTE (evolve @ 24.01.2016, 15:58 Uhr) *
Hi, ja hätte ich.
Hast Du vielleicht auch den Code für eine Heidenhain 530? 426 ginge auch. Egal ob
5ax, 4ax oder 3ax.

Gruß


Na klar, und nebenbei wird auf der Grafikkarte noch ein halbes Hänchen gegrillt! ;-)

Wie schon beschrieben, muss der Code "nur" in deinen bestehenden PP eingefügt und angepasst werden. Der restliche Code zu den anderen Punkten kommt noch...

Grüße
   
Beitrag 28.01.2016, 10:39 Uhr
evolve
Level 2 = Community-Facharbeiter
**
QUOTE (Einzahler @ 28.01.2016, 01:04 Uhr) *
Na klar, und nebenbei wird auf der Grafikkarte noch ein halbes Hänchen gegrillt! ;-)

Wie schon beschrieben, muss der Code "nur" in deinen bestehenden PP eingefügt und angepasst werden. Der restliche Code zu den anderen Punkten kommt noch...

Grüße


Ein einfaches "Nein" hätte es auch getan.
Danke.


--------------------
Bis dann, evolve
---------------------------------------------
Stillstand ist der Tod
   
Beitrag 16.02.2022, 12:27 Uhr
KSTDIJA
Level 4 = Community-Meister
****
Hallo Freunde der Postprozessorerstellung,

bis zur Version 2021 hat die Prozedur von Einzahler zur Sonderzeichenersetzung ( Geschrieben: 25.01.2016, 23:59 Uhr) , genau das gemacht, was es tun soll. Dafür schonmal rückblickend vielen Dank.

Jetzt habe ich alle Heidenhain PPs unserer Firma auf die 2022er Schablone aktualisiert, nun gibt die Prozedur nur noch "Käse" aus.

Wenn ich zum Beispiel den Kommentar %Ära8° schreibe, erhielt man bis EC2021 mit der Prozedur die Ausgabe PrAEra8Gr, die Ersetzungen sind ja in der Prozedur so definiert: ;CODE: $REPMV="ÄAEäaeÖOEöoeÜUEüueßss²-2³-3%Pr°Gr"

In der EC2022 erhalte ich nach Aktualisierung der PP-Schablonen diese Übersetzung: P„A„Ÿ°G²œ¶o8°G° . Komischerweise sind darin auch Sonderzeichen enthalten, die in der Prozedur im String $REPMV überhaupt nicht genannt sind.

Kann jemand von euch dieses Problem nachvollziehen und hat evtl. auch schon einen Ansatz, wie man es lösen könnte?

Ach so, wenn im Kommentar keine Umlaute und Sonderzeichen drin sind, richtet die Prozedur keinen Schaden an.

Freue mich auf euer Feedback, Dirk

PS:

Hier der Eintrag im Codekonstruktor "Kommentar"

;CODE:
;CODE: $REPLACE=USERDEFINEDSTRING
;CODE: %CALL=REPLACE_MV
;CODE: $USER5=$REPLACE
[SATZNUM] [SEMIKOLON][ANWENDER-STRING-5]

Und hier die (unveränderte, originale)Prozedur von Einzahler, im Codekonstruktor Whiteboard:

;CODE: *--------------Prozedur Umlaute ersetzen------------------
;CODE:
;CODE: *Den String an die Variable $REPLACE übergeben und Prozedur REPLACE_MV aufrufen.
;CODE: *Nach Durchlauf enthält die Variable $REPLACE den geänderten String
;CODE:
;CODE: %DECLARE=#SuEr1,#SuEr2,$REPLACE,$REP4,$REP3,$REP2,$REP1
;CODE: %DECLARE=$REPMV,#REPN3,#REPN2,#REPN1,#REPN0
;CODE:
;CODE: %PROCEDURE=REPLACE_MV
;CODE:
;CODE: *Startwerte äussere Schleife
;CODE: *Die Variable $REPMV enthält jeweils den Umlaut und die zwei zu ersetzenden Zeichen
;CODE: $REPMV="ÄAEäaeÖOEöoeÜUEüueßss²-2³-3%Pr°Gr"
;CODE: *Zeichenkettenlänge ermitteln
;CODE: #REPN3=STRLENGTH($REPMV)
;CODE: *Zeiger auf erstes Zeichen
;CODE: #REPN0=1
;CODE: *Anfang außere Schleife, Such- und Ersatzzeichen festlegen
;CODE: @STARTREP0
;CODE: *Zu suchende unb zu ersetzende Zeichen extrahieren
;CODE: #REPN1=#REPN0+1
;CODE: #REPN2=#REPN1+1
;CODE: $REP1=STRMID($REPMV,#REPN0,#REPN0)
;CODE: $REP2=STRMID($REPMV,#REPN1,#REPN2)
;CODE: *Zeiger auf nächstes Zeichen erhöhen
;CODE: #REPN0=#REPN0+3
;CODE:
;CODE: * Innere Schleife, Suchen/Ersetzen
;CODE: *Startwerte innere Schleife setzen
;CODE: *Zeichenkettenlänge ermitteln
;CODE: #SuEr1=STRLENGTH($REPLACE)
;CODE: #SuEr1=#SuEr1+1
;CODE: *Zeiger auf erstes Zeichen
;CODE: #SuEr2=1
;CODE: *In $REP4 wird der geänderte String zusammengesetzt. Startwert ist ""
;CODE: $REP4=""
;CODE: *Innere Schleife
;CODE: @STARTREP1
;CODE: *Zeichen aus String holen
;CODE: $REP3=STRMID($REPLACE,#SuEr2,#SuEr2)
;CODE: *Wenn Sonderzeichen, dann ersetzen
;CODE: %IF $REP3=$REP1 %THEN $REP3=$REP2
;CODE: *Neue Zeichenkette zusammensetzen
;CODE: $REP4=STRCAT($REP4,$REP3)
;CODE: *Zeiger auf Zeichen um 1 erhöhen
;CODE: #SuEr2=#SuEr2+1
;CODE: *Wiederholen, bis Ende erreicht
;CODE: %IF #SuEr2<>#SuEr1 @STARTREP1
;CODE: *Geänderte Zeichenkette in Übergabevariable
;CODE: $REPLACE=$REP4
;CODE: %IF #REPN0<=#REPN3 @STARTREP0
;CODE:
;CODE: %ENDM


--------------------
Dirk Jacob
KST Kraftwerks- und Spezialteile GmbH
Hertzstrasse 74-75
13158 Berlin
Tel.: 030/ 9177-2665
Fax.:030/ 9177-2807
email: jacob@kst-berlin.de
web: www.kst-berlin.de
   
Beitrag 05.05.2022, 14:33 Uhr
Einzahler
Level 1 = Community-Lehrling
*
Hallo,
hier mal eine kleine Info zu dem Problem mit den falsch ausgegebenen Zeichen:

Der Support hat folgendes am 21.2.2022 dazu geschrieben:
---
der Fehler wird offensichtlich dadurch verursacht, dass die Funktion STRMID die Kodierung nicht beachtet. Ich habe dies an den internationalen Support weitergegeben. Leider gibt es keinen einfachen Workaround. Aus meiner Sicht gibt es zwei mögliche Lösungen für einen Workaround:

1.: die Trennung anhand von Trennzeichen anstatt von festen Zeichenlängen
2.: der Verzicht auf eine Variable, welche alle Ersetzungen zusammenfasst

Alternativ könnte auch die Kodierung im PP-Code interpretiert werden, indem das erste Byte das Sonderzeichens ausgewertet wird. Dies halte ich jedoch nicht für praktikabel. Zudem ist nicht absehbar, wie sich diese Lösung nach einer Korrektur der Funktion STRMID verhalten wird.

---
und dann:
---
der Fehler wurde vom internationalen Support bestätigt. Er wird nun unter der Entwicklungsnummer ECAM-62275 geführt. Sobald wir neue Informationen erhalten, werden wir uns erneut bei Ihnen melden.
---
Ich habe heute mal einen Test mit der neuesten Version gemacht und der Fehler ist noch nicht behoben, habe aber auch noch keine Nachricht diesbezüglich bekommen.

Grüße
   
2 Besucher lesen dieses Thema (Gäste: 2)
0 Mitglieder: