Fragen zu Datenbausteinen und WIN CC

Keeper

Level-2
Beiträge
62
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo zusammen,

Frage 1:
wenn ich in einem selbstgeschriebenen Baustein als In und Out Varaiblen Datenbausteine verwenden will, ist es dann möglich für die In und Outvariablen verschiedenen Datenbausteine zu verwenden, oder kann ich bei einer Funktion nur auf einen Datenbaustein verzweigen?

Frage 2:
Wenn bei einer SPS Daten mit einem WIN CC System austauschen will, muß ich TAG`´s erwerben. Um nun möglichst wenige Tags zu benötigen wollte ich immer Doppelworte verwenden. Wenn ich diese nun in S7 ansprechen will kann ich diesen keine Kommentare zuweisen. Wie löst ihr dieses Problem, da es mit Kommentaren besser zu verstehen ist.

Euch allen einen schönen und sonnigen 1.Mai.
 
ich widme mich erstmal der ersten frage

Frage 1:
wenn ich in einem selbstgeschriebenen Baustein als In und Out Varaiblen Datenbausteine verwenden will, ist es dann möglich für die In und Outvariablen verschiedenen Datenbausteine zu verwenden, oder kann ich bei einer Funktion nur auf einen Datenbaustein verzweigen?

globale Datenbausteine:

es gibt ja mindestens zwei Möglichkeiten, einem Baustein eine DB-Nummern zu übergeben:

1. als Zahl im Format Byte, Word oder INT
2. als "Block_DB" mit der Angabe "DBxy"

weitere informationen findest du unter Datenbausteinaufruf wie bei S5 ... A DB...

ja, es ist möglich mehrere zu übergeben

Instanz-Datenbaustein:

da gibt es (im Idealfall - hier gibt es noch ein paar Sonderfälle :rolleyes:) nur einen, je FB-Aufruf, dieser kann allerdings auch als Teil eines Multi-Instanz-Datenbausteins sein ...
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Dann nehme ich mal die 2. Frage :ROFLMAO:.

Meinst du WinCC-Flex oder WinCC?
So oder so, du mußt die Variablen in WinCC ja nicht vollsymbolisch anbinden, sondern kannst eine Variable anlegen, ihr einen Namen geben und dann den Typ selbst festlegen. Du kannst also in deinem DB lauter Byte verwenden und auch symolisieren und per WinCC auf ein Doppelword mit 4 Byte zugreifen. Nur mußt du diese Variable in WInCC selbst anlegen und nicht aus dem DB symolisch heraus anlegen!
 
Ich seh grad, du spricht von Tags, also ist es WinCC 6.0 oder 6.2 ja?

Du legst im Variablenhaushalt unter deiner Steuerung eine neue Variable an. Dieser gibst du einen Namen. Dann unter Adresse: Wählen wird der Datenbereich, die DB-Nummer und die Adressierung, sowie die Nummer des z.bsp. DD angegeben. Jetzt hast du allerdings das Problem, eine DWord-Variable zu haben, i der du aber u.U. 4 unterschiedliche Byte stehen hast. Kommt darauf an, wozu du die Variablen brauchst. Bei Bool ist das kein Problen, da kann man die einzelnen Bits ja ansprechen. Willst du die Bytes trennen, mußt du bei Wertänderung ein Script laufen lassen, daß die 4 Byte aus dem Wort liest und in 4 interne Byte-Var schreibt. Wenn du auch noch Daten von WnCC in die gleichen Byte zurückschreiben willst, brauchen alle ein weiteres Script, daß die 4 Byte wieder in dein Word schreibt. Ich hab das ganze mit Rohdatenvariablen (max. Länge 204 Byte!!!!) gemacht, allerdings aufpassen, da sind die Bytes vertauscht! Außerdem ist es bei den Rohdaten generell ziemlich ungünstig In Variablen, die die SPS an WinCC liefert, auch rückwärts Werte zurückzugeben, das kann sich gegenseitig böse behindern. Alles in Allem hab ich dann jemanden ein ActiveX-Control schreiben lassen (der kann das echt gut ;)) mit dem ich Rohdaten aus der SPS auslese und diese dann in interne Variablen schreibe, gleich im richtigen Format, aber das war recht aufwändig, gerade als Anfänger ist da die Aufrüstung auf mehr Tags evtl. preislich und nervlich eher anzuraten.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hi, ich bin neu hier und habe genau das Problem, was Ralle in seinem letzten Post beschreibt. Ich versuche Daten an die SPS mittels Rohvariablen zu schreiben, bekomme aber nur seltsame Werte im DB.
Hat vielleicht jemand einen Lösungsansatz für das "Auseinanderpflücken" der Variablen aus E/A-Feldern (WORD) und dann das Zusammensetzen in die Rohvariable?

Hier mal ein Beispiel-Code von mir:
Code:
void Funktion(Tag Rohdaten)
{
#define ANZAHL 200
BOOL res; 
BYTE datenbyte[ANZAHL];
WORD b1=0x100;
DWORD status;
int i;
for (i=0;i<ANZAHL;i++)
{
  datenbyte[i]=0;
}
i=0;
datenbyte[i]=(BYTE)((WORD)"Schritt_1.Sollzeit_Überwachung_h"/b1);i++;
datenbyte[i]=(BYTE)((WORD)"Schritt_1.Sollzeit_Überwachung_h"%b1);i++;
datenbyte[i]=(BYTE)((WORD)"Schritt_1.Sollzeit_Überwachung_m"/b1);i++;
datenbyte[i]=(BYTE)((WORD)"Schritt_1.Sollzeit_Überwachung_m"%b1);i++;
usw.
...
 
res=SetTagRawStateWait(Rohdaten,datenbyte,ANZAHL,&status);

Vielen Dank schon mal im Voraus.
 
Das mit dem ActiveX würde mich mal näher interesieren. Kannst du das erläutern wie das funktioniert??? Da kann man vielleicht echt Variablen sparen. :s17:

Und generell muss ich sagen, mehr Tags kaufen, kommte echt günstiger, ich habe auch Variablen in DW versteckt, mache es auch noch mit BOOLs, aber den Aufwand ist es echt nicht wert.

Servus.
 
Zurück
Oben