Zuviel Werbung? - > Hier kostenlos beim SPS-Forum registrieren

Ergebnis 1 bis 8 von 8

Thema: C++ in ST umprogrammieren

  1. #1
    Registriert seit
    22.07.2009
    Beiträge
    98
    Danke
    18
    Erhielt 0 Danke für 0 Beiträge

    Standard


    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("{02}", 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
    Zitieren Zitieren C++ in ST umprogrammieren  

  2. #2
    Registriert seit
    27.07.2007
    Ort
    Leipzig
    Beiträge
    239
    Danke
    25
    Erhielt 47 Danke für 43 Beiträge

    Standard

    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

  3. Folgender Benutzer sagt Danke zu bonatus für den nützlichen Beitrag:

    COOLT (22.07.2009)

  4. #3
    Registriert seit
    06.07.2007
    Beiträge
    2.811
    Danke
    174
    Erhielt 274 Danke für 253 Beiträge

    Standard

    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)?
    A programmer is just a tool which converts caffeine into code.

  5. Folgender Benutzer sagt Danke zu Cerberus für den nützlichen Beitrag:

    COOLT (22.07.2009)

  6. #4
    COOLT ist offline Benutzer
    Themenstarter
    Registriert seit
    22.07.2009
    Beiträge
    98
    Danke
    18
    Erhielt 0 Danke für 0 Beiträge

    Standard

    @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?

  7. #5
    Registriert seit
    06.07.2007
    Beiträge
    2.811
    Danke
    174
    Erhielt 274 Danke für 253 Beiträge

    Standard

    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.
    A programmer is just a tool which converts caffeine into code.

  8. Folgender Benutzer sagt Danke zu Cerberus für den nützlichen Beitrag:

    COOLT (22.07.2009)

  9. #6
    COOLT ist offline Benutzer
    Themenstarter
    Registriert seit
    22.07.2009
    Beiträge
    98
    Danke
    18
    Erhielt 0 Danke für 0 Beiträge

    Standard

    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.

  10. #7
    Registriert seit
    28.03.2008
    Beiträge
    142
    Danke
    19
    Erhielt 25 Danke für 25 Beiträge

    Standard

    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
    Geändert von BoxHead (22.07.2009 um 14:12 Uhr)
    Komm und wecke den Teufel unter meiner Schädeldecke. Das Chaos hat die Macht!

  11. Folgender Benutzer sagt Danke zu BoxHead für den nützlichen Beitrag:

    COOLT (22.07.2009)

  12. #8
    COOLT ist offline Benutzer
    Themenstarter
    Registriert seit
    22.07.2009
    Beiträge
    98
    Danke
    18
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    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 !!!!!!!!!!

Ähnliche Themen

  1. Antworten: 11
    Letzter Beitrag: 28.07.2008, 12:06

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •