TIA TIA V13 - Probleme bei Daten-Handling (Bool -> Byte)

msfdgn

Level-1
Beiträge
12
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich bin gerade bei Umstieg STEP7 -> TIA V13. Dabei habe ich folgendes Problem, bei dem mir die Siemens-Hotline nicht helfen konnte, ich aber der Meinung bin, dass es eine Lösung geben MUSS.

Folgendes Problem: 1. DB (z.B. DB10) enthält bool'sche Variable, 2. DB (z.B. DB11) enthält Byte-Variable. Nun sollen die Informationen aus DB10 nach DB11 transferiert werden (Byteweise).

Wer kann hier helfen?

Danke vorab
 
Etwas mehr info wäre wichtig. Transferieren geht auf jedenfall. Aber sollen die Bits an der gleichen stelle landen wie im quell DB? Oder soll jedes bit im QuellDB das jeweils erste Bit eines jeden Bytes im ZielDB beschreiben und so weiter.
Um wieviele Bits gehts?


Und ich bezweifle dass Siemens nicht helfen konnte.


mfG René
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Auch wenn René das bezweifelt, die Antwort von HEITEC AG Herrn ... sah so aus:
1. Lösung: das müsste mit einem AT-"Befehl" funktionieren AT_... als ARRAY of BOOL deklarieren. Der anschließende MOVE-Befehl wurde aber mit fehlerhafter Deklaration "verworfen".
2. Lösung: Bei DB-Eigenschaften "Optimierter Bausteinzugriff" abschalten. Das funktioniert zwar, allerdings mit der Einschränkung, dass dann keine symbolische Adresseirung mehr verwendet werden kann.

Ergänzung zum Problem:
1.DB:
Bit 0.0: Bool_Wert_00
Bit 0.1: Bool_Wert_01
Bit 0.2: Bool_Wert_02
:
Bit 0.7: Bool_Wert_07

2. DB:
Byte 0: Byte_Wert_00
Byte 1: Byte_Wert_01

Vgl. STEP7-Programmierung in AWL:
U M 0.2
= DB1.DBX0.0
U E 10.2
= DB1.DBX0.1
:
U T 15
= DB1.DBX0.7

L DB1.DBB0
T DB2.DBB1
 
Auch wenn René das bezweifelt, die Antwort von HEITEC AG Herrn ...

Wolltest du nicht mit Siemens eine Lösung erarbeiten?
Oder gehört HEITEC jetzt Siemens oder zu Siemens?

Deine Beschreibung der Aufgabe zeigt, dass du dir keinerlei Gedanken gemacht hast, wie eine Frage richtig, sinnvoll und verständlich gestellt wird.
Wenn du die magische Taste bei Step7 Classic und bei TIA genutzt hättest, wären dir die verschiedenen Datenformate aufgefallen und du hättest das Problem, das keines ist, leicht lösen können.

Ist es denn so schwer zuerst die Literatur zu lesen und zu verstehen und dann erst eine Frage verständlich zu stellen?

Die teilweise andere Darstellung von Bit, Byte, Word und Doppelword kommt von den Prozessoren und ist nicht von Big$ verursacht.


bike
 
@bike:

ich frage mich wie man zu "Erfahrener Benutzer" und 650 Danke für 560 Beiträge kommt, wenn man derart polemisch auf Fragen antwortet und dabei nicht einmal weiß, dass Siemens den Support auf einen Dienstleistungsunternehmen (HEITEC AG) ausgelagert hat. Bereits eine Anfrage bei dem SIEMENS-Support hätte dies zu Tage gebracht. - Außerdem was kann ich dafür, wenn Du meine Frage nicht verstehst? Ich dachte hier sind nur Fachleute, denen ich nicht mehr "Bit" und "Byte" erklären muss. Du scheinst eine Ausnahme zu sein. Zum Schluss: Du scheinst nicht einmal den Unterschied zwischen "Ursache" und "Lösung" zu kennen. Deine lapidare Antwort beinhaltet eine Ursache, aber keine Lösung.

Spruch des Tages:
Wenn das deine Lösung meines Problems sein soll,
behalte ich lieber mein Problem und du deine Lösung.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Vgl. STEP7-Programmierung in AWL:
U M 0.2
= DB1.DBX0.0
U E 10.2
= DB1.DBX0.1
:
U T 15
= DB1.DBX0.7

L DB1.DBB0
T DB2.DBB1
Und wo transferiert dieser Code Werte aus Bool-Variablen in Byte-Variablen?
Kennst Du den Unterschied zwischen BOOL und BYTE?

Wie vollmi schon schrieb: "Etwas mehr info wäre wichtig." Wenn Du in der Lage bist, Deine Aufgabe einwandfrei zu beschreiben, dann kann man Dir auch helfen. In welcher Programmiersprache für welche CPU brauchst Du denn die Lösung?

