B&R: Bibliotheken umprogrammieren

SAB2002

Level-2
Beiträge
50
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo allezusammen,
Ich möchte eine Funktion .c in ST umprogrammieren
die Funktion ist:

/* Konvertiert eine Zahl in einen Hexstring nach dem Format "%08X" mit führenden Nullen (8stellig) */
BOOL dint2hexs(unsigned long pHexstr, long lNumber)
{
char *str = (char *)pHexstr;
const char Table[16] = "0123456789ABCDEF";
unsigned int divider = 0x10000000;
unsigned int index = 0;
unsigned int digit;
strcpy(str, "00000000");
while (divider) {
digit = lNumber / divider;
lNumber = lNumber % divider;
divider /= 0x10;
str[index++] = Table[digit&0xF];
}
str[index] = '\0';

return TRUE;

ich habe keine Erfahrung in ST(habe die Bibliotheken in ST nie geschrieben).

Mein Versuch:

FUNCTION dint2hexs_
pHexstr := ADR(zsHex);
str ACCESS pHexstr; // str-Reference to UDINT
divider := 16#10000000;
index := 0;
memcpy(ADR(str), ADR('00000000'), 8);
FOR i := 0 TO 9 BY 1 DO
abTable := i + 16#30;
END_FOR
FOR i := 10 TO 15 BY 1 DO
abTable := i + 16#37;
END_FOR
WHILE (divider <> 0) DO
digit := lNumber/divider;
lNumber := lNumber MOD divider;
divider := divider / 16#10;
index := index + 1;
digit := digit AND 16#F;
digit := digit + 1;
//str[index] := abTable[digit]; // abTable - ARRAY[0..15] of USINT
//str ACCESS abTable[digit];
END_WHILE

dint2hexs_ := TRUE;
END_FUNCTION

Geht aber nicht "str[index] := abTable[digit]", da str keine Feldvariable ist.

Zweite Frage: ich habe:#define Variable2 16
unsigned char Variable 1[Variable2];
.......................................................
unsigned char Variable 8[Variable2] = {0x6c,0x8a,0x83,0x7c,0x10,0x46,0xce,0xa3,0x85,0x2c,0x9d,0x51,0xf9,0x6f,0x95,0xda};

wie kann ich es in ST deklarieren? Variable 1 einfach als 16? Variable 8?

Danke für jeden Tip
 
Zuletzt bearbeitet:
Hallo SAB2002,

für Konstanten in einer Funktion muss eine neue Variable (Member ) vom Typ VAR eingefügt werden, dies kann dann als Konstante deklariert werden.
Den Datentyp unsigned Char gibt es in St nicht, dies muss als String deklariert werden, bei der deklaration kann die Länge des Strings eingegeben werden.

Gruß

adi5
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo adi5,
Typ VAR habe ich nicht gefunden.Ich habe Variable2, als int const 16, deklariert, und dann Variable1 als String[Variable2]. Probleme aber, das online Variable2=0(immer).

Danke.
 
Schau mal in die Oscat Bibliothek, die ist in ST geschrieben, und sollte darum auch mit B&R funktionieren.
Dort gibt es u.a. auch eine Funktion DWORD_TO_STRH.
 
Zurück
Oben