7Segment-Anzeige mit Profibusschnittstelle

t3kaese

Level-1
Beiträge
27
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo, habe eine 5-stellige 7 Segmentanzeige mit Profibusschnittstelle. Der Anzeigewert soll alle 9,4 sek. um 4 erhöht werden. Das Protokoll der Anzeige sieht aus wie folgt.

1. 1BH (ESC) Start Datenübertragung
2. 21H Anzeigenadresse
3. 20H Position innerhalb der Anzeige (Offset)
4. ASCII (Daten) 0-9,-,Blank (+Zeichen nicht darstellbar)
5. 0DH (CR) Ende Datenübertragung

Jetzt steh ich leider total auf dem Schlauch und weiss nicht wie ich beginnen soll, hat jemand einen Lösungsansatz für mich?
Vielen Dank schonmal....
 
7Segment

Hallo,

sieht aus wie ne serielle Ansteuerung. Hast zwar Profibusanschluss aber nicht wirklich direkten Zugriff...

Lege deine Daten zB in einen DB ab und sende anschliessend in dem bestimmten Intervall

Code:
L B#16#1B (ESC) Start Datenübertragung
T DBB 0
L B#16#21          Anzeigenadresse
T DBB 1

L B#16#20          Position innerhalb der Anzeige (Offset) -> Stelle 1
T DBB 2
L  >> ASCII (Daten)  0-9,-,Blank (+Zeichen nicht darstellbar) << Stelle 1
T DBB 3

L B#16#21          Position innerhalb der Anzeige (Offset) -> Stelle 2
T DBB 4
L  >> ASCII (Daten)  0-9,-,Blank (+Zeichen nicht darstellbar) << Stelle 2
T DBB 5

L B#16#22          Position innerhalb der Anzeige (Offset) -> Stelle 3
T DBB 6
L  >> ASCII (Daten)  0-9,-,Blank (+Zeichen nicht darstellbar) << Stelle 3
T DBB 7

L B#16#0D (CR)   Ende Datenübertragung
T DBB 8

André
 
Ascii

also ASCII hochzählen wird Mist. Ich würde ne Integer nehmen und hochzählen. Die ASCII-Stellen nehmen und passend in den Datenbereich schieben. Für die Wandlung -> Suchfunktion.

André
 
Ja so war es gemeint,-das habe ich mir gerade gebastelt, wollte eigentlich den INT-Wert mit der FC16 in eine Zeichenkette umwandeln,aber funktioniert nicht so wirklich.. oder mache ich mir das gerade zu einfach?:confused:
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ja so war es gemeint,-das habe ich mir gerade gebastelt, wollte eigentlich den INT-Wert mit der FC16 in eine Zeichenkette umwandeln,aber funktioniert nicht so wirklich.. oder mache ich mir das gerade zu einfach?:confused:

Was heißt "funktioniert nicht so richtig"? Geht gar nichts?
Hast du daran gedacht:

STRING

Wenn Sie diesem Formalparameter einen Aktualparameter zuweisen,den Sie im Lokaldatenbereich des aufrufenden Bausteins definiert haben, so beachten Sie bitte:
Vor dem FC-Aufruf müssen Sie in der temporären Variablen vom Datentyp STRING das Verwaltungsbyte "maximale Länge des Strings" mit der definierten Stringlänge beschreiben.
 
Ja daran hing ich gerade eben,-welches ist denn das "Verwaltungsbyte"? und wie kann ich es ändern?

edit: hab es gerade gefunden in der Hilfe,allerdings funktioniert es mit dem Bsp.-Programm auch nicht...
 
Zuletzt bearbeitet:
Segmentanzeige..

Hm, sorry, aber wenn ich mir das Protokoll anschaue..sollte man nicht
hintereinander je ein Telegramm senden mit dem Wert für jede Stelle(Offset) der Anzeige? In einem Telegramm alle Stellen - geht doch nicht, oder..

V.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
das hatte ich auch gedacht,aber dieses Beispiel (Datenblatt der Anzeige) sagt doch etwas anderes oder? Protokoll: 1Bh,21h,20h,"1234",0Dh
oder hab ich das komplett falsch verstanden?
 
-

