SPS-Programmierung #04: Standarddatentypen (BOOL, BYTE,… — Transcript

Dieses Video erklärt die Standarddatentypen in SPS-Programmierung wie BOOL, BYTE, WORD, INT, REAL und TIME mit Beispielen und Wertebereichen.

Key Takeaways

  • SPS-Programmierung erfordert genaue Angabe und Verständnis der Datentypen.
  • Bitfolge-Literale speichern reine Bitfolgen, numerische Literale speichern Zahlenwerte.
  • Zeitdatentypen sind speziell für Zeit- und Datumsangaben optimiert und haben unterschiedliche Speichergrößen.
  • Implizite Typkonvertierungen erleichtern die Programmierung und verhindern Informationsverlust.
  • Kenntnis der Wertebereiche und Datentypen ist essenziell für fehlerfreie und effiziente SPS-Programme.

Summary

  • Vorstellung verschiedener Standarddatentypen in der SPS-Programmierung, darunter BOOL, BYTE, WORD, INT, REAL und TIME.
  • Erklärung der Bedeutung typisierter Programmiersprachen und der Notwendigkeit, Datentypen bei Variablen festzulegen.
  • Unterschied zwischen Bitfolge-Literalen (z.B. BYTE, WORD) und numerischen Literalen (z.B. INT, DINT).
  • Darstellung der Wertebereiche der Datentypen und deren Bedeutung für die Programmierung.
  • Erläuterung der binären und hexadezimalen Darstellung von Bitfolgen und Verwendung von Trennsymbolen zur Lesbarkeit.
  • Vorstellung von Ganzzahltypen mit Vorzeichen und ohne Vorzeichen (Unsigned) und deren Entsprechungen.
  • Erklärung der Gleitkommatypen REAL und LREAL für Zahlen mit Nachkommastellen.
  • Beschreibung der Zeitdatentypen wie TIME, TIME OF DAY, DATE, DATE AND TIME und LONG TIME inklusive deren Speicherbedarf und Anwendungsgebiete.
  • Hinweise auf implizite Typkonvertierungen durch den Compiler und deren Bedeutung für die Programmierung.
  • Verweis auf die IEC 61131 Norm als Grundlage für Datentypen und Konvertierungen in SPS-Programmen.

Full Transcript — Download SRT & Markdown

