# VBScript Programmierung:WinCC Flex als Schnittstelle zwischen AB Logix und Siemen CPU



## joelber (30 Januar 2009)

Hallo,

Ich benutze mein Panel als Schnittstelle zwischen einer Allen Bradley Logix CPU und einer Siemens S7 300 CPU.

Ich habe zur Zeit es so Programmiert das ich jeweils eine Menge Bit´s im Sekundentakt über ein Script hin und her schicke. Funktioniert ohne Probleme.

Also so geht es z.b. hier mit den Bits.

If SmartTags("DB 100 DBX 20.0") = True Then 
SetBit SmartTags("SignalAB1[0]/0")
End If
If SmartTags("DB 100 DBX 20/0") = False Then 
ResetBit SmartTags("SignalAB1[0]/0")
End If
usw....

Kann mir hier vielleicht jemand erklären wie ich z.b. ein Byte und ein INT verschieben kann über ein Script.

in AWL klingt das so einfach. 
L    DB100.DBB20.0
T    SignalAB1[0]

Ich habe doch sehr Probleme mit der VB Sprache. Vielleicht auch ein bisschen mit der Deutschen 

Und was muss man beachten wenn mehrere Aufrufe aufeinander Folgen

Danke,
Johannes


----------



## kpeter (30 Januar 2009)

joelber schrieb:


> in AWL klingt das so einfach.
> L DB100.DBB20.0
> T SignalAB1[0]


 
l geht nur mit byte word und doppelword

also db100.dbb20


----------



## kpeter (30 Januar 2009)

nur so am rande

welches panel 
und welche software

prootool
wincc
winflex


----------



## Larry Laffer (30 Januar 2009)

Hallo Johannes,
vielleicht solltest du ganz grundsätzlich überlegen, deine Operanden symbolisch (der eigentlichen Funktion entsprechend) zu benennen.
Aber das nur am Rande.
Bytes und Worte und Doppelworte werden mit "=" übertragen, also :
	
	



```
SmartTags("DB 100 DBW 24") = SmartTags("DB 101 DBW 124")
SmartTags("DB 100 DBB 14") = SmartTags("DB 101 DBB 114")
```
Gruß
LL


----------



## joelber (30 Januar 2009)

WinCC Flexible 2007 Runtime auf einem Panel PC mit Soft SPS ist verbunden mit einer Allen Bradley Logix.

Ich brauch halt nur ein VB Script um Byte´s  und Int´s aus meiner S7 in die Allen Bradley zu schieben und umgekehrt. Dies habe ich ja mit bits ausprobiert und funktioniert ohne probleme.


----------



## joelber (30 Januar 2009)

Larry Laffer schrieb:


> Hallo Johannes,
> vielleicht solltest du ganz grundsätzlich überlegen, deine Operanden symbolisch (der eigentlichen Funktion entsprechend) zu benennen.
> Aber das nur am Rande.
> Bytes und Worte und Doppelworte werden mit "=" übertragen, also :
> ...



natürlich benutze ich Symbolik, habs halt nur hier rausgenommen.

SmartTags("DB 100 DBW 24") = SmartTags("DB 101 DBW 124")
SmartTags("DB 100 DBB 14") = SmartTags("DB 101 DBB 114")

OKAY, ich hatte es so ausprobiert mit dem (=) hat aber nicht funktioniert, da habe ich mit gedacht ein (=) klingt ja auch viel zu einfach.  

Bekomme eine Art Überlauf Fehlermeldung


----------



## joelber (30 Januar 2009)

Danke Larry für deine Information !


----------



## Larry Laffer (30 Januar 2009)

joelber schrieb:


> OKAY, ich hatte es so ausprobiert mit dem (=) hat aber nicht funktioniert, da habe ich mit gedacht ein (=) klingt ja auch viel zu einfach.
> 
> Bekomme eine Art Überlauf Fehlermeldung


 
Das habe ich jetzt nicht verstanden ... schreib doch mal ein bißchen mehr dazu ...
Was geht nicht und was bekommst du gemeldet ?

Gruß
LL


----------



## joelber (30 Januar 2009)

Larry Laffer schrieb:


> Das habe ich jetzt nicht verstanden ... schreib doch mal ein bißchen mehr dazu ...
> Was geht nicht und was bekommst du gemeldet ?
> 
> Gruß
> LL




So Hatte ich das Script ausprobiert:

SmartTags("DB 100 DBB 20") = SmartTags("Signal_an_Allenbradleybyte[0]")
SmartTags("Signal_von_Allenbradleybyte[1]") = SmartTags("DB 100 DBB 21") 

Das Script wurde im 500 ms Takt abgerufen und ich bekam in meinem Störungsfenster im sehr schnellen Takt Überlauffehlermeldung. (Ich weiss jetzt nicht mehr genau was es genau für fehler waren. muss ich gleich nochmal überprüfen.

Vielleicht sollte ich einfach einen Takt von ca 2 - 5 Sekunden ausprobieren ?

zumdem sollten nachher nicht nur 2 bytes hin und her geschickt werden, sondern ca 18 bytes und 18 Wörter (als Integer) und zwar in einem Takt, so schnell wie möglich..

Gruß,
Johannes


----------



## Larry Laffer (30 Januar 2009)

Hallo Johannes,
ich vermute, dass die besagte Überlauf-Fehlermeldung viel mehr etwas mit der WinCCFlexibel eigenen Script-Bearbeitung zu tun hat. Es können nur eine bestimmte Anzahl von Scripten gestartet werden (Aufgabenstack). Ich meine es wären 20. Außerdem wird immer nur ein Script bearbeitet - das heißt, dass solange wie Script_1 in Bearbeitung ist wird zwar Script_2 (und _3 etc.) in dem Aufgabenstack übernommen, sie werden aber erst bearbeitet wenn Script_1 fertig (beendet) ist. Der von dir geannte Überlauf könnte also auch der Max.-Stack (20 Scripte) sein. Kannst du das mal checken ?

Gruß
LL


----------



## joelber (30 Januar 2009)

Larry Laffer schrieb:


> Hallo Johannes,
> ich vermute, dass die besagte Überlauf-Fehlermeldung viel mehr etwas mit der WinCCFlexibel eigenen Script-Bearbeitung zu tun hat. Es können nur eine bestimmte Anzahl von Scripten gestartet werden (Aufgabenstack). Ich meine es wären 20. Außerdem wird immer nur ein Script bearbeitet - das heißt, dass solange wie Script_1 in Bearbeitung ist wird zwar Script_2 (und _3 etc.) in dem Aufgabenstack übernommen, sie werden aber erst bearbeitet wenn Script_1 fertig (beendet) ist. Der von dir geannte Überlauf könnte also auch der Max.-Stack (20 Scripte) sein. Kannst du das mal checken ?
> 
> Gruß
> LL


Ich hab nur dieses eine Script aktiviert, werde es jetzt einmal ausprobieren was ich oben genannt habe


----------



## Larry Laffer (30 Januar 2009)

... dann ist vielleicht auch die Frage :
Was macht dein Script alles so, wie wird es aufgerufen und in welchem Interval wird es aufgerufen ?
Es kann sicher nicht schaden, dass mit dem Aufruf-Interval zu testen. Das würde ich auch so machen ...

Gruß
LL


----------



## joelber (30 Januar 2009)

Hallo,

habe das Problem gelöst. Hatte anstelle des USINT ein SINT benutzt.


Usint - Allen Bradley
byte - Siemens


Danke Larry


----------



## rostiger Nagel (31 Januar 2009)

Larry Laffer schrieb:


> Hallo Johannes,
> ich vermute, dass die besagte Überlauf-Fehlermeldung viel mehr etwas mit der WinCCFlexibel eigenen Script-Bearbeitung zu tun hat. Es können nur eine bestimmte Anzahl von Scripten gestartet werden (Aufgabenstack). Ich meine es wären 20. Außerdem wird immer nur ein Script bearbeitet - das heißt, dass solange wie Script_1 in Bearbeitung ist wird zwar Script_2 (und _3 etc.) in dem Aufgabenstack übernommen, sie werden aber erst bearbeitet wenn Script_1 fertig (beendet) ist. Der von dir geannte Überlauf könnte also auch der Max.-Stack (20 Scripte) sein. Kannst du das mal checken ?
> 
> Gruß
> LL


 
...wie sieht das eigendlich aus wenn ich einen Skript_1 ein Skript_2 aufrufe...? Wird das aufgerufene Skript_2 in Skript_1 abgearbeitet (ich glaube ja)...?


----------



## Larry Laffer (31 Januar 2009)

Hallo Helmut,
dann wird Script_1 solange unterbrochen bis Script_2 abgearbeitet ist und dann wieder fortgesetzt - also genau so wie du es sehr wahrscheinlich ja auch haben wolltest. Es wird aber nicht als neuer Task gestartet ...

Gruß
LL


----------