Harald
 
Also das Siemens den ganzen Support zu Heitec ausgelagert hat stimmt so mit Sicherheit nicht. Ich bin schon seit bestimmt einem Jahr mit keiner meiner Anfragen mehr bei Heitec gelandet sondern immer direkt bei Siemens.

Viele Grüße
Klaus
 
Also wir bekommen von Siemens Support auch für TIA.
Was machen wir falsch?
Wenn eine Frage nicht oder falsch verstanden wird, dann liegt es meist an der Fragestellung.
Das haben dir ja inzwischen vollmi und Harald ja auch schon geschrieben.


bike

btw: im ersten Post hier war es noch Siemens Support, der nicht helfen kann. Und jetzt macht nur Heitec Support, wann hat sich das geändert? :confused:
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
@ bike:
Vielleicht versuchts du einfach mal die Polemik wegzulassen und nur echte Unterstützung zu posten. Für Dich speziell und alle übrigen Weisen, die Antwort meiner an den "SIEMENS Support" gerichteten Anfrage. Hier bin ich auf Eure Erklärung gespannt. -
@ alle: Falls jemand andere Kontaktdaten als die in der Email angegeben hat, wäre ich dankbar für einen Tip. Ebenso natürlich für einen Vorschlag oder Tip für eine Lösung.
Anhang anzeigen 24899
 

Anhänge

  • siemens_sw2.pdf
    15,6 KB · Aufrufe: 60
Dein Anhang, der evtl. die Siemens-Antwort auf Deine Anfrage enthalten sollte, kann nicht gefunden werden. Der Anhang ist ungültig... Vielleicht versuchst Du das Anhängen nochmal.

Wichtiger als die Siemens-Antwort wäre aber Deine Frage gewesen.
Wie gesagt, wenn Du es schaffst Deine Aufgabe verständlich zu erklären, dann finden wir bestimmt eine Lösung für Dich.
Solange hier jedoch lieber Polemik um den Siemens-Support betrieben wird statt Nachfragen zum Problem zu beantworten, solange kommen wir wohl nicht weiter in Deiner Sache... OK, das ist ja nicht unser Problem.

Also nochmal kompakt:
- In welcher Programmiersprache für welche CPU brauchst Du die Lösung?
- Wieviele Werte sollen von DB10 zu DB11 transferiert werden?
- Was soll transferiert werden, wenn ein DB10-BOOL-Wert FALSE (0) ist?
- Was soll transferiert werden, wenn ein DB10-BOOL-Wert TRUE (1) ist?
- Wie sieht der DB10 mit den BOOL-Werten aus?
- Wie soll nach dem Transfer der DB11 mit den BYTE-Werten aussehen?
- Wie ist die Symbolik des DB10, wie ist die Symbolik des DB11?

Kennst Du denn den Unterschied zwischen BOOL und BYTE? Also zwischen "Bit und Byte"?

Im übrigen: Auch wenn man den "Optimierter Bausteinzugriff" abschaltet kann man trotzdem noch symbolisch zugreifen.
Umgekehrt wird ein Schuh draus: wenn man den "Optimierter Bausteinzugriff" einschaltet, dann kann man nicht mehr absolut zugreifen.

Harald
 
Dein Anhang, der evtl. die Siemens-Antwort auf Deine Anfrage enthalten sollte, kann nicht gefunden werden. Der Anhang ist ungültig... Vielleicht versuchst Du das Anhängen nochmal.

Unter den Text gibt es ein Reiter "Angehängte Dateien", dort lässt sich der PDF runterladen.
Dieser sagt aber nichts aus, außer das in diesen Fall die Fa. Heitec den Fall bearbeitet hat.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
@ Harald:
erst einmal danke für die erste konstruktive Antwort/Frage in diesem Forum. Weil wenn man fragt / beschreibt was unklar ist, kann der Gegenüber auch die gewünschten Infos geben. (Nur zur zum Thema Polemik, ... Ich habe eine aus meiner Sicht normale Frage gepostet und um der Antwort "wende dich an Siemens Support" vorzubeugen, habe ich erwähnt, dass ich dort schon war - ohne Hähme.)
Ich programmiere seit ca. 20 Jahren (was du nicht wissen kannst) und kenne daher sicherlich den Unterschied zwischen bit/bool und Byte. - Ich war davon ausgegeangen, dass man anhand meines STEP7-Programmierbeispiels mein Anliegen erkennen kann. Aber ich versuch gerne noch einmal mein Problem zu beschreiben:
In dem einen Datenbaustein sind binäre / boolsche Informationen. Diese muss ich für die Weiterverarbeitung in einem betriebsinternen Standardbaustein im Byte-Format haben. Heißt also:
DB1: z.B.
Bit 0.0 = TRUE (1)
Bit 0.1 = FALSE (0)
Bit 0.2 = FALSE (0)
Bit 0.3 = TRUE (1)
Bit 0.4 = FALSE (0)
Bit 0.5 = FALSE (0)
Bit 0.6 = FALSE (0)
Bit 0.7 = TRUE (1)
ergibt in "Byte-Schreibweise" 10001001 entspricht hexadezimal 89
Diese 89 (HEX) brauche ich als im Byte-Format als Eingabewert für einen Funktionsbaustein
in STEP7 AWL also z.B.
"L DB1.DBB0"
"T DB2.DBB2"

