TIA TIA Portal Wordbreiter zugriff auf einen Array of Char

spsboi364

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

Ich habe gerade ein kleines Syntaxproblem. Also:
Ich habe ein Programm mit einem TCP/IP Datenaustausch, welches unter Step 7 auch immer wunderbar funktioniert hat, ins TIA Portal V14 SP1 migriert.
Nun zeigt mir das Programm aber wenn ich versuche auf einen Wordbreiten Datensatz aus dem Array zuzugreifen eine Fehlermeldung an welche besagt "Diese Adresse wird nicht durch eine Variable belegt". Zuvor konnte ich ganz einfach die Daten aus dem Messzähler integer "%DB125.DBW40" in das Array zur Verarbeitung "%DB.DBW310". Muss ich ggf. die Char Daten aus dem Array vorher zu einem Integer konvertieren da er nicht aus Char in Int schieben kann?

Danke für jede Hilfe!

DB120.DBW310.jpgDB120.DBD83.jpg

mit freundlichen Grüßen
Sebastian
 
Das ist eine Warnung. Der Code funktioniert trotzdem.
Allerdings hast Du keinen symbolischen Zugriff und der DB darf nicht optimiert sein.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Du solltest Deine Daten so deklarieren und so drauf zugreifen wie sie tatsächlich strukturiert sind, und nicht so, wie Du am wenigsten Schreibarbeit hast.
Wenn die von Dir als CHAR (?) deklarierten BYTEs tatsächlich schon einfach so einen INT ergeben, dann könntest Du die Bytes direkt als INT deklarieren oder vielleicht ein AT drüberlegen oder die beiden Bytes in eine (TEMP-)Struktur kopieren, die aus zwei Byte besteht wo per AT ein INT drüber liegt. Oder Du setzt Dir den INT durch Bytes laden und Bits schieben zusammen. Oder falls Deine CPU das kann, könntest Du die Bytes auch per Slice in einen INT kopieren.

Harald
 
Du solltest Deine Daten so deklarieren und so drauf zugreifen wie sie tatsächlich strukturiert sind, und nicht so, wie Du am wenigsten Schreibarbeit hast.
Wenn die von Dir als CHAR (?) deklarierten BYTEs tatsächlich schon einfach so einen INT ergeben, dann könntest Du die Bytes direkt als INT deklarieren oder vielleicht ein AT drüberlegen oder die beiden Bytes in eine (TEMP-)Struktur kopieren, die aus zwei Byte besteht wo per AT ein INT drüber liegt. Oder Du setzt Dir den INT durch Bytes laden und Bits schieben zusammen. Oder falls Deine CPU das kann, könntest Du die Bytes auch per Slice in einen INT kopieren.

Harald


Moin Harald,

Per slice? Ich nutze eine S7-1511-F also eine relativ neue und gute CPU, vielleicht ist diese ja schon so aktuell dass ich das mal probieren kann. Ich bin Azubi und soll lernen daher wäre es gut wenn du die Slice Erklärung ein bisschen für "Dummuser" formulieren würdest. Danke!

Und zu dem Ob die Bytes direkt in den INT passen: Ich habe mir das so gedacht dass ein Word ja die gleiche Länge wie ein INT hat und daher ja an sich auch genau den Bereich ausfüllen sollte/müsste. Oder?

LG Sebastian
 
Slice: gehe in die TIA-Hilfe > Index > slice

Ein WORD besteht aus 2 BYTE, das ist richtig. Das heißt aber nicht, daß man aus Bequemlichkeit auch sagen kann: "ein INT besteht aus 2 CHAR" - weil CHAR "üblicherweise" (druckbare) ASCII-Zeichen sind und nicht Bitfolgen mit beliebigem binären Inhalt. Man kann auch nicht einfach gleichsetzen INT = WORD. "Früher" in Step7 classic konnte man in AWL beliebige Datentypen in/aus AKKUs laden (Hauptsache die Bitgröße stimmt), heute versucht das TIA die Programmierer anzuleiten, sich bei den Datentypen korrekt auszudrücken.

Harald
 
Zurück
Oben