Umwandlung von Zahlensystemen.

Universe100

Cadet 1st Year
Registriert
Aug. 2023
Beiträge
10
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?
 
Der Windows-Rechner hat eine Funktion "Programmierer", da kannst Du umrechnen:

1710094862179.png


1710094765537.png
 
  • Gefällt mir
Reaktionen: Vindoriel und Tornhoof
Pauschal würde ich sagen jeder Informatiker sollte die Zahlensysteme beherrschen und ineinander umwandeln können ;)
 
  • Gefällt mir
Reaktionen: up.whatever, Incanus, Raijin und 9 andere
Ports lesen und schreiben.
Ergänzung ()

Bitopium schrieb:
Pauschal würde ich sagen jeder Informatiker sollte die Zahlensysteme beherrschen und ineinander umwandeln können ;)
Das sowieso.
 
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.
 
  • Gefällt mir
Reaktionen: Raijin, madmax2010, GaborDenes und 8 andere
Sykehouse schrieb:
Und irgendwann wundert man sich, wenn die Leute ohne Smartphone nicht mal mehr die Schnürsenkel geknotet kriegen.
Wieso?
Gibt doch Klettverschlüsse!
</i>
 
  • Gefällt mir
Reaktionen: DEADBEEF, GaborDenes, GTrash81 und 5 andere
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.
 
Nicht jeder Aktor und oder Sensor arbeitet mit binären Werten. Alles weitere kannst du dir ja daraus ableiten :)
 
  • Gefällt mir
Reaktionen: Raijin, madmax2010, 0815burner und eine weitere Person
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.
 
  • Gefällt mir
Reaktionen: mental.dIseASe, Raijin, ragan62 und eine weitere Person
Universe100 schrieb:
Wieso sollte ein SPS-Anwender die Umwandlung verschiedener Zahlensysteme (Hexa, Dezi, Dual etc.) beherrschen?
Um einen Job zu kriegen ;)
 
  • Gefällt mir
Reaktionen: martinwag, florian. und madmax2010
ragan62 schrieb:
Gibt doch Klettverschlüsse!
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. ;)
 
  • Gefällt mir
Reaktionen: Vindoriel, Restart001 und ragan62
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.
 
Zuletzt bearbeitet:
  • Gefällt mir
Reaktionen: Raijin
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.
 
Zuletzt bearbeitet:
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.
 
  • Gefällt mir
Reaktionen: Raijin und madmax2010
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.
 
  • Gefällt mir
Reaktionen: Raijin
Universe100 schrieb:
Wieso sollte ein SPS-Anwender die Umwandlung verschiedener Zahlensysteme (Hexa, Dezi, Dual etc.) beherrschen?
Weil Datentypen, Zahlensysteme bzw. ganz allgemein die Speicherstruktur von Daten essentielles Basiswissen darstellen.

Universe100 schrieb:
Hab ihr ein Beispiel aus der Praxis wo dieses Verfahren nötig war?
Ja.

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.

Eine kleine Demo dazu (C#) : Klick!
C#:
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));

    }
}
Code:
1   1
2   2
3   3
4   4
5   5
6   6
7   7
8   8
9   9
16777200   16777201
16777200   16777202
16777200   16777203
16777200   16777204
16777210   16777205
16777210   16777206
16777210   16777207
16777210   16777208
16777210   16777209
16777210   16777210
16777210   16777211
16777210   16777212
16777210   16777213
16777210   16777214
16777220   16777215
16777220   16777216
16777220   16777217
16777220   16777218
16777220   16777219
16777220   16777220
16777220   16777221
16777220   16777222
16777220   16777223
16777220   16777224
16777220   16777225
16777220   16777226
16777220   16777227
16777220   16777228
16777220   16777229
16777220   16777230
340282300000000000000000000000000000000   2147483647

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 :lol:
 
Zuletzt bearbeitet:
  • Gefällt mir
Reaktionen: Nilson, LieberNetterFlo und BeBur
Zurück
Oben