zu deinen Fragen:
Programmiersprache -> KOP / FUP, CPU S7-1200, CPU 1215 AC/DC/DC
wieviel Werte -> 10 Byte (aber nicht wirklich relevant, da von Projekt zu Projekt unterschiedlich)
was soll trasnferiert werden ... -> s. Erklärung oben
wie sieht der DB10 mit den BOOL-Werten aus -> ? -> Name Datentyp Startwert Remanenz ... Kommentar
DatPkt00 BOOL FALSE leer Datenpunkt 00
DatPkt01 BOOL FALSE leer Datenpunkt 01
DatPkt02 BOOL FALSE leer Datenpunkt 02
DatPkt03 BOOL FALSE leer Datenpunkt 03 , usw
Wie soll nach dem Transfer der DB11 mit den BYTE-Werten aussehen -> ? Name Datentyp Startwert Remanenz ... Kommentar
DatBy00 BYTE 16#0 leer Datenpunkte 00-07
DatBy01 BYTE 16#0 leer Datenpunkte 08-15
Wie ist die Symbolik des DB10, wie ist die Symbolik des DB11 -> tut mir leid die Frage verstehe ich nicht, ggf. s. vorstehende Beschreibung

wg HEITEC / SIEMENS:
ich wollte mit der Email nur zeigen, dass ich mich mit meiner Frage an SIEMENS (s. header) gewandt, die Antwort aber von HEITEC bekommen habe.
 
Also ich bin begeistert.
Du schreibst von portieren STEP7 -> TIA V13.
Dann von AWL und im Ergebnis geht es um eine CPU 1200.
Du kannst von Step7 Standard nicht ohne umprogrammieren dein Projekt auf einer 1200er zum laufen bekommen.

Wenn du die Programmierumgebung und deine Hardware richtig beschrieben hättest, wäre vieles einfacher gewesen.
Eine solch chaotische Beschreibung des Problems von einem Programmierer mit 20 Jahre Erfahrung? :rolleyes:


bike
 
@msfdgn

Tatsächlich habe ich deinen Post auch erst einmal ignoriert, weil die wichtigsten Infos fehlen. Diese hast du erst nachgeschoben, als Nachfragen kamen. Mit so einer ungenauen Problembeschreibung (fehlende CPU wird eine Antwort zur Zeitverschwendung). Deine Antworten inspirieren nicht gerade dazu, dir zu helfen, darüber könntest du durchaus mal nachdenken, man darf auch nicht zu dünnhäutig sein, im Grunde sind die Posts durchaus gut gemeint.

Ich könnte mir vorstellen dass folgender Code vielleicht funktionieren könnte:

Code:
FUNCTION "FC_Bits_To_Byte" : Void
{ S7_Optimized_Access := 'TRUE' }
VERSION : 0.1
   VAR_INPUT 
      DBBit         : DB_ANY;
      MyByteOffset     : Int;
      DBByte         : DB_ANY;
   END_VAR


   VAR_TEMP 
      MyByte         : Byte;
      MyInt         : Int;
   END_VAR




