Dem Alphabet, Nummern zuordnen

Gizzl0r

Level-1
Beiträge
142
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Guten Tag,
ich will in mein Twincat 3 Programm ein Datum in Buchstabenform eingeben, welches damit codiert sein soll.
Als Beispiel das Jahr 19.

1 = A
9 = T -----> (9+1)*2 = 20 ----> ergibt nummerisch, den Buchstaben T im Alphabet

Jetzt will ich jedoch, für die Archivierung des Messprotokolles, diese Codierung wieder auslösen.

Also:
A = 1
T = (20/2)-1 = 9

Gibt es da von Twincat eine Funktion um das Alphabet nummerisch darzustellen?

Gruß
Daniel
 
Warum willst oder sollst Du das Datum in Buchstaben codieren? Kannst Du nicht die Ziffern als Zeichen verwenden?
Warum ist die Codierung nicht eindeutig? (19, 28, 37, ... 91 würden den selben Codebuchstaben ergeben, was das Decodieren eigentlich unmöglich macht)
Hast Du Dir die Codierung ausgedacht oder gibt es eine Codiervorschrift bzw. -Tabelle? Wie sieht die Vorschrift bzw. Tabelle aus?

Wenn Deine Buchstaben Zeichen (CHAR) in einem STRING sind, dann dürften/sollten sie nach ASCII- oder ANSI-Standard codiert sein:
'A' = 65 = 16#41 ... 'Z' = 90 = 16#5A (Großbuchstaben)
'0' = 48 = 16#30 ... '9' = 57 = 16#39 (Ziffern)

PS: Twincat kenne ich nicht, ich weiß nicht ob es da für Dich brauchbare fertige Funktionen gibt. Üblicherweise braucht man die nicht, weil man den Zahlenwert der Buchstaben und Ziffern einfach ausrechnen kann, z.B. 'A' hat den Wert 65; 'A' + 3 ---> 68 = 'D'

Harald
 
Zuviel Werbung?
-> Hier kostenlos registrieren
28 wäre in diesem Fall ja der Code BR und nicht AT

Textfeld (Jahr AT) hier wird uns die Jahreszahl verschlüsselt z.B. Jahr = 19 ist gleich AT
die erste Zahl 1 wird mit dem Alphabet abgeglichen also „A“ sie zweite Zahl 9 wird mit 1 addiert und mit zwei multipliziert und dann mit dem Alphabet verglichen also T

Muss mir mal Gedanken machen, wie ich die Buchstaben dann auflöse und zurück wandele
 
Vielleicht wäre es Idee, uns zu schildern was du genau damit bezweckst.
Intuitiv hätte ich dir das gleiche wie Harald hingeschrieben - aber das scheint ja für dich gar nicht zu passen ...

Gruß
Larry
 
Ich habe ein Produkt wo eine Seriennummer drauf kommt. Diese Seriennummer ist wie folgt aufgebaut DATUM(sekunden,minuten,stunde,tag,monat,jahr).
Damit es für den Kunden nicht direkt ersichtlich ist, wird diese Seriennummer codiert in der vorhin beschriebenen Art. Jedoch würde ich für die Archivierung von den Messdaten (Das Produkt wird erst einige Tage bzw. Wochen später geprüft) diese Daten wieder Decodieren, damit für den Mitarbeiter, das rumrechnen weg fällt.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
die erste Zahl 1 wird mit dem Alphabet abgeglichen also „A“ sie zweite Zahl 9 wird mit 1 addiert und mit zwei multipliziert und dann mit dem Alphabet verglichen also T
Vielleicht so etwa?
Code:
  code : ARRAY [1..2] OF CHAR;
END_VAR

[COLOR="#008000"]//Jahr 10..99 in 2 Buchstaben-Zeichen wandeln:[/COLOR]
Jahr_z := Jahr / 10;               [COLOR="#008000"]//Jahr Zehner[/COLOR]
Jahr_e := Jahr MOD 10;             [COLOR="#008000"]//Jahr Einer[/COLOR]

code[1] := Jahr_z + 65;            [COLOR="#008000"]//Zehner 1 .. 9 --> 'A' .. 'I'[/COLOR]
code[2] := (Jahr_e + 1) * 2 + 65;  [COLOR="#008000"]//Einer  0 .. 9 --> 'B' .. 'T'[/COLOR]

