# Veralteter oder schlechter Programmierstil ?!?



## Raijin Tycho (19 März 2021)

Hallo zusammen,

wollte das jetzt nicht unbedingt in eins der anderen Foren schreiben, immerhin geht es mir irgendwo auch darum etwas Frust raus zu lassen. Aber villeicht liege ich auch falsch und gab tatsächlich ne Zeit wo man das so gemacht hat.

Folgendes:

Altes Tia V14-Programm (für eine S7-1200) eines Kollegen. Er hat nur FC-Bausteine verwendet. SR Bausteine z.B. hat einfach mit Variablen aus DBs versehen. Er hat einen DB mit über 300 Merkern, der Großteil als Merker XXX gekennzeichnet,  und einen weiteren mit über 100 die einfach eine Nummer haben. Statt die Schnittstellen der Bausteine selbst zu verwenden, hat er alle Variablen in DBs geschrieben und greift im Baustein direkt auf diese DB-Variablen zu.
Einige seiner Bausteine haben teilweise über 80 Netzwerke, mit leeren Netzwerken um Funktionsbereiche (zb.: Rundtaktisch, Roboter etc) zu trennen (und nein, ich rede nicht von einem Main-OB).

Ich meine, auf der einen Seite hat jeder Programmierer seinen etwas eigenen Stil, aber das geht darüber hinaus.
Das beste war dann ja noch das er zu mir meinte ich würde zu kompliziert programmieren (nur weil ich mit UDTs und so programmiere). Ich würde meinen Programmierstil als ausbaufähig bezeichnen (Schule und Studium bringen einem a wirklich nur die absoluten Basics bei -_-) aber wenn ich sein Programm sehe ........

Was sagt ihr dazu? Stammt sein Stil aus einer alten Zeit und er hat einfach verpasst mit der Zeit zu gehen? Oder liege ich villeicht sogar falsch und das macht man so..........


Hattet ihr auch schonmal solche Momente?


----------



## Faceman (19 März 2021)

Frag mal Draco,

der gibt dir sicher eine sachliche und kompetente Antwort.


----------



## ducati (19 März 2021)

Ist halt klassischer Spaghetticode... verboten ist das nicht. 

Und da Du ja verstanden hast, was er da treibt, vielleicht auch nicht ganz verkehrt 

Grundsätzlich sollte man so programmieren, dass ein guter fremder Programmierer nach 10 Jahren versteht, was da gemacht wurde und etwas im gleichen Programmierstil ändern/hinzufügen kann...

Ansonsten kommts halt immer drauf an... Klar sind UDT gut, aber wenn man die im laufenden Betrieb oft ändern muss, irgendwie auch wieder nicht 

meine Meinung,
schönes Wochenende.

Bin schon mal gespannt, wo das hier hinführt


----------



## DeltaMikeAir (19 März 2021)

Raijin Tycho schrieb:


> Was sagt ihr dazu? Stammt sein Stil aus einer alten Zeit und er hat einfach verpasst mit der Zeit zu gehen? Oder liege ich villeicht sogar falsch und das macht man so..........
> 
> 
> Hattet ihr auch schonmal solche Momente?



Ich würde sagen, ein guter Programmierer kommt auch mit fremden und anders programmierten Programmen klar.
Was jetzt gut oder schlecht ist bzw. ob sein Stil veraltet ist und deiner 100x besser, das möchte ich mir nicht anmaßen.
Ich kenne ihn nicht, dich auch nicht und das Programm sowieso nicht.

Wie Ducati erwähnt hat, bringt deine UDT Stuktur auch so manche Probleme mit sich. Man kann also nicht pauschalisieren.


----------



## Heinileini (19 März 2021)

Raijin Tycho schrieb:


> Hattet ihr auch schonmal solche Momente?


Ja, ich hatte schonmal solche Momente, dass ich etwas programmiert habe, das in einer Endlosschleife (Commodore BASIC, Editor für ZuordnungsListen) bzw. in einer zyklischen PLC-Task (Fanuc C, Editor für WerkzeugDaten) BildschirmMasken aufgebaut und TastaturEingaben verarbeitet hat.
Kurzes, übersichtliches, leicht zu testendes und "abzuhakendes" Programm, das je nach Bedienung sich durch DatenTabellen gehangelt hat.
Daran fühlte ich mich gleich erinnert, als ich die Beschreibung des Programmierstils Deines Kollegen gelesen habe.
Klar war die Interpretation der Tabelle bzw. das Auffüllen derselben mit entsprechenden Daten "gewöhnungsbedürftig". Aber anscheinend hatte ich genügend Gehirnschmalz in den Aufbau der Tabellen gesteckt. Jedenfalls war das Verfahren wesentlich einfacher, kompakter und übersichtlicher, als die "ausprogrammierten" Lösungswege, an denen sich Kollegen versucht hatten.
Welches Verfahren jeweils den jeweiligen Zweck besser erfüllt, das hängt wohl in erster Linie davon ab, welche Aufgaben damit erfüllt werden sollen.


----------



## ducati (19 März 2021)

DeltaMikeAir schrieb:


> Ich würde sagen, ein guter Programmierer kommt auch mit fremden und anders programmierten Programmen klar.



Naja, ich kenn da so einige Programme, da grauts mir jedesmal, wenn ich was ändern muss 

Also n guter Programmierer kommt mit guten fremden Programmen klar 

Es gibt so einiges, was man sich (heute) eigentlich verkneifen sollte. Aber aus nem FC auf Global-DBs symbolisch zuzugreifen gehört eigentlich nicht dazu. 

Gruß.


----------



## Raijin Tycho (19 März 2021)

Faceman schrieb:


> Frag mal Draco,
> 
> der gibt dir sicher eine sachliche und kompetente Antwort.



Hoere ich da eine Priese Sarkasmus heraus?

@Rest: 

Was  ich halt überhaupt nicht nachvollziehen kann, ist warum er nicht die  Schnittstellenbereiche der FCs genutzt und stattdessen alles in DBs  gepackt hat. Damit sind die FCs für andere Projekte praktisch nicht wiederverwertbar. Da ist es einfacher, ich programmiere alles selber neu. 

Auch diese hunderte von Merkern ohne klare Bezeichnung, gehen mir auf den Zeiger. Querverweis-Informationen schön und gut, aber wenn die Merker eindeutig bezeichnet waeren, muesste man selbige gar nicht erst nutzen.


----------



## ducati (19 März 2021)

Raijin Tycho schrieb:


> Was  ich halt überhaupt nicht nachvollziehen kann, ist warum er nicht die  Schnittstellenbereiche der FCs genutzt und stattdessen alles in DBs  gepackt hat. Damit sind die FCs für andere Projekte praktisch nicht wiederverwertbar. Da ist es einfacher, ich programmiere alles selber neu.



Naja, wenn die FCs mehrfach/wieder verwendbar sein sollen, dann schon. Aber war das die Aufgabenstellung?



Raijin Tycho schrieb:


> Auch diese hunderte von Merkern ohne klare Bezeichnung, gehen mir auf den Zeiger. Querverweis-Informationen schön und gut, aber wenn die Merker eindeutig bezeichnet waeren, muesste man selbige gar nicht erst nutzen.



Die "Merker" in den DBs sollte man ja vielleicht mit Kommentaren versehen. Wenn die nen ordentlichen symbolischen Namen krigen sollen, kannst den halt nur mit Verlust der Aktualdaten durch Reinitialisierung des DBs vergeben. Ganz blöd, bei Änderungen im laufenden Betrieb...

Ansonsten würd ich halt die Bereiche in dem "Merker"-DB aufteilen, also Merker 1 bis 99 für Allgemein, Merker 100 bis 199 Anlagenteil 1, Merker 200 bis 299 Anlagenteil 2 usw... wenn das gut aufgeteilt wäre, kannst das sogar einfach "mehrfach verwenden".

 Oder halt in nen Array einsortieren, dann könntest den FC sogar mehrfach in einer SPS aufrufen mit anderem Merkerarraybereich... So mach ich das, wenn ich anstatt FBs lieber FCs + Global-DB verwende.

Aber wie gesagt, alles hat Vor und Nachteile 

Gruß.


----------



## MFreiberger (19 März 2021)

Raijin Tycho,



Raijin Tycho schrieb:


> Was  ich halt überhaupt nicht nachvollziehen kann, ist warum er nicht die  Schnittstellenbereiche der FCs genutzt und stattdessen alles in DBs  gepackt hat. Damit sind die FCs für andere Projekte praktisch nicht wiederverwertbar.



Ich halte FCs eigentlich für die grundsätzlichen Bausteine, mit denen man sein Programm strukturieren kann. FCs KÖNNEN abgeschlossene Funktionen darstellen. Wenn es Dir um abgeschlossene Funktionen geht, sind die Formalparameter natürlich essentiel. FBs KÖNNEN abgeschlossene Funktionsbausteine darstellen.

Mir hat die Beschäftigung mit S5-Bausteinen im Vergleich zu S7-Bausteinen etwas gebracht:

S5 ->     S7

PB -> FC     Bei der S5 gab es Programmbaustein. Diese hatten keinen Schnittstellenbereich.
FB -> FC   Die FBs der S5 können wie die FCs der S7 betrachtet werden
-/- -> FB   FBs gab es in der S5 nicht. Also keine, dem Baustein fest zugeordnete, Werte, die statisch sind.


Um mit der S5 zu sprechen: Dein Kollege hat nur "PBs" verwendet, Du hättest gerne "FCs". Aber vielleicht hat er das, was er programmiert hat, gar nicht als wiederverwendbaren Code angesehen?




Raijin Tycho schrieb:


> Auch diese hunderte von Merkern ohne klare Bezeichnung, gehen mir auf den Zeiger. Querverweis-Informationen schön und gut, aber wenn die Merker eindeutig bezeichnet waeren, muesste man selbige gar nicht erst nutzen.



Das hat für mich nichts mit einem Programmierstil zu tun. Variablen müssen Bezeichnungen (Symbole) haben, die so gut wie möglich beschreiben, was die Variable tut.
Die "hunderte von Merkern ohne klare Bezeichnung" hört sich für mich nach "Schmiermerker" an. Die brauchte man in der S5, weil man keine temporären Variablen im Baustein hatte.

Aber eine Frage stellt sich mir noch: wie alt ist denn das Programm? Ist es eine S5-S7-Migration, die dann vielleicht noch nach TIA migriert wurde? Vielleicht hat man sich einfach nur nicht die Arbeit gemacht in einem laufenden (migrierten) Programm rumzudoktern. Das war vielleicht sogar eher eine schlaue Idee, als eine Frage nach dem (schlechten?) Programmierstil.

Wenn es ein aktuell neu geschriebenes Programm ist, denke ich eher an einen veralteten Programmierstil (der nicht schlecht sein muss).

VG

MFreiberger


----------



## Larry Laffer (19 März 2021)

ducati schrieb:


> Also n guter Programmierer kommt mit _*guten*_ fremden Programmen klar



Wenn du jetzt nicht das GUTEN da drin stehen gehabt hättest dann hättest du jetzt ein absolutes Veto von mir bekommen. Ich habe schon Programme gesehen, da habe ich nur die Hände über dem Kopf zusammengeschlagen ... ich hatte absolut keine Chance - nicht einmal mit dem Wissen, was es macht ...
Aber grundsätzlich (und darauf werden sich die verschiedenen Statements beziehen) gibt es nicht DEN Programmierstil. Der Programmierstil ist gut wenn nachvollziehbar und die Baustein gezielt änderbar sind.

Allerdings Merkern und Bereichen aus Datenbausteinen (und auch sonst allen anderen Variablen) keinen SINNVOLLEN Namen zu geben ist mit Sicherheit KEIN guter Programmierstil.

@TE:
Ich denke mal, dass dein Kollege noch "von der alten Schule" ist. Die Art, wie du seine Programme beschreibst, kommt m.E. noch aus der S5-Zeit, wo Bausteinschnittstellen nicht wirklich sinnvoll verwendbar waren und symbolische Zugriffe eigentlich auch nicht. Du selbst hast nun gelernt wie man strukturiert Programme erstellt (so hoffe ich jedenfalls).
Was willst du nun machen ? Du könntest ja versuchen, deinen Kollegen "umzuprogrammieren" - ihn also "ein bisschen" mit auf deine Schiene zu bekommen ...

Gruß
Larry


----------



## ducati (19 März 2021)

Also kurz gesagt, guter Spaghetticode wäre besser als schlechter möchtegern objektorientierter Code 

Andersrum aber auch


----------



## ducati (19 März 2021)

MFreiberger schrieb:


> Variablen müssen Bezeichnungen (Symbole) haben, die so gut wie möglich beschreiben, was die Variable tut.
> Die "hunderte von Merkern ohne klare Bezeichnung" hört sich für mich nach "Schmiermerker" an. Die brauchte man in der S5, weil man keine temporären Variablen im Baustein hatte.





Larry Laffer schrieb:


> Allerdings Merkern und Bereichen aus Datenbausteinen (und auch sonst allen anderen Variablen) keinen SINNVOLLEN Namen zu geben ist mit Sicherheit KEIN guter Programmierstil.




Ja wie gesagt, Ändern des Variablennamens bedeutet immer DB-Reinitialisierung und somit Aktualdatenverlust und somit nicht im laufenden Betrieb möglich... Aber auf jeden Fall im Variablenkommentar was reinschreiben


----------



## Raijin Tycho (19 März 2021)

MFreiberger schrieb:


> Aber eine Frage stellt sich mir noch: wie alt ist denn das Programm? Ist es eine S5-S7-Migration, die dann vielleicht noch nach TIA migriert wurde? Vielleicht hat man sich einfach nur nicht die Arbeit gemacht in einem laufenden (migrierten) Programm rumzudoktern. Das war vielleicht sogar eher eine schlaue Idee, als eine Frage nach dem (schlechten?) Programmierstil.
> 
> Wenn es ein aktuell neu geschriebenes Programm ist, denke ich eher an einen veralteten Programmierstil (der nicht schlecht sein muss).
> 
> ...



Das Programm ist 2019 komplett geschrieben worden. Keine Migration oder ähnliches.



Larry Laffer schrieb:


> Ich denke mal, dass dein Kollege noch "von der alten Schule" ist. Die  Art, wie du seine Programme beschreibst, kommt m.E. noch aus der  S5-Zeit, wo Bausteinschnittstellen nicht wirklich sinnvoll verwendbar  waren und symbolische Zugriffe eigentlich auch nicht. Du selbst hast nun  gelernt wie man strukturiert Programme erstellt (so hoffe ich  jedenfalls).
> Was willst du nun machen ? Du könntest ja versuchen, deinen Kollegen  "umzuprogrammieren" - ihn also "ein bisschen" mit auf deine Schiene zu  bekommen ...



Ich schätze das wird es sein. Die S5 habe ich halt schon nicht mehr mitbekommen. Meine ersten Erfahrungen habe ich auf ner S7-300 gesammelt und dann im Prinip mit der S7-1200 und Tia-Portal richtig angefangen.

Ich hoffe auch das ich strukturiert programmieren kann XD zumindest versuche ich meinen Stil zu verbessern und soviel von erfahreneren Kollegen mitzunehmen wie ich kann. 

Das mit dem "Auf die selbe Schiene holen", kann ich vergessen, da ich meinen Kollegen ersetzen soll. Daher geht es für mich aktuell hauptäschlich darum, seine Programme zu verstehen um diese in Zukunft betreuen zu können. 

Zumindest kann ich jetzt besser verstehen woher dieser Stil kommt und warum ich diesen als "schlecht" bewertet habe. Wieder was gelernt.


----------



## ducati (19 März 2021)

MFreiberger schrieb:


> Das mit dem "Auf die selbe Schiene holen", kann ich vergessen, da ich meinen Kollegen ersetzen soll. Daher geht es für mich aktuell hauptäschlich darum, seine Programme zu verstehen um diese in Zukunft betreuen zu können.
> 
> Zumindest kann ich jetzt besser verstehen woher dieser Stil kommt und warum ich diesen als "schlecht" bewertet habe. Wieder was gelernt.



Naja, wenns halt im Werk schon SEEHR viele Anlagen mit seinem Programmierstil gibt, dann stellt sich aber auch die Frage, ob Einheitlichkeit nicht doch besser vor Schönheit geht. 

Ich würd da dann mal grundsätzlich bei seinem Programmierstil bleiben, und den evtl. im Detail verbessern 

Wenn jeder neue Programmierer mit seinen neuen viel schöneren Programmierstil daher kommt, dann hast hinterher den vollen Wildwuchs...

Aber kommt drauf an  MANCHMAL macht ein Schnitt auch Sinn...


----------



## Raijin Tycho (19 März 2021)

ducati schrieb:


> Naja, wenns halt im Werk schon SEEHR viele Anlagen mit seinem Programmierstil gibt, dann stellt sich aber auch die Frage, ob Einheitlichkeit nicht doch besser vor Schönheit geht.
> 
> Ich würd da dann mal grundsätzlich bei seinem Programmierstil bleiben, und den evtl. im Detail verbessern
> 
> ...



Zum Glück sind das nur eine Hand voll Anlagen die ich übernehme.


----------



## Kieler (20 März 2021)

Gerade, wenn man intensiver in die SPS Programmierung einsteigt, ist die Auseinandersetzung mit Fremdprogrammen sehr hilfreich. Manchmal staunt man über die Ideen anderer Leute und entwickelt sie dann für sich selbst weiter. Aber es gibt auch abschreckende Beispiele. Die massive Verwendung von Merkern ohne symbolische Bezeichnung gehören für mich dazu. Sie machen ein Programm unlesbar. 

Ich betreue unter anderem einen Kunden mit ca. 50 Steuerungen seit über 20 Jahren. In diesen 20 Jahren habe ich mich natürlich auch weiter entwickelt und würde jetzt vieles anders machen. Das mache ich auch. Aber es ist immer eine Abwägung. Man kann nicht Mist weiter machen, weil man ihn vorher auch gemacht hat und man kann das Rad nicht bei jeder Steuerung neu erfinden.

An deiner Stelle, würde ich neue Projekte nach deinem Stil aufsetzen und keine Rücksicht auf die Altprogramme deines Kollegen nehmen. Symbolische Adressierung und Kommentare sind ganz wichtig. Ansonsten sollte sich um einen strukturierten Aufbau bemühen und Aufgaben in einzelne Bausteine bearbeiten. Bei allem sollte man nie vergessen, programmieren lebt vom kopieren. Ich habe häufig Kessel mit ca. 8 Schiebern. Ein Schieber funktioniert grundsätzlich wie der andere. Ich kopiere also den ersten und ersetze nur Schieber 1 durch Schieber 2. Der Kessel 1 funktioniert natürlich auch ähnlich wie Kessel 2. Also muss ich hier nur noch Kessel 1 durch Kessel 2 ersetzen. Daher ist eine sinnvolle symbolische Bezeichnung so wichtig. Häufig habe ich den Eindruck ich brauche für meine Listen und die Struktur länger als für das Programm. Aber es lohnt sich. 

Mach einfach dein Ding.


----------



## Oberchefe (20 März 2021)

> Ein Schieber funktioniert grundsätzlich wie der andere. Ich kopiere also den ersten und ersetze nur Schieber 1 durch Schieber 2.



Wenn die Funktion absolut gleich ist, würde ich an der Stelle aber den Code in einen FB packen und eine Multiinstanz machen,