BEGIN
    #MyByte := PEEK(area := 16#84, dbNumber := #DBBit, byteOffset := #MyByteOffset);
    POKE(area := 16#84, dbNumber := #DBByte, byteOffset := #MyByteOffset, value := #MyByte);
    
END_FUNCTION

Den FC wiederum könnte man in einer Schleife aufrufen und so mehrere Byte umkopieren.
Ob das funktioniert kann ich leider nicht sagen, da die 1200-er (zumindest bei mir) nicht simuliert werden kann. :confused:

PS: { S7_Optimized_Access := 'TRUE' } möglicherweise auf False???
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
- entweder mußt Du die jeweils 8 Quell-Bits zu einem Byte zusammenbasteln, z.B. bedingt Wortweise ODER-verknüpfen (dieses Standard-Verfahren sollte man mit 20 Jahren Programmiererfahrung schon kennen)
Das geht in FUP/KOP etwa so:
Code:
                 +--------+
                 |  MOVE  |
              0--|        |--#Tempword
                 +--------+

                 +--------+
"DB10".DatPkt00  |  ODER  |
-----| |---------|EN      |
      #Tempword--|        |--#Tempword
      W#16#0001--|        |
                 +--------+

                 +--------+
"DB10".DatPkt01  |  ODER  |
-----| |---------|EN      |
      #Tempword--|        |--#Tempword
      W#16#0002--|        |
                 +--------+
...

                 +--------+
"DB10".DatPkt07  |  ODER  |
-----| |---------|EN      |
      #Tempword--|        |--#Tempword
      W#16#0080--|        |
                 +--------+

                 +--------+
                 |  MOVE  |
      #Tempword--|        |--"DB11".DatBy00
                 +--------+
- oder wenn die Bits bereits passend in einer Byte-Adresse liegen, dann das ganze Byte lesen (move), was wohl nur absolut oder in SCL per AT-Sicht geht

- oder Du mußt auf die Bits des Ziel-Byte einzeln zugreifen (Slice access). Das geht auch in FUP/KOP
Code:
"DB10".DatPkt00   "DB11".DatBy00.X0
-----| |------------------( )

"DB10".DatPkt01   "DB11".DatBy00.X1
-----| |------------------( )

...

"DB10".DatPkt07   "DB11".DatBy00.X7
-----| |------------------( )
...

Wie können Sie in STEP 7 (TIA Portal) bit-, byte- oder wortweise und symbolisch auf die unstrukturierten Datentypen zugreifen?

Harald
 
zunächst einmal Danke an alle, die konstruktive Vorschläge gemacht haben.

Dann Selbsterkenntnis: Es ist richtig, dass eine qualifizierte Lösungsfindung nur unter Nennung der CPU und Programmiersprache möglich ist. - Sorry dafür. (Allerdings zu meiner Ehrenrettung: Ich ging davon aus, dass es eine einfache, allgemeingültige Lösung gab -> vgl. mein 2-zeiliges STEP 7- Programmierbeispiel)

Als nächstes zu Euren Lösungsvorschlägen. Die "Slice-Access-Lösung" habe ich gestern Nachmittag/Abend bereits umgesetzt, weil ich ja weiter musste. Das "hinkt" aber wegen meines Wunschs den "optimierter Bausteinzugriff" zu verwenden. Die Schleifenlösung war/ist mir durchaus bekannt, war mir als Ersatz für meine lade Byte, transferiere Byte - Lösung aus STEP 7 zu aufwendig. Die andere Lösung werde ich am Wochenede mal probieren. Der Hinweis auf den SIEMENS-Support-Link war gut, löst aber leider trotzdem das Problem nicht.

@ Ralle:
Ich kann dir leider nur bedingt Recht geben hinsichtlich der "gut gemeinten Posts". Wie man an meinen Status erkennen kann, bin ich noch nicht lange in dem Forum und auf gezielte Fragen gebe ich selbstverständlich auch nach bestem Wissen und Gewissen Antwort. (Ist ja in meinem Interesse) Da wäre es doch durch fair gewesen, mal nach (durchaus notwendigen) Details zu fragen, oder? - Und als Negativbeispiel "bike" - Kannst Du eine einzige verwertbare Information in seinen Posts finden? Wie man auch an seinem letzten Post erkennen kann, macht er sich ja nicht mal die Mühe zu lesen. Ich habe kein Wort geschrieben von "portieren" oder dass ich AWL in der 1200er programmieren will. Geschweige denn, dass ich ein ganzes STEP 7 Projekt ohne Umprogrammieren in eine 1200er implantieren will... - Aber es gibt ja auch kontruktive Beiträge. Nochmals Danke dafür.
 
Code:
[TABLE="class: table_invisible, width: 70%"]
[TR]
[TD="class: default_Cell"]POKE_BLK(
area_src:=16#84,
dbNumber_src:=10,
byteOffset_src:=0,
area_dest:=16#84,
dbNumber_dest:=11,
byteOffset_dest:=0,
count:=10);[/TD]
[/TR]
[/TABLE]
Schreibt die unter "count" angegebene Anzahl von Bytes beginnend mit dem angegebenen byteOffset des angegebenen Quelldatenbausteins, der Quell-E/A oder des Quellspeicherbereichs in den angegebenen byteOffset des angegebenen Zieldatenbausteins, der Ziel-E/A oder des Zielspeicherbereichs.

Oder übersehe ich da was?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Der TE will den "optimierter Bausteinzugriff" verwenden - sprich: die Lösung muß vollsymbolisch (ohne Absolutadressen) funktionieren. Das macht z.B. mein erstes Beispiel mit dem wortweise ODER-verknüpfen.

Harald
 
Zurück
Oben