OK, wenn das so drin steht, dann kann man mit einem Telegramm alle Stellen beschreiben(Offset 0).. oder eben nur eine bestimmte Stelle, wenn man will(mit dem entspr.Offset).
Und, immer noch Probleme? Wo genau?

V.
 
Also ich habe meinen, sich selber um 4 aufaddierenden Wert, als INT hinterlegt, ich bekomme diesen Wert aber absolut nicht in eine Zeichenkette gewandelt...
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ok..

Hi,
ist schon klar, das mit einem INT die 5-stellige Anzeige von z.B. "99999" nicht möglich ist? Der FC16 wandelt INT to STRING...bis "+32767"
Jede STRING Variable hat zwei Byte davor:
- in dem ersten steht wie lang die überhaupt deklariert ist
- in dem zweiten stehen die Anzahl der Zeichen, die aktuel drin sind
- ab dem 3-en Byte fangen die ASCII Zeichen an

Da muss man sich was zusammenbasteln..

V.
 
Ja daran hing ich gerade eben,-welches ist denn das "Verwaltungsbyte"? und wie kann ich es ändern?

edit: hab es gerade gefunden in der Hilfe,allerdings funktioniert es mit dem Bsp.-Programm auch nicht...

So sollte es gehen:

Im DB101

Code:
DBW 0    --> int_Wert    INT    0        
ab DBW 2 --> str_Wert    STRING[[COLOR=Red]254[/COLOR]]    ''
in einem FC

Code:
      L     [COLOR=Red]254[/COLOR]
      T     DB101.DBB    2

      CALL  "I_STRNG"
       I      :=MW120
       RET_VAL:="DB_IntTo_Str".str_Wert
Du kannst Werte von +32767 bis -32768 wandeln.

Nach der Wandlung steht in DB101: (Auszug aus der VAT)

Code:
MW   120            DEZ    -32768    -32768
                    
DB101.DBB    2                                         HEX    B#16#FE   
DB101.DBB    3                                         HEX    B#16#06  
DB101.DBB    4    "DB_IntTo_Str".str_Wert[1]        ZEICHEN    '-'    
DB101.DBB    5    "DB_IntTo_Str".str_Wert[2]        ZEICHEN    '3'    
DB101.DBB    6    "DB_IntTo_Str".str_Wert[3]        ZEICHEN    '2'    
DB101.DBB    7    "DB_IntTo_Str".str_Wert[4]        ZEICHEN    '7'    
DB101.DBB    8    "DB_IntTo_Str".str_Wert[5]        ZEICHEN    '6'    
DB101.DBB    9    "DB_IntTo_Str".str_Wert[6]        ZEICHEN    '8'    
DB101.DBB   10    "DB_IntTo_Str".str_Wert[7]        HEX    B#16#00    
DB101.DBB   11    "DB_IntTo_Str".str_Wert[8]        HEX    B#16#00    
DB101.DBB   12    "DB_IntTo_Str".str_Wert[9]        HEX    B#16#00    
DB101.DBB   13    "DB_IntTo_Str".str_Wert[10]        HEX    B#16#00
Du kannst dann die DBB 4,5,6,7,8,9 nehmen und in deinen Sendestring einbauen. In DBB3 steht die tatsächliche Länge des Strings, falls du z.Bsp. 120 wandelst steht dort 4, da auch das + im String erscheint!

PS: Der String darf auch kürzer sein als 254, dann das Ganze entsprechend ändern, bei den roten Zeichen, 6 sollte genügen!
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
String

Hi,
@Ralle: sory, aber das muss nicht unbedingt sein
Code:
[B]L     [COLOR=red]254[/COLOR]
      T     DB101.DBB    2
[/B]
      CALL  "I_STRNG"
       I      :=MW120
       RET_VAL:="DB_IntTo_Str".str_Wert
denn nach der Deklaration im DB ist die Länge ja schon bekannt.

V.
 
@Vladi

Ja, da hast du absolut Recht, das kann man auch weglassen. Da ich oft mit Temp-Var als String hantiere hat sich das bei mir schon so eingeschliffen, den String grundsätzlich vorher zu initialisieren. Muß also bei einem DB mit angelegtem String nicht sein.

Es reicht dann auch:

Code:
       CALL  "I_STRNG"
       I      :=MW120
       RET_VAL:="DB_IntTo_Str".str_Wert
 
Zurück
Oben