TIA SINT to BDC

sebo128

Level-1
Beiträge
15
Reaktionspunkte
1
Zuviel Werbung?
-> Hier kostenlos registrieren
Moin Forum,

Bin neu hier, und kenne mich noch wenig mit der ganzen SPS Geschichte aus.

In der Schule haben wir die Ansteuerung für eine 7-Segment Anzeige programmiert, allerdings nur für die Zahlenwerte (kein a, b , c , d ,e)
Wir haben nun eine HMI von unseren Lehrer bekommen, um unsere 7-Segment Anzeige zu Visualisieren.
Es ist eine 2 Ziffern 7-Segmentanzeige mit einer Eingabe einer 2 stelligen Zahl um diese an zu zeigen.
Hab das soweit ich das kann ferig, das problem liegt aber darin, dass nur Zahlenwerte von 00- 09 richtig anezeigt werden.

Es gibt eine Störrung zwischen den der Eingabe in das Merkerbyte und der ansteuerrung der einzelenen Bits.

Ich glaube, dass die Ansteuerung im Merkerbyte als Binär erfolgt, und nicht in BCD welches ich benötige. Das das Merkerbyte Sint ist suche ich jetzt nach einer möglichkeit das umzukonvenierten.

Oder ist mein Ansatz falsch? Wie gesagt bin noch relativ neu in der Thematik.

Mit freundlichen Grüßen,
Sebastian Frühwirth
 
Um das beantworten zu können müssten wir vermutlich wissen wie die Objekte in der Visu angesteuert werden, sprich wie erfolgt die Ein- und Ausblendung der einzelnen Balken der Siebensegment Anzeige in der Visu?
Ansonsten such mal nach dem Befehl CONV der kann von/nach BCD konvertieren.

Von irgendwas mit Internetzugang gesendet.
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Den HilfeRuf habe ich gaaanz anders verstanden. Das Problem scheint die Umwandlung in eine BCD-Zahl zu sein.
Zahl durch 10 teilen und als ZehnerStelle zur Anzeige bringen.
Dann den DivisionsRest als EinerStelle anzeigen.
Wie die Umsetzung der Ziffern in eine 7-SegmentAnzeige geschehen muss, scheint geklärt zu sein … oder wird als nächstes Problem auftauchen (Tipp: "WahrheitsTabelle" mit den 4 EingangsBits und den 7 AusgangsBits. Diese lässt sich dann auf jede der beiden Ziffern anwenden.).
 
Zuletzt bearbeitet:
Werden denn beide Ziffern der Visu über die selbe Variable angesteuert? Dann müsstest Du Heinileinis Vorschlag noch etwas erweitern. Das Egebnis der Division durch 10 in den Variablentyp wandeln der im HMI verwendet wird und in diese ablegen, dann die Variable mit 16 multiplizieren oder um 4 Bits nach links schieben und anschließend den Rest der Division in den richtigen Variablentyp wandeln und dazu addieren.

Von irgendwas mit Internetzugang gesendet.
 
Ja! Habe seit erstellen des Themas, das echte Problem erkannt. Ich brauche einen Umwandler von Binär in BCD.

Wie ich das mache, weiß ich noch nicht. Muss eine 8-Bit Zahl umwandeln, finde aber immer Internet nur Beiträge zu 4-5 Bit Zahlen. Ich suche nach einen Weg...

Mit freundlichen Grüßen,
Sebastian Frühwirth
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ja die beiden Ziffern werden mit der selben Variable angesteuert. Klingt ziemlich schwirig dieser Rechenweg.
Wie würde ich das am besten angehen? (wie gesagt kenne mich nicht so gut aus)

Mit SCL? Programmieren eigentlich mit FUP.

Mit freundlichen Grüßen,
Sebastian
 
Die ansteurung fur die 7-Segment Anzeige ist normal ein BCD wert. Wenn er richtig programmiert ist sind die bits 0-3 die einer und die bits 4-7 die Zehner, Wenn das zo ist muste sie von die bits ein byte machen, diese byte mit ein Move befehl nach ein Word ubertragen, diese Word umwandelen van BCD16 nach ein INT diese INT konte sie in die HMI verwenden oder diese INT move to ein Sint.
Alternative konnte Sie das BCD Byte in der HMI wie ein HEX wert ausgeben. Aber wenn das ein Eingabe/Ausgabe ist konnte dass Problemen geben wenn da ein A-F eingegeben wurde.
 
