TIA Bin ich der Einzige der wirklich zufrieden ist mit TIA ?

Zuviel Werbung?
-> Hier kostenlos registrieren
@Ralle

Wieso kein Array? Wir haben immer ein DB mitem Array mit einem eigenen Datentyp. Der Arrayindey 0 ist der aktuell geladene Artikel und alles dahinter ist die Verwaltung.

Weil jedes Rezept einen eigenen DB haben soll. Wir macht man das dann?


Gesendet mit Tapatalk
 
Es gibt ganz sicher verschiedene Wege wie man das machen kann...

Wie gesagt ich habe ein Array mitem einem eigenen Datentyp in dem die Rezepte sind. Im Index 0 steht der der gerade aktiv ist. Dahinter ist sind die restlichen Artikel gespeichert. Bei einer Artikelumstellung wird der entsprechende Artikel von z.B. index 5 auf die 0 kopiert und los gehts.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Es gibt ganz sicher verschiedene Wege wie man das machen kann...

Wie gesagt ich habe ein Array mitem einem eigenen Datentyp in dem die Rezepte sind. Im Index 0 steht der der gerade aktiv ist. Dahinter ist sind die restlichen Artikel gespeichert. Bei einer Artikelumstellung wird der entsprechende Artikel von z.B. index 5 auf die 0 kopiert und los gehts.

Ich weiß, aber das ist nicht die Lösung die ich brauche, Array ist klar, aber was gibt es denn nun Bausteinübergreifend??? Das kann ja wohl gar nicht sein, dass es dafür kein Mittel gibt. Und wenn nun einige schon das hohe Loblied auf TIA singen und alles voll symbolisch machen und so megazufrieden sind, dann muß es doch wenigsten für die grundlegensten Dinge eine Lösung geben. Etwas von Datenbaustein A nach B zu kopieren, was nicht als Array deklariert ist und das auch noch variabel, ist doch ein absolutes Muß, das kommt doch andauernd vor.
 
was heisst etwas?

Ich kann nur von mir sprechen ich habe es noch nie gebraucht oder gemacht! Soweit ich jedoch weiss sollte das in SCL ohne probleme Möglich sein! Ich muss das heute Abend mal ausprobieren...
 
was heisst etwas?

Ich kann nur von mir sprechen ich habe es noch nie gebraucht oder gemacht! Soweit ich jedoch weiss sollte das in SCL ohne probleme Möglich sein! Ich muss das heute Abend mal ausprobieren...

z.Bsp.

1. 10 Variablen am Stück
2. eine Struktur mit X Variablen

Aber nichts mit Array bitte.
 
Punkt 1: Wie gesagt sehe ich dort keinen Sinn und weiss nit ob es möglich ist.

Punkt 2: In SCL mit einer Zuweisung :)=) ohne weiteres möglich

Dynamisch, nicht statisch. Ist ja klar dass ich eine Struktur in dieselbe Struktur eines anderen Bausteins bekomme.
Aber was mache ich, wenn die Bausteine im Programm dynamisch angesprochen werden sollen.
Ausprogrammieren mit Case würde gehen, ist aber auch nichts weiter als eine Krücke und eben im Prinzip statisch.
Das sollte nur ein Beispiel sein, verstehst du, ob es für dich persönlich eine praktische Relevanz hat, interessiert dabei doch gar nicht.

Rezept Nr.1: Struktur XY aus DB10 nach DB1
Rezept Nr.2: Struktur XY aus DB11 nach DB1

Oder mit der Repeptnummer gleich dynamisch in den richtigen DB. Aber wie geht das nun bei TIA???
 
Hallo Ralle,

mit Peek und Poke kommst Du vermutlich nicht weiter, da die anscheinend nur auf einzelne Variablen statt auf Strukturen zugreifen können.
Aber hast Du Dir schonmal Move_Blk_Variant angesehen? https://support.industry.siemens.com/cs/mdm/109096785?c=67702152075&lc=de-WW
Variant soll ja ein Zeiger sein, der auch auf UDTs zeigen kann. Somit müßtest Du damit theoretisch beliebige Speicherbereiche kopieren können.
Über den Datentyp VREF soll man einen VARIANT-Zeiger anlegen können. Wie der aufgebaut ist und wie man ihn nutzt, darüber schweigt sich Siemens zur Zeit leider aus.
Eventuell hilft auch DB_Any weiter. Darin kann man die DB-Nummer speichern und mit DB_ANY_TO_VARIANT in einen Variant umwandeln.

