C++ in ST umprogrammieren

COOLT

Level-1
Beiträge
98
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hi Leute das hier is mein erster Beitrag hoffentlich wirds nich so schlimm.
Ich Versuche gerade ein in C++ geschriebenes Programm für ein Beckhoff System umzuschreiben welches nur ST zulässt. Mein Problem nun ist die Umformatierung von Buchstaben in ihre Hex werte. Das C++ Programm sieht folgendermaßen aus:
DecodePersonalID(ByteList list, out string PersonalId)
//für die ByteList benutze ich ein array[0..15]//
PersonalId = String.Empty
if (list.Count < 5)
return false;
//ich weis nich wie man im array etwas zählt also nachguckt ob da was vorhanden is und dann nen counter hochlaufen lässt.//
int nMifareNr = 0;
int nPos = 0;
for (int i = 4; i>=0; i--)
{
string hex = String.Format("{0:x2}", list[nPos];
char val = hex[1]
// und hier das eigentlich problem: in ST gibts kein char und die anweisung .Format wird auch nur als Fehler dargestellt.//
und der rest is vorerst egal.
Ich brauche also wen der mir erklärt wie ich die Zeichnen in dem Array in ihre Hex werte bei ST umwandeln kann.

Vielen Dank schon mal im Vorraus für jegliche hilfreichen Kommentare.

Mfg
COOLT
 
Hallo,

mit der Funktiion F_ToASC() kannst du den Hex-Wert eines Zeichens ermitteln. Wenn du einen einen String mit mehr als einem Zeichem umwandeln willst, musst du dafür eine Funktion schreiben.

Was für Werte stehen in deinem Array und welcher Typ?

gruß bonatus
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Vorweg mal ein kleiner Tipp. Wenn du das nächste Mal Code postest, dann aber bitte in den entsprechenden Code-Tags. Diese findest du als #-Zeichen über dem Nachrichten-Fenster.

Jetzt zu deinem Problem: Du hast einen Buchstaben (z.B. ein A) und diesen willst du nun in den entsprechenden ASCII-Wert (hex) umwandeln (in diesem Fall 0x41)?
 
@cerberus Ich habe da nur Kleinbuchstaben drin also a-z in C++ währen es char werte in ST glaub ich müssten es dann BOOL werte sein aber ich weis nich genau halt wie sich das umschreiben lässt.

@Bonatus ich versuchs mal mit dem F_ToASC(aData[nPos]) *is das so richtig?*

Edit: bei diesen F_ anweisungen will er immer von mir das ich diese als Variablen Deklariere. Muss ich mir noch irgendeine Bibliothek dazu runterladen?
 
Hab dir hier mal die entsprechende Hilfe zu F-ToASC.

Dein Array muss Daten vom Typ STRING(1) enthalten.

Hab dir hier mal ein Beispiel dazu:
Code:
VAR
 aDataStr: ARRAY[0..14] OF STRING(1);
 aDataAsc: ARRAY[0..14] OF BYTE;
 i: INT;
END_VAR
 
 
FOR i := 0 TO 14 DO
 aDataAsc[i] := F_ToASC(aDataStr[i]);
END_FOR

Du musst übrigens die Bibliothek TcSystem.lib einbinden, sonst erkennt TwinCAT die Funktion nicht.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Das mit der Bibliothek hat mir mein Vorgesetzter gerade auch schon gesagt xD danke trotzdem.
mein Problem is jetz
Code:
nMifareNr := nMifareNr+1*16 EXPT i;
Da is nu das Problem das er mir das EXPT nich als normale exponentiale sieht sonder sagt da müsse ein := davor. Aber ich will doch nur 16^i rechnen. kann mir da wieder wer weiterhelfen?
Den restlichen Inhalt der Case anweisung das ich leider nich posten.

P.S.: Das is voll geil wie schnell einem hier geholfen wird. Meine Mitarbeiter sind da immer so vorbehalten und wollen mir kaum was sagen. xD.
 
Aus der TwinCAT Hilfe:

Code:
var1 := EXPT(7,2); (* Ergebnis ist 49 *)
Will meinen:

Code:
nMifareNr := nMifareNr+1* EXPT(16,i);

PS:
EXPTPotenzierung einer Variablen mit einer anderen: OUT = IN1IN2;
IN1 und IN2 können vom Typ BYTE, WORD, DWORD, INT, DINT, REAL, SINT, USINT, UINT, UDINT sein, OUT muss vom Typ REAL sein
 
Zuletzt bearbeitet:
Ich hab jetz mal einfach mit
Code:
REAL_TO_INT(EXPT(16,i));
das ganze in ne INT zahl dann umgewandelt. Dann sagt er mir auch keinen Fehler mehr an.
So Alle Fehler sind somit jetzt gelöst. mein erster FB is fertig.

VIELEN DANK FÜR EURE OPTIMALE HILFE !!!!!!!!!!
 
Zurück
Oben