// Durch diese Anweisung werden alle Klassen, in deren Quelltext diese
// Anweisung steht, einem Paket zugeordnet.
package de.siemens.simaticnet.itcp.example;
// Durch den Import eines Pakets oder einer Klasse werden alle
// Vereinbarungen sichtbar gemacht, die von ihrer Zugriffsklasse her in
// anderen Paketen sichtbar sein dürfen.
import java.applet.*;
import java.awt.*;
import java.awt.event.*;
import java.beans.*;
import de.siemens.simaticnet.itcp.api.*;
/**
* Example6.java
* <p>Überschrift: Beispiel 6 für die Benutzung der ITCP Beans.</p>
* <p>Beschreibung: Ein Button mit der Funktion “Schalter“.</p>
* <p>Copyright: Copyright (c) 2003</p>
* <p>Organisation: Siemens AG SIMATIC NET</p>
*
* Ein Button mit der Funktion “Schalter“.
* Gelesen und Geschrieben wird das Merkerbit M10.0.
*
* Verwendete Komponenten:
* S7CP
* S7Device
* S7Variable
* AWT Button
*
* @author ITCP–Team
* @version 1.0
*
*/
public class Example6 extends Applet implements PropertyChangeListener, MouseListener {
/*–––––––––––––––––––––––––––––––––––Implementierte Interfaces*/
/*––––––––––––––––––––––––––––Basis–Klasse Applet*/
// Deklaration der benötigten Komponenten
private S7CP s7CP1 = null;
}
private S7Device s7Device1 = null;
private S7Variable s7Variable1 = null;
private Button button1 = null;
/**
* Wird immer aufgerufen, wenn das Applet initialisiert wird.
* Dies geschieht sofort, nachdem es geladen ist.
*
* @see #start
* @see #stop
* @see #destroy
*/
public void init() {
super.init();
// Setzt den Namen der Komponente auf die angegebene Zeichenfolge.
setName("Example6 ");
// Setzt den Layoutmanager für diese Komponente.
setLayout(null);
// Setzt die Größe des Applet Breite / Höhe
setSize(426, 240);
/*–––––––––––Höhe*/
/*––––––Breite*/
// Anlegen einer Instanz für das S7CP Bean.
// S7CP ist der Ethernet Zugangspunkt in die Station
s7CP1 = new S7CP();
// Zuweisen der IP–Adresse
// ######## Projektspezifische Anpassung der IP–Adresse notwendig ########
s7CP1.setHostString(new HostString("192.168.1.1 : 80"));
/*––––––––––––––––––––––––––––––––––––––––––––––––Angabe der Portnummer
normalerweise :80*/
/*–––––––––––––––––––––––––––––––––––IP–Adresse als String*/
// Anlegen einer Instanz für das S7Device Bean.
// Mit S7Device wird der Kommunikationspartner in der Station adressiert.
s7Device1 = new S7Device();
// Die Adressierung erfolgt über die Rahmennummer und Steckplatznummer der
// Baugruppe. Die Vorbesetzung der beiden Methoden zur Adressierung ist ’0’.
// Aus diesem Grund kann auf die Rahmennummer verzichtet werden (.setRack(0)).
// Da wir mit der CPU kommunizieren wollen muss der Steckplatz der CPU
// eingetragen werden.
// ######## Projektspezifische Anpassung der Rahmen– und Steckplatznummer ########
// ######## notwendig ########
s7Device1.setSlot(2);
/*––––––––––––––––Steckplatznummer 2 (int)*/
// Anlegen einer Instanz für das S7Variable Bean.
// Das S7Variable Bean repräsentiert die Variable die gelesen oder geschrieben
// werden soll.
s7Variable1 = new S7Variable();
// Die Beschreibung der Variable erfolgt über einen S7 ANY–Pointer
s7Variable1.setS7Anypointer(
new S7Anypointer((int) 1, (int) 1, (int) 131, (int) 0, (int) 10,
(int) 0));
/*––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Bit Nummer 0 ..7*/
/*–––––––––––––––––––––––––––––––––––––––––––––––––––––Speicherbereichoffset*/
/*–––––––––––––––––––––––––––––––––––––––––––––DB Nummer oder ’0’*/
/*–––––––––––––––––––––––––––––––––––Speicherbereich 131 == M*/
/*–––––––––––––––––––––––––––Wiederholfaktor 1 .. n*/
/*–––––––––––––––––––Datentyp 1 == BOOL*/
// Setzt den Namen der Komponente auf die angegebene Zeichenfolge.
s7Variable1.setVariableName("s7Variable1 ");
// Anlegen einer Instanz für einen Button.
button1 = new Button();
// Setzt den Ausgabetext auf die angegebene Zeichenfolge.
button1.setLabel("Switch ");
// Setzt den Namen der Komponente auf die angegebene Zeichenfolge.
button1.setName("Switch ");
// Festlegen der Startposition und Größe der Komponente.
button1.setBounds(10, 10, 100, 25);
/*–––––––––––––––––––––––––––––Komponentenhöhe*/
/*––––––––––––––––––––––––Komponentenbreite*/
/*––––––––––––––––––––Startposition Y*/
/*––––––––––––––––Startposition X*/
// Einfügen der Komponente ins Applet.
add(button1, button1.getName());
// Neben der Definition der Methoden, die beim Eintreten eines Ereignisses
// ausgeführt werden, muß sich ein Objekt bei der entsprechenden
// Ereignisquelle registrieren.
// Dies geschieht durch Aufruf der addXXXListener–Methode der Ereignisquelle,
// wobei »XXX« für den entsprechenden Ereignis–Typ steht.
// Die addXXXListener–Methoden erwarten alle einen Verweis auf das zugehörige
// Interface:
s7CP1.addPropertyChangeListener(this);
s7Device1.addPropertyChangeListener(this);
s7Variable1.addPropertyChangeListener(this);
button1.addMouseListener(this);
}
/**
* Wird nach der Initialisierung eines Applets ausgeführt.
* Bei Browsern wird start() auch dann aufgerufen, wenn eine Seite,
* auf der sich ein Applet befindet, zum wiederholten Male geladen wird.
*
* @see #init
* @see #stop
* @see #destroy
*/
public void start() {
super.start();
// Lesen der definierten S7Variable um den aktuellen Status anzuzeigen.
// Der Anstoss zum Lesen erfolgt mittels der Methode processGet()
// vom S7Variable Bean.
// Sind die neuen Werte vorhanden, so löst das S7Variable Bean ein
// PropertyChangeEvent aus.
s7Variable1.processGet();
}
/**
* Ein Aufruf erfolgt, wenn der Browser bzw. der Appletviewer zum Icon
* verkleinert oder eine HTML–Seite mit eingebundenem Applet in
* einem Browser verlassen wird.
*
* @see #init
* @see #start
* @see #destroy
*/
public void stop() {
super.stop();
}
/**
* Wird immer aufgerufen, wenn das Applet zerstört wird.
*
* @see #init
* @see #start
* @see #stop
*/
public void destroy() {
super.destroy();
// Mit dieser Methode werden alle S7Bean–Instanzen gelöscht und Threads verworfen.
// Nach dem Aufruf dieser Methode muss eine Neuinitialisierung durchlaufen werden.
S7Api.terminate();
}
/**
* Methode, um Ereignisse für die PropertyChangeListener Schnittstelle zu behandeln.
*
* @param evt PropertyChangeEvent
*/
public void propertyChange(PropertyChangeEvent evt) {
// Abfragen ob Ereignis vom S7CP ausgelöst wurde.
if (evt.getSource() == s7CP1)
// Wenn JA
// Ereignis weiterleiten an die S7Device–Instanz
s7Device1.propertyChange(evt);
// Abfragen ob Ereignis vom S7Device ausgelöst wurde.
if (evt.getSource() == s7Device1)
// Wenn JA
// Ereignis weiterleiten an die S7Variable–Instanz
s7Variable1.propertyChange(evt);
// Abfragen ob Ereignis vom S7Variable ausgelöst wurde.
if (evt.getSource() == s7Variable1) {
if (((Boolean)evt.getNewValue()).booleanValue()) {
button1.setLabel("Switch is ON");
button1.setBackground(Color.red);
} else {
button1.setLabel("Switch is OFF");
button1.setBackground(Color.green);
}
}
}
/**
* Methode, um Ereignisse für die MouseListener Schnittstelle zu behandeln.
*
* mousePressed wird beim Druck einer Maustaste aufgerufen.
*
* @param e java.awt.event.ActionEvent
*/
public void mousePressed(MouseEvent e) {
// Abfragen ob Button ausgelöst wurde.
if (e.getSource() == button1) {
// Wenn JA, dann neuen Wert ins AG schreiben.
// Abfragen des letzten Zustands des Stationswertes und invertiert
// zurückschreiben.
if (((Boolean)s7Variable1.getValue()).booleanValue()) {
s7Variable1.setValue(String.valueOf(false));
s7Variable1.waitOnNewData(2000);
/*––––––––––––––––––––––––Wartezeit in msec. 2000 == 2 sec.*/
} else {
// Wenn letzter Zustand false (VKE0), dann neuer Wert true (VKE1).
s7Variable1.setValue(String.valueOf(true));
s7Variable1.waitOnNewData(2000);
}
}
}
public void mouseReleased(MouseEvent e) {
}
public void mouseClicked(MouseEvent e) {
}
public void mouseEntered(MouseEvent e) {
}
public void mouseExited(MouseEvent e) {
}
}