Vielleicht hilft das als Ansatz für Dein Problem.
 
Punkt 1: Wie gesagt sehe ich dort keinen Sinn und weiss nit ob es möglich ist.

Nur weil du es nicht kennst urteilst du so?
Hast du dir schon einmal Gedanken gemacht, dass es verschiedene Anforderungen und Anwendungen gibt?

Ein Zeiger ist Standard inzwischen in jeder Programmierumgebung.
Und es gab dies schon in Step 7 Classic und war bzw ist eine gute und sinnvolle Funktion.
Warum wurde diese Funktion weggeworfen?
Weil die Entwickler es nicht schaffen dies zu implementieren.


bike
 
Nein das kan falsch rüber, ich brauche es nicht deshalb kenne ich es nicht...

Natürlich programiert jeder anders das ist absolut klar.

Nir aus Interesse, welche Steuerung die Symbolisch programiert wird hat Pointer? Ich kenn noch Rockwell und die haben keine Pointer...
 
Zuviel Werbung?
-> Hier kostenlos registrieren
@Ralle

Wieso kein Array? Wir haben immer ein DB mitem Array mit einem eigenen Datentyp. Der Arrayindey 0 ist der aktuell geladene Artikel und alles dahinter ist die Verwaltung.

Wir machen Fördertechnik, und wollen auch nicht nur ein DB mit einem riesen Array! Das wird unübersichtlich, im Moment haben wir pro Platz einen DB mit einem Symbolischen namen, und nicht nur einer Zahl! Wie soll da der Instandhalter noch was finden?
 
Wir machen Fördertechnik, und wollen auch nicht nur ein DB mit einem riesen Array! Das wird unübersichtlich, im Moment haben wir pro Platz einen DB mit einem Symbolischen namen, und nicht nur einer Zahl! Wie soll da der Instandhalter noch was finden?

Was schiebst du in den DB's umher? Zielverfolgung?

Schonmal was von Codesys gehört?

Jap aber noch nie gebraucht... Deshalb habe ich ja gefragt da es mich Interessiert ob es das gibt...
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Wenn man z.Bsp. keine Rezepturverwaltung in der HMI (Fremd-HMI oder man will keine Siemens-Alpha-Buggy-Version nutzen) machen kann, jedes "eigenverwaltete" Rezept in einem eigenen DB ablegen will (wegen der Ordnung, Sicherung oder Größe der Daten).
Weil jedes Rezept einen eigenen DB haben soll. Wir macht man das dann?
Ich weiß, aber das ist nicht die Lösung die ich brauche, Array ist klar, aber was gibt es denn nun Bausteinübergreifend??? Das kann ja wohl gar nicht sein, dass es dafür kein Mittel gibt.
@Ralle. Siemens beantwortet deine Frage ganz klipp und klar....
Siehe: https://support.industry.siemens.com/cs/mdm/109096785?c=69382039563&lc=de-WW
Die Antwort ist ...Trommelwirbel... "Nein. Wir tippen lieber alles von Hand mit CASE, denn das ist Automatisieren in 5 Minuten..."

Ich finde ja ganz besonders toll wie Siemens krampfhaft versucht fest programmierte Zugriffe via Selektor als indirekte Adressierung zu verkaufen.
Als ob der Beitrag von PR-Leuten oder religiösen Fanatikern verfasst wurde... echt zum schießen...
*ROFL*


Ein Zeiger ist Standard inzwischen in jeder Programmierumgebung.

Warum wurde diese Funktion weggeworfen?
Weil die Entwickler es nicht schaffen dies zu implementieren.
*ACK*
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Nicht für Strukturen oder Bereiche.
Lese ich die TIA-Hilfe falsch oder schafft POKE_BLK das?

