Zerlegen eines DWORD in BYTE und wieder zusammensetzen

Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,

warum einfach wenns auch kompliziert geht? ;)
Was meinst du zu diesem Beispiel?

Na, geht doch. :ROFLMAO:

Ich finde diese Variante wesentlich sauberer, weil bei Änderungen (Variablen einfügen/löschen) bei den Variablen der FC/FB nicht auch im Code geändert werden muß, weil sich die lokalen Variablenadressen verschoben haben. Natürlich ist es etwas komplizierter, aber bei größeren Bausteinen spart es bei Änderungen Aufwand und Nerven.
 
das war wohl nix ...

Hallo,

warum einfach wenns auch kompliziert geht? ;)
Was meinst du zu diesem Beispiel?
Wie Ralle schon schrieb, sieht diese Variante wesentlich sauberer aus ...
Doch was nützt das, wenn der Baustein nicht genau das tut, was er soll ?! :confused:

Nur weil ein Baustein genau einen Test mit genau einem Testdatum besteht,
heißt das nicht, daß der Baustein richtig funktioniert oder gar fehlerfrei ist. :rolleyes:

Wer will, daß L P##Byte0 oder L P##OutDW die Adresse der Übergabeparameter ergibt, der muß schon einen FB nehmen.
Bei FC erhält man die Adresse des beim Aufruf angegebenen Aktualparameters, so daß es z.B. völlig egal ist, was für
Aktualparameter bei Byte1, Byte2 und Byte3 angegeben sind. Es wird immer mit der Adresse des bei Byte0 angegebenen
Aktualparameters und dessen nächste 3 Byte-Adressen gearbeitet!
Es ist einfach nur eine reichlich umständlich formulierte Übertragung eines Doppelwords auf ein anderes Doppelword.

Um den Baustein endgültig auf den Müll zu werfen: ruf mal den Baustein mit Aktualparametern aus einem DB auf, z.B.
Byte0:=DB1.DBB4 ... Byte3:=DB4.DBB4
Mach den/die DB aber vorsichtshalber größer als notig, sonst geht die CPU in STOP. :cool:

Tut mir ja Leid für den Verriß, doch der Baustein ist wirklich unausgegorener Müll.

[EDIT]Zusatz: mit Konstanten als Aktualparameter für die Eingangsparameter funktioniert der Baustein auch nicht.

Harald
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
@PN/DP
Du hast durchaus Recht, ich mache das auch mit FC, aber ich nutze darin grundsätzlich Temp-Var, um derartige Dinge zu erledigen. Hab nur auf den Code geschaut, der war ok. Genau aus dem Grund den du nennst, FB und FC verhalten sich da leider unterschiedlich. ...das FB/FC-Thema hatte ich doch heut schon mit Larry am Wickel ... Scheiß-Idee von Siemens da Unterschiede zu machen.
 
...das FB/FC-Thema hatte ich doch heut schon mit Larry am Wickel ... Scheiß-Idee von Siemens da Unterschiede zu machen.
Ich mache niemandem einen Vorwurf, der diese teilweise unverständlichen Unterschiede zwischen FB und FC nicht kennt.
(ich behaupte auch nicht, daß ich alle Unterschiede kennen würde)

Doch bevor man ein Programm stolz veröffentlicht oder gar in eine echte Anlagen-Steuerung lädt, sollte man das Programm schon
ausgiebig simuliert und getestet haben. Besonders wenn man nicht mehr symbolisch arbeitet oder gar mit Pointern 'rummacht!
Das ausgiebige Testen eines Programms in der Simulation und dann nochmal in der echten Umgebung ist noch wichtiger als das
eigentliche Programmieren.

Da ich fast wöchentlich solche und andere Fehler in Steuerprogrammen meiner Fabrik ausbügeln muß, die die Hersteller selber
nicht finden, habe ich mittlerweile einen Blick für so "verdächtige" Programmzeilen.
Daher wohl auch mein etwas harscher Ton im Beitrag #42. Aber trösten werde ich den neuen Waldi jetzt trotzdem nicht. ;)
Sein Programm ist ja ein schönes Beispiel dafür, wie wichtig RICHTIGES Testen ist.

