Rohdaten mit C# schreiben

Bender25

Level-2
Beiträge
584
Reaktionspunkte
20
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo zusammen...Ich starte nochmal einen letzten Versuch hier im Forum.Habe schon gesehen, das es eine lösung in VB gibt, da ich aber in diesem Projekt WinCC5...benutze kann ich diese Lösung nicht verwenden.Das einlesen von Rohdaten mit Hilfe einer Strucktur funktioniert einwandfrei.Ich würde nun gerne 4 EA Felder einlesen und diese Werte wieder in die SPS über Rohdaten schreiben.Irgendwie fehlt mir der Lösungsansatz..Vieleicht hat jemand von euch eine fertige Lösung.
 
Daten in SPS schreiben

hmm also eigentlich muss du ja nur unter deiner variablenliste, eine Variable haben, die auf den Datenbaustein oder Merker(Wort) zeigt. Diese Variable kannst du in deine C-Script

z.b. bei einem dword was du zu sps übertragen
Befehl

DWORD Wert_der_abgelegt_werden_soll;
Wert_der_abgelegt_werden_soll = 0xafafafaf;
SetTagDWord("Variable_aus_deiner_Variablenliste",Wert_der_abgelegt_werden_soll );

und halt lesen mit
mit GetTagDWord("variable");
 
Zuviel Werbung?
-> Hier kostenlos registrieren
hmm also eigentlich muss du ja nur unter deiner variablenliste, eine Variable haben, die auf den Datenbaustein oder Merker(Wort) zeigt. Diese Variable kannst du in deine C-Script

z.b. bei einem dword was du zu sps übertragen
Befehl

DWORD Wert_der_abgelegt_werden_soll;
Wert_der_abgelegt_werden_soll = 0xafafafaf;
SetTagDWord("Variable_aus_deiner_Variablenliste",Wert_der_abgelegt_werden_soll );

und halt lesen mit
mit GetTagDWord("variable");

Vielen Dank Tarzan. Das ist mir schon klar wie ich normale Variable mit C auslesen kann... Ich brauch das ganze aber nur für den Typ "Rohdaten"Vorteil bei diesen Rohdaten ist, das ich z.b. einen DB in der SPS einlesen kann in dem z.b. 20 Real Werte drin sind. Und dies wie gesagt nur mit einer Variable.Problem bei der sache ist, das die Daten "unformatiert" eingelesen werden.Und beim schreiben muß ich die 4 Byte der Floatwerte wieder drehen... Nur wie?
 
achso sorry.
hmm ich hoffe ich hab das richtig verstanden. aber wenn du deine Werte drehen willst.
Falls es dir Hilf du kannst ja deine Werte splitten und diese dann wieder drehen. solange du nur die Bytes tauschen willst.
Hier mal etwas was ich gemacht habe um an einzelne Bytes zu kommen aus einem DWORD, vielleicht ist es ja das in der art was du suchst (hoffe ich)

{
unsigned char *pChar;
DWORD Daten;
BYTE test;
Daten = GetTagDWord("variable");


pChar = (unsigned char*)&Daten;
// jetzt als Beispiel das 2 Byte zu bekommen
test = pChar[1];
}
Mit dieser Funktion hast du im pChar array deine einzelnen Bytes und kannst du so auch verdrehen wie du willst.
Hilft das dir weiter?

hab das jetzt nicht mit floatwerten probiert ;-)
 
Zuletzt bearbeitet:
achso sorry.
hmm ich hoffe ich hab das richtig verstanden. aber wenn du deine Werte drehen willst.
Falls es dir Hilf du kannst ja deine Werte splitten und diese dann wieder drehen. solange du nur die Bytes tauschen willst.
Hier mal etwas was ich gemacht habe um an einzelne Bytes zu kommen aus einem DWORD, vielleicht ist es ja das in der art was du suchst (hoffe ich)

{
unsigned char *pChar;
int value, i;
DWORD Daten;
BYTE test;
Daten = GetTagDWord("variable");


pChar = (unsigned char*)&Daten;
// jetzt als Beispiel das 2 Byte zu bekommen
test = pChar[1];
}
Mit dieser Funktion hast du im pChar array deine einzelnen Bytes und kannst du so auch verdrehen wie du willst.
Hilf das dir weiter?

hab das jetzt nicht mit floatwerten probiert ;-)

hey toll danke.. Das könnte gehen. Werd mich gleich mal dran machen... Vielen Dank. :)
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Guten morgen zusammen... Hab irgendwie noch einen Denkfehler. Hab eine txt Datei mit dem Code und einer kleinen Beschreibung angehängt. Würde mich freuen wenn da mal einer drüber ließt. Irgendwas mach ich noch falsch...Vielen Dank
 

Anhänge

  • Rohdaten.txt
    1,9 KB · Aufrufe: 29
also bin ein wenig weiter. Int bzw DInt funktioniert jetzt einwandfrei.Problem sind immer noch meine float Werte. Folgendes mach ich derzeit. Ich lesen einen String ein. Mit der funktion atof wandel ich String nach Double (Gleitpunkt). Das ist mein Problem Double ist 8 Byte lang brauch aber float. Weiß jemand wie ich dies nun wandeln kann???
 
hat sich erledigt...Habs geschafft *freu* Fragt mich aber nicht wie.. Muß mir jetzt erst einmal alles durchschauen, da ich nicht mehr weiß an welchen ecken ich was verdreht hab *g*... Auf alle fälle sag ich Rohdaten eine geniale Sache. Anstelle von 10 Variablen eine Rohdaten VariableVielen dank euch...
 
Zurück
Oben