TIA-Hilfe schrieb:
POKE_BLK: Speicherbereich schreiben

Beschreibung
Mit der Anweisung "Speicherbereich schreiben" schreiben Sie einen Speicherbereich ohne Angabe eines Datentyps in einen anderen Speicherbereich.
Wenn Sie am Parameter AREA den Bereich 16#84 für einen Datenbaustein angeben, dann können Sie nur auf Datenbausteine mit der Bausteineigenschaft "Standard" zugreifen.

Hinweis Mit der Anweisung können Sie nur auf "Standard" Speicherbereiche zugreifen.

POKE_BLK(AREA_SRC := <Operand>,
DBNUMBER_SRC := <Operand>,
BYTEOFFSET_SRC := <Operand>,
AREA_DEST := <Operand>,
DBNUMBER_DEST := <Operand>,
BYTEOFFSET_DEST := <Operand>,
COUNT := <Operand>)
Aber nicht symbolisch und nicht optimiert (DB) bleibt es alle mal.
 
Zuletzt bearbeitet:
Wenn man z.Bsp. keine Rezepturverwaltung in der HMI (Fremd-HMI oder man will keine Siemens-Alpha-Buggy-Version nutzen) machen kann, jedes "eigenverwaltete" Rezept in einem eigenen DB ablegen will (wegen der Ordnung, Sicherung oder Größe der Daten).
Entweder ich greife nun indirekt jeweils in den benötigten Rezept-DB oder ich kopiere den Inhalt des Rezept-DB in einen "Aktiv"-DB.
Wie mach ich das am einfachsten im TIA? Aber bitte nicht mit Case-Anweisung und komplett ausprogrammieren, wir sind nicht in der Softwaresteinzeit!
Bitte auch kein Array, gerade die Rezeptvariablen sollen vernünftige Namen bekommen, wir machen ja nun alles schick symbolisch. ;-)

Genau das habe ich gerade realisiert bzw. befindet sich gerade im Softwaretest. Eine Produktionssteuerung auf der SPS mit den Modulen.

Material: Stammdatenverwaltung, Lagerortverwaltung und Materiallose.
Produktion: Waagenverwaltung, Rezepte, Equipmentparameter und Auftragsplanung
BDE: Dosierbericht, Materialbuchung Tracking und Tracing für Batch Units ist in Arbeit

All das basiert auf UDT's Arrays und SCL. Wenn ich alles in UDT's lege habe ich auch eine einwandfrei Symbolik.

z.B. UDT Material

im DB

Material[1]
Name WString[32]
MKZ WString[32]
ID Dint
... ...

Diesen UDT kann ich überall aufrufen und nutzen, in den Stammdaten, im Rezept usw. Der Array Index gibt mir immer die Position an, ob nun in der Materialverwaltung, im Rezept oder im Dosierbericht.
Auch die Eigenschaft UDT's in UDT's aufzurufen erleichtert die Sache um ein vielfaches.
Alle DB's die ich brauche haben immer einen UDT der als einzelner Datentyp aufgerufen wird und den Editierbereich darstellt. Die Datenhaltung erfolgt dann in einem Array von diesem Datentyp.

Die vollsymbolische Programmierung macht das ganze auch sehr Einfach, da es im ganzen Programm eigentlich nur zwei Anweisungen dieser Art gibt wenn ich Daten bewegen muss.

IF X
THEN Stammdaten.Edit := Stammdaten.Material[1] ; die Visu liest Daten aus dem DB aus
END_IF;

oder

IF y
THEN Stammdaten.Material[1] := Stammdaten.Edit ; die Visu triggert das schreiben von Editierdaten in den DB
END_IF;

Ich habe selber viel mit Pointern gearbeitet und vermisse diese kein Stück im TIA Portal, mit der 1500er und optimierten Bausteinen.
Das ich alle Rezepte in einem DB halte, sehe ich auch als großen Vorteil es macht das Programm viel übersichtlicher, da ich nicht 100 DB's für Rezepte habe, 100 DB's für Materialien usw.
 
Zuletzt bearbeitet:
Zurück
Oben