----------



## Kieler (20 März 2021)

Ja, natürlich sind das FB mit Multiinstanzen.

Aber trotzdem müssen ja zumindest die EA Signale zugewiesen werden. Wenn deren Benamung sinnvoll gewählt wurde, reicht ein einmaliges suchen und ersetzen.


----------



## ducati (20 März 2021)

Ja zu Multiinstanzen sach ich das gleiche wie oben bei den Variablennamen: es kommt drauf an...
Es ist zwar in Multiinstanzen alles schön aufgeräumt, aber das Reinitialisieren bei Änderungen nervt und macht Änderungen im laufenden Betrieb schwierig/unmöglich...

Gruß.


----------



## rostiger Nagel (20 März 2021)

ducati schrieb:


> Ja zu Multiinstanzen sach ich das gleiche wie oben bei den Variablennamen: es kommt drauf an...
> Es ist zwar in Multiinstanzen alles schön aufgeräumt, aber das Reinitialisieren bei Änderungen nervt und macht Änderungen im laufenden Betrieb schwierig/unmöglich...
> 
> Gruß.



Was meiner Meinung nach nur auf einen geringen Teil der Maschinen zutrifft, das
man Im laufenden Betrieb Änderungen einspielen muss. 
In meiner Branche Holzbearbeitung, müsste man die Anlage mit einen Mikroskop
suchen und würde keine finden. 
Selbst wenn es eine Chemieanlage oder Atomkraftwerk ist, währe es in der Classic 
Welt sehr mit Vorsicht zu genießen. 
Es gibt halt Anwendungen da muss man einfach S5 nutzen, ansonsten hat Multiinstanz
oder Reinitalisieren, in TIA nichts mit den Problem des TE zu tun. 

Und ich kann es ehrlich nicht mehr hören ...!


----------



## JSEngineering (20 März 2021)

rostiger Nagel schrieb:


> Und ich kann es ehrlich nicht mehr hören ...!



Ich hätte auch gerne mal ein Beispiel dafür...
Selbst in der Automobilindustrie und an Fertigungsstraßen gibt es Schichtwechsel, Frühstückspausen, Mittagspausen, ....
Klar bedeutet das mal Stillstandszeit - für den Programmierer - gibt einem aber auch die Möglichkeit, über seine Änderungen nachzudenken und im Code aufzuräumen und zu kommentieren


----------



## rlw (20 März 2021)

von Ducati:

Die "Merker" in den DBs sollte man ja vielleicht mit Kommentaren versehen. Wenn die nen ordentlichen symbolischen Namen krigen sollen, kannst den halt nur mit Verlust der Aktualdaten durch Reinitialisierung des DBs vergeben. Ganz blöd, bei Änderungen im laufenden Betrieb...


Hallo,
bei Step7 Classic kann die Symbolik im DB geändert werden, nur wenn der Typ geändert wird muss Reintialisiert werden.
Ich weiß auch nicht mehr seit welcher Version das so ist, aber es geht.

gruß rlw


----------



## ducati (20 März 2021)

JSEngineering schrieb:


> Ich hätte auch gerne mal ein Beispiel dafür...
> Selbst in der Automobilindustrie und an Fertigungsstraßen gibt es Schichtwechsel, Frühstückspausen, Mittagspausen, ....


In der Prozessautomatisierung laufen die Anlagen halt auch in der Mittagspause durch 
Aktuell machen wir viel allgemein Versorgungstechnik mit allen möglichen Medien (Wasser, Kühlung, Prozesswärme, Chemikalien...). Da gibts in der Regel 1-2 Stillstände pro Jahr, die aber für größere Umbauten benötigt werden. Das Tagesgeschäft, also hier und da nen Feldgerät hinzufügen erfolgt im laufenden Betrieb.
Konkretes Beispiel: die Ver- und Entsorgung von diversen Verbrennungsmotorprüfständen. Da läuft immer irgendein Motorenversuch und ganz häufig auch als Dauerversuch über Wochen, also Langzeittest über 100000km...
Früher war ich im Stahlwerk, da hat der Hochofen nur alle 10-20 Jahre nen Stillstand 

Jedenfalls, jenachdem wie die Anforderungen sind, muss man halt den richtigen Programmierstil wählen 

Gruß


PS:


rostiger Nagel schrieb:


> In meiner Branche Holzbearbeitung, müsste man die Anlage mit einen Mikroskop
> suchen und würde keine finden.



Da fällt mir ein, für die Holzindustrie hab ich mal ne Versorgung mit Prozessdampf gebaut, ist schon 20 Jahre her... Die hätten sich auch bedankt, wenn ich denen öfter mal den Dampf geklaut hätte  Nen Faserplattenwerk war das.


----------



## Blockmove (20 März 2021)

Ich sehe es so:
Verschiedene Aufgabenstellungen haben unterschiedliche Anforderungen an Hard- und Software / Programmierung
Programmierstile sind wie Kunststile und nicht jeder Maler ist ein Rembrandt oder ein Kandinsky.
Und so sehen dann auch Programme / Bilder aus.


----------



## IBFS (21 März 2021)

rostiger Nagel schrieb:


> Was meiner Meinung nach nur auf einen geringen Teil der Maschinen zutrifft, das
> man Im laufenden Betrieb Änderungen einspielen muss.



Du kann nicht von Stückgutanlagen ausgehen, wie es Deine Furnier- und Holzbearbeitungsanlagen sind. 
In verkettenden Maschinen passiert das permanent, dass man Änderungen live einspielen muss.


----------



## rostiger Nagel (21 März 2021)

IBFS schrieb:


> Du kann nicht von Stückgutanlagen ausgehen, wie es Deine Furnier- und Holzbearbeitungsanlagen sind.
> In verkettenden Maschinen passiert das permanent, dass man Änderungen live einspielen muss.



Meinst du tatsächlich, das es in der Möbelindustrie keine verketten Anlagen gibt?
Heute werden Möbel nicht mehr mit Stechbeitel und Laubsäge gemacht!


----------



## IBFS (21 März 2021)

rostiger Nagel schrieb:


> verketten Anlagen


Es geht ausschließlich darum, inwieweit Anlagenteile oder Einzelmaschinen so ohne weiteres in STOP geschaltet werden können, um neue Software auszuspielen. Dass das Ausschalten können bei Mascinen, die größere Einzelstücke bearbeiten natürlich vielleicht einfacher ist ist klar. Ich kenne Wärmeauslagerungsmaschinen das kannst du die Maschine nicht mal schnell herunterfahren und leerfahren. Es ist auch nicht nötig, denn in TC3 kann sehr Vieles per Deltaladen live geändert werden. Das mache ich ständig.


----------



## Blockmove (21 März 2021)

Die Anforderung Änderungen im laufenden Betrieb einzuspielen / zu aktivieren nimmt in allen Bereichen zu.
Bei TIA ist die Fähigkeit dazu (leider) extrem stark vom Programmierstil abhängig.
Lustigerweise fährt man hier mit uraltem "S5-Stil" wirklich am Besten 
Und mit den "modernen" Stilen landet man ziemlich oft in der "Reinitialisierungs und AG-Stop Hölle".
Hier hat schon so manch dynamischer Jungstar sein Lehrgeld bezahlt.
Fängt bei der Anlagenprojektierung an. Natürlich kann ich heute mit einer leistungsfähigen CPU eine komplette Fertigungslinie steuern.
Nur ist das von Vorteil? Ich würd sagen nur für den Kaufmann.
Und natürlich kann ich mir tolle Bibliotheken mit tollen Frameworks bauen.
Ich spar mir dann auch etliche Stunden Programmieraufwand.
Dumm nur, wenn ich dann aber bei der kleinsten Änderung die Anlage leerfahren muß, da eben Reinit und AG-Stop angefordert werden.
Eine Stunde im Büro kostet ca. 100€ und einmal Anlage leerräumen und 10 min Produktionsstopp sind gleich mal ca. 1000€.
Der Kollege mit dem modernen Stil kann nur in den produktionsfreien Zeiten (nachts und am Wochenende) an die Anlage, während der Programmierer mit S5-Stil im warmen Bett liegt und die Freizeit geniest.

Ich will hier ganz klar nicht die Neuerungen verteufeln und wünsche mir ganz sicher nicht S5 zurück.
Aber bei der Frage nach dem Programmierstil (und auch bei der Anlagenauslegung) spielen einfach ganz viele Anforderungen eine Rolle.
Um hier eine vernünftige Wahl zu treffen braucht es - meiner Meinung nach - schon viel Erfahrung.

Gruß
Blockmove


----------



## IBFS (21 März 2021)

Blockmove schrieb:


> Programmierstil



In S7 Classic war das alles meistens wunderbar, bei CFC und PCS7 musste man schon einiges mehr wissen um nicht über STOP gehen zu müssen.
Beim TIA wird die Ampel bei jedem Mist ROT, heißt STOP.
ROCKWELL 5000er Serie ... da geht es nur halbwegs in LADDER.
Von TwinCat 3.x bin ich angenehm positiv überrascht. Sehr Vieles geht ohne STOP.


----------



## Blockmove (21 März 2021)

IBFS schrieb:


> Von TwinCat 3.x bin ich angenehm positiv überrascht. Sehr Vieles geht ohne STOP.



Stimmt.
Beckhoff / Codesys hat hier in den letzten Jahren viel geleistet.
Ich würd mal sagen, dass sie mittlerweile auf ähnlichen Level wie Siemens sind.
Aber auch hier spielt der Programmierstil eine wesentliche Rolle.


----------



## IBFS (21 März 2021)

Blockmove schrieb:


> Stimmt.
> Beckhoff / Codesys hat hier in den letzten Jahren viel geleistet.
> Ich würd mal sagen, dass sie mittlerweile auf ähnlichen Level wie Siemens sind.
> Aber auch hier spielt der Programmierstil eine wesentliche Rolle.



Ich darf zum Glück seit März 2018 BOSCH OpCon+ programmieren. 
(Vorher seit 2011 OpCon - Normal .. ich sage bewusst nicht Classic, weil das war mit Excellisten)

Dort gibt es nur SFC Schrittketten und Strukturierten Text auf Basis VisualStudio - TC3.x - Build 4022.32 

Es ist einfach herrlich. Kein blöden Siemensianischen Sonder Variablentypen, einfach IEC und fertig.


----------



## Blockmove (21 März 2021)

IBFS schrieb:


> Ich darf zum Glück seit März 2018 BOSCH OpCon+ programmieren.
> Dort gibt es nur SFC Schrittketten und Strukturierten Text auf Basis VisualStudio - TC3.x - Build 4022.32



Naja, trotz der Bemühungen von Bosch-Atmo und BCI (Bosch Connected Industry) hält sich der Zuspruch jenseits der Bosch Welt in engen Grenzen.


----------



## IBFS (21 März 2021)

Blockmove schrieb:


> Naja, trotz der Bemühungen von Bosch-Atmo und BCI (Bosch Connected Industry) hält sich der Zuspruch jenseits der Bosch Welt in engen Grenzen.



Die haben nicht genügend Leute das zu pushen und außerhalb der Boschwelt fehlt einfach das Grundverständnis diese geniale Software für sich zu entdecken.


----------



## StructuredTrash (21 März 2021)

Blockmove schrieb:


> Stimmt.
> Beckhoff / Codesys hat hier in den letzten Jahren viel geleistet.
> Ich würd mal sagen, dass sie mittlerweile auf ähnlichen Level wie Siemens sind.
> Aber auch hier spielt der Programmierstil eine wesentliche Rolle.


Auf jeden Fall. Ich arbeite mit verschachtelten FB-Ebenen. Linien-FB instanziiert Maschinen-FBs, Maschinen-FBs instanziieren Baugruppen-FBs usw. Für Diagnose und Wartung sehr schön, aber wenn ich irgendwo eine Variable hinzufüge, ändert sich immer die Grösse des Linien-FBs, so dass nahezu die gesamten Daten des Programms beim Online Change umkopiert werden müssen. Die PLC und auch der EtherCat-Feldbus stecken dabei auftretende Zykluszeitüberschreitungen in der Regel weg, aber ich habe leider noch jede Menge alte Antriebsregler, die über CanOpen angebunden sind. Und auf der CanOpen-Seite habe ich bisher noch keine Stellschraube gefunden, mit der sich das Zuschlagen des Watchdogs unterbinden lässt. Also Online Change erfolgreich durchgeführt, aber die Maschine steht trotzdem.
Wenn ich meine Maschinen für einen Online Change nicht anhalten dürfte, müsste ich mir was Anderes überlegen. Vielleicht die Daten in je einer globalen Variablenliste pro FB unterbringen und aus den FBs mit Referenzen darauf zugreifen.


----------



## Blockmove (21 März 2021)

IBFS schrieb:


> Die haben nicht genügend Leute das zu pushen und außerhalb der Boschwelt fehlt einfach das Grundverständnis diese geniale Software für sich zu entdecken.



