# Scaling ```{index} single: Scaling ``` ## Grundlegendes Ja, im **ISOBUS-Standard ISO 11783-6** (Teil 6: **Virtual Terminal**) ist das **Skalieren der Anbaugerätemasken** tatsächlich dem **Anbaugerät (Implement) zugeordnet** und nicht dem virtuellen Terminal (VT). ### Hintergrund: - **ISO 11783-6** definiert die Kommunikation zwischen dem **Virtuellen Terminal (VT)** und den angeschlossenen **Anbaugeräten (Implements)**. - Die **Darstellung der Benutzeroberfläche** (Masken, Symbole, Texte) wird vom Anbaugerät über **Object Pools** an das VT übertragen. - Das **Skalieren** der Masken ist notwendig, um die korrekte Darstellung auf unterschiedlichen VT-Bildschirmgrößen und Auflösungen zu gewährleisten. ### Zuständigkeit für das Skalieren: - **Das Anbaugerät ist verantwortlich** für die Skalierung seiner Masken, da es die **Object Pools** bereitstellt und die logische Struktur der Benutzeroberfläche definiert. - Das VT führt die Skalierung nicht eigenständig durch, sondern nutzt die vom Anbaugerät gelieferten Daten. - Falls das VT eine andere Auflösung hat als vom Anbaugerät erwartet, muss das Anbaugerät die **Skalierungsfaktoren anpassen** (z. B. durch dynamische Generierung der Object Pools oder Nutzung von **Scaled Objects**). ### Praktische Umsetzung: - Das Anbaugerät kann **skalierbare Objekte** (z. B. **Softkeys, Zahlenfelder, Grafiken**) bereitstellen. - Die **VT-Auflösung** wird im **Device-Descriptor** kommuniziert, sodass das Anbaugerät die Masken entsprechend anpassen kann. - Falls keine automatische Skalierung erfolgt, kann es zu Darstellungsproblemen kommen (z. B. abgeschnittene Elemente auf kleinen Displays). ### Fazit: Die ISOBUS-Norm weist die Verantwortung für das Skalieren der Masken klar dem **Anbaugerät** zu, während das VT primär für die korrekte Darstellung der übermittelten Daten zuständig ist. Dies ermöglicht eine flexible Anpassung an verschiedene Terminalgrößen, erfordert aber eine korrekte Implementierung seitens der Anbaugeräte-Hersteller. ## **Skalierungsregeln für ISOBUS-Objekte (ISO 11783-6)** Diese Analyse beschreibt die Skalierungslogik für ISOBUS-Objekte basierend auf **Objekt-ID-Bereichen** gemäß der Referenztabelle. Die Regeln unterscheiden zwischen *DataMask* (skalierte Darstellung) und *SoftkeyMask/Auxiliary* (zentrierte oder kontextabhängige Behandlung). --- ### **Kernprinzipien** 1. **DataMask-Objekte** (z. B. Inputs, Outputs, Grafiken): - Immer skaliert (Beispiele: `InputNumber: 9000–9999`, `LinearBargraph: 18000–18599`) 2. **SoftkeyMask/Auxiliary-Objekte**: - Zentriert (keine Skalierung, z. B. `0: Working Set Object`) oder haben spezielle Regeln (z. B. `5000–5999: Softkey-Buttons`). 3. **Hybrid-Objekte** (getrennte ID-Bereiche): - Die Skalierung hängt vom **Bereich der Objekt-ID** ab: - **DataMask-Variante**: Skalierung aktiv (z. B. `11000–11499: OutputString`). - **SoftkeyMask-Variante**: Skalierung deaktiviert oder anders behandelt (z. B. `11500–11999: OutputString`). --- ### **Kritische Punkte & Handlungsempfehlungen** #### **1. Überschneidungen und Kontextabhängigkeit** - **Problem**: - Objekte wie `Container` oder `OutputString` existieren in beiden Masken, aber mit unterschiedlichen ID-Bereichen (z. B. `11000–11499` vs. `11500–11999`). - **Frage**: Darf ein `OutputString` mit ID `11000` (eigentlich DataMask) auch in einer *SoftkeyMask* verwendet werden? - *ISO 11783-6-Regel*: Die Maskenzugehörigkeit wird primär durch den **Parent-Object-Kontext** definiert (z. B. ein `OutputString` in einem `SoftKeyMask`-Container). Die ID-Bereiche sind **empfohlene Defaults**, aber nicht zwingend. - **Empfehlung**: - Im Zweifel den **Parent-Object-Typ** prüfen (z. B. `SoftKeyMask`-Container → Zentrierung). - Bei abweichenden IDs ein **Warning-Log** ausgeben, aber Skalierung anhand des Kontexts durchführen. #### **2. Skalierungsausnahme:** - **Besonderheit**: - Die **PictureGraphic**-Objekte im SoftkeyMask-Bereich (`20500–20999`) sind als *Working Set Bitmaps* deklariert – im Gegensatz zur DataMask-Variante (`20000–20499`). - **Warum "Scaling" trotzdem?** - Diese Bitmaps werden zwar als Teil des *Working Sets* behandelt, unterliegen aber dennoch einer **begrenzten Skalierung** (z. B. für Auflösungsanpassungen oder Symbolgrößen-Steuerung). - *Unterschied zur DataMask*: Die Skalierung ist hier **nicht viewport-relativ**, sondern folgt internen Regeln (z. B. feste Skalierungsfaktoren für Menü-Icons). #### **3. Auxiliary Functions (`31000–31999`) – Zentrierungspflicht** - **Problem**: - Auxiliary-Objekte müssen laut Norm **immer zentriert** werden (keine Skalierung). - **Risiko**: Wenn ein Auxiliary-Object fälschlich im DataMask-Bereich platziert wird (z. B. ID `31500`), könnte die Skalierung die Darstellung brechen. #### **4. Fehlende Klarheit bei "Working Set Object" (ID 0)** - **Besonderheit**: - Das "Working Set Object" (ID 0) ist **immer zentriert** und gilt nur für die *SoftkeyMask*. - **Achtung**: Wenn ein DataMask-Container fälschlich ID 0 referenziert, sollte dies als Fehler behandelt werden. --- ### **Hinweise zur Anwendung** - **Pfeile (→)**: Markieren korrespondierende ID-Bereiche für Hybrid-Objekte. - **"x"**: Keine Zuordnung in diesem Kontext. - **ISO-Konformität**: Die Tabelle folgt ISO 11783-6, wobei die Skalierungslast beim Anbaugerät liegt. Die strikte Einhaltung der ID-Bereiche durch das Anbaugerät ist entscheidend. ## **Tabelle** | DATA MASK | | SOFTKEY MASK & AUX | |------------------------------------------|---------|------------------------------------------------| | x | | 0 - 0 - Centering - Working set object | | 1000 - 1999 - Scaling - DataMask | | x | | 2000 - 2999 - Scaling - AlarmMask | | | | 3000 - 3499 - Scaling - Container | → | 3500 - 3999 - Scaling - Container | | 6000 - 6999 - Scaling - Button | → | 5000 - 5999 - Centering – Softkeys | | 7000 - 7999 - Scaling - InputBoolean | | | | 8000 - 8999 - Scaling - InputString | | | | 9000 - 9999 - Scaling - InputNumber | | | | 10000 - 10999 - Scaling - InputList | | | | 11000 - 11499 - Scaling - OutputString | → | 11500 - 11999 - Scaling – OutputString | | 12000 - 12499 - Scaling - OutputNumber | → | 12500 - 12999 - Scaling - OutputNumber | | 13000 - 13499 - Scaling - Line | → | 13500 - 13999 - Scaling - Line | | 14000 - 14499 - Scaling - Rectangle | → | 14500 - 14999 - Scaling - Rectangle | | 15000 - 15499 - Scaling - Ellipse | → | 15500 - 15999 - Scaling - Ellipse | | 16000 - 16499 - Scaling - Polygon | → | 16500 - 16999 - Scaling – Polygon | | 17000 - 17599 - Scaling - Meter | | | | 18000 - 18599 - Scaling - LinearBargraph | | | | 19000 - 19599 - Scaling - ArchedBargraph | | | | 20000 - 20499 - Scaling - PictureGraphic | → | 20500 - 20999 - Scaling - Working set bitmaps | | 23000 - 23499 - Scaling - FontAttributes | → | 23500 - 23999 - Scaling - FontAttributes | | 24000 - 24499 - Scaling - LineAttributes | → | 24500 - 24900 - Scaling - LineAttributes | | 25000 - 25499 - Scaling - FillAttributes | → | 25500 - 25999 - Scaling – FillAttributes | | 30000 - 30999 - Scaling – OutputList | | | | | | 31000 - 31999 - Centering - Auxiliary function | ---