Brauche Hilfe bei ner SCL -> AWL Übersetzung :-)

ach ich lass es jetzt einfach so habt vielen dank für eure geduld, wenn der Header kaputt geht muss halt jeder selbst den generierten code nachpflegen, das wollte ich halt verhindern.
Aber ich glaube so viel aufwand ist das dann auch nicht mehr :)

wäre schön gewesen.

ich bin mir sicher das eure codevorschläge alle funktionieren, aber nicht in meinem fall.

Vielleicht noch ein letztes mal kurz.

ich habe ne funktion, darin wird ein string empfangen über ethernet der soll in einen DB geschrieben werden. der string wird erstmal in ner tempvariablen zwischengespeichert, dann soll die in den Datenblock "Data" geschrieben werden. und zwar an die stelle wo sich die variable "Str" befindet. ich weiß die nummern nicht und wie der DB aufgebaut ist weiß ich auch nicht ich kenne nur DATA und das darin irgendwo ein Str ist den ich beschreiben will. so besser kann ich es nicht erklären ^^
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hi Kai,

das war doch auch nicht böse gemeint. Schreibe doch einfach in den Anfang des DBs (Variable) die Anfangsadresse des Strings, in deinem Programm liest Du die dann aus und generierst Dir daraus den Pointer.

Gruss Daniel
 
hallo :p ich habs auch nicht böse aufgefasst.
Ich darf den DB auf die art nicht verändern. nur in die vorgegebenen bereiche schreiben. zudem muss ich auch gleichzeitig mehrere in data befindliche strings beschreiben. die auch wieder irgendwo darin sind. da bräuchte ich dann auch wieder die adresse
 
Vielleicht noch ein letztes mal kurz.

ich habe ne funktion, darin wird ein string empfangen über ethernet der soll in einen DB geschrieben werden. der string wird erstmal in ner tempvariablen zwischengespeichert, dann soll die in den Datenblock "Data" geschrieben werden. und zwar an die stelle wo sich die variable "Str" befindet. ich weiß die nummern nicht und wie der DB aufgebaut ist weiß ich auch nicht ich kenne nur DATA und das darin irgendwo ein Str ist den ich beschreiben will. so besser kann ich es nicht erklären ^^
Ist das die gleiche Frage wie am Anfang?
Sorry, ich habe das Thema nicht mit verfolgt und möchte jetzt eigentlich nicht fast Hundert Beiträge durchlesen.

Aber für mich hört sich das so an also ob Du einfach einen Anyzeiger zerlegen musst um an die Daten zu kommen.
Aber so einfach wird es wohl nicht sein.
 
Moment, ich überlege mir mal was.

Ergebnis folgt in kürze. ;)

Du willst doch eigentlich nur einen String[254] in einen String[30] kopieren oder?

Gruss Daniel
 
ja genau nur der string[254] hat 5 zeichen drin und der string[30] ist leer.
der String[30] will seine länge 30 aber auch nicht verlieren ^^ beim kopieren

BLKMOV macht mir den String[30] zu nem String[254]

hui wir sind langsam auf einer welle :-D
 
das hatte mir larry auch gesagt aber ich habs nicht geschafft, bin wie gesagt awl neuling. weiß zwar was ich haben will aber die umsetzung macht mir probleme ^^
 
Zuviel Werbung?
-> Hier kostenlos registrieren
OK, ich sehe schon da müsste ich erst alles durchlesen um nicht doppelte Antworten zu geben.
Ich klink mich da mal aus.

Aber bei Larry und Dalbi bist ja in guten Händen. :D
Viel Erfolg noch.
 
Hi,

so Kai, anbei die Quelle für das kopieren.

Code:
FUNCTION "CopyString" : VOID
TITLE =String kopieren
//Achtung! 
//Die maximale Stringlänge wird nicht berücksichtigt.
VERSION : 0.1


VAR_INPUT
  SRCBLK : ANY ;    
  DSTBLK : ANY ;    
END_VAR
VAR_TEMP
  tAnzahl : INT ;    
  tDstDBNr : WORD ;    
  tSrcDBNr : WORD ;    
  tZaehler : INT ;    
  tSaveAr1 : DWORD ;    
  tSaveAr2 : DWORD ;    
END_VAR
BEGIN
NETWORK
TITLE =Adressregister sichern

      TAR1  #tSaveAr1; 
      TAR2  #tSaveAr2; 

NETWORK
TITLE =Zeiger zusammenstellen

      L     P##SRCBLK; 
      LAR1  ; 
      L     W [AR1,P#4.0]; //DB-Nummer o. =0
      T     #tSrcDBNr; 
      L     D [AR1,P#6.0]; //Speicherbereich
      LAR1  ; //AR1 auf Erste Adresse

      L     P##DSTBLK; 
      LAR2  ; 
      L     W [AR2,P#2.0]; //Wiederholfaktor
      T     #tAnzahl; 
      L     W [AR2,P#4.0]; //DB-Nummer o. =0
      T     #tDstDBNr; 
      L     D [AR2,P#6.0]; //Speicherbereich
      LAR2  ; //AR2 auf Erste Adresse

NETWORK
TITLE =Daten kopieren

      L     #tAnzahl; //Schleifenzähler initialisieren
      L     1; 
      -I    ; 
next: T     #tZaehler; 

      AUF   DB [#tSrcDBNr]; //Quelle Datenbaustein öffnen
      L     DBB [AR1,P#1.0]; //Quelle laden
      AUF   DB [#tDstDBNr]; //Ziel Datenbaustein öffnen
      T     DBB [AR2,P#1.0]; //Ziel transferieren

      +AR1  P#1.0; //Adresse AR1 um Byte erhöhen
      +AR2  P#1.0; //Adresse AR2 um Byte erhöhen

      L     #tZaehler; //Noch mal?
      LOOP  next; 

NETWORK
TITLE =Adressregister AR1&2 wiederherstellen

      LAR1  #tSaveAr1; 
      LAR2  #tSaveAr2; 

END_FUNCTION
Der Aufruf ist dann wie folgt
Code:
      CALL  "CopyString"
       SRCBLK:="DB_Quelle".Str
       DSTBLK:="DB_Ziel".Str
Gruss Daniel
 
Zuletzt bearbeitet:
ok danke für den Programm-Code das ist genau das was ich brauche nur sehr umfangreich ^^

aber wenn ich das einfach so vor mein Netzwerk packe sollte es ja kein problem sein :) darauf bin ich noch gar nicht gekommen. danke hast mir sehr weitergeholfen.

danke danke danke :)
 
gab fehler beim laufenden betrieb in der funktion. aber den finde ich schon noch alleine, besten dank auf jedenfall an alle.

Grüße Kai
 
Zurück
Oben