[COLOR="#008000"]//zurück:[/COLOR]
Jahr_z := code[1] - 65;            [COLOR="#008000"]//'A' .. 'I' --> 1 .. 9[/COLOR]
Jahr_e := (code[2] - 65) / 2 - 1;  [COLOR="#008000"]//'B' .. 'T' --> 0 .. 9[/COLOR]

Jahr := Jahr_z * 10 + Jahr_e;

[COLOR="#008000"]//besser: die 65 als 'A' schreiben? oder ggf. als "sprechende" Konstante (ASC_A := 65)[/COLOR]

Harald
 
Als Beispiel das Jahr 19.
1 = A
9 = T -----> (9+1)*2 = 20 ----> ergibt nummerisch, den Buchstaben T im Alphabet
Beschreib doch Deine Kodierung so, dass man weiss, welche Ziffer wann wie kodiert werden soll.
Ich verstehe Dich bisher so, dass . . .
- die erste Ziffer sagt, der wievielte Buchstabe im Alphabet genommen werden soll,
- die zweite Ziffer nach Deiner Formel (9+1)*2 umgesetzt wird.
Was ist mit der 3. Ziffer, der 4. u.s.w.?
Gibt es immer nur ZweierGruppen von Ziffern, die gemeinsam umkodiert werden?
Gilt Dein Beispiel für 2. Ziffer = 9 auch für die Ziffern 0 . . . 8?
Wie soll die 0 als erste Ziffer kodiert werden? '@'?
Code.jpg
 
Mach doch Folgendes :
Nimm den Date-Wert des jeweiligen Datums - für den 07.02.19 wäre das z.B. 43503
Dann nimm den Sekunden-Wert der Uhrzeit- für z.B. 13:44:26 wäre das dann 49466 (Stunden*3600 + Minuten*60 + Sekunden)
Beide Werte wndelst du in Hex-Strings um. Dann wird aus der Uhzeit C13A und aus dem Datum A9EF.
Das gibt dann einen hübschen String mit dem niemand so ohne weiteres etwas anfangen kannst - den DU aber jederzeit wieder decodiert bekommst ...

Gruß
Larry
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Es sind nur 2 Ziffern für das Jahr. Die Null kommt als erste Ziffer ja nicht vor weil wir da ja bereits raus sind. Es geht mir hierbei nur um die letzten 2 Ziffern des Jahres xx19.
Danke schon mal an alle, werde eure Vorschläge durchtesten und bescheid geben.
 
Wenn Du nicht so viel rechnen willst oder ganz "unberechenbar" vergebene Code-Buchstaben verwenden willst, dann könntest Du die zum Codieren und Decodieren in indizierten Tabellen hinterlegen:
Code:
  code : ARRAY [1..2] OF CHAR;
  JahrCode1 : ARRAY[0..9] OF CHAR := 'J','A','B','C','D','E','F','G','H','I'; [COLOR="#008000"]//Jahr Zehner Ziffer --> Buchstabe[/COLOR]
  JahrCode2 : ARRAY[0..9] OF CHAR := 'B','D','F','H','J','L','N','P','R','T'; [COLOR="#008000"]//Jahr Einer Ziffer --> Buchstabe[/COLOR]

  CodeJahr1 : ARRAY[0..25] OF INT := 1,2,3,4,5,6,7,8,9,17(-1);                [COLOR="#008000"]//'A'..'Z' --> Zehner Ziffer[/COLOR]
  CodeJahr2 : ARRAY[0..25] OF INT := -1,0,-1,1,-1,2,-1,3,-1, ... ,9,6(-1);    [COLOR="#008000"]//'A'..'Z' --> Einer Ziffer[/COLOR]
END_VAR

[COLOR="#008000"]//Jahresziffer zu Zeichen/Buchstabe aus Tabelle[/COLOR]
code[1] := JahrCode1[Jahr_z];      [COLOR="#008000"]//Zehner 1 .. 9 --> 'A' .. 'I'[/COLOR]
code[2] := JahrCode2[Jahr_e];      [COLOR="#008000"]//Einer  0 .. 9 --> 'B' .. 'T'[/COLOR]

[COLOR="#008000"]//zurück Buchstabe zu Jahresziffer, wenn Ergebnis -1 dann war undefinierter Buchstabe[/COLOR]
Jahr_z := CodeJahr1[code[1] - 26]; [COLOR="#008000"]//'A' .. 'I' --> 1 .. 9[/COLOR]
Jahr_e := CodeJahr2[code[2] - 26]; [COLOR="#008000"]//'B' .. 'T' --> 0 .. 9[/COLOR]

Harald
 
Zurück
Oben