Sonstiges Einstellung vom GUI in FUP Auswerten

paulo78

Level-2
Beiträge
71
Reaktionspunkte
1
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,

Ich bräuchte mal eine Hilfestellung. Und zwar habe ich folgendes Problem. Ich bekomme von einem GUI, 6 Einstellungen als Ganzzahl in die SPS geschrieben.
Sprich wen Einstellung 1, 4 und 6 gewählt sind erhalte ich die Zahl 146.
Wenn Einstellung 1,2,5,6 gewählt sind erhalte ich die Zahl 1256.

Wie kann ich nun in FUP das ganze so einfach wie möglich auslesen. Ich will je nachdem welche Einstellung gewählt ist eine Aktion ausführen.
Also bei der zahl (146) Also Einstellung 1,4 und 6 dann muss ich automatische wissen aha Einstellung 1 ist angewählt mache dies, und Einstellung 4 ist auch angewählt mache das und Einstellung 6 mache jenes.

Wäre für jeden rat dankbar...

Danke schonmal
 
Moin,
grundsätzlich finde ich die Schnittstelle nicht schön gelöst - für sowas sollte man einzelne Schnittstellen-Variablen, sei es als INT oder CHAR oder was auch immer vorsehen... -> würde es wohl auf beiden Seiten einfacher machen.

Nun zu deinem Problem
Ein möglicher Ansatz wäre folgender:
Du wendest auf deine empfangene Zahl zunächst die Division der 10ner-Potenzen an. Also 146 / 100 = 1,46 das Ergebnis mit Floor abgerundet ist 1 <- erste Einstellung
Um weiter zu machen nimmst du 146 modulo 100 = 46 das Ergebnis dient dir für das weitere zerlegen wie zuvor - also 46 / 10 = 4,6 mit Floor abgerundet = 4 <- zweite Einstellung usw...
Das ganze musst du jetzt für die maximal mögliche "Ausgangslänge" deiner empfangenen Zahl ausprogrammieren (also für 6 Stellen -> also beginnend mit Division von 100 000)
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Howard,

Vielen Dank für deine Lösung. Ja einzelne Variablen wäre schon besser. Nur ist dieses GUI so aufgebaut das es möglich wenige Variable zu SPS sendet. Dies hat mit den "Tags" zu tuen. Da die Lizenz an diesen "Tags" angelehnt ist. Also mehr Variable teurer Lizenz. So hat man eine Variable als Ganzzahl und hat direkt 6 Einstellungsbits gesendet.
 
... Dies hat mit den "Tags" zu tun. Da die Lizenz an diesen "Tags" angelehnt ist. Also mehr Variable teurer Lizenz. So hat man eine Variable als Ganzzahl und hat direkt 6 Einstellungsbits gesendet.
Das ist ja bei Siemens auch so. Dort würde ich dann mit einem Array tricksen - ein Array "verbraucht" meines Wissens dann nur einen Tag auch wenn es 6 Elemente hat. Vielleicht kannst du das ja bei dir mal probieren.
btw - was ist das denn für eine Steuerung und eine GUI?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Moin,
grundsätzlich finde ich die Schnittstelle nicht schön gelöst - für sowas sollte man einzelne Schnittstellen-Variablen, sei es als INT oder CHAR oder was auch immer vorsehen... -> würde es wohl auf beiden Seiten einfacher machen.

Nun zu deinem Problem
Ein möglicher Ansatz wäre folgender:
Du wendest auf deine empfangene Zahl zunächst die Division der 10ner-Potenzen an. Also 146 / 100 = 1,46 das Ergebnis mit Floor abgerundet ist 1 <- erste Einstellung
Um weiter zu machen nimmst du 146 modulo 100 = 46 das Ergebnis dient dir für das weitere zerlegen wie zuvor - also 46 / 10 = 4,6 mit Floor abgerundet = 4 <- zweite Einstellung usw...
Das ganze musst du jetzt für die maximal mögliche "Ausgangslänge" deiner empfangenen Zahl ausprogrammieren (also für 6 Stellen -> also beginnend mit Division von 100 000)

wenn du Ganzzahl Division & Modulo nimmst must du nicht mal mehr runden
Der Vorschlag von Howard ist mit unter der einzige den du bekommen wirst :-)
 
Moin nochmal,

mir ist da gerade noch eine andere - und für alle, die die Modulo-Rechnung nicht verstehen, einfachere Lösung in den Sinn gekommen. ;)

Du kannst den Zahlenwert der dir von der GUI übermittelt wird auch in einen String wandeln (bei FUP die Funktionen S_CONV oder VAL_STRG).

UDINT_TO_STRING.JPG

Dann kannst du auf die einzelnen String-Elemente mit testString[1], testString[2] usw. zugreifen.
Bei dieser Lösung musst du allerdings ggf. noch den Ergebnis-String bereinigen (Vorzeichen eliminieren oder ignorieren und NULL, also $00 ggf. entfernen) - in FUP z.B. mit FIND, REPLACE und INSERT
 
Zurück
Oben