Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder einen alternativen Browser verwenden.
Wieso sollte ein SPS-Anwender die Umwandlung verschiedener Zahlensysteme (Hexa, Dezi, Dual etc.) beherrschen?
Hab ihr ein Beispiel aus der Praxis wo dieses Verfahren nötig war?
Wieso sich überhaupt noch Grundwissen aneignen? Man kann ja alles bei Google oder ChatGPT nachfragen... Und irgendwann wundert man sich, wenn die Leute ohne Smartphone nicht mal mehr die Schnürsenkel geknotet kriegen.
Du meinst wohl eher SPS Programmierer. Der Anwender hat ja direkt nix mit der SPS zu tun... Bsp: ein Bauteil z.B Motordrehgeber gibt seine Position in einem bestimmten Zahlenwert als Rückmeldung raus. Die SPS verarbeitet aber ein anderes Zahlensystem, weil evtl. die Ansteuerung eines anderen Bauteiles über ein anderes Zahlensystem erfolgt.
Die SPS ist halt das Gehirn das die verschiedenen Zahlensystem (durch Umwandlung) zueinander bringen muss...
Tröste dich. Bin selbst Automatisierungstechniker. Das Zahlensysteme umrechnen fand ich auch immer am schwierigsten ganz einfach weil ich schon immer schlecht in Mathe war... und mir dafür das Verständnis fehlt.
Etwas konkreter noch, was den Praxisbezug anbelangt: Computer rechnen am Ende immer Binärwerte, welche aber für Menschen schlecht lesbar und schnell mal unnötig lange sind, daher ist es praktisch einfacher, binäre Werte zu Oktetten, also Bits zu Bytes zusammenzufassen. Diese wiederum lassen sich sehr praktisch im Hexadezimalsystem darstellen, da sie dann maximal zwei Stellen lang werden. Unsere analoge Welt besteht aber aus Gründen, die weit vor der Computerwissenschaft und Informatik liegen, zur Hauptsache aus Dezimalzahlen. Daraus besteht dann in der Summe ein Bedarf, Zahlen hauptsächlich zwischen dem Binär-, Dezimal- und Hexadezimalsystem umzurechnen. Rein mathematisch betrachtet, kann natürlich jede beliebige natürliche Zahl als Basis eines Zahlensystem verwendet werden und auch zwischen beliebigen System hin und her umgerechnet werden.
Klettverschlüsse sind sowas von 80er. Die Realität zeigt, dass elastische Obermaterialien sogar Klettverschlüsse überflüssig gemacht haben. Ich wette, es gibt sogar schon erwachsene Menschen, die nicht mal mehr die Bedienung eines Klettverschlusses beherrschen.
Weil zum reinen Umwandeln nur Kenntnisse von Grundrechenarten notwendig sind. Die sollte man nicht nur in MINT Berufen beherrschen.
Hier geht es eher darum generell, dass Konzept von b-adischen Zahlendarstellungen zu verstehen. Da geht es um grundlegende Fähigkeiten der Abstraktion.
Und spezifisch für SPS, weil die ganze physikalische Grundlage in der ersten Instanz als Binär zu interpretieren ist. Viele Module werden aber mit Dezimal- oder Hexadezimal-werten arbeiten. Da sollte man schon verstehen worum es geht, auch wenn man zur eigentlichen Umrechnung wahrscheinlich ein Standardbaustein verwendet.
Das beherrschen der binären Zahlsysteme (Bit, Byte, Wort, Doppelwort, etc.) und der Zusammenhang war früher das A & O um effizient zu programmieren.
Damit haben sich aber nicht viele beschäftigt. Man kaufte halt dann größere, teurere CPUs und programmierte das ganze unnötig komplizierter mit mehr benötigten Ressourcen. Und gut war.
In den heutigen Entwicklungsumgebungen wird eher symbolisch (Z. B. mit Benutzerdefinierten Datentypen etc.) gearbeitet.
Früher gab es auch Systemfunktionen in den CPUs, die die Übergabewerte mal gerne als Integer (Int) oder als Wort (16 bit) haben wollten.
Zum Teil gibt es solche Sachen sogar heute noch. Ein Relikt alter Zeiten. Zwecks Kompatibilität (Migrationsmöglichkeit etc.)
Edit
Es gibt auch unterschiedliche Möglichkeiten der Prozessoren Daten im Speicher abzulegen.
Datenformat Intel / Motorola. Big / Little Endian.
Ich finde es interessant dass niemand das Oktalsystem erwähnt... Bei dem hab ich echt nie verstanden warum es das gibt und es ist auch das einzige was ich nicht schnell umrechnen kann.
binär und hex sollte man in der Branche einfach können und es ist auch wirklich kein hexenwerk.
1x verstehen und in jede Richtung 3 Aufgaben rechnen dauert einen nachmittag
Anderes konkretes Beispiel: Der Profibus-Slave hat zwei Drehschalter je von 0 bis F. Die SPS-Software will die Adresse aber in Dezimal. Also umrechnen.
Oder die Adresse wird über DIP-Schalter, also Binär, eingestellt.
In meiner Firma machen wir u.a. SPS-Upgrades an älteren Produktionsmaschinen. Innerhalb dieser Maschinen gibt es Zähler, die zB die Umdrehungen von Walzen zählen (für die Wartung). Eines Tages meldete sich ein Kunde, weil dieser Zähler stehengeblieben ist und sich seit Wochen nicht mehr ändert.
Mein Kollege (SPS-Programmierer) war sehr erstaunt, weil er im SPS-Programm doch immer schön +1 gemacht hat. Er konnte sich das einfach nicht erklären. Daraufhin fragte ich (Informatiker) welchen Datentyp er denn verwendet. Seine Antwort "Real". Meine Antwort war nur geringfügig länger: "Genauigkeit".
Was war passiert? Ganz einfach, Fließkommazahlen können zwar sehr sehr große Zahlen darstellen, aber ab einer gewissen Größe fallen erst die 1er, dann die 10er, die 100er usw unter den Tisch, weil die Zahl zu groß ist, um sie im Falle von real (=32 bit) noch vollständig darstellen zu können. Es wird sozusagen gerundet und die Zahl hat hinten gaaaaaaanz viele Nullen.
Bei 3,4 x 10^38 = 340.000.000.000.000.000.000.000.000.000.000.000.000. Diese Zahl hat 39 Stellen, die man nicht verlustfrei in 32 bit codieren kann und der Gedanke ist dabei auch, dass bei so einer riesigen Zahl eine 1 am Ende keine Rolle mehr spielen sollte - und eben auch nicht spielen kann.
Zum Vergleich: Ein Integer mit ebenfalls 32 bit kann zwar "nur" bis 2.147.483.647 darstellen, also mehrere Größenordnungen kleiner als real, aber dafür wird jedes einzelne +1 registriert, bis zum Ende, weil die vollständig gespeichert wird.
Die Lösung war also: Datentyp des Zählers auf Integer umstellen und der Zähler lief wieder ordnungsgemäß weiter.
using System;
public class Program
{
public static void Main()
{
float fcounter = 0; // float bis ~3,4 x 10^38
int icounter = 0; // int bis 2,147,483,647 (~2,1 x 10^9)
for (int i = 0; i < 9; i++)
{
fcounter++;
icounter++;
Console.WriteLine(String.Format("{0:F0} {1}", fcounter, icounter));
}
fcounter = 16777200; // float bis ~3,4 x 10^38
icounter = 16777200; // int bis 2,147,483,647 (~2,1 x 10^9)
for (int i = 0; i < 30; i++)
{
fcounter++;
icounter++;
Console.WriteLine(String.Format("{0:F0} {1}", fcounter, icounter));
}
fcounter = float.MaxValue;
icounter = int.MaxValue;
Console.WriteLine(String.Format("{0:F0} {1}", fcounter, icounter));
}
}
Datentypen (real, int, etc) und deren Struktur sowie die Interpretation und Darstellung der enthaltenen Daten (hex, dez, oct, bin) sind wichtiges Basiswissen. Wenn man sich der Funktionsweisen, Umrechungen, etc. nicht bewusst ist, kann man handfeste Fehler programmieren, die zu Schäden an der Maschine oder schlimmstenfalls sogar am Menschen führen können. Begegnet man beispielsweise einer Zahl in hex, aber wie es der Zufall will besteht diese dennoch nur aus Ziffern mit 0-9, merkt man womöglich gar nicht, dass es sich um hex handelt, wenn man nicht zB auf ein vorangestelltes 0x oder # achtet oder welches Kennzeichen die IDE auch immer verwendet. Die Folge ist eine Fehlinterpretation der Zahl, 69 eben nicht 69 dezimal ist, sondern 0x69 und somit 105 dezimal. Ein Unterschied, der viel ausmachen kann.
Gerade hex ist im übrigen auch sehr nützlich, weil man so mit etwas Übung einzelne bits erkennen kann und trotzdem nicht ewig lange binäre Zahlen mit dem Finger abfahren muss. In Dezimalzahlen kann man bits schon gar nicht sehen. Sowas ist also nicht nur wichtig, sondern auch ungemein praktisch, wenn man es beherrscht. Sicherlich kann man darüber diskutieren wie tief dieses Wissen gehen muss - ich weiß auch nicht mehr alles bis ins kleinste Detail - aber wenn man wenigstens weiß, dass es dieses Wissen gibt, kann man es im Zweifelsfalle auch nachschlagen, weil man weiß was man nicht (mehr) weiß - sonst sehe ich schwarz, wenn mir dieses Wortspiel erlaubt ist