00:00
Speaker A
In den vorangegangenen Videos in dieser Reihe habe ich schon Variablen von unterschiedlichen Datentypen eingesetzt, hauptsächlich den Typ Bool, aber auch Integer, Real und Word.
00:14
Speaker A
Es gibt aber noch eine Reihe weiterer Datentypen, die ich in der kompakten Form in diesem Video einmal vorstellen möchte.
00:21
Speaker A
ST ist ähnlich wie viele andere Programmiersprachen, also z.B. C oder C++, eine typisierte Programmiersprache.
00:26
Speaker A
Das heißt, wenn man Variablen in einem SPS Programm verwendet, muss man zunächst den Datentypen dieser Variablen angeben und der Typ bleibt dann für diese Variable für die gesamte Programmlaufzeit unverändert und die Variable kann dann natürlich auch nur Werte annehmen, die für den gewählten Datentyp gültig sind, so wie in diesem Beispiel einer Bool Variablen.
00:40
Speaker A
Bei Bool ist ja ziemlich klar, dass diese Variable nur Werte True oder False annehmen kann, aber wie ist es z.B. mit einer Integer Variablen?
00:48
Speaker A
Die Variable nMyInt ist hier mit 0 initialisiert und im Anweisungsteil wird diese Variable dann immer inkrementiert.
01:02
Speaker A
Hier würde diese Inkrementierung jetzt in jedem SPS Zyklus passieren, ist also kein wirklich sinnvolles Beispiel.
01:10
Speaker A
Aber die Kommentare vorher und nachher stehen jetzt mal stellvertretend für weiteren Programmcode, so dass diese Berechnung +1 vielleicht nur unter bestimmten Bedingungen durchgeführt wird.
01:20
Speaker A
Was ich aber mit diesem kleinen Beispiel andeuten will ist, dass auch ein Integer nur einen begrenzten Wertebereich hat und diese Addition +1 auch dazu führen könnte, dass dieser zulässige Wertebereich überschritten wird.
01:30
Speaker A
Je nach Anwendung muss man sich also gut überlegen, welchen Datentypen man einsetzen muss.
01:38
Speaker A
Und die Grundlage dafür ist wiederum, dass man weiß, welche Datentypen es gibt und welche Wertebereiche diese haben.
01:43
Speaker A
In dieser Tabelle hier sind die sogenannten Bitfolge Literale dargestellt.
01:48
Speaker A
Das sind also Datentypen, die eigentlich eine Bitfolge repräsentieren.
01:53
Speaker A
Ein Bool speichert nur ein Bit, ein Byte speichert 8 Bit, ein Word 16 Bit, ein DWord 32 und ein Long Word 64 Bit.
02:01
Speaker A
So diese Bitfolgen haben per Definition kein Vorzeichen, also weder plus noch minus.
02:09
Speaker A
Aber natürlich kann man diese Bitfolgen auch als Zahlenwerte interpretieren.
02:14
Speaker A
Und deswegen kann man dafür auch Wertebereiche angeben.
02:17
Speaker A
Ein Byte mit einem Wertebereich von 0 bis 255 wird typischerweise dazu verwendet, Buchstaben zu speichern.
02:23
Speaker A
Intern wird also ein Buchstabe als Zahl gespeichert, aber über den ASCII Code ist jeder Zahl wieder dann ein Zeichen zugeordnet.
02:30
Speaker A
Ein LWord, also Long Word, gehört zu den größten Standard Datentypen in ST mit dem Speicherbedarf von 8 Byte, also 64 Bit.
02:37
Speaker A
Dieser Datentyp ist aber auch nur auf 64 Bit Plattformen verfügbar.
02:42
Speaker A
Die Obergrenze eines LWord ist hier nicht exakt angegeben.
02:47
Speaker A
Der exakte Wert wäre hier 2 hoch 64 - 1.
02:51
Speaker A
So, weil diese Bitfolge Literale Bitfolgen speichern, kann es durchaus Sinn machen, die Werte dafür entweder binär oder hexadezimal codiert anzugeben.
03:00
Speaker A
Wenn man die Zahl wie hier binär codiert angibt, stellt man dem Wert dann dieses 2 mit einem Rautensymbol voran.
03:07
Speaker A
Bei einer binären Codierung dürfen dann natürlich nur die Ziffern 0 oder 1 verwendet werden.
03:12
Speaker A
Die Unterstriche hier sind übrigens Trennsymbole, die einfach die Lesbarkeit verbessern.
03:17
Speaker A
Diese Trennsymbole kann man verwenden, auch an beliebigen Stellen in der Zahlenfolge, müssen aber eben nicht verwendet werden.
03:23
Speaker A
Bei DWord und LWord wäre der Wertebereich binär dargestellt hier einfach zu lang.
03:29
Speaker A
Wenn man die Werte dafür als Bitfolge eingibt, würde man das wahrscheinlich eher im Hexadezimalsystem machen, wie jetzt hier dargestellt.
03:36
Speaker A
Die Angabe einer Hexadezimalzahl muss dann mit einer 16 und dem Rautensymbol gekennzeichnet werden.
03:43
Speaker A
Die Unterstriche hier sind auch wieder nur Trennzeichen für eine bessere Lesbarkeit.
03:49
Speaker A
In dieser Tabelle sind jetzt die ganzzahligen Datentypen, sogenannte numerische Literale zusammengestellt.
03:56
Speaker A
Die in ihrer Standardform auch einen negativen Wertebereich haben.
04:00
Speaker A
Das sind hier Short Int, Int, Double Int und Long Int.
04:05
Speaker A
Und jeden dieser Datentypen gibt es dann auch noch einmal mit einem vorangestellten U, was Unsigned bedeutet.
04:12
Speaker A
Dabei werden dann also die darstellbaren Werte ausschließlich auf den positiven Wertebereich abgebildet.
04:19
Speaker A
Wenn ihr diese Tabelle mit der vorherigen Tabelle vergleicht, werdet ihr feststellen, dass die Wertebereiche einiger Datentypen identisch sind.
04:25
Speaker A
Unsigned Short Int ist das gleiche wie ein Byte.
04:30
Speaker A
Unsigned Int ist das gleiche wie ein Word.
04:33
Speaker A
Unsigned DInt wie ein DWord und Unsigned Long Int wie ein Long Word.
04:38
Speaker A
Der Unterschied zwischen diesen Datentypen ist eben, dass Word und die Abwandlung davon Bitfolge Literale sind.
04:46
Speaker A
Deren Aufgabe ist es Bitfolgen zu speichern.
04:49
Speaker A
Und die Int Datentypen sind numerische Literale mit dem Ziel numerische Werte, also Zahlen zu speichern.
04:55
Speaker A
Laut der IEC 61131 dürfen aber auch positive numerische Literale als Bitfolgen verwendet werden.
05:03
Speaker A
Sodass in der Praxis keine relevanten Unterschiede dazwischen gibt.
05:09
Speaker A
So, um Zahlen mit Nachkommaanteil darzustellen, gibt es die Datentypen Real und LReal, die in dieser Tabelle angegeben sind.
05:15
Speaker A
In anderen Programmiersprachen kennt man diese Datentypen auch als Float bzw. Double mit entsprechenden Wertebereichen.
05:21
Speaker A
Diese sind hier auch wieder nicht exakt, sondern gerundet auf vier Nachkommastellen angegeben.
05:28
Speaker A
So und dann gibt es schließlich noch Zeit Datentypen, die hier angegeben sind.
05:34
Speaker A
Die verwendet werden, um Zeiten oder Daten zu speichern.
05:37
Speaker A
Genau genommen sind die Werte dieser Datentypen Interpretationen als Zeit oder Datum von Ganzzahlen.
05:44
Speaker A
Die also intern als DWord gespeichert sind.
05:46
Speaker A
Time ist dabei wahrscheinlich der am häufigsten verwendete Datentyp, der für die Angabe von Zeiten, z.B. in Standard Funktionsbausteinen TP, Ton oder Toff verwendet werden.
05:54
Speaker A
Der Wertebereich einer Time Variablen geht von 0 Millisekunden bis zu diesem Wert hier.
06:00
Speaker A
Der etwas mehr als 49 Tage beträgt.
06:02
Speaker A
Übrigens kann man hier auch wieder zur besseren Lesbarkeit diese Unterstriche einfügen.
06:08
Speaker A
Time of Day ist ein Datentyp, der zunächst einmal denselben Wertebereich wie Time hat.
06:12
Speaker A
Aber während Time typischerweise für die Angabe einer Dauer verwendet wird, soll Time of Day eher einen Zeitpunkt speichern.
06:20
Speaker A
Und dafür ist die Notation bei Time of Day auch zugeschnitten.
06:24
Speaker A
Ergänzend zu Time of Day gibt es dann noch Date und Date and Time.
06:30
Speaker A
Mit denen man ein Datum bzw. ein Datum plus Uhrzeit angeben kann.
06:35
Speaker A
So auf 64 Bit Plattformen gibt es dann noch den Datentyp Long Time.
06:40
Speaker A
Der also verglichen mit Time den doppelten Speicherbedarf hat.
06:45
Speaker A
Übrigens intern auch als Long Word behandelt wird.
06:48
Speaker A
Und mit dem man dann noch viel längere Dauern angeben kann.
06:52
Speaker A
Long Time wird auch als Zeitbasis für hochauflösende Timer verwendet.
06:58
Speaker A
Die eine Auflösung dann im Nanosekundenbereich haben.
07:03
Speaker A
So, wie ich jetzt hier gezeigt habe, gibt es eine Reihe unterschiedlicher Datentypen.
07:08
Speaker A
Häufig stößt man beim Programmieren an den Punkt, dass man den Wert einer Variablen in eine andere Variable schreiben möchte.
07:13
Speaker A
Wenn beide Variablen den gleichen Datentypen haben, ist das kein Problem.
07:17
Speaker A
So wie hier.
07:19
Speaker A
Häufig genug hat man aber nicht das Glück, dass beide Datentypen identisch sind.
07:24
Speaker A
Das muss dann nicht zwangsläufig ein Problem sein.
07:28
Speaker A
Denn ein Wert in einen größeren Datentypen zu konvertieren ist in der Regel möglich.
07:33
Speaker A
Das ist also eine sogenannte implizite Konvertierung, die der Compiler für uns vornimmt.
07:39
Speaker A
Das passiert z.B. hier in diesem Programm, nachdem ich den Datentyp von My New Int in Double Int geändert habe.
07:45
Speaker A
Der Wertebereich von Int ist also eine Teilmenge von Double Int.
07:50
Speaker A
Und damit ist das kein Problem.
07:53
Speaker A
Gemäß der IEC 61131 sollen implizite Konvertierungen nach diesem Schema hier möglich sein.
07:59
Speaker A
Ein Pfeil bedeutet also, dass der eine Datentyp in den anderen konvertiert werden kann.
08:04
Speaker A
Also, implizite Typkonvertierungen sind toll, darum muss man sich also nicht selber kümmern.
08:10
Speaker A
Das macht der Compiler, weil dabei eben kein Verlust von Informationen zu befürchten ist.
08:16
Speaker A
Und also Fehler ausgeschlossen werden können.
08:18
Speaker A
Es gibt ja aber auch Fälle, bei denen man eine Wertzuweisung in eine Variable mit einem kleineren Datentypen machen muss.
08:24
Speaker A
Z.B. hier.
08:26
Speaker A
NMyNewInt hat jetzt den Typ Short Int und auch wenn jetzt der Wert meiner Integer Variablen in einen Short Int passen würde.
08:32
Speaker A
Wird ein Fehler bei der Zuweisung hier ausgegeben, weil die Konvertierung nicht implizit durchgeführt werden kann.
08:37
Speaker A
Wenn man trotzdem diese Zuweisung machen möchte, muss man diese Konvertierung selber vornehmen.
08:43
Speaker A
Und dann spricht man von einer sogenannten expliziten Typkonvertierung.
08:46
Speaker A
Dafür gibt es spezielle Funktionen.
08:48
Speaker A
In diesem Fall wäre das hier diese Funktion Int to Short Int.
08:51
Speaker A
Wenn man also diese Konvertierung selber vornimmt, ist man auch selber verantwortlich dafür zu sorgen, dass hierbei keine Fehler durch einen versehentlichen Informationsverlust bei der Konvertierung auftreten.
09:00
Speaker A
In diesem Fall gäbe es kein Problem, weil ja die 35 in einen Short Int passt.
09:05
Speaker A
Aber wenn ich den Wert auf 350 ändere, wäre das Ergebnis ein anderes.
09:11
Speaker A
Hier im Online Modus sieht man jetzt also die Werte der Variablen nMyInt und nMyNewInt.
09:18
Speaker A
Und wenn ich die SPS jetzt starte, wird also der Anweisungsteil ausgeführt.
09:22
Speaker A
Und dann sieht man, dass nMyNewInt der Wert 94 zugewiesen wird.
09:28
Speaker A
Und das stimmt eben nicht mehr überein mit dem Wert der Variablen nMyInt, der hier 350 beträgt.
09:33
Speaker A
So für die explizite Typkonvertierung gibt es also viele Funktionen, je nachdem von welchem Typ man in welchen Typ man konvertieren möchte.
09:40
Speaker A
Welche es alle gibt und wie die genau funktionieren, schaut man bei Bedarf dann am besten in der Doku zu der verwendeten Entwicklungsumgebung nach.
09:46
Speaker A
Für TwinCAT 3 wäre das z.B. das Beckhoff Information System oder kurz Infosys, wo man einen Eintrag zu Typkonvertierungsoperatoren findet.
Topics:SPS-ProgrammierungDatentypenBOOLBYTEWORDINTREALTIMEIEC 61131Typkonvertierung

Frequently Asked Questions

Warum ist die Angabe von Datentypen in SPS-Programmen wichtig?

In SPS-Programmen müssen Datentypen angegeben werden, da sie den Wertebereich und die zulässigen Werte einer Variablen festlegen. Dies verhindert Fehler und sorgt für eine korrekte Programmlaufzeit.

Was ist der Unterschied zwischen Bitfolge-Literalen und numerischen Literalen?

Bitfolge-Literale speichern reine Bitfolgen ohne Vorzeichen und werden oft für Speicher oder Zeichen verwendet, während numerische Literale Zahlenwerte mit Vorzeichen speichern und für mathematische Operationen genutzt werden.

Wie funktionieren implizite Typkonvertierungen in SPS-Programmen?

Implizite Typkonvertierungen werden vom Compiler automatisch durchgeführt, wenn Werte von einem kleineren in einen größeren Datentyp übertragen werden, ohne Informationsverlust oder Fehler zu verursachen.

Get More with the Söz AI App

Transcribe recordings, audio files, and YouTube videos — with AI summaries, speaker detection, and unlimited transcriptions.

Or transcribe another YouTube video here →