Step 7 Auf Datentypen eines Datenbaustein zugreifen

Es gibt eigentlich fast keine Einschränkungen. Du kannst aus jedem Programmbaustein auf jeden Datenbaustein zugreifen.

z.b.

U DB100.DBX5.3

L DB50.DBD0

Man sollte aber nicht aus einem Programmbaustein auf einen Instanzdatenbaustein zugreifen, der nicht zu diesem gehört. Das geht auch - ist aber gemein.

oder meinst du etwas anderes?

Datentypen sind fest deffiniert oder du deffinierst selbst welche in einem UDT.

Gruß
Holger
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Nein das habe ich nicht gemeint. Für die Aufrufe muss ich muss ich den Datentyp wissen.

L DB100.DBX3.3

Ich möcht eine Struktur an den FB anparametrieren und dann aus dieser die Datentypen auslesen.
Also erster Daten Typ wäre dann ein DINT , zweiter Daten Typ ein String usw. (Beispiel unten)
TYPE "ArtikeldatenStruct"
VERSION : 0.1

STRUCT
Fertigungsauftrag : STRUCT
diMaterialNr : DINT ; //Fauf Materialnr. (z.B. 00094981)
sBezeichnung : STRING [30 ]; //Fauf Bezeichnung (z.B. FAZ II 10/10)
Komponenten : STRUCT
diClipMatNr : DINT ;
END_STRUCT ;
END_STRUCT ;
END_STRUCT ;
END_TYPE

ist etwas schwer zu umschreiben hoffe man versteht das jetzt einigermaßen.
 
Ich möcht eine Struktur an den FB anparametrieren und dann aus dieser die Datentypen auslesen.
Also erster Daten Typ wäre dann ein DINT , zweiter Daten Typ ein String usw.
Nein, du kannst nicht unterschiedliche Datentypen von einem Struct automatisch erkennen.
Einzige Möglichkeit die ich sehe
Du beginnst jeden neuen Datentyp mit einer Kennung zb:
Neue Kennung beginnt:
Int -999 nächstes Datenwort Int mit von dir definierten Kennung:
1 = Bool
2 = Byte
3 = Int
...
Dann erst beginnt der eigentliche Struct
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Was ist denn der Hintergrund der Frage?
Hätte noch nie einen Fall gehabt wo ich sowas mal hätte brauchen können / haben müssen.

Jo, wenn ich irgendwelche Daten in der SPS verarbeiten will, muss ich auch wissen, was das für Daten sind, bzw. welche Daten und Formate in dem Struct drinstecken... wenn Du nicht weisst, ob das nen BOOL, BYTE, WORD, DWORD, ist kannst Du Garnichts auslesen. Das mit der Kennung macht ja nur Sinn, um evtl. bei gleicher Länge zwischen DWORD, DINT, REAL zu unterscheiden.

oder hab ich auch was falsch verstanden?

gruß.
 
ich habe zwei definierte Strukturen einmal eine in einer SQL Datenbank die ich mit dem SQL4Automation Tool abfrage und Daten in eine S7 Steurung erhalte. Die selbe Stuktur habe ich im DB in meiner S7.

QuellDaten (SQL) EmpfangsDaten (S7)

Jetzt bekomme ich die Daten von dem SQL4Automation Tool allerdins als Nullterminierte Byte Srings. Diese muss ich nun mit einem Variablen Progamm, an das ich lediglich die Struktur meines DB´s übergeben will jeweils in den Richtigen Datentyp wandeln und dann in das Richtige Fach des DB´s schieben.

Somit muss ich bei einer Änderung nur die beiden Strukturen anpassen und der Rest erledigt der FB.
 
Somit muss ich bei einer Änderung nur die beiden Strukturen anpassen und der Rest erledigt der FB.

Irgendjemand hatte hier schonmal so ne komische Idee... Selbst wenn man das irgendwie hinkriegen würde, sehe ich das "komische Programmierweise" an.

Vielleicht helfen Die UDTs. Wenn Du das clever anstellst, musst Du bei Änderungen nur an einer Stelle, im UDT, ändern.

Gruß.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Was sind denn "Nullterminierte Byte Srings"? Einfach nur Bytes, jedoch schon im richtgen Format, oder ASCI-Zeichen, die du entsprechend in REAL, INT usw. wandeln musst?

Wenn ersteres zutrifft, und du den ganzen Empfang in deinen DB kopierst, dann hast du doch schon deine Datentypen.
 
Das werde ich auch machen ich rufe ein UDT in einem FB auf in dem UDT codiere ich byteweise die Struktur meines Empfansfaches.

B#16#01 -> Bool
B#16#02 -> Byte
B#16#03 -> Char
.....
 
Nein, nicht einfach nur Bytes (Das wäre ja zu einfach gewesen), das sind Bytes im Format ASCII die ich dann wandeln muss, Nulterminiert bedeutet jeder neuer Wert wird durch ein Byte mit dem Wert Null abgetrent. Das ganze kommt per TCP/IP Protokoll.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Also noch mal in langsam:
Du bekommst aus einer SQL-Datenbank verschiedene Datentypen in diesem nullterminierten Format.
Sprich wenn du 30 Bits gesendet bekommst erhälst du eigentlich 60 Bytes? Und 2 Bytes würden dann einem Bit entsprechen? Ein Byte zur Abtrennung und eins mit dem Zustand "0" oder "1"?
Und für Int oder Real-Werte jede Ziffer einzeln mit einem Leer-Byte dazwischen? Verstehe ich das richtig?
Du weisst aber vorher an welcher Stelle du das nach Real wandeln musst oder Bits daraus erzeugen musst?
 
Das wird ein Klartext-ASCII-String C-style sein.

@sprang-y
Wo ist da jetzt Dein besonderes Problem? Ändert sich dauernd das Format der Telegramme? Oder sind die Telegramme für wechselnde Zielvariablen bestimmt?
Willst Du uns mal ein Beispiel der Telegramme zeigen?

Harald
 
Erzeuge einen UDT. In dem beschreibst Du doch Deine Struktur. Diesen UDT kannst Du als einzeln oder als ARRAY in einem Datenbaustein einsetzen. Ebenso kannst Du den UDT in FC's und FB's als IN-, OUT, INOUT-, -TEMP oder -STAT-Parameter verwenden und adressieren! Im FB / FC selbst kannst Du dann auf einzelne Daten der Struktur zugreifen.

Hast Du nicht das vor?
 
Zurück
Oben