S7-315 und CP343-1 Adressierungs Problem

Seth_Gecko

Level-1
Beiträge
10
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo erstmal,

Ich habe folgendes Problem, ich möchte auf einer einer html Page den Zustand einer Lampe anzeigen lassen, Steuern der Lampe funktioniert schon. Aber der Zustand ob die Lampe an ist kann ich noch nicht anzeigen lassen, das ganze ist über folgendes S7GetApplet verwirklicht

<body onLoad="ActVisu() ">
<!-- Lese Bitwerte -->
<applet code="de.siemens.simaticnet.itcp.applets.S7GetApplet.class" codebase="/applets/"
archive="s7applets.jar, s7api.jar" width="0" height="0" name="GetBits">
<param name="RACK" value="0">
<param name="SLOT" value="2">
<param name="CYCLETIME" value="1000">
<param name="VARTYPE" value="0x02">
<param name="VARCNT" value="1">
<param name="VARAREA" value="0x84">
<param name="VARSUBAREA" value="100">
<param name="VAROFFSET" value="0">
<param name="FORMAT" value="\S">
</applet>

function ActVisu()
{
var valueBits = document.GetBits.getValue();

// Licht EIN/AUS
if( valueBits & 0x03) //Hier liegt mein Problem, meine Lampe liegt am Ausgang A124.0 , aber was kommt hier "if( valueBits & ????)" rein? Welche bit Nummer habe ich... wo sehe ich so etwas?

document.Licht1.src = "./Bilder/lichtan.jpg";
else
document.Licht1.src = "./Bilder/lichtaus.jpg";

Im Grunde muss ich doch nur die Bit Adresse eintragen von meinem Ausgang A124.0, doch die schreibweise ist mir unklar, hoffentlich kann mir jemand helfen, ich sitz schon Wochen daran..

Mit freundlichen Grüßen
Benji
 
Hi,

var valueBits = document.GetBits.getValue();

// Licht EIN/AUS
if( valueBits & 0x03) //Hier liegt mein Problem, meine Lampe liegt am Ausgang A124.0 , aber was kommt hier "if( valueBits & ????)" rein? Welche bit Nummer habe ich... wo sehe ich so etwas?

Nach dem Lesen der Variable valueBits(ein Byte) steht ein Wert drin. Das wird mit 0x03(Bit 0, 1 sind True) binär verglichen, d.h. wenn valueBits auch 0x03 ist, dann so und so.. Wenn ich nur Bit 0 abfragen möchte, vergleiche ich mit "0x01".

Die Variable valueBits wird aber von dem Bereich gelesen, der mittels Konfiguration(VARTYPE,VARAREA usw.) definiert wurde. Dort sollte Ausgangbereich, Byte 124 stehen. Wie man das schreibt, steht in der Doku irgendwo.

Gruss: V.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Vielen Dank für die sehr schnelle Hilfe Vladi, hab nun damit experimentiert, aber dennoch kein Ergebnis

Doku:
<PARAM name=”VARTYPE” value=2>
<PARAM name=”VARCNT” value =1>
<PARAM name=”VARAREA” value=0x84>
<PARAM name=”VARSUBAREA” value=10>
<PARAM name=”VAROFFSET” value=40>



This info corresponds to
ANY pointer:
P#DB10.DBX 40.0 BYTE 1

So stehts in der manual, meine Variable ist Beispielsweise DB100.DBX 0.3.
Also habe ich
<PARAM name=”VARTYPE” value=2> //Damit ist Datentyp Byte Deklariert
<PARAM name=”VARCNT” value =1>
<PARAM name=”VARAREA” value=0x84> //Variable im DB zu finden
<PARAM name=”VARSUBAREA” value=100> // DB Name 100
<PARAM name=”VAROFFSET” value=0> //dieser Wert ist mir nicht ganz klar, aber sollte 0 sein wie oben zu sehn

VARCNT=Anzahl der zu lesenden Variablen;
Durch diese Angabe können Sie angeben, ob eine Variable oder ein
zusammenhängender Variablenbereich übergeben werden sollen.
STEP 7 kennzeichnet Felder und Strukturen als Anzahl (hier mit Hilfe
des Wiederholfaktors) an Datentypen.
Beispiel: Sollen 10 Wörter übergeben werden, muss beim Wiederholfaktor
der Wert 10 und beim Datentyp der Wert 04 eingetragen werden.

Wo ich nun die A124 unter bringe ist mir noch nicht schlüssig.

if( valueBits & 0.3) //hier hab ich nun Dezimal das Bit 1 erfassen wollen, vorher war es ja hexadezimal

document.Licht1.src = "./Bilder/lichtan.jpg";
else
document.Licht1.src = "./Bilder/lichtaus.jpg";


if ( valueBits & 124.3) hab ich auch schon versucht..
 
Sieh mal hier: http://www.sps-forum.de/showthread.php?t=12923

Da steht auch was zu Area (Gilt nicht nur bei ANY). Für Ausgänge sollte das also 0x82 sein. SUBAREA sollte dann egal sein, Offset 124!

Dann:

if( valueBits & 0x01)
...


Ich hab das noch nie mit einem CP gemacht, würde es aber so zuerst einmal testen! Frage ist evtl., ob man mit dem CP so überhaupt Ausgänge auslesen kann, sollte aber eigentlich gehen.
 
Danke, hier wird ja echt schnell geantwortet, ich werde das morgen früh testen und dann Bericht erstatten, komme heut nicht mehr dazu

mfg Benji
 
Gott sei dank es funktioniert nun! Und vom Meister bin ich weit entfernt Vladi! Mach grad mein Techniker :p

So sieht der Code nu aus:

function ActVisu()
{
var valueBits = document.GetBits.getValue();

// Licht EIN/AUS
if( valueBits & 0x01)

document.Licht1.src = "./Bilder/lichtan.jpg";
else
document.Licht1.src = "./Bilder/lichtaus.jpg";

// Licht2 EIN/AUS
if( valueBits & 0x02)

document.Licht2.src = "./Bilder/lichtan2.jpg";
else
document.Licht2.src = "./Bilder/lichtaus2.jpg";


// Licht3 EIN/AUS
if( valueBits & 0x04)

document.Licht3.src = "./Bilder/lichtan3.jpg";
else
document.Licht3.src = "./Bilder/lichtaus3.jpg";

setTimeout( 'ActVisu()', 1000 );
}

<body onLoad="ActVisu() ">
<!-- Lese Bitwerte -->
<applet code="de.siemens.simaticnet.itcp.applets.S7GetApplet.class" codebase="/applets/"
archive="s7applets.jar, s7api.jar" width="0" height="0" name="GetBits">
<param name="RACK" value="0">
<param name="SLOT" value="2">
<param name="CYCLETIME" value="1000">
<param name="VARTYPE" value="0x02">
<param name="VARCNT" value="1">
<param name="VARAREA" value="0x82">
<param name="VARSUBAREA" value="0">
<param name="VAROFFSET" value="124">
<param name="VARBITOFFSET" value="0">
<param name="FORMAT" value="\S">
</applet>

Aber irgendwie hätte es doch auch über den Daten-DB gehen müssen mit 0x84, naja hauptsache es funzt nun, danke an alle! Nächstes Problem kommt bestimmt bald ;)

mfg Benji
 
Zurück
Oben