Ja die beiden Ziffern werden mit der selben Variable angesteuert. Klingt ziemlich schwirig dieser Rechenweg.
Na, sooo schwierig wird's schon nicht werden …
Für uns ist es insofern noch etwas schwierig, weil wir nicht so genau wissen, was wir uns unter ...
Hab das soweit ich das kann ferig, das problem liegt aber darin, dass nur Zahlenwerte von 00- 09 richtig anezeigt werden.
… vorstellen sollen.
Ich verstehe das so, dass Du schon imstande bist, die EinerStelle richtig darzustellen, solange Dir in der ZehnerStelle nichts in die Quere kommt, was ungleich Null ist.
Wie sieht denn Deine Schnittstelle zur HMI aus? Brauchst Du da etwa nur eine 2-stellige BCD-Zahl zu übergeben und fertig ist die Laube?
Oder sollst Du tatsächlich auch noch die 2 mal 7, also 14 Segmente explizit "irgendwie" ansteuern? Was genau ist vorgegeben und was genau läuft schon?
Was passiert, wenn Du statt 0 .. 9 z.B. eine ("binäre") 16 an die Schnittstelle übergibst oder eine 144 oder eine -112?
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Moin, ich versuche jetzt nochmal meinen Aufbau zu erklären.

visu.PNG

So sieht das Bild meiner Visualisierung aus. Im blau Makierten Bereich kann ich eine 2-stellige Zahl eingeben, welche anschließend dann in der 7-Segment Anzeige angezeigt wird.

visu2.PNG

(weiß leider nicht wie ich das Bild größer machen kann)

Die Zahl die ich im Bild 1 eingeben kann, wird anschließend in das Byte Dual27Segment_DB_Dualzahl geschrieben in form einer Binären zahl.
Anschließend wird es mit einer PLC Variable verknüpft damit ich damit arbeiten kann.

Die verknüpfte PLC Variable wird anschließend mit einen MOVE Block mit einem Weiteren Byte "Merkerbyte" verknüft.
verknüfung.PNG

Die einzelnen Bits des Bytes "Merkerbyte" werden anschließend an die beiden Ansteuerungen für die 7-Segment Anzeige verknüpft. Somit sollte ich in der idialen Welt die eingebene Zahl als in der 7-Segment Anzeige betrachten können.
verknüfung2.PNG (einer von beiden 7-Segment Blöcke zur Ansteuerung)

Das Problem liegt darin, dass die eingeben Zahl die Zahl von Dezimal in Binär umspeichert. Bräuchte aber für die 7-Segment Anzeige BCD.
Also muss ich die Binäre Zahl in eine BCD Zahl umformen.

Deswegen werden auch die Zahlen 0 - 9 in der Visualisierung richtig angezeigt, da dort noch keine umformung notwendig wäre. Erst ab der zweiten Stelle fängt es dann an nicht mehr zu stimmen)

Mein Lehrer hat auch schon aufgeben, bzw. meint dass die jetzige Lösung gut genug seie, möchte aber dennoch das schaffen!

Mit freundlichen Grüßen,
Sebastian Frühwirth
 
