rohdaten sendn empfangn

WIX

Level-1
Beiträge
211
Reaktionspunkte
4
Zuviel Werbung?
-> Hier kostenlos registrieren
ich habe
s7 315 pn/dp (unterstützt kein BSEND/BRECV)
step 7 v5.4 sp 3
wincc v7.0

ich habe in wincc projekt (nicht integriert in step 7 project) ein var (myrawtag) mit typ ROHDATEN deklarirt (
datenbereich: DB1
adressierung:wort, ab DBW 0
läng is 20)

IN SPS habe ich DB1(hat 60 bytes läng) geschribn und geladen
ich hab in wincc projekt ein skript (hintr ein buton) geschrieben
Code:
#define RawTag "myrowtag"
BOOL bok;
struct {
       Int integer0;
       int integer2;
       int integer4;
       } RStruct;
bok=GetTagRawState(RawTag,(BYTE *)&RStruct,sizeof(RStruct));
 
printf("integer0=%d", RStruct.integer0);

wen ich die buton drücke bekome ich ein komisch wert
habe ich ein fehler gemacht??
kan mir jemand helfen?
danke
 
wenn dein programm mit der selben tastatur programmiert wurde (bzw. die selbe sicherheit in der programmiersprache vorhanden ist wie im deutschen) so solltest du erstmal dort ansetzen, ist ja schrecklich zu lesen dein text

ansonsten meine ich das es so aussehen muß:

Code:
bok=GetTagRawState(RawTag,(BYTE *)[B] & [/B]RStruct,sizeof(RStruct));
 
Zuviel Werbung?
-> Hier kostenlos registrieren
ich hab bemerkt
Code:
sps-wert                wincc-wert 
0                              0
1                            16777472
2                            16777472*2= ??
...
..
das heiß ich mus durch 16777472 teiln

ich find das ganze ich komish
habt ihr vorschläge??

@ SBS-USER
wegem dem sch...text lieS bitte meine signatur ;)
 
Zuletzt bearbeitet:
16777472 paßt nicht in eine Integer. Wertebereich 0 bis 65535 oder -32768 bis 32767. Das Problem scheint zu sein, dass einer eine 32-Bit-Integer will aber nur eine 16-Bit-Integer vorliegt. Wie ist die genaue Deklaration dieses Teils im DB? Tip: Die Werte auch einfach mal hexadezimal anzeigen lassen. Da fällt so manches schneller auf als bei dezimal.
 
wenn dein programm mit der selben tastatur programmiert wurde (bzw. die selbe sicherheit in der programmiersprache vorhanden ist wie im deutschen) so solltest du erstmal dort ansetzen, ist ja schrecklich zu lesen dein text

ansonsten meine ich das es so aussehen muß:

Code:
bok=GetTagRawState(RawTag,(BYTE *)[B] & [/B]RStruct,sizeof(RStruct));

Reagiert WinCC auf diese Schreibweise empfindlich oder ist dies ein reiner Schönheitstip? Ich erkenne nämlich den Unterschied der beiden Codeschreibweisen (bis auf Blank) nicht genau.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
hallo Rainer

bok=GetTagRawState(RawTag,(BYTE *) & RStruct,sizeof(RStruct));
ist genauso wie
bok=GetTagRawState(RawTag,(BYTE *)&RStruct,sizeof(RStruct));

ich habe was bemerkt, das LOW_BYTE und HIGH_BYTE getauscht sind
zum beisp

wert_sps= db20.dbw0= w#16#0077
ergibt
wert_wincc=w#16#7700

ist das ein eigenschaft von rohdatn???

danke
 
Ich glaube ja, das war so. Die Rohdaten sind einfach nur die Bytefolge aneinandergereiht.
 
hallo Rainer

bok=GetTagRawState(RawTag,(BYTE *) & RStruct,sizeof(RStruct));
ist genauso wie
bok=GetTagRawState(RawTag,(BYTE *)&RStruct,sizeof(RStruct));

ich habe was bemerkt, das LOW_BYTE und HIGH_BYTE getauscht sind
zum beisp

wert_sps= db20.dbw0= w#16#0077
ergibt
wert_wincc=w#16#7700

ist das ein eigenschaft von rohdatn???

danke
Und diese Dreher erkennt man in der Hexdarstellung eben sofort.
Wie Ralle schreibt sind Rohdaten einfach ein Bytestream ohne irgend eine weitere Interpretation oder Drehung.
 
Zurück
Oben