Naja es hat - meines Erachtens - auch sehr viel mit den Eigenheiten des Bosch-Konzerns zu tun.
Aber das ist offtopic


----------



## Ralle (21 März 2021)

IBFS schrieb:


> Die haben nicht genügend Leute das zu pushen und außerhalb der Boschwelt fehlt einfach das Grundverständnis diese geniale Software für sich zu entdecken.



Nun ist aber mal gut ja  Klingt ja schon fast wie Sekte, was du da rausläßt und von der Verbreitung her ist es das vlt. sogar?!
Ich hab Kollegen, die sind da ganz anderer Meinung als du, aber das ist gottlob nicht meine Baustelle.


----------



## Blockmove (21 März 2021)

Ralle schrieb:


> Nun ist aber mal gut ja  Klingt ja schon fast wie Sekte, was du da rausläßt und von der Verbreitung her ist es das vlt. sogar?!
> Ich hab Kollegen, die sind da ganz anderer Meinung als du, aber das ist gottlob nicht meine Baustelle.



Wenn die eingesetzten Kompontenten und die Maschine "passen, dann ist das OpCon / Nexeed Framework schon eine interessante Lösung.
Aber der Einsatz der Nexeed-Software inkl. Control+ ist ja selbst bei Bosch umstritten.


----------



## vollmi (22 März 2021)

rlw schrieb:


> bei Step7 Classic kann die Symbolik im DB geändert werden, nur wenn der Typ geändert wird muss Reintialisiert werden.
> Ich weiß auch nicht mehr seit welcher Version das so ist, aber es geht.



Das ist so nicht ganz Korrekt. Classic lässt dich auch bei einem Typwechsel selbst entscheiden ob du den DB runterladen und damit reinitialisieren willst.
Wenn der Typ grösser oder kleiner wird, verschieben sich wohl die Speicherstellen. Aber auch das kann man umgehen und muss nicht zwingend reinitialisieren, wenn man sich vorher ein paar Überlegungen über Reserve gemacht hat. Solche Vorbereitungen lässt TIA hingegen garnicht zu.


----------



## rlw (22 März 2021)

Hallo,
es ging hier darum ob man die Symbolik ändern kann ohne neu zu initialisieren. 
Wenn ich den Typ ändere, kann ich den DB nicht mehr im Status beobachten und es wird ein" runterladen" verlangt. 

gruß rlw


----------



## vollmi (22 März 2021)

rlw schrieb:


> Hallo,
> es ging hier darum ob man die Symbolik ändern kann ohne neu zu initialisieren.
> Wenn ich den Typ ändere, kann ich den DB nicht mehr im Status beobachten und es wird ein" runterladen" verlangt.



Da bin ich jetzt nicht sicher. Aber du kannst dir den DB ja auch in der Variablentabelle beobachten. Runterladen ist dafür nicht nötig. In Classic ist ein Runterladen rein technisch nur notwendig wenn du auf Speicherstellen zugreifen willst, die es vor der änderung nicht gegeben hat. Ansonsten ist ein Reinit oder Download nie notwendig. Ob an den Speicherstellen auch die richtigen Werte drin stehen, dafür bist du dann natürlich selbst verantwortlich.
Aber eben. Bei Classic hast du die verantwortung wann du was in welcher Reihenfolge und ob überhaupt runterladen willst.
Wenn du in einem DB 20 Int deklariert hast pluss danach noch 30 Dworte reserve. Und einen der Ints gewechselt hast nach Dint. Dann hast du einen der dworte halt nach Dint gewechselt den int von vorher halt zur Reserve gemacht und nur die betroffenen FB/FC runtergeladen. Den DB hast du nicht runtergeladen.


----------



## rostiger Nagel (22 März 2021)

rlw schrieb:


> Hallo,
> es ging hier darum ob man die Symbolik ändern kann ohne neu zu initialisieren.
> Wenn ich den Typ ändere, kann ich den DB nicht mehr im Status beobachten und es wird ein" runterladen" verlangt.
> 
> gruß rlw



Nein das stimmt so nicht, habe es gerade Probiert und habe aus der Variablen "Pos" -> "Postest" gemacht.
Ich musste Reinitalisieren.




PS. Den betreffenden Baustein beobachten geht dann nicht mehr.
In Beobachtungstabelle betrachten geht auch nicht mehr.


----------



## PN/DP (22 März 2021)

@RN
rlw bezog sich auf Step7 classic


rlw schrieb:


> bei Step7 Classic kann die Symbolik im DB geändert werden, nur wenn der Typ geändert wird muss Reintialisiert werden.


----------



## rostiger Nagel (22 März 2021)

PN/DP schrieb:


> @RN
> rlw bezog sich auf Step7 classic



Oh das habe ich glatt überlesen, Achse auf mein Haupt.


----------



## hucki (22 März 2021)

rostiger Nagel schrieb:


> ... *Achse* auf mein Haupt.


Aber eine vom LKW, von wegen's "Beine brechen" und so...
*duckundwech*


----------



## ducati (22 März 2021)

vollmi schrieb:


> Da bin ich jetzt nicht sicher. Aber du kannst dir den DB ja auch in der Variablentabelle beobachten. Runterladen ist dafür nicht nötig. In Classic ist ein Runterladen rein technisch nur notwendig wenn du auf Speicherstellen zugreifen willst, die es vor der änderung nicht gegeben hat. Ansonsten ist ein Reinit oder Download nie notwendig. Ob an den Speicherstellen auch die richtigen Werte drin stehen, dafür bist du dann natürlich selbst verantwortlich.
> Aber eben. Bei Classic hast du die verantwortung wann du was in welcher Reihenfolge und ob überhaupt runterladen willst.
> Wenn du in einem DB 20 Int deklariert hast pluss danach noch 30 Dworte reserve. Und einen der Ints gewechselt hast nach Dint. Dann hast du einen der dworte halt nach Dint gewechselt den int von vorher halt zur Reserve gemacht und nur die betroffenen FB/FC runtergeladen. Den DB hast du nicht runtergeladen.



Ich hatt auch erst nicht geschnallt, dass rlw von Classic geredet hat 

also bei Classic ist es für einen Global-DB folgendermaßen:

- Wenn ein Symbolname geändert wird, dann hat das erstmal keine Auswirkungen, die SPS läuft weiter, da man den DB ja nicht laden MUSS.
- Aber man hat dann Online/Offline Unterschiede
- Online/Offline Unterschiede bekommt man weg, indem man diesen DB jetzt aus der SPS ins PG läd.
- Dann ist wieder alles gut und man konnte stoßfrei ohne Unterbrechnung nen Variablennamen in nem Global-DB ändern.

Natürlich dürfen erstmal mittendrin keine Variablen eingefügt werden (also immer genug Reserven vorsehen), Typänderungen sind so ne Sache und bei IDBs MultiIDBs ist auch etwas anders...

Gruß.


----------



## rostiger Nagel (22 März 2021)

ducati schrieb:


> Ich hatt auch erst nicht geschnallt, dass rlw von Classic geredet hat
> .



Und mach mir die Mühe und teste das noch aus 



ducati schrieb:


> also bei Classic ist es für einen Global-DB folgendermaßen:
> 
> - Wenn ein Symbolname geändert wird, dann hat das erstmal keine Auswirkungen, die SPS läuft weiter, da man den DB ja nicht laden MUSS.
> - Aber man hat dann Online/Offline Unterschiede
> ...



Und da verstehe ich TIA nicht mehr, es muss doch möglich sein,
das beim Übersetzen TIA feststellt, da wurde ein Symbolname geändert,
möchtest du das er in der Steuerung unbenannt und überladen wird.

Selbst wenn Mann einen Typ ändert zb von INT auf DINT könnte TIA einen
Hinweis geben und wenn ich es als Programmierer will, das er überladen wird,
soll er in Gottes Namen überladen werden. 

Die könnten meinetwegen 3 mal nachfragen, wie:

1. Symbol oder Typenänderung, willst du überladen?
2. willst du wirklich überladen?
3. überleg noch mal, geht auch nichts kaputt wenn jetzt überladen wird?

So etwas sollte doch möglich sein, in einer Zeit wo der Abakus durch Transistoren
abgelöst ist!


----------



## Ralle (22 März 2021)

rostiger Nagel schrieb:


> Und da verstehe ich TIA nicht mehr, es muss doch möglich sein,
> das beim Übersetzen TIA feststellt, da wurde ein Symbolname geändert,
> möchtest du das er in der Steuerung unbenannt und überladen wird.



@RN
Das fragen wir uns doch schon seit Version 10.5
Ich vermute, es ist so tief im System begründet, das hier nur "Alles NEU machen" helfen würde, denn genau das ist einer DER großen Beschwerdepunkte seit Stunde 0!
Das kannst du drüber nachdenken, bis dir endgültig alle Haare ausgefallen sind, das wird nix mehr ;-)


----------



## rostiger Nagel (22 März 2021)

Ralle schrieb:


> Das kannst du drüber nachdenken, bis dir endgültig alle Haare ausgefallen sind, das wird nix mehr ;-)



Auf dem Kopf bin ich schon blank, richtig blank. 
Damit währe das Hindernis doch aus den Weg geräumt.


----------



## centipede (22 März 2021)

rostiger Nagel schrieb:


> Und mach mir die Mühe und teste das noch aus
> 
> 
> 
> ...



soll in V17 endlich gelöst sein. mir wurde gesagt, es wird dann nicht mehr nur der Zeitstempel als Kriterium herangezogen sondern auch die Structur verglichen. Wenn diese unverändert ist, wird nicht reinitialisiert.


----------



## ducati (22 März 2021)

centipede schrieb:


> soll in V17 endlich gelöst sein. mir wurde gesagt, es wird dann nicht mehr nur der Zeitstempel als Kriterium herangezogen sondern auch die Structur verglichen. Wenn diese unverändert ist, wird nicht reinitialisiert.



Das ist doch auch wieder nur die Hälfte!!! 

Klar will man umbenennen, aber auch mal mitten im DB was einfügen oder löschen, ohne dass der gesamte DB reinitialisiert wird...

Zumindest bei optimierten DBs sollte das doch machbar sein...

Gute Nacht.


----------



## rostiger Nagel (22 März 2021)

ducati schrieb:


> Das ist doch auch wieder nur die Hälfte!!!
> 
> Klar will man umbenennen, aber auch mal mitten im DB was einfügen oder löschen, ohne dass der gesamte DB reinitialisiert wird...
> 
> ...



Sehe ich genauso ...


----------



## Thomas_v2.1 (22 März 2021)

rostiger Nagel schrieb:


> Sehe ich genauso ...



Grundsätzlich geht das bei "optimierten" Bausteinen doch auch mit der Speicherreserve.


----------



## ducati (22 März 2021)

Thomas_v2.1 schrieb:


> Grundsätzlich geht das bei "optimierten" Bausteinen doch auch mit der Speicherreserve.


Ja, aber nur am Ende hinzufügen. Nicht mittendrin in nem Struct z.B.


----------



## rostiger Nagel (22 März 2021)

Thomas_v2.1 schrieb:


> Grundsätzlich geht das bei "optimierten" Bausteinen doch auch mit der Speicherreserve.



Speichreserve kann ja auch nur der letzte Notnagel sein, ein großer DB
lebt von Struktur, durch ein Anhängen von einzelnen Variablen, die eigentlich 
in die Struktur gehören wird die Übersicht zerschlagen.
Damit wären wir wieder beim Thema.


----------



## vollmi (23 März 2021)

Ich stell mir das immernoch so vor. Wenn sich ein optimierter DB ändert. egal ob Typ, Symbolname oder was auch immer. Dann wird die neue Kopie runtergeschrieben und die Inhalte auf die Kopie transferiert und dann von der Firmware zur Laufzeit ausgetauscht. Damit könnte man sogar Int nach Dint tauschen komplexe Datentypen ersetzen etc. Natürlich nur solange eine komplette Kopie der geänderten Datenbausteine und darauf angewiesene geänderte Bausteine im Speicher platz haben.
Von mir aus kann man dann auch sagen, für solche änderungen wird eine verfünffachung der darauffolgenden Zykluszeit erwartet, weil kopieren und umschalten ne Weile dauert.


----------



## rostiger Nagel (23 März 2021)

Als Grundaussage könnte man folgendes festlegen:
TIA sollte in der Lage sein so etwas Reibungslos umzusetzen,
ohne den Programmierer zu zwingen ein Workaround zu gestalten. 

Wenn das erfüllt ist können die Endwickler von TIA auf weitere unnütze
Dinge stürzen wie CEM, die eigentlich niemand benötigt!


----------



## ducati (23 März 2021)

Ralle schrieb:


> Ich vermute, es ist so tief im System begründet, das hier nur "Alles NEU machen" helfen würde





vollmi schrieb:


> Ich stell mir das immernoch so vor. Wenn sich ein optimierter DB ändert. egal ob Typ, Symbolname oder was auch immer. Dann wird die neue Kopie runtergeschrieben und die Inhalte auf die Kopie transferiert und dann von der Firmware zur Laufzeit ausgetauscht. Damit könnte man sogar Int nach Dint tauschen komplexe Datentypen ersetzen etc. Natürlich nur solange eine komplette Kopie der geänderten Datenbausteine und darauf angewiesene geänderte Bausteine im Speicher platz haben.
> Von mir aus kann man dann auch sagen, für solche änderungen wird eine verfünffachung der darauffolgenden Zykluszeit erwartet, weil kopieren und umschalten ne Weile dauert.



Tja, ich sehs eher wie Ralle 

Gibt halt so diverse Fallstricke, wie Kommunikationszugriffe von extern auf die DBs (parallel zum OB1), Bausteine die über mehr als einen Zyklus laufen, Interrupt-OBs...

Und das mit der Verfünffachung der Zykluszeit ist halt dann auch nur bedingt stoßfrei im laufenden Betrieb, wenn dann irgendwoanders nen timeout auftritt:



StructuredTrash schrieb:


> Ich arbeite mit verschachtelten FB-Ebenen. Linien-FB instanziiert Maschinen-FBs, Maschinen-FBs instanziieren Baugruppen-FBs usw. Für Diagnose und Wartung sehr schön, aber wenn ich irgendwo eine Variable hinzufüge, ändert sich immer die Grösse des Linien-FBs, so dass nahezu die gesamten Daten des Programms beim Online Change umkopiert werden müssen. Die PLC und auch der EtherCat-Feldbus stecken dabei auftretende Zykluszeitüberschreitungen in der Regel weg, aber ich habe leider noch jede Menge alte Antriebsregler, die über CanOpen angebunden sind. Und auf der CanOpen-Seite habe ich bisher noch keine Stellschraube gefunden, mit der sich das Zuschlagen des Watchdogs unterbinden lässt. Also Online Change erfolgreich durchgeführt, aber die Maschine steht trotzdem.
> Wenn ich meine Maschinen für einen Online Change nicht anhalten dürfte, müsste ich mir was Anderes überlegen. Vielleicht die Daten in je einer globalen Variablenliste pro FB unterbringen und aus den FBs mit Referenzen darauf zugreifen.


----------



## vollmi (23 März 2021)

ducati schrieb:


> Tja, ich sehs eher wie Ralle
> 
> Gibt halt so diverse Fallstricke, wie Kommunikationszugriffe von extern auf die DBs (parallel zum OB1), Bausteine die über mehr als einen Zyklus laufen, Interrupt-OBs...
> 
> Und das mit der Verfünffachung der Zykluszeit ist halt dann auch nur bedingt stoßfrei im laufenden Betrieb, wenn dann irgendwoanders nen timeout auftritt:



Klar es wär immer noch diverse Fallstricke. 
Die müssen sie halt benennen. Wenns halt Einschränkungen bei PUT/GET gibt oder bei Pointern. Sollen sie es halt sagen und ich verzichte drauf (tu ich ja eh schon wenn möglich)
Den Zykluskontrollpunkt hätten sie eh aus der 300er übernehmen dürfen, das war etwas das mich schon bei der 400er immer wieder geneckt hat. Auf der anderen Seite, zwingt es einen sich mit den Zugriffsarten einer SPS zu beschäftigen.
Und die Zykluszeiterhöhung für den nächsten Download könnten sie ja in die Statusleiste reinpacken so dass man live sieht wie sich jede Änderung auswirkt. Dass "Stossfrei" relativ ist, ist hoffentlich jedem klar.

Und der nächste Fallstrick sind ja die geilen Hinweise die man so aus der Hilfe bekommt.



> Wenn Sie die Speicherreserve für den aktuellen Baustein bereits aktiviert haben, können Sie die Größe der Speicherreserve nicht mehr ändern.



Vielleicht könnte man diesen Hinweis auch so formulieren das auch Leute die so schwer von Begriff sind wie ich, ihn spätestens beim dritten durchlesen, auch verstehen.

Dass "Alles NEU machen" nicht passieren wird, ist uns wohl allen klar.


----------



## IBFS (13 Juni 2021)

Blockmove schrieb:


> die Maschine "passen,


.. mittlerweile mache ich Maschinen, da hätte ich auf den ersten Blick vor Jahren nicht gedacht, das man da Nexeed sinnvoll einsetzen kann. 
Natürlich muss man IndraDrive Controller verwenden. Aber das ist in der Regel kein Nachteil.


----------



## Lazarus™ (13 Juni 2021)

Ich denke jeder von uns hat so seinen eigen Stil und das ist ja auch gut so.
Etwas strukturiert programmieren und (wichtig) dokumentieren ist ein MUSS...

Einige Dinge sieht eben jeder anders und wird es auch anders lösen...


----------



## Blockmove (13 Juni 2021)

IBFS schrieb:


> .. mittlerweile mache ich Maschinen, da hätte ich auf den ersten Blick vor Jahren nicht gedacht, das man da Nexeed sinnvoll einsetzen kann.
> Natürlich muss man IndraDrive Controller verwenden. Aber das ist in der Regel kein Nachteil.



Die Frameworks entwickeln sich auch weiter.
Um die hochfliegenden Visionen der Bosch Atmo bzw. Bosch Connected Industries ist es aber doch recht ruhig geworden.
Von der Koopoeration von Bosch mit Siemens bekommt man auch wenig zu sehen.

Gruß
Blockmove


----------



## Heinileini (13 Juni 2021)

Blockmove schrieb:


> Von der Koopoeration von Bosch mit Siemens bekommt man auch wenig zu sehen.


Davon hat man viel früher viel mehr gesehen ... bei Kühlschränken, Waschmaschinen, ...


----------



## Blockmove (13 Juni 2021)

Heinileini schrieb:


> Davon hat man viel früher viel mehr gesehen ... bei Kühlschränken, Waschmaschinen, ...


Da siehst du heute noch genau soviel.
Siemens hat sich zwar aus dem Joint Venture verabschiedet, aber die BSH fertigt und vertreibt nach wie vor Geräte für Siemens.
Böse Zungen sagen, dass der Verkauf der BSH-Anteile einer der größten Fehler von Joe Kaeser war.


----------



## IBFS (14 Juni 2021)

Blockmove schrieb:


> Joe Kaeser


Joe Kaeser ist DER Fehler höchstselbst, leider! So wie er die deutsche Deindustrialisierung huldigt, unglaublich


----------



## Oberchefe (15 Juni 2021)

> die BSH fertigt und vertreibt nach wie vor Geräte für Siemens.



Nein, das macht Bosch für sich, auch wenn auf den Geräten Siemens, Neff oder Contructa drauf steht.


----------