Das haben Sie schon richtig verstanden. Bekomme die Zahl in einem Byte von der Eingabe (siehe Antwort auf Heinileini. Wenn ich das richtig Verstanden habe, soll ich dieses Byte in ein Word umformen (anderer Datentype), anschließend Word in BCD16. Dann ist es eine BCD Zahl oder? Und damit ich das Byte auch benutzen kann, forme ich alles noch in ein SINT um.

Habe ich das richtig verstanden?

Mit freundlichen Grüßen,
Sebastian
 
Hab jetzt einmal versucht das ganze nachzuprogrammierem. (Also nach dem Vorschlag vom JoopB). Zumindest so wie ich das verstanden habe.

Dann sieht so aus:
probierenn.PNG

Funktionieren tut es aber noch immer nicht. Also die Zahl wird noch immer nicht, von Binär in BCD richtig umgeformt. Bzw. es werden nicht die richtigen Werte angezeigt.

Ich überprüfe mal, ob die Zahl richtig umgeformt wird, wenn Ja dann muss irgendwo anderes ein fehler sein. Die Ansteuerung der 7-Segmet Anzeige funktioniert zu 100%.

Mit freundlichen Grüßen,
Sebastian Frühwirth
 
Hab jetzt einmal versucht das ganze nachzuprogrammierem. (Also nach dem Vorschlag vom JoopB). Zumindest so wie ich das verstanden habe.

Dann sieht so aus:


Funktionieren tut es aber noch immer nicht. Also die Zahl wird noch immer nicht, von Binär in BCD richtig umgeformt. Bzw. es werden nicht die richtigen Werte angezeigt.

Ich überprüfe mal, ob die Zahl richtig umgeformt wird, wenn Ja dann muss irgendwo anderes ein fehler sein. Die Ansteuerung der 7-Segmet Anzeige funktioniert zu 100%.

Sie musste das Dualzahl umwandeln nach ein BCD zahl fur MB2. Aber Was Sie mit die MW macht ist nicht richtig MW4 und MW5 uberlappen sich (MW4= MB4 und MB5, MW5 = MB5 und MB6) ,Das einfachste ist Sie machen ein Temp var von Type INT und Ein von TYPE Word.

Move Dual byte to t_Int Conv (t_Int) Int to BCD (t_Word) Move t_Word to MB2.
In Visu in das Feld gelbe Var Mit DEZ anzeige.

Gruß,
Joop
 
Das EA-Feld im HMI geht auf die Variable Dual27Segment_DB_Dualzahl? Welchen Datentyp hat die Variable?
Auf welches Anzeigeformat ist das EA-Feld eingestellt?
  • es scheint "Dezimal" zu sein: Die 10er Stelle erhält man durch Division durch 10, die 1er Stelle ist der Divisionsrest.
    Oder man wandelt die Dezimalzahl in eine BCD-Zahl und verfährt danach wie mit Hexadezimal-Zahl.
  • "Hexadezimal": Die "10"er Stelle erhält man durch Division durch 16, die 1er Stelle ist der Divisionsrest.
    Wenn man eh' die einzelnen Bits verarbeiten will/muß (anstatt der Ziffern/Stellen), dann geht es ganz einfach:
    - die Bits 0 bis 3 sind die Bits der 1er Stelle
    - die Bits 4 bis 7 sind die Bits der 10er Stelle
In der SPS machst Du die Wandlung (CONV) Int-zu-BCD16, an IN verschaltest Du Dual27Segment_DB_Dualzahl, an OUT verschaltest Du %MW2 (oder bei Hexadezimal: kopiere (MOVE) einfach Dual27Segment_DB_Dualzahl nach %MW2).
Nun findest Du die 4 Bits für den 7-Segment-Baustein (FC?) als %M3.0 .. %M3.3 und %M3.4 .. %M3.7 und kannst diese Bits am Baustein verschalten. Quick and dirty! (sollte man später als professioneller Programmierer nicht so mit "Schmiermerker" machen, sondern dafür z.B. in TEMP eine Struktur und ein WORD mit AT-View verwenden).

Harald
 
Erstmal danke für ihren Betrag,

Diese Byte Duabit ist SINT und ich kann es deswegen nicht so einfach mit dem Conv in BCD16 umformen, zumindest bin ich zu dumm dafür?

Soll ich eich die .zap datei zur verfühungstellen?

Mit freundlichen Grüßem,
Sebastian
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich bin mir nicht sicher ob ich das richtig verstehe?

Aber in der Beobachtungstabelle von meinem Byte indem die HMI die Variable schreibt, wird die Zahl als HEX dargestellt. Bin irgendwie verwirt haha

Mit freundlichen Grüßen,
Sebastian Frühwirth
 
Hab das jetzt gemacht, und siehe da: ES FUNKTIONIERT!! Es werden alle Werte richtig angezeigt.

Ich bin dir, (und allen anderen die mitgeholfen haben) echt extremst dankbar.

Mit freundlichen Grüßen,
Sebastian Frühwirth
 
Zurück
Oben