Harald
 
Überzogene Reaktion

Hallo PN/DP,

selbstverstädnlcih war mir klar, dass der Zeigerverweis auf das Byte 0 für die nächsten drei Byte verbindlich ist.
Dieser Baustein war auch nur ein Beispiel der in sich geschlossen war, da er sich nur auf das MW 10 bezog.
Der Out DW Zeiger zeigt immer auf die richtige Adresse, nur der Inhalt richtet sich auf Bezug von Byte 0 bis Byte 3.
Diese 3 Byte wurden nach außen geführt um den Inhalt der einzelnen 4 Bytes darzustellen.
Normalerweise würde ich da nur eine Bool Adresse darstellen und auf Merker 10.0 verweisen, intern die Adresseninhalte umladen.
Ich nehme an das niemand hingeht und Beispiele aus dem Forum herauszieht und 1 zu 1 auf die Maschine überträgt.

Ein Beispiel in ein Forum zu einer Diskussion hinzuzufügen ist etwas anderes, wie ein Übertrag auf eine reale Steuerung.
Ich bin mir sicher, dass viele dieses Beispiel auch so sehen und damit einen Denkanstoß bekommen.
Viele Porgrammierer sind Einzelkämpfer und sind froh wenn sie andere Denkweisen und Vorgehensweisen sehen können.
Ich denke das Forum ist auch dafür da Gedankengänge auszutauschen.

MIr hat es Spaß gemacht mit anderen über solche Themen zu diskutieren und auch Denkanstöße zu bekommen.

MFG Waldi
 
Zuviel Werbung?
-> Hier kostenlos registrieren
PN/DP hat schon recht

....
Ich nehme an das niemand hingeht und Beispiele aus dem Forum herauszieht und 1 zu 1 auf die Maschine überträgt.
....

aber genau das passiert, hier schauen viele Schüler oder Studierende rein
die keine langjährige Programmier-Erfahrung besitzen, geh davon aus das
sie so ein Beispiel 1:1 umsetzen und als richtigen Weg auffassen, bis zum
nächsten Crash an der Maschine. Erst dann wird das Gehirn eingeschaltet
und das ganze noch mal hinterfragt oder geprüft.

....
selbstverstädnlcih war mir klar, dass der Zeigerverweis auf das Byte 0 für die nächsten drei Byte verbindlich ist.
....

Wenn du genau gewußt hast, das dein Beispiel nicht Lupenrein ist, dann
schreib es gefälligst dabei, eine kleine Anmerkung hätte da schon genügt.

Harald (PN/DP) seine Reaktion, ist nach deiner Stellungnahme, erst recht nicht
überzogen, wenn du genau weißt das du hier Beispiele postest die in der
Praxis kein bestand haben.
 
Na - Na ... nun lasst mal die Wellen nicht zu hoch schlagen.

Selbstverständlich hat Harald absolut Recht ... und selbstverständlich ist es gut darauf hinzuweisen, wie man es am Besten vernünftig macht ... aber ihr lest doch auch alle die Fragen, die so gestellt werden ...
Obwohl manche von uns schon hunderte von Malen geschrieben haben wie es richtig wäre - viele wollen das gar nicht wissen bzw. ist es ihnen zu kompliziert sich mit dem Hintergrund zu beschäftigen. Jetzt könnteman natürlich sagen "Was haben die dann vor dem Programmiergerät zu suchen ?" ... aber das ist auch nicht der Schlüssel zum Glück weil irgendwann wir ja auch mal genauso angefangen haben. Das darf man nicht vergessen.
Was mich am meißten stört ist diese "Wer schreibt mir mein Programm ?"-Mentalität bzw. die "Gibt es da nichts fertiges ?". Genau diese Einstellung verhindert m.E. das "sich mit dem Hintergrund auseinandersetzen", was u.A. ja auch von Harald (aus wahrscheinlich sehr leidvoller Erfahrung) gerne mal (und vollkommen zu Recht) angeprangert wird.

OK ... das wollte ich dazu schreiben - habe fertig ...

Gruß
Larry
 
Zurück
Oben