Rohdaten Zerlegen C

PBO-WE

Level-1
Beiträge
165
Reaktionspunkte
6
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo.

Ich würde gerne eine Rohdatenvariable z.B. 1 Byte in die einzelnen Bits zerlegen.
Jetzt habe ich mit der Forumsuche ein Script gefunden und es auf BOOL geändert, aber irgendwie funktioniert das nicht.
Hab leider so gut wie keine Ahnung von C oder VBS.

Vielleicht kann mir da jemand weiterhelfen.

Code:
#include "apdefap.h"

int gscAction( void )
{

struct {
       BOOL Stat1;
       BOOL Stat2;
       BOOL Stat3;
       BOOL Stat4;
       BOOL Stat5;
       BOOL Stat6;
       BOOL Stat7;
       BOOL Stat8;
       } RStat;
 
#define pRawTag = "NeueVariable"
 
DWORD        TagState;
 
GetTagRawState(pRawTag,(BOOL *)&RStat,sizeof(RStat),&TagState);
 
if(TagState) 
     return 0; 
 
 
 
 
//ab hier kannst du auf die einzelnen Word´s zugreifen
//bzw auf interne Variable schreiben die ja nicht gezählt werden :)
//ist aber ein wenig dirty *g*


SetTagWord("Test_Bool_1",RStat.Stat1);

//usw

}

Danke!
 
Auf was für nem Zielsytem willst du denn das machen. Da du dich im HMI Forum rumtreibst nehm ich mal an unter VBS...

Und da kann ich dir gleich sagen dass es keinen "AT" Befehl gibt so wie in SCL oder wie in C über die Strukturen!
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ahhhh, da war doch was...

Ist für ein WinCC 7.0 Projekt. C-Editor.
Würde halt ganz gerne einige BOOL Variablen zusammenfassen, um Powertags zu sparen.
Im dynamikdialog geht das ja so, aber wie mache ich das zum Beispiel, wenn ich in einem Skript auf ein Bit zugreifen will?
 
Hallo,
mit deinem BOOL funktioniert das nicht, weil BOOL nur ein anderer Name für einen int ist, und keine echte Bitvariable wie man es aus der SPS her kennt. Der Datentyp BOOL benötigt somit auf üblichen PC-Systemen 4 Bytes. Du kannst dir ja mal den Wert von sizeof(BOOL) anzeigen lassen.

In C gibt es zwar die Möglichkeit von Bitfeldern, welche aber eher verpönt sind.
Im üblichen C-Stil wird das so umgsetzt:
Code:
BYTE data;
BOOL b[8];

data = 0x55;

b[0] = data & (1 << 0);
b[1] = data & (1 << 1);
b[2] = data & (1 << 2);
b[3] = data & (1 << 3);
b[4] = data & (1 << 4);
b[5] = data & (1 << 5);
b[6] = data & (1 << 6);
b[7] = data & (1 << 7);
In einer Aktion lassen sich keine defines setzen, sonst könnte man das über ein entsprechendes Makro vereinfachen.
 
Sparen kannst du auch so...

1. Grosses Array anlegen. Der Index ist aber glaub maximal 2000
2. shift_and_mask
 
Hi,
Powertags gibts in WINCC und WINCCFlex.
Das was Du meinst sind Rohdatenvariablen. Die kannst Du nur mit Script zerlegen und dann z.B. auf interne Variablen umlegen. Schlage vor, du benutzt die Suchfunktion in diesen Forum. Da wirst du fündig.
Sehe grad, daß Du ja schon Rohdaten verwendest. Als erstes fällt mir auf, dass Du die Struktur mit Boolvariablen vorbelegst und dann als Wort abfrägst.
Hast Du die Rohdatenvariable auch richtig angelegt?
Gruß
Sailor
 
Zuletzt bearbeitet:
Zurück
Oben